fixes for multi gpu
This commit is contained in:
@@ -20,7 +20,7 @@
|
|||||||
};
|
};
|
||||||
graphics = {
|
graphics = {
|
||||||
enable = true;
|
enable = true;
|
||||||
vendor = "amd";
|
vendors = ["amd"];
|
||||||
};
|
};
|
||||||
logitech = {
|
logitech = {
|
||||||
enable = false;
|
enable = false;
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
};
|
};
|
||||||
graphics = {
|
graphics = {
|
||||||
enable = true;
|
enable = true;
|
||||||
vendor = "amd";
|
vendors = ["amd"];
|
||||||
};
|
};
|
||||||
logitech = {
|
logitech = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
};
|
};
|
||||||
graphics = {
|
graphics = {
|
||||||
enable = true;
|
enable = true;
|
||||||
vendor = "intel";
|
vendors = ["intel" "amd"];
|
||||||
};
|
};
|
||||||
logitech = {
|
logitech = {
|
||||||
enable = false;
|
enable = false;
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
};
|
};
|
||||||
graphics = {
|
graphics = {
|
||||||
enable = true;
|
enable = true;
|
||||||
vendor = "nvidia";
|
vendors = ["nvidia"];
|
||||||
nvidia = {
|
nvidia = {
|
||||||
package = "beta";
|
package = "beta";
|
||||||
open = {
|
open = {
|
||||||
|
|||||||
@@ -1,28 +1,26 @@
|
|||||||
{
|
{
|
||||||
pkgs,
|
|
||||||
config,
|
config,
|
||||||
lib,
|
lib,
|
||||||
|
pkgs,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (lib) mkEnableOption mkOption types mkIf mkMerge;
|
inherit (lib) mkEnableOption mkOption types mkIf mkMerge flatten concatMap;
|
||||||
|
|
||||||
cfg = config.nixos.hardware.graphics;
|
cfg = config.nixos.hardware.graphics;
|
||||||
vendor = cfg.vendor;
|
|
||||||
|
|
||||||
# Common packages used across all vendors
|
|
||||||
commonPackages = with pkgs; [
|
commonPackages = with pkgs; [
|
||||||
libva
|
libva
|
||||||
vaapiVdpau
|
vaapiVdpau
|
||||||
libvdpau-va-gl
|
libvdpau-va-gl
|
||||||
libGL
|
libGL
|
||||||
];
|
];
|
||||||
|
|
||||||
commonPackages32 = with pkgs.pkgsi686Linux; [
|
commonPackages32 = with pkgs.pkgsi686Linux; [
|
||||||
libva
|
libva
|
||||||
vaapiVdpau
|
vaapiVdpau
|
||||||
libvdpau-va-gl
|
libvdpau-va-gl
|
||||||
];
|
];
|
||||||
|
|
||||||
# Mesa Vulkan packages (used by AMD & Intel only)
|
|
||||||
mesaVulkanPackages = with pkgs; [
|
mesaVulkanPackages = with pkgs; [
|
||||||
vulkan-loader
|
vulkan-loader
|
||||||
vulkan-validation-layers
|
vulkan-validation-layers
|
||||||
@@ -30,7 +28,6 @@
|
|||||||
vulkan-utility-libraries
|
vulkan-utility-libraries
|
||||||
];
|
];
|
||||||
|
|
||||||
# Extra desktop utilities
|
|
||||||
tools = with pkgs; [
|
tools = with pkgs; [
|
||||||
vulkan-tools
|
vulkan-tools
|
||||||
wayland
|
wayland
|
||||||
@@ -48,18 +45,21 @@
|
|||||||
export ELECTRON_OZONE_PLATFORM_HINT=auto
|
export ELECTRON_OZONE_PLATFORM_HINT=auto
|
||||||
exec "$@"
|
exec "$@"
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
hasVendor = vendor: builtins.elem vendor cfg.vendors;
|
||||||
in {
|
in {
|
||||||
options.nixos.hardware.graphics = {
|
options.nixos.hardware.graphics = {
|
||||||
enable = mkEnableOption "Enable general graphics support";
|
enable = mkEnableOption "Enable general graphics support";
|
||||||
|
|
||||||
vendor = mkOption {
|
vendors = mkOption {
|
||||||
type = types.enum ["amd" "intel" "nvidia"];
|
type = types.listOf (types.enum ["amd" "intel" "nvidia"]);
|
||||||
default = "amd";
|
default = ["amd"];
|
||||||
description = "GPU vendor to configure support for.";
|
description = "List of GPU vendors to configure support for.";
|
||||||
};
|
};
|
||||||
|
|
||||||
nvidia = {
|
nvidia = {
|
||||||
open.enable = mkEnableOption "Enable NVidia open drivers";
|
open.enable = mkEnableOption "Enable NVidia open drivers";
|
||||||
|
|
||||||
package = mkOption {
|
package = mkOption {
|
||||||
type = types.enum ["stable" "beta" "production" "latest"];
|
type = types.enum ["stable" "beta" "production" "latest"];
|
||||||
default = "stable";
|
default = "stable";
|
||||||
@@ -68,70 +68,79 @@ in {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable (
|
config = mkIf cfg.enable (mkMerge [
|
||||||
mkMerge [
|
{
|
||||||
{
|
hardware.graphics = {
|
||||||
hardware.graphics = {
|
enable = true;
|
||||||
enable = true;
|
enable32Bit = true;
|
||||||
enable32Bit = true;
|
extraPackages = flatten (concatMap (
|
||||||
};
|
vendor:
|
||||||
}
|
if vendor == "amd"
|
||||||
|
then commonPackages ++ mesaVulkanPackages
|
||||||
|
else if vendor == "intel"
|
||||||
|
then
|
||||||
|
commonPackages
|
||||||
|
++ mesaVulkanPackages
|
||||||
|
++ (with pkgs; [
|
||||||
|
vpl-gpu-rt
|
||||||
|
intel-media-driver
|
||||||
|
intel-compute-runtime
|
||||||
|
])
|
||||||
|
else if vendor == "nvidia"
|
||||||
|
then
|
||||||
|
commonPackages
|
||||||
|
++ (with pkgs; [
|
||||||
|
nvidiaOffloadScript
|
||||||
|
intel-media-driver
|
||||||
|
nvidia-vaapi-driver
|
||||||
|
vulkan-tools
|
||||||
|
])
|
||||||
|
else []
|
||||||
|
)
|
||||||
|
cfg.vendors);
|
||||||
|
|
||||||
# AMD-specific configuration
|
extraPackages32 = flatten (concatMap (_: commonPackages32) cfg.vendors);
|
||||||
(mkIf (vendor == "amd") {
|
};
|
||||||
hardware.amdgpu.overdrive.enable = true;
|
|
||||||
hardware.graphics.extraPackages = commonPackages ++ mesaVulkanPackages;
|
|
||||||
hardware.graphics.extraPackages32 = commonPackages32;
|
|
||||||
environment.systemPackages = tools;
|
|
||||||
})
|
|
||||||
|
|
||||||
# Intel-specific configuration
|
environment.systemPackages = flatten (concatMap (
|
||||||
(mkIf (vendor == "intel") {
|
vendor:
|
||||||
hardware.graphics.extraPackages =
|
if vendor == "amd"
|
||||||
commonPackages
|
then
|
||||||
++ mesaVulkanPackages
|
tools
|
||||||
++ (with pkgs; [
|
++ (with pkgs; [
|
||||||
vpl-gpu-rt
|
# rocmPackages.rpp
|
||||||
intel-media-driver
|
# rocmPackages.clr
|
||||||
intel-compute-runtime
|
])
|
||||||
]);
|
else if vendor == "intel"
|
||||||
hardware.graphics.extraPackages32 = commonPackages32;
|
then tools
|
||||||
environment.systemPackages = tools;
|
else if vendor == "nvidia"
|
||||||
})
|
then with pkgs; [egl-wayland libGL]
|
||||||
|
else []
|
||||||
|
)
|
||||||
|
cfg.vendors);
|
||||||
|
}
|
||||||
|
|
||||||
# Nvidia-specific configuration
|
(mkIf (hasVendor "amd") {
|
||||||
(mkIf (vendor == "nvidia") {
|
hardware.amdgpu.overdrive.enable = true;
|
||||||
hardware.graphics.extraPackages =
|
})
|
||||||
commonPackages
|
|
||||||
++ (with pkgs; [
|
|
||||||
nvidiaOffloadScript
|
|
||||||
intel-media-driver
|
|
||||||
nvidia-vaapi-driver
|
|
||||||
vulkan-tools
|
|
||||||
]);
|
|
||||||
hardware.graphics.extraPackages32 = commonPackages32;
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
egl-wayland
|
|
||||||
libGL
|
|
||||||
];
|
|
||||||
|
|
||||||
hardware.nvidia = {
|
(mkIf (hasVendor "nvidia") {
|
||||||
package =
|
hardware.nvidia = {
|
||||||
if cfg.nvidia.package == "beta"
|
package =
|
||||||
then config.boot.kernelPackages.nvidiaPackages.beta
|
if cfg.nvidia.package == "beta"
|
||||||
else if cfg.nvidia.package == "latest"
|
then config.boot.kernelPackages.nvidiaPackages.beta
|
||||||
then config.boot.kernelPackages.nvidiaPackages.latest
|
else if cfg.nvidia.package == "latest"
|
||||||
else if cfg.nvidia.package == "production"
|
then config.boot.kernelPackages.nvidiaPackages.latest
|
||||||
then config.boot.kernelPackages.nvidiaPackages.production
|
else if cfg.nvidia.package == "production"
|
||||||
else config.boot.kernelPackages.nvidiaPackages.stable;
|
then config.boot.kernelPackages.nvidiaPackages.production
|
||||||
|
else config.boot.kernelPackages.nvidiaPackages.stable;
|
||||||
|
|
||||||
modesetting.enable = true;
|
modesetting.enable = true;
|
||||||
powerManagement.enable = false;
|
powerManagement.enable = false;
|
||||||
powerManagement.finegrained = false;
|
powerManagement.finegrained = false;
|
||||||
open = cfg.nvidia.open.enable;
|
open = cfg.nvidia.open.enable;
|
||||||
nvidiaSettings = true;
|
nvidiaSettings = true;
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
]
|
]);
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,6 +63,8 @@ in {
|
|||||||
cloudflared
|
cloudflared
|
||||||
libargon2
|
libargon2
|
||||||
openssl
|
openssl
|
||||||
|
xmrig
|
||||||
|
ocl-icd
|
||||||
]
|
]
|
||||||
|
|
||||||
(mkIf cfg.common.enable [
|
(mkIf cfg.common.enable [
|
||||||
|
|||||||
Reference in New Issue
Block a user