From 8f229750b0ad6ab56f7b52783103f56d1d57b3b4 Mon Sep 17 00:00:00 2001 From: ooks-io Date: Mon, 8 Apr 2024 15:04:27 +1200 Subject: [PATCH] feat(hardware): add gpu modules for intel/amd/nvidia --- system/modules/hardware/gpu/amd/default.nix | 29 +++++++++++ system/modules/hardware/gpu/default.nix | 19 +++++++ system/modules/hardware/gpu/intel/default.nix | 37 ++++++++++++++ .../modules/hardware/gpu/nvidia/default.nix | 51 +++++++++++++++++++ 4 files changed, 136 insertions(+) create mode 100644 system/modules/hardware/gpu/amd/default.nix create mode 100644 system/modules/hardware/gpu/default.nix create mode 100644 system/modules/hardware/gpu/intel/default.nix create mode 100644 system/modules/hardware/gpu/nvidia/default.nix diff --git a/system/modules/hardware/gpu/amd/default.nix b/system/modules/hardware/gpu/amd/default.nix new file mode 100644 index 0000000..a9e641b --- /dev/null +++ b/system/modules/hardware/gpu/amd/default.nix @@ -0,0 +1,29 @@ +{ config, lib, pkgs, ... }: + +let + gpu = config.systemModules.hardware.gpu; + inherit (lib) mkIf mkDefault; + inherit (builtins) elem; +in + +{ + config = mkIf (elem gpu.type ["amd"]) { + hardware.opengl = { + extraPackages = with pkgs; [ + vulkan-tools + vulkan-loader + vulkan-extension-layer + vulkan-validation-layer + amdvlk + mesa + ]; + extraPackages32 = [ pkgs.driversi686Linux.amdvlk ]; + boot = { + initrd.kernelModules = ["amdgpu"]; + kernelModules = ["amdgpu"]; + }; + environment.systemPackages = [ pkgs.nvtopPackages.amd ]; + services.xserver.videoDrivers = mkDefault ["modesetting" "amdgpu"]; + }; + }; +} diff --git a/system/modules/hardware/gpu/default.nix b/system/modules/hardware/gpu/default.nix new file mode 100644 index 0000000..ea0accd --- /dev/null +++ b/system/modules/hardware/gpu/default.nix @@ -0,0 +1,19 @@ +{ lib, ... }: + +let + inherit (lib) types mkOption; +in + +{ + imports = [ + ./amd + ./intel + ./nvidia + ]; + + options.systemModules.hardware.gpu.type = mkOption { + type = with types; nullOr (enum ["intel" "amd" "nvidia"]); + default = null; + description = "Type of gpu system module to use"; + }; +} diff --git a/system/modules/hardware/gpu/intel/default.nix b/system/modules/hardware/gpu/intel/default.nix new file mode 100644 index 0000000..e532170 --- /dev/null +++ b/system/modules/hardware/gpu/intel/default.nix @@ -0,0 +1,37 @@ +{ config, lib, pkgs, ... }: + +let + gpu = config.systemModules.hardware.gpu; + inherit (lib) mkIf; + inherit (builtins) elem; + + vaapiIntel = pkgs.vaapiIntel.override {enableHypbridCodec = true;}; +in + +{ + config = mkIf (elem gpu.type ["intel"]) { + + services.xserver.videoDrivers = ["modesetting"]; + hardware.opengl = { + extraPackages = with pkgs; [ + vaapiIntel + vaapiVdpau + libvdpau-va-gl + + intel-compute-runtime + intel-media-driver + ]; + extraPackages32 = with pkgs.pkgsi686Linux; [ + vaapiIntel + vaapiVdpau + libvdpau-va-gl + + intel-media-driver + ]; + }; + boot.initrd.kernelModules = ["i915"]; + environment.variables = mkIf config.hardware.opengl.enable { + VDPAU_DRIVER = "va_gl"; + }; + }; +} diff --git a/system/modules/hardware/gpu/nvidia/default.nix b/system/modules/hardware/gpu/nvidia/default.nix new file mode 100644 index 0000000..fe0ff6d --- /dev/null +++ b/system/modules/hardware/gpu/nvidia/default.nix @@ -0,0 +1,51 @@ +{ config, lib, pkgs, ... }: + +let + gpu = config.systemModules.hardware.gpu; + inherit (lib) mkIf mkDefault; + inherit (builtins) elem; + production = config.boot.kernelPackages.nvidiaPackages.production; + # beta = config.boot.kernelPackages.nvidiaPackages.beta; +in + +{ +# TODO: make option to choose nvidia package + config = mkIf (elem gpu.type ["nvidia"]) { + hardware = { + nvidia = { + open = mkDefault true; + package = production; + forceFullCompositionPipeline = true; + nvidiaSettings = false; + nvidiaPersistenced = true; + modesetting.enable = true; + powermanagement = { + enable = mkDefault true; + finegrained = mkDefault false; + }; + }; + opengl = { + extraPackages = with pkgs; [ nvidia-vaapi-driver ]; + extraPackages32 = with pkgs.pkgsi686Linux; [ nvidia-vaapi-driver ]; + }; + }; + environment.systemPackages = with pkgs; [ + + libva + libva-utils + + vulkan-loader + vulkan-validation-layers + vulkan-tools + vulkan-extension-layer + + mesa + + nvtopPackages.nvidia + ]; + environment.sessionVariables = { + LIBVA_DRIVER_NAME = "nvidia"; + NVD_BACKEND = "direct"; + }; + }; +}