update nvidia module to graphics and add support for amd and intel

This commit is contained in:
2025-11-05 18:24:30 -06:00
parent f5bc0400ae
commit f107cf19c7
6 changed files with 95 additions and 39 deletions

View File

@@ -25,7 +25,10 @@ in
sops.enable = true;
podman.enable = true;
yubikey.enable = true;
nvidia.enable = true;
graphics = {
enable = true;
vendor = "nvidia";
};
};
holocron = {
syncthing.enable = true;

View File

@@ -22,6 +22,10 @@
yubikey.enable = true;
tailscale.enable = true;
syncthing.enable = true;
graphics = {
enable = true;
vendor = "intel";
};
};
# fix power buttons

View File

@@ -14,7 +14,7 @@
./vpns
./vpn-confinement
./syncthing
./nvidia
./graphics
];
system.ssh.enable = lib.mkDefault true;

View File

@@ -9,8 +9,11 @@ in
};
config = lib.mkIf cfg.enable {
virtualisation.docker = {
enable = true;
daemon.settings.features.cdi = true;
rootless.daemon.settings.features.cdi = true;
daemon.settings = {
experimental = true;
};

View File

@@ -0,0 +1,83 @@
{
pkgs,
config,
lib,
...
}: let
cfg = config.system.graphics;
in {
options.system.nvidia = {
enable = lib.mkEnableOption "enables nvidia";
vendor = lib.mkOption {
type = lib.types.enum ["amd" "nvidia" "intel"];
default = "intel";
description = "set the vendor of your graphics device";
};
};
config = lib.mkIf cfg.enable (lib.mkMerge [
{
hardware.graphics.enable = true;
hardware.graphics.enable32Bit = true;
}
(lib.mkIf (cfg.vendor == "intel") {
services.xserver.videoDrivers = ["modesetting"];
hardware.graphics.extraPackages = with pkgs; [
# Required for modern Intel GPUs (Xe iGPU and ARC)
intel-media-driver # VA-API (iHD) userspace
vpl-gpu-rt # oneVPL (QSV) runtime
# Optional (compute / tooling):
intel-compute-runtime # OpenCL (NEO) + Level Zero for Arc/Xe
];
environment.sessionVariables = {
LIBVA_DRIVER_NAME = "iHD"; # Prefer the modern iHD backend
};
})
(lib.mkIf (cfg.vendor == "amd") {
boot.initrd.kernelModules = ["amdgpu"];
services.xserver.videoDrivers = ["amdgpu"];
# userspace tools
environment.systemPackages = with pkgs; [
radeontop
];
# enable amd vulkan (program will choose this or regular)
hardware.graphics.extraPackages = with pkgs; [
amdvlk
rocmPackages.clr.icd # enable open cl (compute framework like cuda)
];
# ^ but 32 bit
hardware.graphics.extraPackages32 = with pkgs; [
driversi686Linux.amdvlk
];
# make hip work (extension on cli.icd ^)
systemd.tmpfiles.rules = [
"L+ /opt/rocm/hip - - - - ${pkgs.rocmPackages.clr}"
];
})
(lib.mkIf (cfg.vendor == "nvidia") {
boot.kernelModules = ["nvidia" "nvidia_modeset" "nvidia_uvm" "nvidia_drm"];
services.xserver.videoDrivers = ["nvidia"];
# enable nvidia proprietary driver
hardware.nvidia = {
modesetting.enable = true; # required
open = false; # use proprietary driver
nvidiaSettings = true; # no shit
powerManagement.enable = false; # can cause sleep issues
package = config.boot.kernelPackages.nvidiaPackages.stable;
};
# enable docker gpu passthrough
hardware.nvidia-container-toolkit.enable = true;
})
]);
}

View File

@@ -1,37 +0,0 @@
{
pkgs,
config,
lib,
...
}: let
cfg = config.system.nvidia;
in {
options.system.nvidia = {
enable = lib.mkEnableOption "enables nvidia";
};
config = lib.mkIf cfg.enable {
services.xserver.videoDrivers = ["nvidia"];
boot.kernelModules = ["nvidia" "nvidia_modeset" "nvidia_uvm" "nvidia_drm"];
# boot.kernelModules = [ "nvidia" ];
hardware.graphics = {
enable = true;
enable32Bit = true;
};
# enable nvidia proprietary driver
hardware.nvidia = {
modesetting.enable = true; # required
open = false; # use proprietary driver
nvidiaSettings = true; # no shit
powerManagement.enable = false; # can cause sleep issues
package = config.boot.kernelPackages.nvidiaPackages.stable;
};
# enable docker gpu passthrough
hardware.nvidia-container-toolkit.enable = true;
virtualisation.docker.daemon.settings.features.cdi = true;
virtualisation.docker.rootless.daemon.settings.features.cdi = true;
};
}