41 lines
3.1 KiB
Markdown
41 lines
3.1 KiB
Markdown
---
|
|
blocked-by: 0016-esp-resize-and-reimage
|
|
---
|
|
|
|
## What to build
|
|
|
|
Replace `neogaia`'s hand-written hardware detection file with a real scan of the machine it describes.
|
|
|
|
The file was written before the laptop ran NixOS, as an educated guess at what a Dell XPS 13 9380 needs, and still says so. The guess turned out to be adequate — the module required to reach the encrypted root is present and working — so this is honesty maintenance rather than a fix. It matters because the next person to read the file, including a future reader of this repo, should be able to trust that it describes measured hardware.
|
|
|
|
Only the detection results are kept: the modules the initrd needs, the modules the kernel loads, and the platform. The generated output also contains filesystem and swap declarations, which are dropped — the declarative disk layout owns those, produces them on every evaluation, and a second stale definition would either conflict outright or silently disagree.
|
|
|
|
Generating the scan requires root on the target machine.
|
|
|
|
## Acceptance criteria
|
|
|
|
- [x] The detection file's contents come from a scan of the running machine rather than a guess
|
|
- [x] Filesystem and swap declarations are absent from it, leaving the disk layout as the sole source of those
|
|
- [x] The file no longer describes itself as a placeholder, and says plainly what it holds
|
|
- [x] `nix flake check` builds the `neogaia` toplevel
|
|
|
|
## Implementation Notes
|
|
|
|
**The guess was wider than the measurement, not narrower.**
|
|
It named `thunderbolt`, `usb_storage`, and `sd_mod`, none of which the scan reports; the scan adds `rtsx_pci_sdmmc` for the card reader.
|
|
Nothing needed to reach the root device was missing, so the guess was adequate as the task assumed, but it was not accurate.
|
|
`sd_mod` survives in the resolved list regardless, supplied by nixpkgs' own defaults; `thunderbolt` and `usb_storage` now genuinely go, and they matter only for booting from external media, which this machine does not do.
|
|
|
|
**Two further lines from the scan were dropped beyond the filesystem and swap declarations the task named.**
|
|
`boot.initrd.luks.devices."cryptroot".device` is derived by the disk layout, which the layout file already states, so keeping it would have created the same duplicate definition the task drops the filesystems to avoid.
|
|
`hardware.cpu.intel.updateMicrocode` falls outside the three things the task keeps, and the hardware profile supplies it anyway.
|
|
Both were checked rather than assumed: after the change the LUKS device, all four filesystems, and microcode all still resolve.
|
|
|
|
**The header was rewritten twice.**
|
|
Its first form enumerated the file's three attributes, which the repo's comment convention names as a feature inventory and forbids in a file-top header.
|
|
It now carries provenance and the absence pointer only.
|
|
|
|
**Verified by a boot.**
|
|
`nix flake check` proves only that the configuration evaluates and builds, so the reduced initrd was exercised on the machine: it unlocked LUKS and mounted the btrfs root unaided.
|
|
The running system's store path matches this configuration's build exactly, confirming the boot used it rather than an earlier generation.
|