By: Ammar <ammar.nanjiani@gmail.com>
feat(steammachine): add Jovian NixOS host for Valve fremont hardware
Replace stock SteamOS on the Steam Machine's internal NVMe with Jovian
NixOS. Jovian's Steam Machine support is unmerged upstream (PR #584), so
this pins the author's fork branch as a separate input. Only this host
imports it; steamdeck stays on chaotic's vendored Jovian.
Host choices:
- GRUB with efiInstallAsRemovable. efibootmgr on the machine shows no
explicit OS boot entry, only an {auto_created_boot_option} for the
NVMe, so the firmware resolves \EFI\BOOT\BOOTX64.EFI. An NVRAM-only
install would leave the box unable to boot.
- The host does NOT set nixpkgs.overlays. Importing the Jovian module
already applies it via modules/jovian/overlay.nix; a second pass
re-appends patches (pkgs/mangohud) and breaks the build.
- BIOS updates stay manual. enableFwupdBiosUpdates is on, but autoUpdate
keeps its default of false: a BIOS flash cannot be rolled back by a
NixOS generation.
- Theoden's game archive is mounted read-only with a host-local
systemd.mounts block rather than modules/nixos/nfs-client.nix, which
hardcodes its mount flags and exposes no read-only option.
- home-manager is managed by the NixOS module, so one nixos-anywhere run
covers both system and user config.
Module change:
`gaming.desktop` (default true) gates the desktop Steam extras:
gamemode, the NixOS gamescope module, the 8BitDo udev rules,
SteamTinkerLaunch, and the launcher packages and programs (Hydra,
Heroic, Lutris, BoilR, protonup-qt, protontricks, winetricks, Vesktop,
capture tools).
Jovian already ships Steam, gamescope with cap_sys_nice, an unfiltered
`KERNEL=="hidraw*", TAG+="uaccess"` rule covering every controller, and
MangoHUD. Its performance path is gamescope plus dmemcg-booster, not
gamemode, and nothing in Jovian calls gamemoderun, so gamemode would sit
inert. The 8BitDo rules are already covered by that unfiltered rule.
So both Jovian hosts now set `desktop = false`. That also removes Hydra
from the Steam Deck, which previously inherited it unconditionally.
Save sync (Syncthing folder, Ludusavi, its timer and backup wrapper) is
unaffected and stays shared.
hardware-configuration.nix is still a placeholder. nixos-anywhere fills
it in via --generate-hardware-config during install.
Total
29m07s
| Time to Start | Worker time | Duration | Time to finish | Idle | |
|---|---|---|---|---|---|
| Config | 3s | 2s | 2s | 5s | 3s |
| Eval | 5s | 1m30s | 1m30s | 1m36s | 0s |
| Build | 1m35s | 2h12m05s | 27m34s | 29m10s | 1s |
| Suite | 3s | 2h13m37s | 29m07s | 29m10s | 4s |