Merge pull request #99323 from eadwu/nvidia/hardware.nvidia.package
nixos: hardware.nvidia.package option for selecting nvidia package
This commit is contained in:
commit
161b9b2436
|
@ -5,36 +5,17 @@
|
||||||
with lib;
|
with lib;
|
||||||
|
|
||||||
let
|
let
|
||||||
|
nvidia_x11 = let
|
||||||
drivers = config.services.xserver.videoDrivers;
|
drivers = config.services.xserver.videoDrivers;
|
||||||
|
isDeprecated = str: (hasPrefix "nvidia" str) && (str != "nvidia");
|
||||||
# FIXME: should introduce an option like
|
hasDeprecated = drivers: any isDeprecated drivers;
|
||||||
# ‘hardware.video.nvidia.package’ for overriding the default NVIDIA
|
in if (hasDeprecated drivers) then
|
||||||
# driver.
|
throw ''
|
||||||
nvidiaForKernel = kernelPackages:
|
Selecting an nvidia driver has been modified for NixOS 19.03. The version is now set using `hardware.nvidia.package`.
|
||||||
if elem "nvidia" drivers then
|
''
|
||||||
kernelPackages.nvidia_x11
|
else if (elem "nvidia" drivers) then cfg.package else null;
|
||||||
else if elem "nvidiaBeta" drivers then
|
|
||||||
kernelPackages.nvidia_x11_beta
|
|
||||||
else if elem "nvidiaVulkanBeta" drivers then
|
|
||||||
kernelPackages.nvidia_x11_vulkan_beta
|
|
||||||
else if elem "nvidiaLegacy304" drivers then
|
|
||||||
kernelPackages.nvidia_x11_legacy304
|
|
||||||
else if elem "nvidiaLegacy340" drivers then
|
|
||||||
kernelPackages.nvidia_x11_legacy340
|
|
||||||
else if elem "nvidiaLegacy390" drivers then
|
|
||||||
kernelPackages.nvidia_x11_legacy390
|
|
||||||
else null;
|
|
||||||
|
|
||||||
nvidia_x11 = nvidiaForKernel config.boot.kernelPackages;
|
|
||||||
nvidia_libs32 =
|
|
||||||
if versionOlder nvidia_x11.version "391" then
|
|
||||||
((nvidiaForKernel pkgs.pkgsi686Linux.linuxPackages).override { libsOnly = true; kernel = null; }).out
|
|
||||||
else
|
|
||||||
(nvidiaForKernel config.boot.kernelPackages).lib32;
|
|
||||||
|
|
||||||
enabled = nvidia_x11 != null;
|
enabled = nvidia_x11 != null;
|
||||||
|
|
||||||
cfg = config.hardware.nvidia;
|
cfg = config.hardware.nvidia;
|
||||||
|
|
||||||
pCfg = cfg.prime;
|
pCfg = cfg.prime;
|
||||||
|
@ -170,6 +151,16 @@ in
|
||||||
GPUs stay awake even during headless mode.
|
GPUs stay awake even during headless mode.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
hardware.nvidia.package = lib.mkOption {
|
||||||
|
type = lib.types.package;
|
||||||
|
default = config.boot.kernelPackages.nvidiaPackages.stable;
|
||||||
|
defaultText = "config.boot.kernelPackages.nvidiaPackages.stable";
|
||||||
|
description = ''
|
||||||
|
The NVIDIA X11 derivation to use.
|
||||||
|
'';
|
||||||
|
example = "config.boot.kernelPackages.nvidiaPackages.legacy340";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config = let
|
config = let
|
||||||
|
@ -271,9 +262,9 @@ in
|
||||||
};
|
};
|
||||||
|
|
||||||
hardware.opengl.package = mkIf (!offloadCfg.enable) nvidia_x11.out;
|
hardware.opengl.package = mkIf (!offloadCfg.enable) nvidia_x11.out;
|
||||||
hardware.opengl.package32 = mkIf (!offloadCfg.enable) nvidia_libs32;
|
hardware.opengl.package32 = mkIf (!offloadCfg.enable) nvidia_x11.lib32;
|
||||||
hardware.opengl.extraPackages = optional offloadCfg.enable nvidia_x11.out;
|
hardware.opengl.extraPackages = optional offloadCfg.enable nvidia_x11.out;
|
||||||
hardware.opengl.extraPackages32 = optional offloadCfg.enable nvidia_libs32;
|
hardware.opengl.extraPackages32 = optional offloadCfg.enable nvidia_x11.lib32;
|
||||||
|
|
||||||
environment.systemPackages = [ nvidia_x11.bin nvidia_x11.settings ]
|
environment.systemPackages = [ nvidia_x11.bin nvidia_x11.settings ]
|
||||||
++ optionals nvidiaPersistencedEnabled [ nvidia_x11.persistenced ];
|
++ optionals nvidiaPersistencedEnabled [ nvidia_x11.persistenced ];
|
||||||
|
|
|
@ -1,11 +1,17 @@
|
||||||
{ lib, callPackage, fetchpatch, fetchurl, stdenv }:
|
{ lib, callPackage, fetchpatch, fetchurl, stdenv, pkgsi686Linux }:
|
||||||
|
|
||||||
let
|
let
|
||||||
|
generic = args: let
|
||||||
generic = args:
|
imported = import ./generic.nix args;
|
||||||
if ((!lib.versionOlder args.version "391")
|
in if ((!lib.versionOlder args.version "391")
|
||||||
&& stdenv.hostPlatform.system != "x86_64-linux") then null
|
&& stdenv.hostPlatform.system != "x86_64-linux") then null
|
||||||
else callPackage (import ./generic.nix args) { };
|
else callPackage imported {
|
||||||
|
lib32 = (pkgsi686Linux.callPackage imported {
|
||||||
|
libsOnly = true;
|
||||||
|
kernel = null;
|
||||||
|
}).out;
|
||||||
|
};
|
||||||
|
|
||||||
kernel = callPackage # a hacky way of extracting parameters from callPackage
|
kernel = callPackage # a hacky way of extracting parameters from callPackage
|
||||||
({ kernel, libsOnly ? false }: if libsOnly then { } else kernel) { };
|
({ kernel, libsOnly ? false }: if libsOnly then { } else kernel) { };
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,8 @@
|
||||||
, # don't include the bundled 32-bit libraries on 64-bit platforms,
|
, # don't include the bundled 32-bit libraries on 64-bit platforms,
|
||||||
# even if it’s in downloaded binary
|
# even if it’s in downloaded binary
|
||||||
disable32Bit ? false
|
disable32Bit ? false
|
||||||
|
# 32 bit libs only version of this package
|
||||||
|
, lib32 ? null
|
||||||
}:
|
}:
|
||||||
|
|
||||||
with lib;
|
with lib;
|
||||||
|
@ -93,6 +95,8 @@ let
|
||||||
};
|
};
|
||||||
persistenced = mapNullable (hash: callPackage (import ./persistenced.nix self hash) { }) persistencedSha256;
|
persistenced = mapNullable (hash: callPackage (import ./persistenced.nix self hash) { }) persistencedSha256;
|
||||||
inherit persistencedVersion settingsVersion;
|
inherit persistencedVersion settingsVersion;
|
||||||
|
} // optionalAttrs (!i686bundled) {
|
||||||
|
inherit lib32;
|
||||||
};
|
};
|
||||||
|
|
||||||
meta = with lib; {
|
meta = with lib; {
|
||||||
|
|
Loading…
Reference in a new issue