about summary refs log tree commit diff
path: root/modules/nixos-hardware/common/gpu/nvidia.nix
diff options
context:
space:
mode:
Diffstat (limited to 'modules/nixos-hardware/common/gpu/nvidia.nix')
-rw-r--r--modules/nixos-hardware/common/gpu/nvidia.nix22
1 files changed, 22 insertions, 0 deletions
diff --git a/modules/nixos-hardware/common/gpu/nvidia.nix b/modules/nixos-hardware/common/gpu/nvidia.nix
new file mode 100644
index 000000000000..fed9fa98724c
--- /dev/null
+++ b/modules/nixos-hardware/common/gpu/nvidia.nix
@@ -0,0 +1,22 @@
+{ lib, pkgs, ... }:
+
+# This creates a new 'nvidia-offload' program that runs the application passed to it on the GPU
+# As per https://nixos.wiki/wiki/Nvidia
+let
+  nvidia-offload = pkgs.writeShellScriptBin "nvidia-offload" ''
+    export __NV_PRIME_RENDER_OFFLOAD=1
+    export __NV_PRIME_RENDER_OFFLOAD_PROVIDER=NVIDIA-G0
+    export __GLX_VENDOR_LIBRARY_NAME=nvidia
+    export __VK_LAYER_NV_optimus=NVIDIA_only
+    exec -a "$0" "$@"
+  '';
+in
+{
+  services.xserver.videoDrivers = lib.mkDefault [ "nvidia" ];
+  environment.systemPackages = [ nvidia-offload ];
+
+  hardware.nvidia.prime = {
+    offload.enable = lib.mkDefault true;
+    # Hardware should specify the bus ID for intel/nvidia devices
+  };
+}