changes to fix compliance with home server

This commit is contained in:
2025-07-01 20:21:38 +02:00
parent 6d96d1a015
commit 7dfec3a2b0
23 changed files with 232 additions and 307 deletions

View File

@@ -0,0 +1,136 @@
{
pkgs,
config,
lib,
...
}: let
inherit (lib) mkEnableOption mkOption types mkIf mkMerge;
cfg = config.nixos.hardware.graphics;
vendor = cfg.vendor;
# Common packages used across all vendors
commonPackages = with pkgs; [
libva
vaapiVdpau
libvdpau-va-gl
libGL
];
commonPackages32 = with pkgs.pkgsi686Linux; [
libva
vaapiVdpau
libvdpau-va-gl
];
# Mesa Vulkan packages (used by AMD & Intel only)
mesaVulkanPackages = with pkgs; [
vulkan-loader
vulkan-validation-layers
vulkan-extension-layer
vulkan-utility-libraries
];
# Extra desktop utilities
tools = with pkgs; [
vulkan-tools
wayland
wayland-protocols
scx.rustscheds
libGL
];
nvidiaOffloadScript = pkgs.writeShellScriptBin "nvidia-offload" ''
export LIBVA_DRIVER_NAME=nvidia
export GBM_BACKEND=nvidia-drm
export __GLX_VENDOR_LIBRARY_NAME=nvidia
export __GL_VRR_ALLOWED=1
export XDG_SESSION_TYPE=wayland
export NVD_BACKEND=direct
export ELECTRON_OZONE_PLATFORM_HINT=auto
exec "$@"
'';
in {
options.nixos.hardware.graphics = {
enable = mkEnableOption "Enable general graphics support";
vendor = mkOption {
type = types.enum ["amd" "intel" "nvidia"];
default = "amd";
description = "GPU vendor to configure support for.";
};
nvidia = {
open.enable = mkEnableOption "Enable NVidia open drivers";
package = mkOption {
type = types.enum ["stable" "beta" "production" "latest"];
default = "stable";
description = "NVidia driver package to use.";
};
};
};
config = mkIf cfg.enable (
mkMerge [
{
hardware.graphics = {
enable = true;
enable32Bit = true;
};
}
# AMD-specific configuration
(mkIf (vendor == "amd") {
hardware.graphics.extraPackages = commonPackages ++ mesaVulkanPackages;
hardware.graphics.extraPackages32 = commonPackages32;
environment.systemPackages = tools;
})
# Intel-specific configuration
(mkIf (vendor == "intel") {
hardware.graphics.extraPackages =
commonPackages
++ mesaVulkanPackages
++ (with pkgs; [
intel-media-driver
intel-compute-runtime
]);
hardware.graphics.extraPackages32 = commonPackages32;
environment.systemPackages = tools;
})
# Nvidia-specific configuration
(mkIf (vendor == "nvidia") {
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 = {
package =
if cfg.nvidia.package == "beta"
then config.boot.kernelPackages.nvidiaPackages.beta
else if cfg.nvidia.package == "latest"
then config.boot.kernelPackages.nvidiaPackages.latest
else if cfg.nvidia.package == "production"
then config.boot.kernelPackages.nvidiaPackages.production
else config.boot.kernelPackages.nvidiaPackages.stable;
modesetting.enable = true;
powerManagement.enable = false;
powerManagement.finegrained = false;
open = cfg.nvidia.open.enable;
nvidiaSettings = true;
};
})
]
);
}