feat: nvidia prime mode
This commit is contained in:
parent
e1af19001f
commit
8e13adac78
9 changed files with 133 additions and 50 deletions
|
|
@ -1,7 +1,58 @@
|
|||
{ config, ... }:
|
||||
|
||||
{
|
||||
nvidia-mode ? "sync",
|
||||
nvidia-bus-id,
|
||||
intel-bus-id,
|
||||
...
|
||||
}:
|
||||
let
|
||||
validModes = [
|
||||
"offload"
|
||||
"sync"
|
||||
"rsync"
|
||||
];
|
||||
in
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
|
||||
# Nvidia offload mode
|
||||
let
|
||||
validString = lib.concatStringsSep ", " validModes;
|
||||
|
||||
offload = pkgs.writeShellScriptBin "offload" ''
|
||||
#!/bin/bash
|
||||
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 "$@"
|
||||
'';
|
||||
in
|
||||
lib.checkListOfEnum "Nvidia Prime Mode" validModes [ nvidia-mode ] {
|
||||
environment.systemPackages = [ offload ];
|
||||
|
||||
# Enable nvidia on wayland or xserver
|
||||
services.xserver.videoDrivers = [ "nvidia" ];
|
||||
|
||||
boot.extraModprobeConfig = ''
|
||||
options nvidia_drm modeset=1 dbdev=1
|
||||
'';
|
||||
|
||||
boot.initrd.kernelModules = [
|
||||
"nvidia"
|
||||
"nvidia_modeset"
|
||||
"nvidia_uvm"
|
||||
"nvidia_drm"
|
||||
];
|
||||
|
||||
boot.kernelParams = [
|
||||
"nvidia-drm.fbdev=1"
|
||||
"nvidia.NVreg_PreserveVideoMemoryAllocations=1"
|
||||
];
|
||||
|
||||
hardware = {
|
||||
nvidia.open = false;
|
||||
nvidia.modesetting.enable = true;
|
||||
|
|
@ -11,16 +62,49 @@
|
|||
|
||||
nvidia.nvidiaSettings = true;
|
||||
nvidia.dynamicBoost.enable = true;
|
||||
nvidia.package = config.boot.kernelPackages.nvidiaPackages.stable;
|
||||
nvidia.package = config.boot.kernelPackages.nvidiaPackages.beta;
|
||||
|
||||
nvidia.prime = {
|
||||
offload = {
|
||||
enable = true;
|
||||
enableOffloadCmd = true;
|
||||
nvidia.prime =
|
||||
(
|
||||
# Reverse Sync Mode
|
||||
if nvidia-mode == "rsync" then
|
||||
{
|
||||
reverseSync.enable = true;
|
||||
allowExternalGpu = false;
|
||||
}
|
||||
# Offload mode
|
||||
else if nvidia-mode == "offload" then
|
||||
{
|
||||
offload = {
|
||||
enable = true;
|
||||
enableOffloadCmd = true;
|
||||
};
|
||||
}
|
||||
# Sync Mode
|
||||
else
|
||||
{
|
||||
sync.enable = true;
|
||||
}
|
||||
)
|
||||
// {
|
||||
intelBusId = intel-bus-id;
|
||||
nvidiaBusId = nvidia-bus-id;
|
||||
};
|
||||
# This may different between devices
|
||||
intelBusId = "PCI:0:2:0";
|
||||
nvidiaBusId = "PCI:1:0:0";
|
||||
|
||||
graphics = {
|
||||
enable = true;
|
||||
enable32Bit = true;
|
||||
extraPackages = with pkgs; [
|
||||
nvidia-vaapi-driver
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
environment.variables = {
|
||||
# GPU
|
||||
LIBVA_DRIVER_NAME = "nvidia";
|
||||
__GLX_VENDOR_LIBRARY_NAME = "nvidia";
|
||||
NVD_BACKEND = "direct";
|
||||
MOZ_DISABLE_RDD_SANDBOX = 1;
|
||||
};
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue