Files
nix-configurations/hosts/framework/README.md
T
clw 28e8bc938a feat(nixos): consolidate hosts into a shared flake
Manage T450s, X1EG2 and Framework 13 from pinned NixOS inputs while retaining
machine-specific storage and hardware configuration.

Changes:

Shared Configuration:
- Extract common, KDE, desktop, development and Steam modules
- Share Emacs, VS Code, htop, DevOps tools and Docker across hosts
- Remove obsolete apps and global project language runtimes

Framework:
- Import the 11th-generation Intel hardware profile
- Enable Steam and ZFS with tookland/home mounted at /home
- Document manual ext4 root and ZFS installation steps
- Require installer-generated hardware configuration before installation

Validation:
- Evaluate both ThinkPads and Framework with test hardware
- Check Nix syntax, formatting and whitespace
2026-10-06 15:58:10 +01:00

4.8 KiB
Raw Blame History

Framework 13 installation

Target: Intel 11th-generation Core i5-1135G7. The flake imports nixos-hardware.nixosModules.framework-11th-gen-intel for model-specific tuning and enables firmware updates, KDE, shared development tools and Steam.

Storage layout

Partition Filesystem Use
EFI system partition FAT32, suggested 1 GiB /boot
Linux root partition ext4, suggested 128–160 GiB /, including /nix and /var
Remaining space ZFS pool tookland tookland/home at /home; later VM/ISO datasets

Adjust the root size for the drive capacity and your Nix store/container needs. The ext4 and ZFS partitions have separate space budgets; unused ZFS space does not automatically grow the ext4 partition. These instructions use unencrypted filesystems; any disk-encryption setup must be chosen before formatting.

NixOS manages support, imports and mounts once the pool exists. This repo does not automate disk partitioning or pool/dataset creation. Use the installer disk utility to create this GPT layout. Formatting and pool creation erase the selected partitions: check the actual drive with lsblk and use its persistent /dev/disk/by-id/…-partN names. No commands here operate on a guessed device.

Format and mount in the installer

Boot a current NixOS installer with ZFS support and network access. Substitute the three partition paths below with the partitions you just created. The literal placeholders will not work as device names.

sudo mkfs.fat -F 32 -n EFI "/dev/disk/by-id/REPLACE_WITH_EFI_PARTITION"
sudo mkfs.ext4 -L nixos-root "/dev/disk/by-id/REPLACE_WITH_ROOT_PARTITION"
sudo mount "/dev/disk/by-id/REPLACE_WITH_ROOT_PARTITION" /mnt
sudo mkdir -p /mnt/boot /mnt/home
sudo mount "/dev/disk/by-id/REPLACE_WITH_EFI_PARTITION" /mnt/boot

sudo modprobe zfs
sudo zpool create -o ashift=12 -o autotrim=on \
  -O compression=lz4 -O acltype=posixacl -O xattr=sa -O relatime=on \
  -m none -R /mnt tookland "/dev/disk/by-id/REPLACE_WITH_ZFS_PARTITION"
sudo zfs create -o mountpoint=legacy tookland/home
sudo mount -t zfs tookland/home /mnt/home
sudo zpool status tookland
sudo zfs list -o name,mountpoint

Do not format the ZFS partition with mkfs. zpool create initializes it. The pool's root dataset has no mountpoint; tookland/home uses a legacy mountpoint so the NixOS fileSystems."/home" declaration manages its mount. -R /mnt is an installer-only alternate root, not a permanent /mnt mountpoint. Neither the pool nor its datasets are recreated during a rebuild.

Generate hardware configuration and install

Generate configuration after all three filesystems, including /mnt/home, are mounted. This records your real hardware and filesystem layout.

sudo nixos-generate-config --root /mnt
# Obtain Git if it is not already available in the installer.
nix --extra-experimental-features 'nix-command flakes' shell nixpkgs#git
sudo git clone <repository-url> /mnt/etc/nixos-config
sudo cp /mnt/etc/nixos/hardware-configuration.nix \
  /mnt/etc/nixos-config/hosts/framework/hardware-configuration.nix
sudo git -C /mnt/etc/nixos-config add hosts/framework/hardware-configuration.nix
sudo nixos-install --flake /mnt/etc/nixos-config#framework
sudo nixos-enter --root /mnt -c 'passwd clw'

Review the generated hardware file: / must be ext4, /boot must be vfat, and /home must refer to tookland/home with fsType = "zfs". Identical /home declarations in the generated file and host configuration merge normally. The installer-generated configuration.nix is not used by this flake.

Once installation and password setup are complete, leave any shell working under /mnt/home, export the pool cleanly, and reboot:

sudo zpool export tookland
sudo reboot

NixOS imports tookland and mounts home before user activation. Its fixed host ID is fdc3ff7d; retain it across reinstalls using this pool. Scrubs are enabled. Create other datasets yourself with explicit mountpoints, for example zfs create -o mountpoint=/srv/isos tookland/isos. Datasets with native mountpoints are mounted by ZFS; those with mountpoint=legacy also need a NixOS fileSystems declaration. Snapshot/backup policies are not configured.

References: Framework hardware profile, NixOS ZFS configuration, OpenZFS pool creation.

Validation: this host evaluates to a complete system derivation with a temporary installer-style ext4/EFI fixture and a duplicate generated /home declaration. Intel microcode, graphics, Steam and ZFS are enabled. Both existing hosts still evaluate. The actual disk layout and generated hardware file must be supplied on the Framework; no full build or disk operation was performed during checks.