Skip to content

Hardware Configuration

All configuration files for reference target devices are in modules/reference/hardware, and the machine table that turns them into build targets is targets/laptop/machines.nix.

Intel laptops share one image. It passes display, network and audio through by PCI class rather than per-device ID, matches input devices by udev property, and carries per-board quirks (IOMMU ACS ids, suspend mode, webcam and fingerprint VID:PIDs) in union lists that one image applies to the whole fleet. There is no per-model target, and a new Intel laptop does not need one.

  • Targets: intel-laptop-debug / intel-laptop-release
  • Installers: intel-laptop-debug-installer / intel-laptop-debug-netboot-installer
  • A/B update image: intel-laptop-debug-sysupdate / intel-laptop-release-sysupdate
  • Verified on: Lenovo ThinkPad X1 Carbon, Dell Latitude 7330 Rugged, System76 Darter Pro
  • Architecture: x86_64

Two feature axes vary the image; a target name gains one suffix per selected axis. The memory axes are mutually exclusive.

Axis Suffix Effect
low-mem -low-mem For machines with 16 GB or less: shrinks the flatpak app VM
minimal-mem -minimal-mem Tablet-class units: shrinks the GUI VM to just under 2 GB
storeDisk -storeDisk Puts the VM Nix store on disk instead of in memory

So intel-laptop-low-mem-debug is the Dell Latitude 7330 build, and intel-laptop-low-mem-storeDisk-release combines both.

  • Targets: intel-laptop-extras-debug / intel-laptop-extras-release
  • Description: The same image with the mvp-user-trial-extras product profile
  • Architecture: x86_64

These keep their own target because they are not Intel laptops: AMD IOMMU, desktop chassis, or a discrete GPU whose audio function must be paired with the display device by hand rather than swept up by PCI class matching.

  • Targets: alienware-m18-R2-debug / alienware-m18-R2-release
  • Why separate: NVIDIA dGPU passed as a static multi-function pair, out-of-tree NIC driver in net-vm, host-owned panel backlight, and suspend disabled because the board does not resume
  • Architecture: x86_64
  • Targets: lenovo-t14-amd-gen5-debug / lenovo-t14-amd-gen5-release
  • Why separate: amd_iommu, amdgpu, AMD ACP audio, and a simpledrm renderer because iGPU passthrough does not work on this board
  • Architecture: x86_64
  • Targets: demo-tower-mk1-debug / demo-tower-mk1-release
  • Why separate: AMD desktop; discrete Quadro passed through as a four-function group that includes its own xHCI controller
  • Architecture: x86_64
  • Targets: tower-5080-debug / tower-5080-release
  • Why separate: Intel desktop; discrete RTX 5080 needing the open NVIDIA drivers and NVIDIA modules in the guest initrd
  • Architecture: x86_64
  • Targets: vm-debug / vm-debug-nogui / vm-release
  • Description: Virtual machine configurations for testing and development
  • Architecture: x86_64
  • Target: vmware-debug
  • Description: VMware-optimized configuration
  • Architecture: x86_64
  • Native Targets: nvidia-jetson-orin-agx-debug / nvidia-jetson-orin-agx-release
  • Cross-compiled: nvidia-jetson-orin-agx-debug-from-x86_64 / nvidia-jetson-orin-agx-release-from-x86_64
  • No Demo Apps: nvidia-jetson-orin-agx-debug-nodemoapps / nvidia-jetson-orin-agx-release-nodemoapps
  • Cross + No Demo: nvidia-jetson-orin-agx-debug-nodemoapps-from-x86_64 / nvidia-jetson-orin-agx-release-nodemoapps-from-x86_64
  • Architecture: AArch64
  • Status: Primary AArch64 reference platform
  • Native Targets: nvidia-jetson-orin-agx64-debug / nvidia-jetson-orin-agx64-release
  • Cross-compiled: nvidia-jetson-orin-agx64-debug-from-x86_64 / nvidia-jetson-orin-agx64-release-from-x86_64
  • No Demo Apps: nvidia-jetson-orin-agx64-debug-nodemoapps / nvidia-jetson-orin-agx64-release-nodemoapps
  • Cross + No Demo: nvidia-jetson-orin-agx64-debug-nodemoapps-from-x86_64 / nvidia-jetson-orin-agx64-release-nodemoapps-from-x86_64
  • Architecture: AArch64
  • Native Targets: nvidia-jetson-orin-nx-debug / nvidia-jetson-orin-nx-release
  • Cross-compiled: nvidia-jetson-orin-nx-debug-from-x86_64 / nvidia-jetson-orin-nx-release-from-x86_64
  • No Demo Apps: nvidia-jetson-orin-nx-debug-nodemoapps / nvidia-jetson-orin-nx-release-nodemoapps
  • Cross + No Demo: nvidia-jetson-orin-nx-debug-nodemoapps-from-x86_64 / nvidia-jetson-orin-nx-release-nodemoapps-from-x86_64
  • Architecture: AArch64
  • Native Targets: nxp-imx8mp-evk-debug / nxp-imx8mp-evk-release
  • Cross-compiled: nxp-imx8mp-evk-debug-from-x86_64 / nxp-imx8mp-evk-release-from-x86_64
  • Architecture: AArch64
  • Use Case: Industrial and embedded applications
  • Target: laptop-hw-scan
  • Description: Hardware compatibility scanning utility
  • Architecture: x86_64
  • x86_64: intel-laptop-debug (the generic laptop image, and the one the hardware rigs run)
  • AArch64: nvidia-jetson-orin-agx-debug-from-x86_64 (primary ARM64 platform)

All AArch64 targets have corresponding -from-x86_64 variants for cross-compilation from x86_64 development machines.

Every laptop target has an -installer variant (a bootable ISO carrying the image) and a -netboot-installer variant (PXE, fetching the image at install time).

Usually nothing to add — build intel-laptop-debug and flash it. If something on the board does not come up, add the one quirk it needs to the list that already covers it, rather than creating a target:

Symptom Where the quirk goes
A device shares an IOMMU group with another and cannot be split ghaf.hardware.passthrough.pciAcsOverride.ids in modules/reference/hardware/flake-module.nix
Suspend does not resume, but s2idle works ghaf.services.power-manager.suspend.s2idleModels in modules/reference/hardware/intel-laptop/extra-config-host.nix — a DMI "<board_vendor> <board_name>" string
The internal webcam or fingerprint reader is not passed through modules/reference/passthrough/known-devices.nix — a VID:PID entry
A vendor hotkey block does not reach the GUI VM modules/hardware/passthrough/evdev-rules.nix — a platform pathTag
A host driver claims a device before vfio-pci the host module_blacklist in modules/reference/hardware/intel-laptop/intel-laptop.nix

The unit needs less memory than the fleet default? Use an existing axis (low-mem, minimal-mem) rather than a new target.

AMD hosts, desktops, and discrete GPUs still need their own module — the generic image is Intel-only, and PCI class matching cannot pair a dGPU with its audio function.

  1. Run laptop-hw-scan on the machine to dump its PCI, USB and DMI data.
  2. Add a module directory under modules/reference/hardware and register it as hardware-<name> in that directory’s flake-module.nix. Use tower-5080 as the reference for a discrete-GPU board.
  3. Add one stanza to targets/laptop/machines.nix. That file is data only — no ghaf.*, no lib calls, no conditionals; everything else belongs in the module. This is enforced by checks.laptop-table-is-data.