diff --git a/modules/programs/gpu.nix b/modules/programs/gpu.nix index 5efa416..56083db 100644 --- a/modules/programs/gpu.nix +++ b/modules/programs/gpu.nix @@ -5,97 +5,106 @@ pkgs, ... }: { - options.mods = { - gpu = { - nvidia.enable = lib.mkOption { - default = false; - example = true; + options.mods.gpu = { + nvidia.enable = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = '' + Enables nvidia support. + ''; + }; + amdgpu.enable = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = '' + Enables amdgpu support. + ''; + }; + intelgpu.enable = lib.mkOption { + default = false; + example = true; + type = lib.types.bool; + description = '' + Enables intel support. + ''; + }; + vapi = { + enable = lib.mkOption { + default = true; + example = false; type = lib.types.bool; description = '' - Enables nvidia support. + Enables vapi. ''; }; - amdgpu.enable = lib.mkOption { + rocm.enable = lib.mkOption { default = false; - example = true; type = lib.types.bool; - description = '' - Enables amdgpu support. - ''; - }; - intelgpu.enable = lib.mkOption { - default = false; example = true; - type = lib.types.bool; description = '' - Enables intel support. + Enables rocm support. ''; }; - vapi = { - enable = lib.mkOption { - default = true; - example = false; - type = lib.types.bool; - description = '' - Enables vapi. - ''; - }; - rocm.enable = lib.mkOption { - default = false; - type = lib.types.bool; - example = true; - description = '' - Enables rocm support. - ''; - }; - }; }; }; - config = - (lib.optionalAttrs (options ? hardware.graphics) { - boot = lib.mkIf config.mods.amdgpu.enable { - kernelModules = ["kvm-amd"]; - initrd.kernelModules = ["amdgpu"]; - kernelParams = ["amdgpu.ppfeaturemask=0xffffffff"]; - }; + config = lib.optionalAttrs (options ? boot) { + boot = lib.mkIf config.mods.gpu.amdgpu.enable { + kernelModules = ["kvm-amd"]; + initrd.kernelModules = ["amdgpu"]; + kernelParams = ["amdgpu.ppfeaturemask=0xffffffff"]; + }; + services.xserver.videoDrivers = + if config.mods.gpu.amdgpu.enable + then ["amdgpu"] + else if config.mods.gpu.nvidia.enable + then ["nvidia"] + else []; - hardware = { - graphics = let - amdPackages = [ - (lib.mkIf (config.mods.gpu.intelgpu && lib.mkIf config.mods.gpu.vapi.enable) pkgs.vpl-gpu-rt) - (lib.mkIf ( - config.mods.gpu.intelgpu && lib.mkIf config.mods.gpu.vapi.enable - ) - pkgs.intel-media-driver) - (lib.mkIf config.mods.gpu.vapi.enable pkgs.libvdpau-va-gl) - (lib.mkIf config.mods.gpu.vapi.enable pkgs.vaapiVdpau) - (lib.mkIf (config.mods.gpu.intelgpu || config.mods.gpu.amdgpu) pkgs.mesa.drivers) - ]; - rocmPackages = [ - pkgs.rocmPackages.clr.icd - pkgs.rocm-opencl-runtime - ]; - in { - enable = true; - enable32Bit = lib.mkDefault true; - extraPackages = - amdPackages - ++ (lib.lists.optionals (config.mods.gpu.vapi.rocm.enable && config.mods.gpu.amdgpu) rocmPackages); - }; - }; - }) - // lib.optionalAttrs (options ? hardware.graphics) ( - lib.mkIf config.mods.gpu.nvidia.enable { - hardware.nvidia = { - modesetting.enable = true; - # powerManagement.enable = false; - # powerManagement.finegrained = true; - open = true; - nvidiaSettings = true; - package = config.boot.kernelPackages.nvidiaPackages.beta; - }; - services.xserver.videoDrivers = ["nvidia"]; + environment.variables = + if (config.mods.gpu.amdgpu.enable && config.mods.gpu.vapi.rocm.enable) + then { + RUSTICL_ENABLE = "radeonsi"; } - ); + else {}; + + hardware = { + nvidia = lib.mkIf config.mods.gpu.nvidia.enable { + modesetting.enable = true; + open = true; + nvidiaSettings = true; + package = config.boot.kernelPackages.nvidiaPackages.beta; + }; + graphics = let + amdPackages = [ + (lib.mkIf (config.mods.gpu.intelgpu.enable && lib.mkIf config.mods.gpu.vapi.enable) pkgs.vpl-gpu-rt) + (lib.mkIf ( + config.mods.gpu.intelgpu.enable && lib.mkIf config.mods.gpu.vapi.enable + ) + pkgs.intel-media-driver) + (lib.mkIf config.mods.gpu.vapi.enable pkgs.libvdpau-va-gl) + (lib.mkIf config.mods.gpu.vapi.enable pkgs.libva) + (lib.mkIf config.mods.gpu.vapi.enable pkgs.vaapiVdpau) + (lib.mkIf (config.mods.gpu.intelgpu.enable || config.mods.gpu.amdgpu.enable) pkgs.mesa.drivers) + ]; + rocmPackages = [ + pkgs.rocmPackages.clr.icd + pkgs.mesa + pkgs.mesa.opencl + pkgs.vulkan-loader + pkgs.vulkan-validation-layers + pkgs.vulkan-tools + pkgs.clinfo + ]; + in { + enable = true; + enable32Bit = lib.mkDefault true; + extraPackages = + amdPackages + ++ (lib.lists.optionals (config.mods.gpu.vapi.rocm.enable && config.mods.gpu.amdgpu.enable) rocmPackages); + }; + }; + }; }