2024-08-16 13:32:13 +02:00
|
|
|
|
{
|
|
|
|
|
config,
|
|
|
|
|
lib,
|
2025-07-27 00:45:23 +02:00
|
|
|
|
pkgs,
|
2024-08-16 13:32:13 +02:00
|
|
|
|
...
|
2025-07-20 01:23:48 +02:00
|
|
|
|
}:
|
|
|
|
|
let
|
2025-07-27 00:45:23 +02:00
|
|
|
|
inherit (lib.modules) mkDefault mkIf;
|
2025-04-09 14:46:33 +02:00
|
|
|
|
inherit (lib.options) mkEnableOption;
|
|
|
|
|
|
2024-08-16 23:31:12 +02:00
|
|
|
|
cfg = config.modules.system.hardware;
|
2025-07-20 01:23:48 +02:00
|
|
|
|
in
|
|
|
|
|
{
|
2025-04-09 14:46:33 +02:00
|
|
|
|
options.modules.system.hardware = {
|
|
|
|
|
nvidia = {
|
|
|
|
|
enable = mkEnableOption "Nvidia graphics drivers";
|
|
|
|
|
};
|
|
|
|
|
amd.enable = mkEnableOption "AMD graphics drivers";
|
|
|
|
|
};
|
2024-08-16 13:32:13 +02:00
|
|
|
|
config = {
|
|
|
|
|
hardware = {
|
2025-07-27 00:45:23 +02:00
|
|
|
|
graphics = {
|
|
|
|
|
enable = true;
|
|
|
|
|
extraPackages = [ pkgs.nvidia-vaapi-driver ];
|
|
|
|
|
};
|
|
|
|
|
|
2024-08-16 23:31:12 +02:00
|
|
|
|
nvidia = mkIf cfg.nvidia.enable {
|
2025-07-27 00:45:23 +02:00
|
|
|
|
open = mkDefault true;
|
2025-04-09 14:46:33 +02:00
|
|
|
|
|
2025-07-27 00:45:23 +02:00
|
|
|
|
# Whether to enable kernel modesetting when using the NVIDIA proprietary driver.
|
|
|
|
|
# Enabling this causes the proprietary NVIDIA driver to provide its own
|
|
|
|
|
# framebuffer device, which can cause Wayland compositors to work when
|
|
|
|
|
# they otherwise wouldn’t. .
|
2024-08-16 23:31:12 +02:00
|
|
|
|
modesetting.enable = true;
|
2025-07-27 00:45:23 +02:00
|
|
|
|
|
|
|
|
|
# nvidia-settings is useless on NixOS.
|
2025-04-09 14:46:33 +02:00
|
|
|
|
nvidiaSettings = false;
|
|
|
|
|
|
|
|
|
|
# fixes sleep on nvidia devices
|
2024-08-16 23:31:12 +02:00
|
|
|
|
powerManagement = {
|
|
|
|
|
enable = true;
|
|
|
|
|
finegrained = false;
|
|
|
|
|
};
|
2024-08-16 23:05:45 +02:00
|
|
|
|
package = config.boot.kernelPackages.nvidiaPackages.beta;
|
2024-08-16 13:32:13 +02:00
|
|
|
|
};
|
|
|
|
|
};
|
2025-07-27 00:45:23 +02:00
|
|
|
|
services.xserver.videoDrivers = [
|
|
|
|
|
"nvidia"
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
environment.systemPackages = builtins.attrValues {
|
|
|
|
|
inherit (pkgs)
|
|
|
|
|
mesa
|
|
|
|
|
vulkan-tools
|
|
|
|
|
vulkan-loader
|
|
|
|
|
libva
|
|
|
|
|
libva-utils
|
|
|
|
|
;
|
|
|
|
|
inherit (pkgs.nvtopPackages) nvidia;
|
|
|
|
|
};
|
|
|
|
|
# Nouveau is a set of free and open-source drivers for NVIDIA GPUs
|
|
|
|
|
# that provide 2D/3D acceleration for all NVIDIA GPUs.
|
|
|
|
|
# Its use is in general not recommended due to its considerably worse
|
|
|
|
|
# performance compared to NVIDIA's kernel modules, as it does not
|
|
|
|
|
# support reclocking (changing the GPU clock frequency on-demand)
|
|
|
|
|
# for many NVIDIA GPUs.
|
|
|
|
|
# I therefore disable it to save myself from headaches.
|
|
|
|
|
boot.blacklistedKernelModules = mkIf cfg.nvidia.enable [ "nouveau" ];
|
2024-08-16 13:32:13 +02:00
|
|
|
|
};
|
|
|
|
|
}
|