feat: nvidia prime mode

This commit is contained in:
DACHXY 2025-01-04 14:22:13 +08:00
parent e1af19001f
commit 8e13adac78
9 changed files with 133 additions and 50 deletions

View file

@ -12,7 +12,7 @@
QT_WAYLAND_DISABLE_WINDOWDECORATION = "1"; QT_WAYLAND_DISABLE_WINDOWDECORATION = "1";
QT_AUTO_SCREEN_SCALE_FACTOR = "1"; QT_AUTO_SCREEN_SCALE_FACTOR = "1";
GTK_CSD = "0"; GTK_CSD = "0";
WLR_DRM_DEVICES = "/dev/dri/card0"; WLR_DRM_DEVICES = "/dev/dri/card1";
WLR_NO_HARDWARE_CURSORS = "1"; WLR_NO_HARDWARE_CURSORS = "1";
CLUTTER_BACKEND = "wayland"; CLUTTER_BACKEND = "wayland";
WLR_RENDERER = "vulkan"; WLR_RENDERER = "vulkan";
@ -29,8 +29,5 @@
ELECTRON_OZONE_PLATFORM_HINT = "auto"; ELECTRON_OZONE_PLATFORM_HINT = "auto";
GDK_BACKEND = "wayland"; GDK_BACKEND = "wayland";
# GPU
LIBVA_DRIVER_NAME = "nvidia";
__GLX_VENDOR_LIBRARY_NAME = "nvidia";
}; };
} }

View file

@ -19,6 +19,7 @@ in
./boot.nix ./boot.nix
../../modules ../../modules
../../modules/wireguard.nix ../../modules/wireguard.nix
../../modules/dn-ca.nix
]; ];
# Overrides # Overrides

View file

