The nvidia role now handles full driver configuration instead of just packages. Added options for open driver, modesetting, power management, graphics settings, and driver package selection. Updated zix790prors and wixos machine configs to use the new role options, removing duplicated hardware.nvidia configuration blocks. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
101 lines
2.6 KiB
Nix
101 lines
2.6 KiB
Nix
{ lib, config, pkgs, ... }:
|
|
|
|
with lib;
|
|
|
|
let
|
|
cfg = config.roles.nvidia;
|
|
in
|
|
{
|
|
options.roles.nvidia = {
|
|
enable = mkEnableOption "Enable the nvidia role";
|
|
|
|
# Driver configuration options
|
|
open = mkOption {
|
|
type = types.bool;
|
|
default = true;
|
|
description = "Use the open source nvidia kernel driver (for Turing and newer GPUs).";
|
|
};
|
|
|
|
modesetting = mkOption {
|
|
type = types.bool;
|
|
default = true;
|
|
description = "Enable kernel modesetting for nvidia.";
|
|
};
|
|
|
|
nvidiaSettings = mkOption {
|
|
type = types.bool;
|
|
default = true;
|
|
description = "Enable the nvidia-settings GUI.";
|
|
};
|
|
|
|
package = mkOption {
|
|
type = types.enum [ "stable" "latest" "beta" "vulkan_beta" "production" ];
|
|
default = "stable";
|
|
description = "The nvidia driver package to use.";
|
|
};
|
|
|
|
powerManagement = {
|
|
enable = mkOption {
|
|
type = types.bool;
|
|
default = false;
|
|
description = "Enable nvidia power management (useful for laptops, not recommended for desktops).";
|
|
};
|
|
|
|
finegrained = mkOption {
|
|
type = types.bool;
|
|
default = false;
|
|
description = "Enable fine-grained power management for Turing and newer GPUs.";
|
|
};
|
|
};
|
|
|
|
graphics = {
|
|
enable = mkOption {
|
|
type = types.bool;
|
|
default = true;
|
|
description = "Enable hardware graphics support.";
|
|
};
|
|
|
|
enable32Bit = mkOption {
|
|
type = types.bool;
|
|
default = false;
|
|
description = "Enable 32-bit graphics libraries (needed for some games).";
|
|
};
|
|
|
|
extraPackages = mkOption {
|
|
type = types.listOf types.package;
|
|
default = [];
|
|
description = "Extra packages to add to hardware.graphics.extraPackages.";
|
|
};
|
|
};
|
|
};
|
|
|
|
config = mkIf cfg.enable {
|
|
# Set xserver video driver
|
|
services.xserver.videoDrivers = [ "nvidia" ];
|
|
|
|
# Graphics configuration
|
|
hardware.graphics = {
|
|
enable = cfg.graphics.enable;
|
|
enable32Bit = cfg.graphics.enable32Bit;
|
|
extraPackages = cfg.graphics.extraPackages;
|
|
};
|
|
|
|
# NVIDIA driver configuration
|
|
hardware.nvidia = {
|
|
modesetting.enable = cfg.modesetting;
|
|
nvidiaSettings = cfg.nvidiaSettings;
|
|
open = cfg.open;
|
|
package = config.boot.kernelPackages.nvidiaPackages.${cfg.package};
|
|
powerManagement.enable = cfg.powerManagement.enable;
|
|
powerManagement.finegrained = cfg.powerManagement.finegrained;
|
|
};
|
|
|
|
# Additional packages for nvidia support
|
|
environment.systemPackages = with pkgs; [
|
|
libva-utils
|
|
nvidia-vaapi-driver
|
|
nvtopPackages.nvidia
|
|
];
|
|
};
|
|
}
|