Geoffrey Frogeye
8edb670486
I could split this commit in more but I won't. The first commit in this repository said it would be the last legible one, and I haven't followed that, so YOLO.
63 lines
1.9 KiB
Bash
63 lines
1.9 KiB
Bash
# 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
|