nixos/nvidia: add branch option

This commit is contained in:
ccicnce113424
2026-04-27 02:36:37 +08:00
parent 75c1afae1d
commit dd7a671658
+57 -7
View File
@@ -6,10 +6,12 @@
}:
let
nvidiaEnabled = lib.elem "nvidia" config.services.xserver.videoDrivers;
nvidia_x11 = if nvidiaEnabled || cfg.datacenter.enable then cfg.package else null;
nvidia_x11 = if cfg.enabled then cfg.package else null;
cfg = config.hardware.nvidia;
inherit (config.boot.kernelPackages) nvidiaPackages;
useOpenModules = cfg.open == true;
pCfg = cfg.prime;
@@ -27,7 +29,7 @@ in
enabled = lib.mkOption {
readOnly = true;
type = lib.types.bool;
default = nvidia_x11 != null;
default = nvidiaEnabled || cfg.datacenter.enable;
defaultText = lib.literalMD "`true` if NVIDIA support is enabled";
description = "True if NVIDIA support is enabled";
};
@@ -296,15 +298,63 @@ in
It also drastically increases the time the driver needs to clock down after load
'';
package = lib.mkOption {
default =
config.boot.kernelPackages.nvidiaPackages."${if cfg.datacenter.enable then "dc" else "stable"}";
branch = lib.mkOption {
type =
(lib.types.enum (builtins.attrNames (lib.filterAttrs (_: lib.isDerivation) nvidiaPackages)))
// {
description = "one of the available driver branches in `pkgs/os-specific/linux/nvidia-x11/default.nix`";
};
default = if cfg.datacenter.enable then "dc" else "stable";
defaultText = lib.literalExpression ''
config.boot.kernelPackages.nvidiaPackages."\$\{if cfg.datacenter.enable then "dc" else "stable"}"
if config.hardware.nvidia.datacenter.enable then "dc" else "stable"
'';
example = "config.boot.kernelPackages.nvidiaPackages.legacy_470";
example = "bleeding_edge";
description = ''
The branch of the NVIDIA driver to use.
Note: if {option}`hardware.nvidia.package` is set, it overrides this option.
Commonly interesting branches for end users:
- production, new_feature, beta:
NVIDIA's official production / new feature / beta release branches.
- stable:
The default; the highest stable version.
- latest:
Whichever is newer of `production` and `new_feature`.
- bleeding_edge:
Whichever is newer of `latest` and `beta`.
- legacy_580:
The long-lived 580 series (LTSB), for GPUs that newer driver branches
no longer support (often Maxwell through Volta; roughly GeForce GTX 9xx
through 10xx, plus rare Volta cards like TITAN V).
- vulkan_beta:
The Vulkan developer beta driver, for users interested in testing new
Vulkan features.
'';
};
package = lib.mkOption {
type = lib.types.package;
default = nvidiaPackages.${cfg.branch};
defaultText = lib.literalExpression "config.boot.kernelPackages.nvidiaPackages.\${config.hardware.nvidia.branch}";
example = lib.literalExpression "config.boot.kernelPackages.nvidiaPackages.legacy_470";
description = ''
The NVIDIA driver package to use.
Prefer using {option}`hardware.nvidia.branch` when possible.
If you set this option, it is recommended to pick a package from
`config.boot.kernelPackages.nvidiaPackages` so the driver build matches
your configured kernel.
For custom versions, you can use `nvidiaPackages.mkDriver`; see
`pkgs/os-specific/linux/nvidia-x11/default.nix` for examples.
'';
};