feat: nvidia drivers for oreo

This commit is contained in:
2026-06-08 11:27:28 -04:00
parent 118300d92f
commit 141a785cc5
4 changed files with 121 additions and 3 deletions
Generated
+3 -3
View File
@@ -110,11 +110,11 @@
"systems": "systems_2" "systems": "systems_2"
}, },
"locked": { "locked": {
"lastModified": 1780719019, "lastModified": 1780913839,
"narHash": "sha256-DZCJn3xaUSztvxw8xtbRSBxRQRzAoWvzGFAc0NLZdjw=", "narHash": "sha256-SAApjWmx0ckoH/LddeOIDHqlLOwuCbz4ViObvf/N2RE=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nix4vscode", "repo": "nix4vscode",
"rev": "efe7a04bb221089e7ecb0b663441afc2a40eb02d", "rev": "b6f45dca18b3f4ab2f8029bce512cde59f950a89",
"type": "github" "type": "github"
}, },
"original": { "original": {
+13
View File
@@ -4,6 +4,7 @@
../../modules/core.nix ../../modules/core.nix
../../modules/plasma.nix ../../modules/plasma.nix
../../modules/security.nix ../../modules/security.nix
../../modules/nvidia.nix
]; ];
networking.hostName = "oreo"; networking.hostName = "oreo";
@@ -33,5 +34,17 @@
polkitPolicyOwners = [ "alex" ]; polkitPolicyOwners = [ "alex" ];
}; };
modules.nvidia = {
enable = false;
open = true;
# Only needed if this is a laptop with hybrid graphics:
prime = {
enable = true;
mode = "offload";
intelBusId = "PCI:0:2.0";
nvidiaBusId = "PCI:1:0:0";
};
};
system.stateVersion = "25.11"; system.stateVersion = "25.11";
} }
+1
View File
@@ -16,6 +16,7 @@
gptfdisk gptfdisk
exfatprogs exfatprogs
parted parted
lshw
]; ];
nixpkgs.overlays = [ inputs.nix4vscode.overlays.default ]; nixpkgs.overlays = [ inputs.nix4vscode.overlays.default ];
+104
View File
@@ -0,0 +1,104 @@
{ config, lib, ... }:
{
options.modules.nvidia = {
enable = lib.mkEnableOption "NVIDIA proprietary drivers";
open = lib.mkOption {
type = lib.types.bool;
default = true;
description = ''
Use the open-source NVIDIA kernel module.
Set to true for Turing (RTX 20-series) and newer.
Set to false for older architectures.
'';
};
package = lib.mkOption {
type = lib.types.package;
default = config.boot.kernelPackages.nvidiaPackages.stable;
defaultText = lib.literalExpression
"config.boot.kernelPackages.nvidiaPackages.stable";
description = "The NVIDIA driver package to use.";
};
prime = {
enable = lib.mkEnableOption "NVIDIA Optimus PRIME (hybrid graphics)";
mode = lib.mkOption {
type = lib.types.enum [ "offload" "sync" "reverse-sync" ];
default = "offload";
description = ''
Which PRIME mode to use.
offload — iGPU handles everything; dGPU used on demand (best battery)
sync — dGPU always active; best performance, less tearing
reverse-sync — experimental; dGPU primary, iGPU for outputs
'';
};
intelBusId = lib.mkOption {
type = lib.types.str;
default = "";
example = "PCI:0:2:0";
description = "PCI bus ID of the Intel iGPU (from lshw -c display).";
};
amdBusId = lib.mkOption {
type = lib.types.str;
default = "";
example = "PCI:54:0:0";
description = "PCI bus ID of the AMD iGPU (from lshw -c display). Leave empty if Intel.";
};
nvidiaBusId = lib.mkOption {
type = lib.types.str;
default = "";
example = "PCI:14:0:0";
description = "PCI bus ID of the NVIDIA dGPU (from lshw -c display).";
};
};
};
config = lib.mkIf config.modules.nvidia.enable {
hardware.graphics.enable = true;
services.xserver.videoDrivers =
if config.modules.nvidia.prime.enable
&& config.modules.nvidia.prime.mode == "offload"
then [
(if config.modules.nvidia.prime.amdBusId != "" then "amdgpu" else "modesetting")
"nvidia"
]
else [ "nvidia" ];
hardware.nvidia = {
modesetting.enable = true;
open = config.modules.nvidia.open;
nvidiaSettings = true;
package = config.modules.nvidia.package;
powerManagement.enable = false;
powerManagement.finegrained = false;
prime = lib.mkIf config.modules.nvidia.prime.enable (
let
busIds = lib.filterAttrs (_: v: v != "") {
intelBusId = config.modules.nvidia.prime.intelBusId;
amdgpuBusId = config.modules.nvidia.prime.amdBusId;
nvidiaBusId = config.modules.nvidia.prime.nvidiaBusId;
};
modeConfig =
if config.modules.nvidia.prime.mode == "offload" then {
offload.enable = true;
offload.enableOffloadCmd = true;
} else if config.modules.nvidia.prime.mode == "sync" then {
sync.enable = true;
} else {
reverseSync.enable = true;
allowExternalGpu = false;
};
in busIds // modeConfig
);
};
};
}