feat: nvidia prime mode
This commit is contained in:
parent
e1af19001f
commit
8e13adac78
9 changed files with 133 additions and 50 deletions
|
|
@ -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";
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@ in
|
||||||
./boot.nix
|
./boot.nix
|
||||||
../../modules
|
../../modules
|
||||||
../../modules/wireguard.nix
|
../../modules/wireguard.nix
|
||||||
|
../../modules/dn-ca.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
# Overrides
|
# Overrides
|
||||||
|
|
|
||||||
|
|
@ -1,25 +1,27 @@
|
||||||
{ ... }:
|
{ ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
|
fileSystems."/mnt/storage" = {
|
||||||
|
device = "router.dn:/mnt/storage";
|
||||||
|
fsType = "nfs";
|
||||||
|
options = [
|
||||||
|
"x-systemd.automount"
|
||||||
|
"noauto"
|
||||||
|
"x-systemd.idle-timeout=600"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
boot.loader.systemd-boot.enable = true;
|
boot.loader.systemd-boot.enable = true;
|
||||||
boot.kernelParams = [
|
|
||||||
"nvidia-drm.fbdev=1"
|
|
||||||
"nvidia.NVreg_PreserveVideoMemoryAllocations=1"
|
|
||||||
];
|
|
||||||
|
|
||||||
# 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 ";
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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";
|
||||||
|
|
|
||||||
|
|
@ -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,15 +35,14 @@ 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 {
|
enableHybridCodec = true;
|
||||||
enableHybridCodec = true;
|
})
|
||||||
})
|
libvdpau-va-gl
|
||||||
libvdpau-va-gl
|
];
|
||||||
];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enableRedistributableFirmware = true;
|
enableRedistributableFirmware = true;
|
||||||
|
|
|
||||||
|
|
@ -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 =
|
||||||
offload = {
|
(
|
||||||
enable = true;
|
# Reverse Sync Mode
|
||||||
enableOffloadCmd = true;
|
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";
|
graphics = {
|
||||||
nvidiaBusId = "PCI:1:0:0";
|
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;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,6 @@
|
||||||
"input"
|
"input"
|
||||||
"networkmanager"
|
"networkmanager"
|
||||||
"docker"
|
"docker"
|
||||||
"libvirtd"
|
|
||||||
"kvm"
|
"kvm"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue