My personal project and infrastructure archive
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
nomicon/infra/libkookie/build

73 lines
1.8 KiB

#!/bin/sh
set -eo pipefail
if [ -z "$HOST" ]
then
HOST=$(hostname)
fi
DIR=$(realpath "$(dirname "$0")")
OUT=$(mktemp -du)
ROOT="$DIR/roots/$HOST.nix"
echo Active tree: "$ROOT"
## Build the libkookie tree
function build {
NIXPKGS_ALLOW_UNFREE=1 \
nix build -f '<nixpkgs/nixos>' system \
-I nixos-config="$ROOT" \
-I "nixpkgs=$DIR/nixpkgs/unstable" \
-I "nixpkgs-overlays=$DIR/overlays" \
-I "home-manager=$DIR/home-manager" \
-I "modules=$DIR/modules" \
-I "shells=$DIR/shells" \
-I "configuration=$DIR/configuration" \
--out-link "$OUT" "$@"
}
## Build and output build path for debugging
function debug {
build "$@"
echo "Build path: $OUT"
exec build "$@"
}
## Build and switch to the new configuration (requires root)
function switch {
build "$@"
nix-env -p /nix/var/nix/profiles/system --set "$OUT"
"$OUT"/bin/switch-to-configuration switch
}
function vmimage {
RUN="$1"; shift
NIXPKGS_ALLOW_UNFREE=1 \
nix build -f '<nixpkgs/nixos>' vm \
-I nixos-config="$ROOT" \
-I "nixpkgs=$DIR" \
-I "nixpkgs-overlays=$DIR/overlays" \
-I "home-manager=$DIR/home-manager" \
-I "modules=$DIR/modules" \
-I "shells=$DIR/shells" \
-I "configuration=$DIR/configuration" \
--argstr system x86_64-linux "$@"
if [ "$RUN" -eq "1" ]; then
echo "Running VM image..."
./result/bin/run-$HOST-vm
fi
exit 0
}
case "$1" in
-s* | --switch*) shift; switch "$@" ;;
-d* | --debug*) shift; debug "$@" ;;
-vr*) shift; vmimage "1" "$@" ;;
-v*) shift; vmimage "0" "$@" ;;
*) build "$@" ;;
esac
rm -rf "$OUT"*