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

101 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.
```sh
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.
```sh
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:
```sh
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](https://github.com/NixOS/nixos-hardware/tree/master/framework/13-inch/11th-gen-intel),
[NixOS ZFS configuration](https://wiki.nixos.org/wiki/ZFS),
[OpenZFS pool creation](https://openzfs.github.io/openzfs-docs/man/master/8/zpool-create.8.html).
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.