Files
steamify-cachyos/TODO-nvidia.md
T

4.4 KiB

TODO: NVIDIA fix for gaming mode (branch feature/nvidia-gaming-fix)

Delete this file together with .no-release-yet when the feature is released. Written 2026-10-01 so a new session can pick this up.

Problem

A PC with an NVIDIA RTX 5080 (Blackwell, open kernel modules) shows a corrupted image when gaming mode (gamescope) starts. Cause not confirmed. Steamify had no NVIDIA handling at all. Likely: nvidia-drm.modeset=1 / nvidia-drm.fbdev=1 missing, or a gamescope/driver mismatch.

What is built (all on this branch, pushed)

  • lib/nvidia.sh: part of the SteamOS conversion (gaming_enable / gaming_disable). With an NVIDIA GPU + driver it adds nvidia-drm.modeset=1 nvidia-drm.fbdev=1 to the kernel command line (Limine, systemd-boot, GRUB; backup first) and, only when every installed kernel has nvidia_drm, /etc/mkinitcpio.conf.d/90-steamify-nvidia.conf. Rebuilds initramfs + boot entries, verifies the config and the generated entries have the parameters (error otherwise). Undone on disable. Description: TECHNICAL.md.
  • FEATURE_VERSION[gaming]=2.9.7 so installs that already have the conversion re-apply it.
  • Test hooks NVIDIA_DRM_DIR, NVIDIA_MODULES_DIR, NVIDIA_LIMINE_CONF, NVIDIA_SDBOOT_DIR, NVIDIA_GRUB_CFG: only set by tests; defaults are the real paths.

Tested

  • bash tests/nvidia-test.sh: 22 checks against a fake RTX 5080 beside an iGPU, a stub modinfo, temp boot loader files. All pass.
  • Real VMs (QEMU/KVM, Limine, systemd-boot, GRUB): enable, reboot, kernel command line has the parameters; disable, reboot, original command line. All pass. Found and fixed: Limine pasted an appended += line as text into the cmdline; a kernel without the NVIDIA modules made limine-mkinitcpio skip its boot entry.

In progress (2026-10-01)

  • Kernel changes: the early-load drop-in is now kept right by a pacman hook (patches/steamify-nvidia-initramfs.{sh,hook}, installed by nvidia_enable). Unit-tested (29 checks). Not yet VM-tested with a real pacman transaction: hook order (85- after 71-dkms-install, before the mkinitcpio/limine hooks: check the real hook names in /usr/share/libalpm/hooks), a kernel reinstall with and without modules.

Still to do

  1. On the NVIDIA PC (only place the real fix can be judged), from this checkout: bash tests/nvidia-hardware-test.sh check (before), ... apply (asks sudo), reboot, ... check (after: nvidia_drm modeset/fbdev = Y), boot gaming mode, then ... visual (was the picture clean?). Everything goes to ~/steamify-nvidia-report.txt: paste it into the session.
  2. If the parameters apply but the picture is still corrupted: look at the report's gamescope/NVIDIA log lines and the versions (nvidia-open, nvidia-utils, gamescope, gamescope-session-cachyos); the cause is then probably a gamescope/driver mismatch for Blackwell, not this fix.
  3. Not covered by any test: the early-load drop-in on a machine that has the modules (the VMs have none), and a boot loader other than the three.
  4. Changelog: fill in the commit hashes of this feature's lines (next commit, per AGENTS.md).
  5. When complete and tested: ask the user whether it may be released. On a yes delete .no-release-yet and this file, open the PR into release/2.9.7 (local branch only so far, one commit chore: Version 2.9.7; push it then) and merge it. The user merges release/2.9.7 into main.

Working rules for this repo (see AGENTS.md and ../steamify-cachyos-dev/AGENTS.md)

  • Never work on main or a release/* branch; no Co-Authored-By / "Generated with Claude" lines in commits or PRs. No git identity on the dev laptop: use git -c user.name="Rick Peters" -c user.email="rickpeters@upriser.nl" commit.
  • Don't push release/2.9.7 before the PR (a push can start a dev ISO build).

If the VM tests need repeating (dev laptop, Ubuntu)

  • scripts/vminstall.sh (steamify-cachyos-dev) with VM_BOOTLOADER=limine|systemd-boot|grub, CI=1, a short VM_DIR (~/vms/...: socket paths over 108 bytes fail) and VM_SSH_KEY.
  • This session's shell lacked the kvm group: run QEMU steps as sg kvm -c "...".
  • /tmp/vminstall-iso.lock belongs to another user and there is no bsdtar: use a copy of vminstall.sh with another lock path and a bsdtar shim (Python pycdlib in a venv).
  • Delete everything afterwards (~/vms incl. pkg-cache, the 3 GB ISO, keys).