Files
nixfiles/hosts/MacPro31
Emma Thorpe 0d13581896 feat(features): gate Claude Code on the host CPU microarchitecture level
Claude Code runs on Node, whose V8 build requires SSE4.2 and POPCNT
(x86-64-v2). On an older x86_64 CPU it does not run, so it must not be
installed there in the first place.

Nix cannot detect the CPU (pure evaluation, hosts often built elsewhere),
so add features.cpu.microarchLevel: the psABI level a host declares about
itself, defaulting to 2. features.claudeCode.enable derives from it, and
home/claude.nix reads that through home-manager's osConfig and installs
nothing -- CLI, CLAUDE.md, output style or memory symlink -- when it is
off. Hosts without the option (Darwin, the standalone homeConfigurations)
keep the tool enabled.

An assertion fails evaluation if a host force-enables the flag below the
required level, so the mistake surfaces in nix flake check rather than as
an illegal-instruction crash on the machine.
2026-08-17 20:35:29 +01:00
..

Mac Pro 3,1 (Early 2008) — install notes

Flake host: lyrathorpe-macpro31. Desktop (portable = false, imports ../../modules/desktop.nix). Files: configuration.nix, hardware-configuration.nix.

Hardware configuration

hardware-configuration.nix here is the real config generated by nixos-generate-config on the machine. Root is an LVM logical volume (/dev/mapper/MacPro-Root, ext4); the ESP (vfat) and swap are referenced by UUID. The initrd carries dm-snapshot for the LVM root. Regenerate and commit if the disk layout changes.

Bootloader

The Mac Pro 3,1 has 64-bit EFI, so it uses systemd-boot (no GRUB/CSM shim). canTouchEfiVariables = false because Apple's firmware does not reliably accept efibootmgr NVRAM writes.

Apple-EFI quirk: if the firmware boot picker does not show NixOS after install, either

  • uncomment boot.loader.efi.efiInstallAsRemovable = true; in configuration.nix (installs the fallback \EFI\BOOT\BOOTX64.EFI), and/or
  • "bless" the ESP from macOS.

Partition the disk GPT with an ESP (vfat).

Graphics

The stock card varies between units — ATI Radeon HD 2600 XT or NVIDIA GeForce 8800 GT. No proprietary driver is hardcoded; Sway relies on in-tree KMS:

  • ATI Radeon HD 2600 XT → radeon (or amdgpu) KMS
  • NVIDIA GeForce 8800 GT → nouveau KMS

These come up automatically. If a card needs forcing, set services.xserver.videoDrivers and/or add the module to boot.initrd.kernelModules for early KMS (see the comment in configuration.nix).

Networking

Wired Ethernet via NetworkManager (from desktop.nix) — the Mac Pro has two gigabit ports.

Login

Graphical login via a Wayland greeter — greetd running ReGreet inside the cage kiosk compositor — configured centrally in ../../modules/sway.nix for every Sway host (gated on features.swayDesktop.enable). The greeter is forced to the Dvorak layout to match the console and Sway session. Set the user password (passwd lyrathorpe) after install, or the greeter cannot authenticate. Requires working KMS (radeon/nouveau — see Graphics).

Apply

sudo nixos-rebuild switch --flake .#lyrathorpe-macpro31