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
4.8 KiB
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.