Merge pull request #99323 from eadwu/nvidia/hardware.nvidia.package

nixos: hardware.nvidia.package option for selecting nvidia package
This commit is contained in:
Dmitry Kalinkin 2021-01-30 22:08:37 -05:00 committed by GitHub
commit 161b9b2436
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 36 additions and 35 deletions

View file

@ -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 ];

View file

@ -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) { };

View file

@ -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 its in downloaded binary # even if its 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; {