nix-conf/system/modules/nvidia.nix
2026-03-06 17:06:53 +08:00

120 lines
2.7 KiB
Nix
Executable file

{
nvidia-mode ? "offload",
nvidia-bus-id,
intel-bus-id,
...
}:
let
validModes = [
"offload"
"sync"
"rsync"
];
in
{
config,
pkgs,
lib,
...
}:
# Nvidia offload mode
lib.checkListOfEnum "Nvidia Prime Mode" validModes [ nvidia-mode ] {
environment.systemPackages = with pkgs; [
nvtopPackages.nvidia
vulkan-loader
vulkan-validation-layers
vulkan-tools
];
# Enable nvidia on wayland or xserver
services.xserver.videoDrivers = [ "nvidia" ];
boot.extraModprobeConfig = ''
options nvidia_drm modeset=1 dbdev=1
'';
boot.initrd.kernelModules = [
"nvidia"
"nvidia_modeset"
"nvidia_uvm"
"nvidia_drm"
];
boot.kernelParams = [
"nvidia-drm.fbdev=1"
"nvidia.NVreg_PreserveVideoMemoryAllocations=1"
];
hardware = {
nvidia.open = true;
nvidia.modesetting.enable = true;
nvidia.powerManagement.enable = true;
nvidia.powerManagement.finegrained = if nvidia-mode == "sync" then false else true;
nvidia.nvidiaSettings = true;
nvidia.dynamicBoost.enable = true;
nvidia.package =
let
base = config.boot.kernelPackages.nvidiaPackages.latest;
cachyos-nvidia-patch = pkgs.fetchpatch {
url = "https://raw.githubusercontent.com/CachyOS/CachyOS-PKGBUILDS/master/nvidia/nvidia-utils/kernel-6.19.patch";
sha256 = "sha256-YuJjSUXE6jYSuZySYGnWSNG5sfVei7vvxDcHx3K+IN4=";
};
driverAttr = if config.hardware.nvidia.open then "open" else "bin";
in
base
// {
${driverAttr} = base.${driverAttr}.overrideAttrs (oldAttrs: {
patches = (oldAttrs.patches or [ ]) ++ [ cachyos-nvidia-patch ];
});
};
nvidia.prime =
(
# Reverse Sync Mode
if nvidia-mode == "rsync" then
{
reverseSync.enable = true;
allowExternalGpu = false;
}
# Offload mode
else if nvidia-mode == "offload" then
{
offload = {
enable = true;
enableOffloadCmd = true;
};
}
# Sync Mode
else
{
sync.enable = true;
}
)
// {
intelBusId = intel-bus-id;
nvidiaBusId = nvidia-bus-id;
};
graphics = {
enable = true;
enable32Bit = true;
extraPackages = with pkgs; [
nvidia-vaapi-driver
libva-vdpau-driver
libvdpau-va-gl
];
};
};
environment.variables = {
LIBVA_DRIVER_NAME = "nvidia";
__GLX_VENDOR_LIBRARY_NAME = "nvidia";
NVD_BACKEND = "direct";
GBM_BACKEND = "nvidia-drm";
MOZ_DISABLE_RDD_SANDBOX = 1;
OGL_DEDICATED_HW_STATE_PER_CONTEXT = "ENABLE_ROBUST";
};
}