nixos-installer/lib/setup-scripts
2022-07-29 12:49:55 +02:00
..
add-key.sh modularize setup scripts, make hibernation safe with ZFS, apply noexec FS option everywhere 2022-07-29 12:49:55 +02:00
default.nix init 2022-05-09 14:36:47 +02:00
disk.sh modularize setup scripts, make hibernation safe with ZFS, apply noexec FS option everywhere 2022-07-29 12:49:55 +02:00
install.sh modularize setup scripts, make hibernation safe with ZFS, apply noexec FS option everywhere 2022-07-29 12:49:55 +02:00
keys.sh modularize setup scripts, make hibernation safe with ZFS, apply noexec FS option everywhere 2022-07-29 12:49:55 +02:00
maintenance.sh modularize setup scripts, make hibernation safe with ZFS, apply noexec FS option everywhere 2022-07-29 12:49:55 +02:00
README.md modularize setup scripts, make hibernation safe with ZFS, apply noexec FS option everywhere 2022-07-29 12:49:55 +02:00
utils.sh modularize setup scripts, make hibernation safe with ZFS, apply noexec FS option everywhere 2022-07-29 12:49:55 +02:00
zfs.sh modularize setup scripts, make hibernation safe with ZFS, apply noexec FS option everywhere 2022-07-29 12:49:55 +02:00

Host Setup Scripts

This is a library of bash functions, mostly for NixOS system installation.

The (paths to these) scripts are meant to be (and by default are) set as config.wip.setup.scripts.* (see ../flakes.nix), which makes their functions available in the per-host devShells/apps. Host-specific nix variables are available to the bash functions as @{...} through substituteImplicit with the respective host as root context. Any script passed later in scripts can overwrite the functions of these (earlier) default scripts.

With the functions from here, a simple three-liner is enough to do a completely automated NixOS installation:

function install-system {( set -eu # 1: diskPaths
    prepare-installer "$@"
    do-disk-setup "${argv[0]}"
    install-system-to $mnt
)}

install-system Documentation

The above function performs the mostly automated installation of any $HOST from ../../hosts/ to the local disk(s) (or image file(s)) $DISK. On a NixOS host, this can be run by root as: # nix run .#"$HOST" -- install-system "$DISK".

Doing an installation on non-NixOS (but Linux), where nix isn't installed for root, is a bit of a hack, but works as well. In this case, all nix commands will be run as $SUDO_USER, but this script and some other user-owned (or user-generated) code will (need to) be run as root. If that is acceptable, run with sudo as first argument: $ nix run .#"$HOST" -- sudo install-system "$DISK" (And then maybe sudo bash -c 'chown $SUDO_USER: '"$DISK" afterwards.)

If $DISK points to something in /dev/, then it is directly formatted and written to as block device, otherwise $DISK is (re-)created as raw image and then used as loop device. For hosts that install to multiple disks, pass a :-separated list of <disk-name>=<path> pairs (the name may be omitted only for the "default" disk).

Once done, the disk can be transferred -- or the image be copied -- to the final system, and should boot there. If the host's hardware target allows, a resulting image can also be passed to register-vbox to create a bootable VirtualBox instance for the current user, or to run-qemu to start it in a qemu VM.

The "Installation" section of each host's documentation should contain host specific details, if any.