# 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 "$tmpdir/toplevel")" rm -rf "$tmpdir" # Show diff nvd diff /nix/var/nix/profiles/system "$toplevel" # Figure out specialisation specialisationArgs=() currentSystem="$(readlink /run/current-system)" while read -r specialisation do if [ "$(readlink "/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 # Generate passwords first. If there's a missing one that cannot be generated, we'll know before anything is written "$toplevel/bin/generate-passwords" # Install the passwords to their respective directories "$toplevel/bin/install-passwords" sudo nixos-rebuild --flake "$self#$HOSTNAME" test "${specialisationArgs[@]}" "$@" # Fix passwords permission. After install, so it can use new users "$toplevel/bin/fix-permissions-passwords" # TODO Install passwords with correct permissions during activation 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