# NVIDIA GeForce GTX 1070 8 GB (Pascal, GP104): proprietary driver for the # gamescope Steam session and the Sway desktop. # # Driver branch: 580 (nvidiaPackages.legacy_580), NOT the nixpkgs default # (`production`, currently 595.x). 580 is the last branch that supports # Maxwell/Pascal/Volta -- NVIDIA keeps it as an LTS branch to Aug 2028 -- and a # newer branch simply will not drive this card. Same constraint as the Mac Pro's # Quadro P400; see hosts/MacPro31/nvidia.nix. # # The driver is unfree, so it is not in the binary cache: the kernel module is # compiled locally on every kernel bump. { config, ... }: { # Selects the proprietary driver; the module blacklists nouveau/nvidiafb and # loads nvidia-uvm via a modprobe softdep. Naming is historical -- this option # drives the kernel/driver choice on Wayland hosts too, which is why it is set # on a machine that runs no X server. services.xserver.videoDrivers = [ "nvidia" ]; hardware.nvidia = { package = config.boot.kernelPackages.nvidiaPackages.legacy_580; # Required for Wayland: sets nvidia-drm.modeset=1 (and fbdev=1), without # which neither gamescope nor wlroots gets a usable GBM device and both the # Steam session and Sway fail to start. modesetting.enable = true; # The open kernel modules need Turing or later; Pascal must use the closed # ones. Explicit because the option has no default on driver >= 560. open = false; }; # The NVIDIA module only puts these in boot.kernelModules when # services.xserver.enable is true, which is false on this Wayland-only host -- # so load them explicitly rather than relying on udev modalias autoloading. # nvidia_uvm is deliberately absent: the module's modprobe softdep pulls it in # after the GPU device exists, which is the supported ordering. boot.kernelModules = [ "nvidia" "nvidia_modeset" "nvidia_drm" ]; # wlroots refuses the proprietary NVIDIA driver unless told to proceed. The # greeter's compositor (cage) and gamescope have no such check; only Sway # needs the flag, which the module bakes into the wrapper the session's # .desktop file runs. programs.sway.extraOptions = [ "--unsupported-gpu" ]; # 32-bit driver libraries for 32-bit Steam titles and Proton's 32-bit # prefixes: hardware.graphics.enable32Bit pulls in the matching lib32 NVIDIA # userspace. programs.steam (./gaming.nix) sets it too; stated here as well so # the GPU's 32-bit story lives with the rest of the GPU config. hardware.graphics.enable32Bit = true; }