# Handle arguments self="$1" verb="$2" shift shift if [ "$verb" != "build" ] && [ "$verb" != "test" ] && [ "$verb" != "boot" ] && [ "$verb" != "switch" ] && [ "$verb" != "confirm" ] then echo "Action should be one of: build, test, boot, switch, confirm" exit 2 fi # Build, looking nice tmpdir="$(mktemp -d)" # sudo so the eval cache is shared with nixos-rebuild sudo nom build "$self#nixosConfigurations.$HOSTNAME.config.system.build.toplevel" -o "$tmpdir/toplevel" "$@" toplevel="$(readlink -f "$tmpdir/toplevel")" rm -rf "$tmpdir" # Show diff nvd diff "$(readlink -f /nix/var/nix/profiles/system)" "$toplevel" # Figure out specialisation specialisationArgs=() currentSystem="$(readlink -f /run/current-system)" while read -r specialisation do if [ "$(readlink -f "/nix/var/nix/profiles/system/specialisation/$specialisation")" = "$currentSystem" ] then specialisationArgs=("--specialisation" "$specialisation") fi done <<< "$(ls /nix/var/nix/profiles/system/specialisation)" # Apply confirm="n" if [ "$verb" = "confirm" ] then echo "Apply configuration? [y/N]" read -r confirm fi if [ "$verb" = "test" ] || [ "$verb" = "switch" ] || [ "$confirm" = "y" ] then "$toplevel/bin/update-password-store" sudo nixos-rebuild --flake "$self#$HOSTNAME" test "${specialisationArgs[@]}" "$@" fi # Set as boot if [ "$verb" = "confirm" ] then echo "Set configuration as boot? [y/N]" read -r confirm fi if [ "$verb" = "boot" ] || [ "$verb" = "switch" ] || [ "$confirm" = "y" ] then sudo nixos-rebuild --flake "$self#$HOSTNAME" boot "$@" fi