Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 21 additions & 30 deletions nixos/modules/hardware/video/nvidia.nix
Original file line number Diff line number Diff line change
Expand Up @@ -5,36 +5,17 @@
with lib;

let

drivers = config.services.xserver.videoDrivers;

# FIXME: should introduce an option like
# ‘hardware.video.nvidia.package’ for overriding the default NVIDIA
# driver.
nvidiaForKernel = kernelPackages:
if elem "nvidia" drivers then
kernelPackages.nvidia_x11
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;
nvidia_x11 = let
drivers = config.services.xserver.videoDrivers;
isDeprecated = str: (hasPrefix "nvidia" str) && (str != "nvidia");
hasDeprecated = drivers: any isDeprecated drivers;
in if (hasDeprecated drivers) then
throw ''
Selecting an nvidia driver has been modified for NixOS 19.03. The version is now set using `hardware.nvidia.package`.
''
else if (elem "nvidia" drivers) then cfg.package else null;

enabled = nvidia_x11 != null;

cfg = config.hardware.nvidia;

pCfg = cfg.prime;
Expand Down Expand Up @@ -151,6 +132,16 @@ in
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 = mkIf enabled {
Expand Down Expand Up @@ -230,9 +221,9 @@ in
};

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.extraPackages32 = optional offloadCfg.enable nvidia_libs32;
hardware.opengl.extraPackages32 = optional offloadCfg.enable nvidia_x11.lib32;

environment.systemPackages = [ nvidia_x11.bin nvidia_x11.settings ]
++ optionals nvidiaPersistencedEnabled [ nvidia_x11.persistenced ];
Expand Down
16 changes: 11 additions & 5 deletions pkgs/os-specific/linux/nvidia-x11/default.nix
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
{ lib, callPackage, fetchpatch, fetchurl, stdenv }:
{ lib, callPackage, fetchpatch, fetchurl, stdenv, pkgsi686Linux }:

let

generic = args:
if ((!lib.versionOlder args.version "391")
generic = args: let
imported = import ./generic.nix args;
in if ((!lib.versionOlder args.version "391")
&& 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, libsOnly ? false }: if libsOnly then { } else kernel) { };

Expand Down
4 changes: 4 additions & 0 deletions pkgs/os-specific/linux/nvidia-x11/generic.nix
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
, # don't include the bundled 32-bit libraries on 64-bit platforms,
# even if it’s in downloaded binary
disable32Bit ? false
# 32 bit libs only version of this package
, lib32 ? null
}:

with stdenv.lib;
Expand Down Expand Up @@ -93,6 +95,8 @@ let
};
persistenced = mapNullable (hash: callPackage (import ./persistenced.nix self hash) { }) persistencedSha256;
inherit persistencedVersion settingsVersion;
} // optionalAttrs (!i686bundled) {
inherit lib32;
};

meta = with lib; {
Expand Down