Loading nixos/modules/hardware/video/nvidia.nix +437 −434 Original line number Diff line number Diff line Loading @@ -3,12 +3,10 @@ lib, pkgs, ... }: let }: let nvidiaEnabled = (lib.elem "nvidia" config.services.xserver.videoDrivers); nvidia_x11 = if nvidiaEnabled || cfg.datacenter.enable then cfg.package else null; nvidia_x11 = if nvidiaEnabled || cfg.datacenter.enable then cfg.package else null; cfg = config.hardware.nvidia; Loading @@ -20,7 +18,8 @@ busIDType = lib.types.strMatching "([[:print:]]+[\:\@][0-9]{1,3}\:[0-9]{1,2}\:[0-9])?"; ibtSupport = cfg.open || (nvidia_x11.ibtSupport or false); settingsFormat = pkgs.formats.keyValue { }; in { in { options = { hardware.nvidia = { datacenter.enable = lib.mkEnableOption '' Loading Loading @@ -211,7 +210,9 @@ in { (lib.mkEnableOption '' nvidia-settings, NVIDIA's GUI configuration tool '') // {default = true;}; // { default = true; }; nvidiaPersistenced = lib.mkEnableOption '' nvidia-persistenced a update for NVIDIA GPU headless mode, i.e. Loading @@ -226,7 +227,8 @@ in { ''; package = lib.mkOption { default = config.boot.kernelPackages.nvidiaPackages."${if cfg.datacenter.enable then "dc" else "stable"}"; default = config.boot.kernelPackages.nvidiaPackages."${if cfg.datacenter.enable then "dc" else "stable"}"; defaultText = lib.literalExpression '' config.boot.kernelPackages.nvidiaPackages."\$\{if cfg.datacenter.enable then "dc" else "stable"}" ''; Loading @@ -242,17 +244,13 @@ in { }; }; config = let igpuDriver = if pCfg.intelBusId != "" then "modesetting" else "amdgpu"; igpuBusId = if pCfg.intelBusId != "" then pCfg.intelBusId else pCfg.amdgpuBusId; config = let igpuDriver = if pCfg.intelBusId != "" then "modesetting" else "amdgpu"; igpuBusId = if pCfg.intelBusId != "" then pCfg.intelBusId else pCfg.amdgpuBusId; in lib.mkIf (nvidia_x11 != null) (lib.mkMerge [ lib.mkIf (nvidia_x11 != null) ( lib.mkMerge [ # Common ({ assertions = [ Loading @@ -262,7 +260,10 @@ in { } ]; boot = { blacklistedKernelModules = ["nouveau" "nvidiafb"]; blacklistedKernelModules = [ "nouveau" "nvidiafb" ]; # Don't add `nvidia-uvm` to `kernelModules`, because we want # `nvidia-uvm` be loaded only after `udev` rules for `nvidia` kernel Loading @@ -274,11 +275,8 @@ in { softdep nvidia post: nvidia-uvm ''; }; systemd.tmpfiles.rules = lib.optional config.virtualisation.docker.enableNvidia "L+ /run/nvidia-docker/bin - - - - ${nvidia_x11.bin}/origBin"; services.udev.extraRules = '' systemd.tmpfiles.rules = lib.optional config.virtualisation.docker.enableNvidia "L+ /run/nvidia-docker/bin - - - - ${nvidia_x11.bin}/origBin"; services.udev.extraRules = '' # Create /dev/nvidia-uvm when the nvidia-uvm module is loaded. KERNEL=="nvidia", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidiactl c 195 255'" KERNEL=="nvidia", RUN+="${pkgs.runtimeShell} -c 'for i in $$(cat /proc/driver/nvidia/gpus/*/information | grep Minor | cut -d \ -f 4); do mknod -m 666 /dev/nvidia$${i} c 195 $${i}; done'" Loading @@ -287,16 +285,10 @@ in { KERNEL=="nvidia_uvm", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidia-uvm-tools c $$(grep nvidia-uvm /proc/devices | cut -d \ -f 1) 1'" ''; hardware.opengl = { extraPackages = [ nvidia_x11.out ]; extraPackages32 = [ nvidia_x11.lib32 ]; extraPackages = [ nvidia_x11.out ]; extraPackages32 = [ nvidia_x11.lib32 ]; }; environment.systemPackages = [ nvidia_x11.bin ]; environment.systemPackages = [ nvidia_x11.bin ]; }) # X11 (lib.mkIf nvidiaEnabled { Loading @@ -312,7 +304,8 @@ in { } { assertion = primeEnabled -> pCfg.nvidiaBusId != "" && (pCfg.intelBusId != "" || pCfg.amdgpuBusId != ""); assertion = primeEnabled -> pCfg.nvidiaBusId != "" && (pCfg.intelBusId != "" || pCfg.amdgpuBusId != ""); message = "When NVIDIA PRIME is enabled, the GPU bus IDs must be configured."; } Loading @@ -322,7 +315,8 @@ in { } { assertion = (reverseSyncCfg.enable && pCfg.amdgpuBusId != "") -> lib.versionAtLeast nvidia_x11.version "470.0"; assertion = (reverseSyncCfg.enable && pCfg.amdgpuBusId != "") -> lib.versionAtLeast nvidia_x11.version "470.0"; message = "NVIDIA PRIME render offload for AMD APUs is currently only supported on versions >= 470 beta."; } Loading Loading @@ -359,7 +353,8 @@ in { { assertion = cfg.dynamicBoost.enable -> lib.versionAtLeast nvidia_x11.version "510.39.01"; message = "NVIDIA's Dynamic Boost feature only exists on versions >= 510.39.01"; }]; } ]; # If Optimus/PRIME is enabled, we: # - Specify the configured NVIDIA GPU bus ID in the Device section for the Loading Loading @@ -398,9 +393,8 @@ in { deviceSection = '' Option "SidebandSocketPath" "/run/nvidia-xdriver/" '' + lib.optionalString primeEnabled '' + lib.optionalString primeEnabled '' BusID "${pCfg.nvidiaBusId}" '' + lib.optionalString pCfg.allowExternalGpu '' Loading Loading @@ -431,17 +425,16 @@ in { Option "AllowNVIDIAGPUScreens" ''; services.xserver.displayManager.setupCommands = let services.xserver.displayManager.setupCommands = let gpuProviderName = if igpuDriver == "amdgpu" then if igpuDriver == "amdgpu" then # find the name of the provider if amdgpu "`${lib.getExe pkgs.xorg.xrandr} --listproviders | ${lib.getExe pkgs.gnugrep} -i AMD | ${lib.getExe pkgs.gnused} -n 's/^.*name://p'`" else igpuDriver; else igpuDriver; providerCmdParams = if syncCfg.enable then "\"${gpuProviderName}\" NVIDIA-0" else "NVIDIA-G0 \"${gpuProviderName}\""; if syncCfg.enable then "\"${gpuProviderName}\" NVIDIA-0" else "NVIDIA-G0 \"${gpuProviderName}\""; in lib.optionalString (syncCfg.enable || reverseSyncCfg.enable) '' # Added by nvidia configuration module for Optimus/PRIME. Loading @@ -450,35 +443,35 @@ in { ''; environment.etc = { "nvidia/nvidia-application-profiles-rc" = lib.mkIf nvidia_x11.useProfiles {source = "${nvidia_x11.bin}/share/nvidia/nvidia-application-profiles-rc";}; "nvidia/nvidia-application-profiles-rc" = lib.mkIf nvidia_x11.useProfiles { source = "${nvidia_x11.bin}/share/nvidia/nvidia-application-profiles-rc"; }; # 'nvidia_x11' installs it's files to /run/opengl-driver/... "egl/egl_external_platform.d".source = "/run/opengl-driver/share/egl/egl_external_platform.d/"; }; hardware.opengl = { extraPackages = [ pkgs.nvidia-vaapi-driver ]; extraPackages32 = [ pkgs.pkgsi686Linux.nvidia-vaapi-driver ]; extraPackages = [ pkgs.nvidia-vaapi-driver ]; extraPackages32 = [ pkgs.pkgsi686Linux.nvidia-vaapi-driver ]; }; environment.systemPackages = lib.optional cfg.nvidiaSettings nvidia_x11.settings ++ lib.optional cfg.nvidiaPersistenced nvidia_x11.persistenced ++ lib.optional offloadCfg.enableOffloadCmd (pkgs.writeShellScriptBin "nvidia-offload" '' ++ lib.optional offloadCfg.enableOffloadCmd ( pkgs.writeShellScriptBin "nvidia-offload" '' export __NV_PRIME_RENDER_OFFLOAD=1 export __NV_PRIME_RENDER_OFFLOAD_PROVIDER=NVIDIA-G0 export __GLX_VENDOR_LIBRARY_NAME=nvidia export __VK_LAYER_NV_optimus=NVIDIA_only exec "$@" ''); '' ); systemd.packages = lib.optional cfg.powerManagement.enable nvidia_x11.out; systemd.services = let systemd.services = let nvidiaService = state: { description = "NVIDIA system ${state} actions"; path = [ pkgs.kbd ]; Loading @@ -494,12 +487,16 @@ in { (lib.mkIf cfg.powerManagement.enable { nvidia-suspend = nvidiaService "suspend"; nvidia-hibernate = nvidiaService "hibernate"; nvidia-resume = (nvidiaService "resume") // { nvidia-resume = (nvidiaService "resume") // { before = [ ]; after = ["systemd-suspend.service" "systemd-hibernate.service"]; requiredBy = ["systemd-suspend.service" "systemd-hibernate.service"]; after = [ "systemd-suspend.service" "systemd-hibernate.service" ]; requiredBy = [ "systemd-suspend.service" "systemd-hibernate.service" ]; }; }) (lib.mkIf cfg.nvidiaPersistenced { Loading Loading @@ -534,26 +531,33 @@ in { services.dbus.packages = lib.optional cfg.dynamicBoost.enable nvidia_x11.bin; hardware.firmware = lib.optional cfg.open nvidia_x11.firmware; hardware.firmware = let isOpen = cfg.open; isNewUnfree = lib.versionAtLeast nvidia_x11.version "555"; in lib.optional (isOpen || isNewUnfree) nvidia_x11.firmware; systemd.tmpfiles.rules = [ systemd.tmpfiles.rules = [ # Remove the following log message: # (WW) NVIDIA: Failed to bind sideband socket to # (WW) NVIDIA: '/var/run/nvidia-xdriver-b4f69129' Permission denied # # https://bbs.archlinux.org/viewtopic.php?pid=1909115#p1909115 "d /run/nvidia-xdriver 0770 root users" ] ++ lib.optional (nvidia_x11.persistenced != null && config.virtualisation.docker.enableNvidia) ] ++ lib.optional (nvidia_x11.persistenced != null && config.virtualisation.docker.enableNvidia) "L+ /run/nvidia-docker/extras/bin/nvidia-persistenced - - - - ${nvidia_x11.persistenced}/origBin/nvidia-persistenced"; boot = { extraModulePackages = if cfg.open then [nvidia_x11.open] else [nvidia_x11.bin]; extraModulePackages = if cfg.open then [ nvidia_x11.open ] else [ nvidia_x11.bin ]; # nvidia-uvm is required by CUDA applications. kernelModules = lib.optionals config.services.xserver.enable ["nvidia" "nvidia_modeset" "nvidia_drm"]; kernelModules = lib.optionals config.services.xserver.enable [ "nvidia" "nvidia_modeset" "nvidia_drm" ]; # If requested enable modesetting via kernel parameter. kernelParams = Loading @@ -567,8 +571,7 @@ in { options nvidia "NVreg_DynamicPowerManagement=0x02" ''; }; services.udev.extraRules = lib.optionalString cfg.powerManagement.finegrained ( services.udev.extraRules = lib.optionalString cfg.powerManagement.finegrained ( lib.optionalString (lib.versionOlder config.boot.kernelPackages.kernel.version "5.5") '' # Remove NVIDIA USB xHCI Host Controller devices, if present ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x0c0330", ATTR{remove}="1" Loading @@ -592,9 +595,7 @@ in { }) # Data Center (lib.mkIf (cfg.datacenter.enable) { boot.extraModulePackages = [ nvidia_x11.bin ]; boot.extraModulePackages = [ nvidia_x11.bin ]; systemd = { tmpfiles.rules = Loading @@ -612,7 +613,8 @@ in { serviceConfig = { Type = "forking"; TimeoutStartSec = 240; ExecStart = let ExecStart = let nv-fab-conf = settingsFormat.generate "fabricmanager.conf" cfg.datacenter.settings; in "${lib.getExe nvidia_x11.fabricmanager} -c ${nv-fab-conf}"; Loading Loading @@ -640,5 +642,6 @@ in { lib.optional cfg.datacenter.enable nvidia_x11.fabricmanager ++ lib.optional cfg.nvidiaPersistenced nvidia_x11.persistenced; }) ]); ] ); } pkgs/os-specific/linux/nvidia-x11/default.nix +6 −8 Original line number Diff line number Diff line Loading @@ -51,14 +51,12 @@ rec { }); beta = selectHighestVersion latest (generic { version = "550.40.07"; sha256_64bit = "sha256-KYk2xye37v7ZW7h+uNJM/u8fNf7KyGTZjiaU03dJpK0="; sha256_aarch64 = "sha256-AV7KgRXYaQGBFl7zuRcfnTGr8rS5n13nGUIe3mJTXb4="; openSha256 = "sha256-mRUTEWVsbjq+psVe+kAT6MjyZuLkG2yRDxCMvDJRL1I="; settingsSha256 = "sha256-c30AQa4g4a1EHmaEu1yc05oqY01y+IusbBuq+P6rMCs="; persistencedSha256 = "sha256-11tLSY8uUIl4X/roNnxf5yS2PQvHvoNjnd2CB67e870="; patches = [ rcu_patch ]; version = "555.42.02"; sha256_64bit = "sha256-k7cI3ZDlKp4mT46jMkLaIrc2YUx1lh1wj/J4SVSHWyk="; sha256_aarch64 = "sha256-ekx0s0LRxxTBoqOzpcBhEKIj/JnuRCSSHjtwng9qAc0="; openSha256 = "sha256-3/eI1VsBzuZ3Y6RZmt3Q5HrzI2saPTqUNs6zPh5zy6w="; settingsSha256 = "sha256-rtDxQjClJ+gyrCLvdZlT56YyHQ4sbaL+d5tL4L4VfkA="; persistencedSha256 = "sha256-3ae31/egyMKpqtGEqgtikWcwMwfcqMv2K4MVFa70Bqs="; }); # Vulkan developer beta driver Loading Loading
nixos/modules/hardware/video/nvidia.nix +437 −434 Original line number Diff line number Diff line Loading @@ -3,12 +3,10 @@ lib, pkgs, ... }: let }: let nvidiaEnabled = (lib.elem "nvidia" config.services.xserver.videoDrivers); nvidia_x11 = if nvidiaEnabled || cfg.datacenter.enable then cfg.package else null; nvidia_x11 = if nvidiaEnabled || cfg.datacenter.enable then cfg.package else null; cfg = config.hardware.nvidia; Loading @@ -20,7 +18,8 @@ busIDType = lib.types.strMatching "([[:print:]]+[\:\@][0-9]{1,3}\:[0-9]{1,2}\:[0-9])?"; ibtSupport = cfg.open || (nvidia_x11.ibtSupport or false); settingsFormat = pkgs.formats.keyValue { }; in { in { options = { hardware.nvidia = { datacenter.enable = lib.mkEnableOption '' Loading Loading @@ -211,7 +210,9 @@ in { (lib.mkEnableOption '' nvidia-settings, NVIDIA's GUI configuration tool '') // {default = true;}; // { default = true; }; nvidiaPersistenced = lib.mkEnableOption '' nvidia-persistenced a update for NVIDIA GPU headless mode, i.e. Loading @@ -226,7 +227,8 @@ in { ''; package = lib.mkOption { default = config.boot.kernelPackages.nvidiaPackages."${if cfg.datacenter.enable then "dc" else "stable"}"; default = config.boot.kernelPackages.nvidiaPackages."${if cfg.datacenter.enable then "dc" else "stable"}"; defaultText = lib.literalExpression '' config.boot.kernelPackages.nvidiaPackages."\$\{if cfg.datacenter.enable then "dc" else "stable"}" ''; Loading @@ -242,17 +244,13 @@ in { }; }; config = let igpuDriver = if pCfg.intelBusId != "" then "modesetting" else "amdgpu"; igpuBusId = if pCfg.intelBusId != "" then pCfg.intelBusId else pCfg.amdgpuBusId; config = let igpuDriver = if pCfg.intelBusId != "" then "modesetting" else "amdgpu"; igpuBusId = if pCfg.intelBusId != "" then pCfg.intelBusId else pCfg.amdgpuBusId; in lib.mkIf (nvidia_x11 != null) (lib.mkMerge [ lib.mkIf (nvidia_x11 != null) ( lib.mkMerge [ # Common ({ assertions = [ Loading @@ -262,7 +260,10 @@ in { } ]; boot = { blacklistedKernelModules = ["nouveau" "nvidiafb"]; blacklistedKernelModules = [ "nouveau" "nvidiafb" ]; # Don't add `nvidia-uvm` to `kernelModules`, because we want # `nvidia-uvm` be loaded only after `udev` rules for `nvidia` kernel Loading @@ -274,11 +275,8 @@ in { softdep nvidia post: nvidia-uvm ''; }; systemd.tmpfiles.rules = lib.optional config.virtualisation.docker.enableNvidia "L+ /run/nvidia-docker/bin - - - - ${nvidia_x11.bin}/origBin"; services.udev.extraRules = '' systemd.tmpfiles.rules = lib.optional config.virtualisation.docker.enableNvidia "L+ /run/nvidia-docker/bin - - - - ${nvidia_x11.bin}/origBin"; services.udev.extraRules = '' # Create /dev/nvidia-uvm when the nvidia-uvm module is loaded. KERNEL=="nvidia", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidiactl c 195 255'" KERNEL=="nvidia", RUN+="${pkgs.runtimeShell} -c 'for i in $$(cat /proc/driver/nvidia/gpus/*/information | grep Minor | cut -d \ -f 4); do mknod -m 666 /dev/nvidia$${i} c 195 $${i}; done'" Loading @@ -287,16 +285,10 @@ in { KERNEL=="nvidia_uvm", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidia-uvm-tools c $$(grep nvidia-uvm /proc/devices | cut -d \ -f 1) 1'" ''; hardware.opengl = { extraPackages = [ nvidia_x11.out ]; extraPackages32 = [ nvidia_x11.lib32 ]; extraPackages = [ nvidia_x11.out ]; extraPackages32 = [ nvidia_x11.lib32 ]; }; environment.systemPackages = [ nvidia_x11.bin ]; environment.systemPackages = [ nvidia_x11.bin ]; }) # X11 (lib.mkIf nvidiaEnabled { Loading @@ -312,7 +304,8 @@ in { } { assertion = primeEnabled -> pCfg.nvidiaBusId != "" && (pCfg.intelBusId != "" || pCfg.amdgpuBusId != ""); assertion = primeEnabled -> pCfg.nvidiaBusId != "" && (pCfg.intelBusId != "" || pCfg.amdgpuBusId != ""); message = "When NVIDIA PRIME is enabled, the GPU bus IDs must be configured."; } Loading @@ -322,7 +315,8 @@ in { } { assertion = (reverseSyncCfg.enable && pCfg.amdgpuBusId != "") -> lib.versionAtLeast nvidia_x11.version "470.0"; assertion = (reverseSyncCfg.enable && pCfg.amdgpuBusId != "") -> lib.versionAtLeast nvidia_x11.version "470.0"; message = "NVIDIA PRIME render offload for AMD APUs is currently only supported on versions >= 470 beta."; } Loading Loading @@ -359,7 +353,8 @@ in { { assertion = cfg.dynamicBoost.enable -> lib.versionAtLeast nvidia_x11.version "510.39.01"; message = "NVIDIA's Dynamic Boost feature only exists on versions >= 510.39.01"; }]; } ]; # If Optimus/PRIME is enabled, we: # - Specify the configured NVIDIA GPU bus ID in the Device section for the Loading Loading @@ -398,9 +393,8 @@ in { deviceSection = '' Option "SidebandSocketPath" "/run/nvidia-xdriver/" '' + lib.optionalString primeEnabled '' + lib.optionalString primeEnabled '' BusID "${pCfg.nvidiaBusId}" '' + lib.optionalString pCfg.allowExternalGpu '' Loading Loading @@ -431,17 +425,16 @@ in { Option "AllowNVIDIAGPUScreens" ''; services.xserver.displayManager.setupCommands = let services.xserver.displayManager.setupCommands = let gpuProviderName = if igpuDriver == "amdgpu" then if igpuDriver == "amdgpu" then # find the name of the provider if amdgpu "`${lib.getExe pkgs.xorg.xrandr} --listproviders | ${lib.getExe pkgs.gnugrep} -i AMD | ${lib.getExe pkgs.gnused} -n 's/^.*name://p'`" else igpuDriver; else igpuDriver; providerCmdParams = if syncCfg.enable then "\"${gpuProviderName}\" NVIDIA-0" else "NVIDIA-G0 \"${gpuProviderName}\""; if syncCfg.enable then "\"${gpuProviderName}\" NVIDIA-0" else "NVIDIA-G0 \"${gpuProviderName}\""; in lib.optionalString (syncCfg.enable || reverseSyncCfg.enable) '' # Added by nvidia configuration module for Optimus/PRIME. Loading @@ -450,35 +443,35 @@ in { ''; environment.etc = { "nvidia/nvidia-application-profiles-rc" = lib.mkIf nvidia_x11.useProfiles {source = "${nvidia_x11.bin}/share/nvidia/nvidia-application-profiles-rc";}; "nvidia/nvidia-application-profiles-rc" = lib.mkIf nvidia_x11.useProfiles { source = "${nvidia_x11.bin}/share/nvidia/nvidia-application-profiles-rc"; }; # 'nvidia_x11' installs it's files to /run/opengl-driver/... "egl/egl_external_platform.d".source = "/run/opengl-driver/share/egl/egl_external_platform.d/"; }; hardware.opengl = { extraPackages = [ pkgs.nvidia-vaapi-driver ]; extraPackages32 = [ pkgs.pkgsi686Linux.nvidia-vaapi-driver ]; extraPackages = [ pkgs.nvidia-vaapi-driver ]; extraPackages32 = [ pkgs.pkgsi686Linux.nvidia-vaapi-driver ]; }; environment.systemPackages = lib.optional cfg.nvidiaSettings nvidia_x11.settings ++ lib.optional cfg.nvidiaPersistenced nvidia_x11.persistenced ++ lib.optional offloadCfg.enableOffloadCmd (pkgs.writeShellScriptBin "nvidia-offload" '' ++ lib.optional offloadCfg.enableOffloadCmd ( pkgs.writeShellScriptBin "nvidia-offload" '' export __NV_PRIME_RENDER_OFFLOAD=1 export __NV_PRIME_RENDER_OFFLOAD_PROVIDER=NVIDIA-G0 export __GLX_VENDOR_LIBRARY_NAME=nvidia export __VK_LAYER_NV_optimus=NVIDIA_only exec "$@" ''); '' ); systemd.packages = lib.optional cfg.powerManagement.enable nvidia_x11.out; systemd.services = let systemd.services = let nvidiaService = state: { description = "NVIDIA system ${state} actions"; path = [ pkgs.kbd ]; Loading @@ -494,12 +487,16 @@ in { (lib.mkIf cfg.powerManagement.enable { nvidia-suspend = nvidiaService "suspend"; nvidia-hibernate = nvidiaService "hibernate"; nvidia-resume = (nvidiaService "resume") // { nvidia-resume = (nvidiaService "resume") // { before = [ ]; after = ["systemd-suspend.service" "systemd-hibernate.service"]; requiredBy = ["systemd-suspend.service" "systemd-hibernate.service"]; after = [ "systemd-suspend.service" "systemd-hibernate.service" ]; requiredBy = [ "systemd-suspend.service" "systemd-hibernate.service" ]; }; }) (lib.mkIf cfg.nvidiaPersistenced { Loading Loading @@ -534,26 +531,33 @@ in { services.dbus.packages = lib.optional cfg.dynamicBoost.enable nvidia_x11.bin; hardware.firmware = lib.optional cfg.open nvidia_x11.firmware; hardware.firmware = let isOpen = cfg.open; isNewUnfree = lib.versionAtLeast nvidia_x11.version "555"; in lib.optional (isOpen || isNewUnfree) nvidia_x11.firmware; systemd.tmpfiles.rules = [ systemd.tmpfiles.rules = [ # Remove the following log message: # (WW) NVIDIA: Failed to bind sideband socket to # (WW) NVIDIA: '/var/run/nvidia-xdriver-b4f69129' Permission denied # # https://bbs.archlinux.org/viewtopic.php?pid=1909115#p1909115 "d /run/nvidia-xdriver 0770 root users" ] ++ lib.optional (nvidia_x11.persistenced != null && config.virtualisation.docker.enableNvidia) ] ++ lib.optional (nvidia_x11.persistenced != null && config.virtualisation.docker.enableNvidia) "L+ /run/nvidia-docker/extras/bin/nvidia-persistenced - - - - ${nvidia_x11.persistenced}/origBin/nvidia-persistenced"; boot = { extraModulePackages = if cfg.open then [nvidia_x11.open] else [nvidia_x11.bin]; extraModulePackages = if cfg.open then [ nvidia_x11.open ] else [ nvidia_x11.bin ]; # nvidia-uvm is required by CUDA applications. kernelModules = lib.optionals config.services.xserver.enable ["nvidia" "nvidia_modeset" "nvidia_drm"]; kernelModules = lib.optionals config.services.xserver.enable [ "nvidia" "nvidia_modeset" "nvidia_drm" ]; # If requested enable modesetting via kernel parameter. kernelParams = Loading @@ -567,8 +571,7 @@ in { options nvidia "NVreg_DynamicPowerManagement=0x02" ''; }; services.udev.extraRules = lib.optionalString cfg.powerManagement.finegrained ( services.udev.extraRules = lib.optionalString cfg.powerManagement.finegrained ( lib.optionalString (lib.versionOlder config.boot.kernelPackages.kernel.version "5.5") '' # Remove NVIDIA USB xHCI Host Controller devices, if present ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x0c0330", ATTR{remove}="1" Loading @@ -592,9 +595,7 @@ in { }) # Data Center (lib.mkIf (cfg.datacenter.enable) { boot.extraModulePackages = [ nvidia_x11.bin ]; boot.extraModulePackages = [ nvidia_x11.bin ]; systemd = { tmpfiles.rules = Loading @@ -612,7 +613,8 @@ in { serviceConfig = { Type = "forking"; TimeoutStartSec = 240; ExecStart = let ExecStart = let nv-fab-conf = settingsFormat.generate "fabricmanager.conf" cfg.datacenter.settings; in "${lib.getExe nvidia_x11.fabricmanager} -c ${nv-fab-conf}"; Loading Loading @@ -640,5 +642,6 @@ in { lib.optional cfg.datacenter.enable nvidia_x11.fabricmanager ++ lib.optional cfg.nvidiaPersistenced nvidia_x11.persistenced; }) ]); ] ); }
pkgs/os-specific/linux/nvidia-x11/default.nix +6 −8 Original line number Diff line number Diff line Loading @@ -51,14 +51,12 @@ rec { }); beta = selectHighestVersion latest (generic { version = "550.40.07"; sha256_64bit = "sha256-KYk2xye37v7ZW7h+uNJM/u8fNf7KyGTZjiaU03dJpK0="; sha256_aarch64 = "sha256-AV7KgRXYaQGBFl7zuRcfnTGr8rS5n13nGUIe3mJTXb4="; openSha256 = "sha256-mRUTEWVsbjq+psVe+kAT6MjyZuLkG2yRDxCMvDJRL1I="; settingsSha256 = "sha256-c30AQa4g4a1EHmaEu1yc05oqY01y+IusbBuq+P6rMCs="; persistencedSha256 = "sha256-11tLSY8uUIl4X/roNnxf5yS2PQvHvoNjnd2CB67e870="; patches = [ rcu_patch ]; version = "555.42.02"; sha256_64bit = "sha256-k7cI3ZDlKp4mT46jMkLaIrc2YUx1lh1wj/J4SVSHWyk="; sha256_aarch64 = "sha256-ekx0s0LRxxTBoqOzpcBhEKIj/JnuRCSSHjtwng9qAc0="; openSha256 = "sha256-3/eI1VsBzuZ3Y6RZmt3Q5HrzI2saPTqUNs6zPh5zy6w="; settingsSha256 = "sha256-rtDxQjClJ+gyrCLvdZlT56YyHQ4sbaL+d5tL4L4VfkA="; persistencedSha256 = "sha256-3ae31/egyMKpqtGEqgtikWcwMwfcqMv2K4MVFa70Bqs="; }); # Vulkan developer beta driver Loading