Install

Temporäre Installation auf USB-Stick oder kleine Partition

Die temporäre Installation wird genutzt um eine funktionierende zfs-unstable Umgebung zu haben, was noch benötigt wird um einen encrypteten zpool zu verwenden.

Randhex für hostId

echo "$(openssl rand -hex 4)"

Config-Optionen:

  boot.supportedFilesystems = [ "zfs" ];
  boot.zfs.enableUnstable = true;
  networking.hostId = "RANDHEX";

  environment.systemPackages = with pkgs; [
    wget vim tmux openssh gptfdisk
  ];

Finale Installation

Die finale Installation wird dann auf die korrekte Festplatte durchgeführt. sdb muss also gegebenenfalls angepasst werden.

gdisk /dev/sdb

Partitionen für EFI, SWAP und ZFS anlegen

Verschlüsselten zpool und filesets anlegen

zpool create -o ashift=12 -o altroot="/mnt" -O mountpoint=none -O acltype=posixacl -O xattr=sa -O encryption=aes-256-gcm -O keyformat=passphrase zroot /dev/sdb3
zfs create -o compression=lz4 -o atime=off -o normalization=formD -o mountpoint=none zroot/nixos
zfs create -o mountpoint=legacy zroot/nixos/root
zfs create -o mountpoint=legacy zroot/nixos/usr
zfs create -o mountpoint=legacy zroot/nixos/var
zfs create -o mountpoint=legacy zroot/nixos/tmp
zfs create -o mountpoint=legacy zroot/nixos/home

Mounten und installieren

mount -t zfs zroot/nixos/root /mnt
mkdir /mnt/{home,boot,usr,var,tmp}
mkfs.vfat /dev/sdb1
mount /dev/sdb1 /mnt/boot
mkswap /dev/sdb2
swapon /dev/sdb2
mount -t zfs zroot/nixos/home /mnt/home
mount -t zfs zroot/nixos/usr /mnt/usr
mount -t zfs zroot/nixos/var /mnt/var
mount -t zfs zroot/nixos/tmp /mnt/tmp

nixos-generate-config --root /mnt

Config Optionen wie oben

nixos-install --root /mnt
reboot
nix-channel --update nixos