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
101 lines
4.8 KiB
Markdown
101 lines
4.8 KiB
Markdown
# 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.
|