simplify levi video config

This commit is contained in:
Sean Buckley 2024-05-05 23:45:03 -04:00
parent 4bb0b8777d
commit 913896ec30

View file

@ -1,38 +1,8 @@
{ lib, pkgs, ... }: {
let
current-mode = "nvidia-mux";
constants = {
hardware.nvidia.prime.intelBusId = "PCI:0:2:0"; hardware.nvidia.prime.intelBusId = "PCI:0:2:0";
hardware.nvidia.prime.nvidiaBusId = "PCI:1:0:0"; hardware.nvidia.prime.nvidiaBusId = "PCI:1:0:0";
};
available-modes = { ### NVIDIA-only using MUX switch in BIOS.
nvidia = {
### "sync mode"
#
# good:
# max performance on external displays
# no BIOS settings change needed
#
# bad:
# graphics performance overhead on internal display
# internal display capped at 60hz
#
hardware.nvidia.prime.sync.enable = true;
hardware.nvidia.modesetting.enable = true;
services.xserver.displayManager.gdm.wayland = false;
services.xserver.videoDrivers = [ "nvidia" ];
# xrandr workaround for laptop panel not showing up with GDM. Reference:
# https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/hardware/video/nvidia.nix
services.xserver.displayManager.sessionCommands = ''
${pkgs.xorg.xrandr}/bin/xrandr --setprovideroutputsource modesetting NVIDIA-0
'';
};
nvidia-mux = {
### optimus disabled in BIOS with MUX switch.
# #
# good: # good:
# simple, always works. # simple, always works.
@ -47,9 +17,32 @@ let
services.xserver.screenSection = '' services.xserver.screenSection = ''
Option "metamodes" "DP-2: 2560x1440_165 +0+0 {AllowGSYNCCompatible=On}" Option "metamodes" "DP-2: 2560x1440_165 +0+0 {AllowGSYNCCompatible=On}"
''; '';
}; }
################################################################################
### "sync mode"
#
# good:
# max performance on external displays
# no BIOS settings change needed
#
# bad:
# graphics performance overhead on internal display
# internal display capped at 60hz
#
# hardware.nvidia.prime.sync.enable = true;
# hardware.nvidia.modesetting.enable = true;
# services.xserver.displayManager.gdm.wayland = false;
# services.xserver.videoDrivers = [ "nvidia" ];
# # xrandr workaround for laptop panel not showing up with GDM. Reference:
# # https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/hardware/video/nvidia.nix
# services.xserver.displayManager.sessionCommands = ''
# ${pkgs.xorg.xrandr}/bin/xrandr --setprovideroutputsource modesetting NVIDIA-0
# '';
################################################################################
intel = {
### nvidia drivers disabled ### nvidia drivers disabled
# #
# Not well tested. Possibly Incomplete. # Not well tested. Possibly Incomplete.
@ -58,10 +51,10 @@ let
# Shutting off Nvidia GPU would theoretically save power. # Shutting off Nvidia GPU would theoretically save power.
# I do not think this actually powers down the Nvidia GPU, just stops using it. # I do not think this actually powers down the Nvidia GPU, just stops using it.
# #
boot.kernelParams = [ "module_blacklist=nouveau" ]; # boot.kernelParams = [ "module_blacklist=nouveau" ];
};
################################################################################
hybrid = {
### hybrid graphics ### hybrid graphics
# #
# Not well tested. Possibly Incomplete. # Not well tested. Possibly Incomplete.
@ -70,23 +63,14 @@ let
# Everything would use intel by default, # Everything would use intel by default,
# but specific apps would run on the nvidia GPU under the script. # but specific apps would run on the nvidia GPU under the script.
# #
hardware.nvidia.prime.offload.enable = true; # hardware.nvidia.prime.offload.enable = true;
services.xserver.videoDrivers = [ "nvidia" ]; # services.xserver.videoDrivers = [ "nvidia" ];
environment.systemPackages = [ # environment.systemPackages = [
(pkgs.writeShellScriptBin "nv" '' # (pkgs.writeShellScriptBin "nv" ''
export __NV_PRIME_RENDER_OFFLOAD=1 # export __NV_PRIME_RENDER_OFFLOAD=1
export __NV_PRIME_RENDER_OFFLOAD_PROVIDER=NVIDIA-G0 # export __NV_PRIME_RENDER_OFFLOAD_PROVIDER=NVIDIA-G0
export __GLX_VENDOR_LIBRARY_NAME=nvidia # export __GLX_VENDOR_LIBRARY_NAME=nvidia
export __VK_LAYER_NV_optimus=NVIDIA_only # export __VK_LAYER_NV_optimus=NVIDIA_only
exec "$@" # exec "$@"
'') # '')
]; # ];
};
};
in
lib.mkMerge [
(constants)
(available-modes.${current-mode})
]