nix/packages/installer.nix
Daniel Flanagan 3a59b99816
Some checks failed
/ check (push) Failing after 3m59s
feat: installer takes a swap size
2025-02-21 12:09:41 -06:00

58 lines
2.2 KiB
Nix

{
pkgs,
...
}:
pkgs.writeShellApplication {
name = "installer";
runtimeInputs = with pkgs; [
fzf
jq
gawk
];
text = ''
repo='https://git.lyte.dev/lytedev/nix'
if ! [[ -f flake.nix ]]; then
dir="$(mktemp -d)"
echo "No flake detected. Cloning '$repo' to '$dir/nix'"
cd "$dir"
git clone "$repo"
cd nix
fi
read -s -r -p 'Swap Size:' swap_size
echo
read -s -r -p 'Disk Encryption Password:' pass1
echo
read -s -r -p 'Disk Encryption Password (Again):' pass2
echo
if ! [[ $pass1 = "$pass2" ]]; then
echo "error: disk encryption passwords did not match!"
exit 1
fi
nixos_host="$(nix --extra-experimental-features 'nix-command flakes' eval --accept-flake-config --json .#nixosConfigurations --apply 'builtins.attrNames' | jq -r .[] | fzf --prompt 'Select NixOS configuration')"
partition_scheme="$(nix --extra-experimental-features 'nix-command flakes' eval --accept-flake-config --json .#diskoConfigurations --apply 'builtins.attrNames' | jq -r .[] | fzf --prompt 'Select disk partition scheme (must match NixOS configuration!)')"
disk_path="/dev/$(lsblk -d --raw | tail -n +2 | fzf --prompt 'Select local disk device' | awk '{print $1}')"
echo "$pass1" | tr -d "\n" > /tmp/secret.key
echo "This will install the host configuration for '$nixos_host' to '$disk_path' using partition scheme '$partition_scheme'. All data on the disk will be lost."
echo "Press enter to proceed. Press Ctrl-C to cancel."
read -r
echo "Starting..."
nix-shell --packages git --run "sudo nix run \
--extra-experimental-features nix-command \
--extra-experimental-features flakes \
github:nix-community/disko -- \
--flake '.#$partition_scheme' \
--mode disko \
--arg disk '\"$disk_path\"' \
--arg swapSize '\"$swap_size\"'"
nix-shell --packages git \
--run "sudo nixos-install \
--no-write-lock-file \
--flake '.#$nixos_host' \
--option trusted-substituters 'https://cache.nixos.org https://nix.h.lyte.dev' \
--option trusted-public-keys 'cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= h.lyte.dev-2:te9xK/GcWPA/5aXav8+e5RHImKYMug8hIIbhHsKPN0M='" '';
}