#!/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 '' 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 '' 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"*