Geoffrey Frogeye
6444f8f517
While I might still bikeshed how the rest of the configuration is sourced, at least the import points should be stable.
95 lines
2.4 KiB
Bash
Executable file
95 lines
2.4 KiB
Bash
Executable file
#!/usr/bin/env nix-shell
|
||
#! nix-shell -i bash
|
||
#! nix-shell -p bash nixos-install-tools
|
||
|
||
set -euo pipefail
|
||
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
||
|
||
# Parse arguments
|
||
function help {
|
||
echo "Usage: $0 profile [-e]"
|
||
echo
|
||
echo "Arguments:"
|
||
echo " file: OS/disk profile to use"
|
||
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 [ "$#" -ne 1 ]
|
||
then
|
||
help
|
||
exit 2
|
||
fi
|
||
profile="$1"
|
||
|
||
profile_dir="${SCRIPT_DIR}/${profile}"
|
||
if [ ! -d "$profile_dir" ]
|
||
then
|
||
echo "Profile not found."
|
||
fi
|
||
|
||
disko_config="${profile_dir}/disko.nix"
|
||
if [ ! -f "$disko_config" ]
|
||
then
|
||
echo "Disk configuration not found."
|
||
fi
|
||
|
||
nixos_config="${profile_dir}/os.nix"
|
||
if [ ! -f "$nixos_config" ]
|
||
then
|
||
echo "NixOS configuration not found."
|
||
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" "$disko_config"
|
||
|
||
# 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 ${nixos_config} ]; }" | 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 --no-root-password
|
||
|
||
# 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 the installation is done!
|
||
echo
|