{ config, pkgs, lib, ... }: 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 "$@" ''; cfg = config.samfelag.modules.system.nvidia; in { options.samfelag.modules.system.nvidia = { enable = lib.mkEnableOption "nvidia"; intelBusId = lib.mkOption { type = lib.types.str; }; nvidiaBusId = lib.mkOption { type = lib.types.str; }; }; config = lib.mkIf cfg.enable { environment.systemPackages = [ nvidia-offload ]; services.xserver.videoDrivers = [ "nvidia" ]; hardware.opengl.enable = true; hardware.nvidia.package = config.boot.kernelPackages.nvidiaPackages.stable; hardware.nvidia.prime = { offload.enable = true; # Bus ID of the Intel GPU. You can find it using lspci, either under 3D or VGA intelBusId = cfg.intelBusId; # Bus ID of the NVIDIA GPU. You can find it using lspci, either under 3D or VGA nvidiaBusId = cfg.nvidiaBusId; }; }; }