72 lines
2 KiB
Bash
72 lines
2 KiB
Bash
|
#!/usr/bin/env nix-shell
|
|||
|
#! nix-shell -i bash
|
|||
|
#! nix-shell -p bash nixos-install-tools
|
|||
|
|
|||
|
set -euo pipefail
|
|||
|
|
|||
|
# Parse arguments
|
|||
|
function help {
|
|||
|
echo "Usage: $0 -e"
|
|||
|
echo
|
|||
|
echo "Options:"
|
|||
|
echo " -h: Display this help message."
|
|||
|
echo " -e: Erase the disk. This can be used in case the wanted partition scheme doesn't match."
|
|||
|
}
|
|||
|
|
|||
|
disko_mode=mount
|
|||
|
while getopts "e" OPTION
|
|||
|
do
|
|||
|
case "$OPTION" in
|
|||
|
h)
|
|||
|
help
|
|||
|
exit 0
|
|||
|
;;
|
|||
|
e)
|
|||
|
disko_mode=disko
|
|||
|
;;
|
|||
|
?)
|
|||
|
help
|
|||
|
exit 2
|
|||
|
;;
|
|||
|
esac
|
|||
|
done
|
|||
|
shift "$(($OPTIND -1))"
|
|||
|
|
|||
|
if [ "$#" -gt 0 ]
|
|||
|
then
|
|||
|
help
|
|||
|
exit 2
|
|||
|
fi
|
|||
|
|
|||
|
set -x
|
|||
|
|
|||
|
# Add channels to root user, as nixos-install uses those.
|
|||
|
# Not great, but fixable with flakes I guess
|
|||
|
sudo ./add_channels.sh
|
|||
|
|
|||
|
# Format or mount disk
|
|||
|
sudo nix --extra-experimental-features nix-command --extra-experimental-features flakes run github:nix-community/disko -- --mode $disko_mode ./pindakaas_disko.nix
|
|||
|
|
|||
|
# Generate hardware-config.nix
|
|||
|
sudo nixos-generate-config --no-filesystems --root /mnt
|
|||
|
# --no-filesystems because they are imported via disko
|
|||
|
|
|||
|
# Plug system configuration into this git repo
|
|||
|
sudo mkdir -p /mnt/etc/nixos
|
|||
|
echo "{ ... }: { imports = [ ./hardware-configuration.nix /home/geoffrey/.config/dotfiles/pindakaas.nix ]; }" | sudo tee /mnt/etc/nixos/configuration.nix > /dev/null
|
|||
|
# Everything there should be covered by (and conflicts with) the repo anyways.
|
|||
|
|
|||
|
# Install NixOS! Or create a new generation.
|
|||
|
sudo nixos-install
|
|||
|
|
|||
|
# Install dotfiles. Actually not needed by nixos-install since it doesn't rewrite global paths to /mnt.
|
|||
|
# Without it no nixos-rebuild from the system itself once installed though.
|
|||
|
# Should probably be replaced with something like git-sync
|
|||
|
# sudo mkdir -p /mnt/home/geoffrey/.config/
|
|||
|
# sudo cp -a ../dotfiles /mnt/home/geoffrey/.config/
|
|||
|
# sudo chown geoffrey:geoffrey /mnt/home/geoffrey -R
|
|||
|
|
|||
|
# Signal we're done!
|
|||
|
# Although it might ask for passwords beforehand, so not sure it's really useful
|
|||
|
echo
|