112 lines
3 KiB
Nix
112 lines
3 KiB
Nix
{
|
|
mkDashDefault,
|
|
lib,
|
|
config,
|
|
options,
|
|
pkgs,
|
|
...
|
|
}: {
|
|
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 vapi.
|
|
'';
|
|
};
|
|
rocm.enable = lib.mkOption {
|
|
default = false;
|
|
type = lib.types.bool;
|
|
example = true;
|
|
description = ''
|
|
Enables rocm support.
|
|
'';
|
|
};
|
|
};
|
|
};
|
|
|
|
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 [];
|
|
|
|
environment.variables =
|
|
if (config.mods.gpu.amdgpu.enable && config.mods.gpu.vapi.rocm.enable)
|
|
then {
|
|
RUSTICL_ENABLE = mkDashDefault "radeonsi";
|
|
}
|
|
else {};
|
|
|
|
hardware = {
|
|
nvidia = lib.mkIf config.mods.gpu.nvidia.enable {
|
|
modesetting.enable = mkDashDefault true;
|
|
open = mkDashDefault true;
|
|
nvidiaSettings = mkDashDefault true;
|
|
package = mkDashDefault 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)
|
|
];
|
|
rocmPackages = [
|
|
# TODO broken
|
|
#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 = mkDashDefault true;
|
|
extraPackages =
|
|
amdPackages
|
|
++ (lib.lists.optionals (config.mods.gpu.vapi.rocm.enable && config.mods.gpu.amdgpu.enable) rocmPackages);
|
|
};
|
|
};
|
|
};
|
|
}
|