From f107cf19c7e62726ae367b0d9168eaebbaf2e3ec Mon Sep 17 00:00:00 2001 From: blake Date: Wed, 5 Nov 2025 18:24:30 -0600 Subject: [PATCH] update nvidia module to graphics and add support for amd and intel --- hosts/nixos/snowbelle/configuration.nix | 5 +- hosts/nixos/yveltal/configuration.nix | 4 ++ modules/system/default.nix | 2 +- modules/system/docker/default.nix | 3 + modules/system/graphics/default.nix | 83 +++++++++++++++++++++++++ modules/system/nvidia/default.nix | 37 ----------- 6 files changed, 95 insertions(+), 39 deletions(-) create mode 100644 modules/system/graphics/default.nix delete mode 100644 modules/system/nvidia/default.nix diff --git a/hosts/nixos/snowbelle/configuration.nix b/hosts/nixos/snowbelle/configuration.nix index 09d2b04..d032323 100644 --- a/hosts/nixos/snowbelle/configuration.nix +++ b/hosts/nixos/snowbelle/configuration.nix @@ -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; diff --git a/hosts/nixos/yveltal/configuration.nix b/hosts/nixos/yveltal/configuration.nix index fc43eec..125d7e4 100644 --- a/hosts/nixos/yveltal/configuration.nix +++ b/hosts/nixos/yveltal/configuration.nix @@ -22,6 +22,10 @@ yubikey.enable = true; tailscale.enable = true; syncthing.enable = true; + graphics = { + enable = true; + vendor = "intel"; + }; }; # fix power buttons diff --git a/modules/system/default.nix b/modules/system/default.nix index aa6ac45..755bc60 100644 --- a/modules/system/default.nix +++ b/modules/system/default.nix @@ -14,7 +14,7 @@ ./vpns ./vpn-confinement ./syncthing - ./nvidia + ./graphics ]; system.ssh.enable = lib.mkDefault true; diff --git a/modules/system/docker/default.nix b/modules/system/docker/default.nix index 4bc3531..a529e5c 100644 --- a/modules/system/docker/default.nix +++ b/modules/system/docker/default.nix @@ -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; }; diff --git a/modules/system/graphics/default.nix b/modules/system/graphics/default.nix new file mode 100644 index 0000000..2e7b553 --- /dev/null +++ b/modules/system/graphics/default.nix @@ -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; + }) + ]); +} diff --git a/modules/system/nvidia/default.nix b/modules/system/nvidia/default.nix deleted file mode 100644 index 86b0bf8..0000000 --- a/modules/system/nvidia/default.nix +++ /dev/null @@ -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; - }; -}