#!/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