From fd9ee227a6674e621c07d507c4984c6f96caa848 Mon Sep 17 00:00:00 2001 From: Sweetbread Date: Tue, 21 Apr 2026 17:48:52 +0300 Subject: [PATCH] nvidia: fix backlight --- host/Senko/configuration.nix | 1 + host/modules/common.nix | 20 +++++++++++++++++-- host/modules/gpu/nvidia.nix | 37 ++++++++++++++++++++++++++---------- 3 files changed, 46 insertions(+), 12 deletions(-) diff --git a/host/Senko/configuration.nix b/host/Senko/configuration.nix index ff1d29f..4dbc1a7 100644 --- a/host/Senko/configuration.nix +++ b/host/Senko/configuration.nix @@ -24,6 +24,7 @@ hardware.bluetooth.enable = true; host.laptop = true; + host.nvidia.prime.enable = true; environment.systemPackages = [ pkgs.dbgate ]; } diff --git a/host/modules/common.nix b/host/modules/common.nix index 6e28eae..ff6a0ec 100644 --- a/host/modules/common.nix +++ b/host/modules/common.nix @@ -7,7 +7,23 @@ ]; options = { - host.laptop = lib.mkEnableOption "laptop mode"; + host = { + laptop = lib.mkEnableOption "laptop mode"; + + nvidia.prime = { + enable = lib.mkEnableOption "NVIDIA PRIME offload for hybrid graphics"; + intelBusId = lib.mkOption { + type = lib.types.str; + default = "PCI:0:2:0"; + description = "Intel/iGPU Bus ID used by NVIDIA PRIME."; + }; + nvidiaBusId = lib.mkOption { + type = lib.types.str; + default = "PCI:1:0:0"; + description = "NVIDIA dGPU Bus ID used by NVIDIA PRIME."; + }; + }; + }; }; config = { @@ -22,4 +38,4 @@ i18n.defaultLocale = lib.mkDefault "ru_RU.UTF-8"; system.stateVersion = "23.05"; }; -} \ No newline at end of file +} diff --git a/host/modules/gpu/nvidia.nix b/host/modules/gpu/nvidia.nix index 004fefb..a8c1a78 100644 --- a/host/modules/gpu/nvidia.nix +++ b/host/modules/gpu/nvidia.nix @@ -1,6 +1,16 @@ -{ config, pkgs-stable, lib, ... }: { - boot.kernelParams = [ "nvidia-drm.modeset=1" ]; - services.xserver.videoDrivers = [ "nvidia" ]; +{ config, pkgs-stable, lib, ... }: let + primeCfg = config.host.nvidia.prime; + isPrimeOffload = primeCfg.enable; +in { + boot = { + kernelParams = [ "nvidia-drm.modeset=1" ]; + initrd.kernelModules = lib.optionals isPrimeOffload [ "i915" ]; + }; + + services.xserver.videoDrivers = + if isPrimeOffload + then [ "modesetting" "nvidia" ] + else [ "nvidia" ]; hardware = { graphics = { @@ -11,7 +21,7 @@ intel-media-driver libvdpau-va-gl ]; - extraPackages32 = with pkgs-stable.pkgsi686Linux; [nvidia-vaapi-driver intel-media-driver]; + extraPackages32 = with pkgs-stable.pkgsi686Linux; [ nvidia-vaapi-driver intel-media-driver ]; }; nvidia = { @@ -24,21 +34,28 @@ nvidiaSettings = true; package = config.boot.kernelPackages.nvidiaPackages.stable; - prime = lib.optionalAttrs config.host.laptop { - intelBusId = "PCI:0:2:0"; - nvidiaBusId = "PCI:1:0:0"; + prime = lib.optionalAttrs isPrimeOffload { + offload = { + enable = true; + enableOffloadCmd = true; + }; + intelBusId = primeCfg.intelBusId; + nvidiaBusId = primeCfg.nvidiaBusId; }; }; }; environment.sessionVariables = { + __GL_VRR_ALLOWED = 1; + ELECTRON_OZONE_PLATFORM_HINT = "auto"; + NIXOS_OZONE_WL = 1; + } // lib.optionalAttrs isPrimeOffload { + LIBVA_DRIVER_NAME = "iHD"; + } // lib.optionalAttrs (!isPrimeOffload) { WLR_NO_HARDWARE_CURSORS = 1; WLR_DRM_NO_ATOMIC = 1; GBM_BACKEND = "nvidia-drm"; LIBVA_DRIVER_NAME = "nvidia"; __GLX_VENDOR_LIBRARY_NAME = "nvidia"; - __GL_VRR_ALLOWED = 1; - ELECTRON_OZONE_PLATFORM_HINT = "auto"; - NIXOS_OZONE_WL = 1; }; }