refactor(nvidia): make global module for enabling nvidia easily
All checks were successful
Discord / discord commits (push) Has been skipped
All checks were successful
Discord / discord commits (push) Has been skipped
This commit is contained in:
parent
5ea6f8ef99
commit
a13b221e49
7 changed files with 94 additions and 80 deletions
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
../modules/arion
|
../modules/arion
|
||||||
../modules/borgbackup
|
../modules/borgbackup
|
||||||
|
../modules/nvidia.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
nixpkgs = {
|
nixpkgs = {
|
||||||
|
|
|
@ -15,7 +15,6 @@ in {
|
||||||
|
|
||||||
./modules/gpu-replay.nix
|
./modules/gpu-replay.nix
|
||||||
./modules/nix-gaming.nix
|
./modules/nix-gaming.nix
|
||||||
./modules/nvidia.nix
|
|
||||||
];
|
];
|
||||||
|
|
||||||
vars = {
|
vars = {
|
||||||
|
|
|
@ -75,4 +75,11 @@
|
||||||
qemu
|
qemu
|
||||||
virtiofsd
|
virtiofsd
|
||||||
];
|
];
|
||||||
|
|
||||||
|
nvidia = {
|
||||||
|
enable = true;
|
||||||
|
enableNvidiaSettings = true;
|
||||||
|
enableWayland = true;
|
||||||
|
enableCUDA = true;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,9 +50,6 @@
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
in {
|
in {
|
||||||
# Allow CUDA on boot
|
|
||||||
boot.kernelModules = ["nvidia-uvm"];
|
|
||||||
|
|
||||||
security.wrappers = {
|
security.wrappers = {
|
||||||
gpu-screen-recorder = {
|
gpu-screen-recorder = {
|
||||||
owner = "root";
|
owner = "root";
|
||||||
|
|
|
@ -1,40 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
# FIXME: move this to hardware-config?
|
|
||||||
|
|
||||||
# Enable OpenGL
|
|
||||||
hardware.opengl = {
|
|
||||||
enable = true;
|
|
||||||
driSupport = true;
|
|
||||||
driSupport32Bit = true;
|
|
||||||
|
|
||||||
extraPackages = with pkgs; [
|
|
||||||
vaapiVdpau
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
# Load nvidia driver for Xorg and Wayland
|
|
||||||
services.xserver.videoDrivers = ["nvidia"];
|
|
||||||
|
|
||||||
hardware.nvidia = {
|
|
||||||
modesetting.enable = true;
|
|
||||||
|
|
||||||
# Nvidia power management. Experimental, and can cause sleep/suspend to fail.
|
|
||||||
powerManagement.enable = false;
|
|
||||||
# Fine-grained power management. Turns off GPU when not in use.
|
|
||||||
# Experimental and only works on modern Nvidia GPUs (Turing or newer).
|
|
||||||
powerManagement.finegrained = false;
|
|
||||||
|
|
||||||
open = true;
|
|
||||||
|
|
||||||
# Enable the Nvidia settings menu,
|
|
||||||
# accessible via `nvidia-settings`.
|
|
||||||
nvidiaSettings = true;
|
|
||||||
|
|
||||||
# Vulkan is much more stable in Wayland
|
|
||||||
package = config.boot.kernelPackages.nvidiaPackages.vulkan_beta;
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,14 +1,13 @@
|
||||||
{
|
{
|
||||||
config,
|
config,
|
||||||
modulesPath,
|
modulesPath,
|
||||||
pkgs,
|
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
nixpkgs.hostPlatform = "x86_64-linux";
|
nixpkgs.hostPlatform = "x86_64-linux";
|
||||||
imports = [(modulesPath + "/installer/scan/not-detected.nix")];
|
imports = [(modulesPath + "/installer/scan/not-detected.nix")];
|
||||||
|
|
||||||
boot = {
|
boot = {
|
||||||
kernelModules = ["kvm-intel" "nvidia-uvm"];
|
kernelModules = ["kvm-intel"];
|
||||||
|
|
||||||
initrd.availableKernelModules = [
|
initrd.availableKernelModules = [
|
||||||
"xhci_pci"
|
"xhci_pci"
|
||||||
|
@ -47,40 +46,8 @@
|
||||||
|
|
||||||
hardware.cpu.intel.updateMicrocode = config.hardware.enableRedistributableFirmware;
|
hardware.cpu.intel.updateMicrocode = config.hardware.enableRedistributableFirmware;
|
||||||
|
|
||||||
# NVIDIA settings
|
nvidia = {
|
||||||
services.xserver.videoDrivers = ["nvidia"];
|
|
||||||
|
|
||||||
hardware.opengl = {
|
|
||||||
enable = true;
|
enable = true;
|
||||||
driSupport = true;
|
enableCUDA = true;
|
||||||
driSupport32Bit = true;
|
|
||||||
|
|
||||||
extraPackages = with pkgs; [
|
|
||||||
vaapiVdpau
|
|
||||||
libvdpau-va-gl
|
|
||||||
nvidia-vaapi-driver
|
|
||||||
];
|
|
||||||
extraPackages32 = with pkgs; [vaapiVdpau];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
hardware.nvidia = {
|
|
||||||
modesetting.enable = true;
|
|
||||||
|
|
||||||
powerManagement.enable = false;
|
|
||||||
powerManagement.finegrained = false;
|
|
||||||
open = false;
|
|
||||||
nvidiaSettings = false;
|
|
||||||
|
|
||||||
# Vulkan is much more stable in Wayland
|
|
||||||
package = config.boot.kernelPackages.nvidiaPackages.stable;
|
|
||||||
};
|
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
libva-utils
|
|
||||||
nvidia-vaapi-driver
|
|
||||||
nvtop-nvidia
|
|
||||||
pciutils
|
|
||||||
vdpauinfo
|
|
||||||
cudaPackages.cudatoolkit
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
83
modules/nvidia.nix
Normal file
83
modules/nvidia.nix
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
inherit (lib) mdDoc mkIf mkEnableOption mkOption optionals types;
|
||||||
|
|
||||||
|
cfg = config.nvidia;
|
||||||
|
in {
|
||||||
|
options.nvidia = {
|
||||||
|
enable = mkEnableOption (mdDoc "nvidia");
|
||||||
|
|
||||||
|
enableNvidiaSettings = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
enableWayland = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
enableCUDA = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
# Enable OpenGL
|
||||||
|
hardware.opengl = {
|
||||||
|
enable = true;
|
||||||
|
driSupport = true;
|
||||||
|
driSupport32Bit = true;
|
||||||
|
|
||||||
|
extraPackages = with pkgs; [
|
||||||
|
vaapiVdpau
|
||||||
|
libvdpau-va-gl
|
||||||
|
nvidia-vaapi-driver
|
||||||
|
];
|
||||||
|
extraPackages32 = with pkgs; [vaapiVdpau];
|
||||||
|
};
|
||||||
|
|
||||||
|
services.xserver.videoDrivers = ["nvidia"];
|
||||||
|
|
||||||
|
hardware.nvidia = {
|
||||||
|
modesetting.enable = true;
|
||||||
|
|
||||||
|
# Enable the Nvidia settings menu,
|
||||||
|
# accessible via `nvidia-settings`.
|
||||||
|
nvidiaSettings = cfg.enableNvidiaSettings;
|
||||||
|
|
||||||
|
# Nvidia power management. Experimental, and can cause sleep/suspend to fail.
|
||||||
|
powerManagement = {
|
||||||
|
enable = false;
|
||||||
|
|
||||||
|
# Fine-grained power management. Turns off GPU when not in use.
|
||||||
|
# Experimental and only works on modern Nvidia GPUs (Turing or newer).
|
||||||
|
finegrained = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
open = cfg.enableWayland;
|
||||||
|
|
||||||
|
package = with config.boot.kernelPackages.nvidiaPackages;
|
||||||
|
if cfg.enableWayland
|
||||||
|
# Vulkan is much more stable in Wayland
|
||||||
|
then vulkan_beta
|
||||||
|
else stable;
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; ([
|
||||||
|
libva-utils
|
||||||
|
nvidia-vaapi-driver
|
||||||
|
nvtop-nvidia
|
||||||
|
pciutils
|
||||||
|
vdpauinfo
|
||||||
|
]
|
||||||
|
++ optionals cfg.enableCUDA [cudaPackages.cudatoolkit]);
|
||||||
|
|
||||||
|
boot.kernelModules = optionals cfg.enableCUDA ["nvidia-uvm"];
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in a new issue