|
||
---|---|---|
home | ||
hosts | ||
modules | ||
.gitignore | ||
flake.lock | ||
flake.nix | ||
LICENSE | ||
README.md | ||
todo |
nixos
Installation
Follow the NixOS manual to obtain and boot
the installation medium. Use the graphical ISO image since it ships with useful programs such as nmtui
; the
installation can still be done through the terminal.
Disk Partitioning
For impermanence, partitioning should be done as outlined in the tmpfs
as root blogpost, but with /nix
as a LUKS-encrypted file
system. The boot partition will not be
encrypted, since that is poorly supported by systemd-boot. Persistent files will be saved under /nix/persist
.
The following is based on the tmpfs as root blogpost, the NixOS manual's partitioning, formatting and LUKS-Encrypted File Systems sections, ArchWiki's LVM on LUKS, the unofficial NixOS wiki Full Disk Encryption, and this GitHub gist.
We create a 1GiB EFI boot partition (/dev/sda1
) and the rest will be our LUKS-encrypted volume:
# Create partition table
parted /dev/sda -- mklabel gpt
# Create /boot partition
parted /dev/sda -- mkpart ESP fat32 1MiB 1024MiB
parted /dev/sda -- set 1 esp on
# Create /nix partition
parted /dev/sda -- mkpart primary 1024MiB 100%
# Create and open LUKS-encrypted container
cryptsetup --type=luks2 luksFormat --label=crypted /dev/sda2
cryptsetup open /dev/sda2 crypted
# Create LVM volume group
pvcreate /dev/mapper/crypted
vgcreate vg /dev/mapper/crypted
# Create root logical volume
lvcreate -l 100%FREE vg -n root
# Format partitions
mkfs.fat -F32 -n BOOT /dev/sda1
mkfs.ext4 -L nix /dev/vg/root
The result should be the following (lsblk -f
):
NAME FSTYPE FSVER LABEL
vda
├─vda1 vfat FAT32 BOOT
└─vda2 crypto_LUKS 2 crypted
└─crypted LVM2_member LVM2 001
└─vg-root ext4 1.0 nix
Installation
Whereas the NixOS manual mounts
the newly-created nixos
partition to /mnt
, we will follow the tmpfs as root blogpost and mount /mnt
as tmpfs
:
mount -t tmpfs none /mnt
mount --mkdir /dev/disk/by-label/BOOT /mnt/boot
mount --mkdir /dev/disk/by-label/nix /mnt/nix
mkdir -p /mnt/nix/persist/
The remaining installation can be done (more or less) according to the NixOS manual.
cd /mnt/nix
git clone https://git.caspervk.net/caspervk/nixos.git tmp
cd tmp/
nixos-generate-config --root /mnt --show-hardware-config
vim hosts/omega/hardware.nix
git add . # nix sometimes ignores files outside version control
nixos-install --no-root-passwd --flake .#omega
# Make sure to set a password
mkpasswd > /mnt/nix/persist/passwordfile
chmod 400 /mnt/nix/persist/passwordfile
Hardware Configuration
hosts/*/hardware.nix
, while initially generated by nixos-generate-config --show-hardware-config
, is manually
modified. Irrelevant options are commented, instead of deleted, to allows for easier diffing on new versions of NixOS.
Impermanence
To find out which of our darlings will be erased on reboot do tree -x /
.
Upgrading
sudo nixos-rebuild switch --flake .#omega