# Set variables ```sh disk=... zfs_pool=... swap_ratio=1.5 ``` # Partition disk ```sh parted -s "$disk" mklabel gpt ``` ## boot ### MBR We don't do MBR anymore! ### EFI ```sh parted -a optimal "$disk" mkpart primary fat32 1MiB 1001MiB parted "$disk" set 1 esp on mkfs.vfat -F32 "${disk}1" ``` ## swap ```sh swap_end=$(awk '/MemTotal/ { print int($2 / 1000 * '"$swap_ratio"') + 1001 }' /proc/meminfo) parted -a optimal "$disk" mkpart primary linux-swap 1001MiB "$swap_end" mkswap "${disk}2" swapon "${disk}2" ``` ## zpool ```sh parted -a optimal "$disk" mkpart primary "$swap_end" 100% zpool create \ -O mountpoint=none \ -O encryption=on \ -O keyformat=passphrase \ -O keylocation=prompt \ -O acltype=posixacl \ -O xattr=sa \ -O compression=zstd \ -O dnodesize=auto \ -O normalization=formD \ -o ashift=12 \ -o autotrim=on \ -R /mnt \ "$zfs_pool" "${disk}3" ``` ### zfs volumes ```sh zfs create -o mountpoint=none "$zfs_pool/rootfs" zfs create -o mountpoint=legacy "$zfs_pool/rootfs/nixos" zfs create -o mountpoint=legacy "$zfs_pool/homefs" zfs create -o mountpoint=legacy "$zfs_pool/homefs/root" zfs create -o mountpoint=legacy "$zfs_pool/homefs/tyil" ``` # Mount partitions/volumes ```sh mount -t zfs "$zfs_pool/rootfs/nixos" /mnt mkdir -pv -- /mnt/boot mount -t vfat "${disk}1" /mnt/boot mkdir -pv -- /mnt/home mount -t zfs "$zfs_pool/homefs" /mnt/home mkdir -pv -- /mnt/root mkdir -pv -- /mnt/home/tyil mount -t zfs "$zfs_pool/homefs/root" /mnt/root mount -t zfs "$zfs_pool/homefs/tyil" /mnt/home/tyil ``` # Install NixOS ## Configure ```sh nixos-generate-config --root /mnt ``` Apply configs in `/mnt/etc/nixos` ```nix { boot.supportedFilesystems = [ "zfs" ]; boot.zfs.devNodes = ... boot.zfs.forceImportRoot = false; networking.hostId = $(head -c4 /dev/urandom | od -A none -t x4) networking.hostName = ... } ``` ## Install ```sh cd /mnt && nixos-install ``` ## Reboot ```sh umount -lR /mnt zpool export "$zfs_pool" ```