Reorganize configuration root
While I might still bikeshed how the rest of the configuration is sourced, at least the import points should be stable.
This commit is contained in:
parent
dd6f579f74
commit
6444f8f517
21 changed files with 169 additions and 77 deletions
94
install_os.sh
Executable file
94
install_os.sh
Executable file
|
@ -0,0 +1,94 @@
|
|||
#!/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
|
Loading…
Add table
Add a link
Reference in a new issue