From 37ff0a5320df4a8039442ffeb33be1ed620a9428 Mon Sep 17 00:00:00 2001 From: Antoine Viallon Date: Mon, 28 Feb 2022 22:53:09 +0100 Subject: [PATCH] [Hardware/Nvidia] Add better NVidia GPU support, including proprietary drivers --- hardening.nix | 2 +- hardware/nvidia.nix | 33 ++++++++++++++++++++++++++++++++- hardware/nvidia/default.nix | 6 ++++++ hardware/nvidia/vgpu.nix | 19 +++++++++++++++++++ 4 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 hardware/nvidia/default.nix create mode 100644 hardware/nvidia/vgpu.nix diff --git a/hardening.nix b/hardening.nix index 104ad8e..343e0d6 100644 --- a/hardening.nix +++ b/hardening.nix @@ -75,7 +75,7 @@ in }; security.allowUserNamespaces = mkDefault true; - boot.blacklistedKernelModules = mkForce [ ]; +# boot.blacklistedKernelModules = mkForce [ ]; nix.allowedUsers = mkIf cfg.hardcore [ "@wheel" ]; diff --git a/hardware/nvidia.nix b/hardware/nvidia.nix index 7d03796..beb7c2f 100644 --- a/hardware/nvidia.nix +++ b/hardware/nvidia.nix @@ -4,7 +4,38 @@ let hardwareCfg = config.aviallon.hardware; in { + imports = [ + ./nvidia + ]; + + options.aviallon.hardware.useProprietary = mkEnableOption "nvidia proprietary drivers"; + config = mkIf (hardwareCfg.gpuVendor == "nvidia") { - boot.initrd.kernelModules = [ "nouveau" ]; + boot.initrd.kernelModules = if hardwareCfg.useProprietary then [ + "nvidia" + "nvidia_drm" + "nvidia_uvm" + "nvidia_modeset" + ] else [ "nouveau" ]; + # boot.blacklistedKernelModules = optional hardwareCfg.useProprietary "nouveau"; + services.xserver.videoDrivers = optional hardwareCfg.useProprietary "nvidia"; + hardware.opengl.driSupport32Bit = true; + hardware.nvidia = { + powerManagement.enable = true; + modesetting.enable = true; + }; + + nixpkgs.config.allowUnfreePredicate = mkIf (hardwareCfg.useProprietary) (pkg: builtins.elem (lib.getName pkg) [ + "nvidia-x11" + ]); + + hardware.opengl.extraPackages = with pkgs; [ + libvdpau-va-gl + vaapiVdpau + ]; + hardware.opengl.extraPackages32 = with pkgs.pkgsi686Linux; [ + libvdpau-va-gl + vaapiVdpau + ]; }; } diff --git a/hardware/nvidia/default.nix b/hardware/nvidia/default.nix new file mode 100644 index 0000000..7a63d84 --- /dev/null +++ b/hardware/nvidia/default.nix @@ -0,0 +1,6 @@ +{config, ...}: +{ + imports = [ + ./vgpu.nix + ]; +} diff --git a/hardware/nvidia/vgpu.nix b/hardware/nvidia/vgpu.nix new file mode 100644 index 0000000..8471655 --- /dev/null +++ b/hardware/nvidia/vgpu.nix @@ -0,0 +1,19 @@ +{config, pkgs, lib, ...}: +with lib; +let + cfg = config.aviallon.hardware; + useVgpu = (cfg.useProprietary && + (cfg.gpuVendor == "nvidia") && + (versionOlder config.boot.kernelPackages.kernel.version "5.10")); +in +{ + imports = [ + + # (optional useVgpu (builtins.fetchTarball "https://github.com/danielfullmer/nixos-nvidia-vgpu/archive/master.tar.gz")) + ]; + + config = mkIf useVgpu { + hardware.nvidia.vgpu.enable = true; # Enable NVIDIA KVM vGPU + GRID driver + hardware.nvidia.vgpu.unlock.enable = true; # Unlock vGPU functionality on consumer cards using DualCoder/vgpu_unlock project. + }; +}