update nvidia module to graphics and add support for amd and intel
This commit is contained in:
@@ -25,7 +25,10 @@ in
|
||||
sops.enable = true;
|
||||
podman.enable = true;
|
||||
yubikey.enable = true;
|
||||
nvidia.enable = true;
|
||||
graphics = {
|
||||
enable = true;
|
||||
vendor = "nvidia";
|
||||
};
|
||||
};
|
||||
holocron = {
|
||||
syncthing.enable = true;
|
||||
|
||||
@@ -22,6 +22,10 @@
|
||||
yubikey.enable = true;
|
||||
tailscale.enable = true;
|
||||
syncthing.enable = true;
|
||||
graphics = {
|
||||
enable = true;
|
||||
vendor = "intel";
|
||||
};
|
||||
};
|
||||
|
||||
# fix power buttons
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
./vpns
|
||||
./vpn-confinement
|
||||
./syncthing
|
||||
./nvidia
|
||||
./graphics
|
||||
];
|
||||
|
||||
system.ssh.enable = lib.mkDefault true;
|
||||
|
||||
@@ -9,8 +9,11 @@ in
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
|
||||
virtualisation.docker = {
|
||||
enable = true;
|
||||
daemon.settings.features.cdi = true;
|
||||
rootless.daemon.settings.features.cdi = true;
|
||||
daemon.settings = {
|
||||
experimental = true;
|
||||
};
|
||||
|
||||
83
modules/system/graphics/default.nix
Normal file
83
modules/system/graphics/default.nix
Normal file
@@ -0,0 +1,83 @@
|
||||
{
|
||||
pkgs,
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
cfg = config.system.graphics;
|
||||
in {
|
||||
options.system.nvidia = {
|
||||
enable = lib.mkEnableOption "enables nvidia";
|
||||
vendor = lib.mkOption {
|
||||
type = lib.types.enum ["amd" "nvidia" "intel"];
|
||||
default = "intel";
|
||||
description = "set the vendor of your graphics device";
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable (lib.mkMerge [
|
||||
{
|
||||
hardware.graphics.enable = true;
|
||||
hardware.graphics.enable32Bit = true;
|
||||
}
|
||||
|
||||
(lib.mkIf (cfg.vendor == "intel") {
|
||||
services.xserver.videoDrivers = ["modesetting"];
|
||||
|
||||
hardware.graphics.extraPackages = with pkgs; [
|
||||
# Required for modern Intel GPUs (Xe iGPU and ARC)
|
||||
intel-media-driver # VA-API (iHD) userspace
|
||||
vpl-gpu-rt # oneVPL (QSV) runtime
|
||||
|
||||
# Optional (compute / tooling):
|
||||
intel-compute-runtime # OpenCL (NEO) + Level Zero for Arc/Xe
|
||||
];
|
||||
|
||||
environment.sessionVariables = {
|
||||
LIBVA_DRIVER_NAME = "iHD"; # Prefer the modern iHD backend
|
||||
};
|
||||
})
|
||||
|
||||
(lib.mkIf (cfg.vendor == "amd") {
|
||||
boot.initrd.kernelModules = ["amdgpu"];
|
||||
services.xserver.videoDrivers = ["amdgpu"];
|
||||
|
||||
# userspace tools
|
||||
environment.systemPackages = with pkgs; [
|
||||
radeontop
|
||||
];
|
||||
|
||||
# enable amd vulkan (program will choose this or regular)
|
||||
hardware.graphics.extraPackages = with pkgs; [
|
||||
amdvlk
|
||||
rocmPackages.clr.icd # enable open cl (compute framework like cuda)
|
||||
];
|
||||
# ^ but 32 bit
|
||||
hardware.graphics.extraPackages32 = with pkgs; [
|
||||
driversi686Linux.amdvlk
|
||||
];
|
||||
|
||||
# make hip work (extension on cli.icd ^)
|
||||
systemd.tmpfiles.rules = [
|
||||
"L+ /opt/rocm/hip - - - - ${pkgs.rocmPackages.clr}"
|
||||
];
|
||||
})
|
||||
|
||||
(lib.mkIf (cfg.vendor == "nvidia") {
|
||||
boot.kernelModules = ["nvidia" "nvidia_modeset" "nvidia_uvm" "nvidia_drm"];
|
||||
services.xserver.videoDrivers = ["nvidia"];
|
||||
|
||||
# enable nvidia proprietary driver
|
||||
hardware.nvidia = {
|
||||
modesetting.enable = true; # required
|
||||
open = false; # use proprietary driver
|
||||
nvidiaSettings = true; # no shit
|
||||
powerManagement.enable = false; # can cause sleep issues
|
||||
package = config.boot.kernelPackages.nvidiaPackages.stable;
|
||||
};
|
||||
|
||||
# enable docker gpu passthrough
|
||||
hardware.nvidia-container-toolkit.enable = true;
|
||||
})
|
||||
]);
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
{
|
||||
pkgs,
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
cfg = config.system.nvidia;
|
||||
in {
|
||||
options.system.nvidia = {
|
||||
enable = lib.mkEnableOption "enables nvidia";
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
services.xserver.videoDrivers = ["nvidia"];
|
||||
boot.kernelModules = ["nvidia" "nvidia_modeset" "nvidia_uvm" "nvidia_drm"];
|
||||
# boot.kernelModules = [ "nvidia" ];
|
||||
|
||||
hardware.graphics = {
|
||||
enable = true;
|
||||
enable32Bit = true;
|
||||
};
|
||||
|
||||
# enable nvidia proprietary driver
|
||||
hardware.nvidia = {
|
||||
modesetting.enable = true; # required
|
||||
open = false; # use proprietary driver
|
||||
nvidiaSettings = true; # no shit
|
||||
powerManagement.enable = false; # can cause sleep issues
|
||||
package = config.boot.kernelPackages.nvidiaPackages.stable;
|
||||
};
|
||||
|
||||
# enable docker gpu passthrough
|
||||
hardware.nvidia-container-toolkit.enable = true;
|
||||
virtualisation.docker.daemon.settings.features.cdi = true;
|
||||
virtualisation.docker.rootless.daemon.settings.features.cdi = true;
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user