Files
nixfiles/hosts/Console/nvidia.nix
T

55 lines
2.5 KiB
Nix
Raw Normal View History

# 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;
}