.. highlight:: sh System Installation ====================== .. contents:: Table of Contents :local: Additional configuration ~~~~~~~~~~~~~~~~~~~~~~~~~ As NixOS configuration is declarative, post-installation tasks, such as user accounts and package selection, can all be done by specifing them in configuration. See `NixOS manual `__ for details. For timezone, hostname, networking, keyboard layout, etc, see ``/mnt/etc/nixos/configuration.nix``. Set root password ----------------- This optional step is an example of declaratively configuring the system. #. Generate password hash:: INST_ROOT_PASSWD=$(mkpasswd -m SHA-512 -s) #. Declare `initialHashedPassword `__ for root user:: tee -a /mnt/etc/nixos/${INST_CONFIG_FILE} <`__. Save mutable data to alternative path ------------------------------------- Before enabling purging on root dataset, we need to back up essential mutable data first, such as host SSH key and network connections. Below are some tips. - Some programs support specifying another location for mutable data, such as Wireguard:: networking.wireguard.interfaces.wg0.privateKeyFile = "/state/etc/wireguard/wg0"; - For programs without a configurable data path, `environment.etc `__ may be used:: environment.etc = { "ssh/ssh_host_rsa_key".source = "/state/etc/ssh/ssh_host_rsa_key"; } - systemd’s tmpfiles.d rules are also an option:: systemd.tmpfiles.rules = [ "L /var/lib/bluetooth - - - - /state/var/lib/bluetooth" ]; - Bind mount:: for i in {/etc/nixos,/etc/cryptkey.d}; do mkdir -p /state/$i /$i mount -o bind /state/$i /$i done nixos-generate-config --show-hardware-config Boot from empty root file system -------------------------------- After backing up mutable data, you can try switching to an empty dataset as root file system. #. Check current root file system:: ROOT_FS=$(df --output=source /|tail -n1) # rpool/ROOT/default #. Set empty file system as root:: sed -i "s,${ROOT_FS},${ROOT_FS%/*}/empty,g" /etc/nixos/hardware-configuration-zfs.nix #. Apply changes and reboot:: nixos-rebuild boot reboot #. If everything went fine, add the output of the following command to configuration:: ROOT_FS=$(df --output=source /|tail -n1) cat <