@ -1,25 +1,27 @@
{ ... }: { ... }:
{ {
boot.loader.systemd-boot.enable = true;
boot.kernelParams = [ fileSystems."/mnt/storage" = {
"nvidia-drm.fbdev=1" device = "router.dn:/mnt/storage";
"nvidia.NVreg_PreserveVideoMemoryAllocations=1" fsType = "nfs";
options = [
"x-systemd.automount"
"noauto"
"x-systemd.idle-timeout=600"
]; ];
};
boot.loader.systemd-boot.enable = true;
# Enable F keys in some wireless keyboard (Ex. neo65) # Enable F keys in some wireless keyboard (Ex. neo65)
boot.extraModprobeConfig = '' boot.extraModprobeConfig = ''
options hid_apple fnmode=2 options hid_apple fnmode=2
options nvidia_drm modeset=1 dbdev=1
''; '';
boot.initrd.systemd.enable = true; boot.initrd.systemd.enable = true;
boot.initrd.kernelModules = [ boot.initrd.kernelModules = [
"nvidia"
"i915" "i915"
"nvidia_modeset"
"nvidia_uvm"
"nvidia_drm"
]; ];
boot.swraid.enable = true; boot.swraid.enable = true;
boot.swraid.mdadmConf = "\n MAILADDR smitty\n ARRAY /dev/md126 metadata=1.2 name=stuff:0\n UUID=3b0b7c51-2681-407e-a22a-e965a8aeece7\n "; boot.swraid.mdadmConf = "\n MAILADDR smitty\n ARRAY /dev/md126 metadata=1.2 name=stuff:0\n UUID=3b0b7c51-2681-407e-a22a-e965a8aeece7\n ";

View file

@ -11,6 +11,10 @@
let let
hyprcursor-size = "32"; hyprcursor-size = "32";
xcursor-size = "24"; xcursor-size = "24";
nvidia-mode = "rsync";
# Get bus id with `lshw`
intel-bus-id = "PCI:0:2:0";
nvidia-bus-id = "PCI:1:0:0";
in in
{ {
imports = [ imports = [
@ -18,9 +22,14 @@ in
./hardware-configuration.nix ./hardware-configuration.nix
./boot.nix ./boot.nix
../../modules ../../modules
../../modules/nvidia.nix (import ../../modules/nvidia.nix {
nvidia-mode = nvidia-mode;
intel-bus-id = intel-bus-id;
nvidia-bus-id = nvidia-bus-id;
})
../../modules/gaming.nix ../../modules/gaming.nix
../../modules/wireguard.nix ../../modules/wireguard.nix
../../modules/dn-ca.nix
]; ];
# Overrides # Overrides

View file

@ -18,7 +18,6 @@
./time.nix ./time.nix
./theme.nix ./theme.nix
./users.nix ./users.nix
./dn-ca.nix
./environment.nix ./environment.nix
./virtualization.nix ./virtualization.nix
./display-manager.nix ./display-manager.nix

View file

@ -1,18 +1,6 @@
{ pkgs, ... }: { pkgs, ... }:
# Nvidia only
let
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
{ {
environment.systemPackages = [ offload ];
environment.variables = { environment.variables = {
ELECTRON_OZONE_PLATFORM_HINT = "auto"; ELECTRON_OZONE_PLATFORM_HINT = "auto";
GSETTINGS_SCHEMA_DIR = "${pkgs.gtk3}/share/gsettings-schemas/${pkgs.gtk3.name}/glib-2.0/schemas"; GSETTINGS_SCHEMA_DIR = "${pkgs.gtk3}/share/gsettings-schemas/${pkgs.gtk3.name}/glib-2.0/schemas";

View file

@ -1,12 +1,17 @@
{ config, pkgs, nixpkgs, inputs, system, ... }: {
config,
pkgs,
inputs,
system,
...
}:
let let
pkgs-unstable = inputs.hyprland.inputs.nixpkgs.legacyPackages.${system}; pkgs-unstable = inputs.hyprland.inputs.nixpkgs.legacyPackages.${system};
in in
{ {
nixpkgs.config.packageOverrides = pkgs: { nixpkgs.config.packageOverrides = pkgs: {
intel-vaapi-driver = intel-vaapi-driver = pkgs.intel-vaapi-driver.override { enableHybridCodec = true; };
pkgs.intel-vaapi-driver.override { enableHybridCodec = true; };
}; };
hardware = { hardware = {
@ -30,8 +35,7 @@ in
enable32Bit = true; enable32Bit = true;
package32 = pkgs-unstable.pkgsi686Linux.mesa.drivers; package32 = pkgs-unstable.pkgsi686Linux.mesa.drivers;
package = pkgs-unstable.mesa.drivers; package = pkgs-unstable.mesa.drivers;
extraPackages = with pkgs; extraPackages = with pkgs; [
[
intel-media-driver # LIBVA_DRIVER_NAME=iHD intel-media-driver # LIBVA_DRIVER_NAME=iHD
vaapiVdpau vaapiVdpau
(vaapiIntel.override { (vaapiIntel.override {

View file

@ -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" ]; 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 = { hardware = {
nvidia.open = false; nvidia.open = false;
nvidia.modesetting.enable = true; nvidia.modesetting.enable = true;
@ -11,16 +62,49 @@
nvidia.nvidiaSettings = true; nvidia.nvidiaSettings = true;
nvidia.dynamicBoost.enable = true; nvidia.dynamicBoost.enable = true;
nvidia.package = config.boot.kernelPackages.nvidiaPackages.stable; nvidia.package = config.boot.kernelPackages.nvidiaPackages.beta;
nvidia.prime = { nvidia.prime =
(
# Reverse Sync Mode
if nvidia-mode == "rsync" then
{
reverseSync.enable = true;
allowExternalGpu = false;
}
# Offload mode
else if nvidia-mode == "offload" then
{
offload = { offload = {
enable = true; enable = true;
enableOffloadCmd = true; enableOffloadCmd = true;
}; };
# This may different between devices }
intelBusId = "PCI:0:2:0"; # Sync Mode
nvidiaBusId = "PCI:1:0:0"; else
{
sync.enable = true;
}
)
// {
intelBusId = intel-bus-id;
nvidiaBusId = nvidia-bus-id;
}; };
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;
}; };
} }

View file

@ -9,7 +9,6 @@
"input" "input"
"networkmanager" "networkmanager"
"docker" "docker"
"libvirtd"
"kvm" "kvm"
]; ];
}; };