# Nvidia configuration for NixOS with Wayland and Hyprland support # Import this module only if you have an Nvidia GPU { pkgs, config, ... }: let # Using beta driver for recent GPUs like RTX 4070 nvidiaDriverChannel = config.boot.kernelPackages.nvidiaPackages.production; in { # Video drivers configuration for Xorg and Wayland services.xserver.videoDrivers = ["nvidia"]; # Simplified - other modules are loaded automatically # Kernel parameters for better Wayland and Hyprland integration boot.kernelParams = [ "nvidia-drm.modeset=1" # Enable mode setting for Wayland "nvidia.NVreg_PreserveVideoMemoryAllocations=1" # Improves resume after sleep "nvidia.NVreg_RegistryDwords=PowerMizerEnable=0x1;PerfLevelSrc=0x2222;PowerMizerLevel=0x3;PowerMizerDefault=0x3;PowerMizerDefaultAC=0x3" # Performance/power optimizations ]; # Blacklist nouveau to avoid conflicts boot.blacklistedKernelModules = ["nouveau"]; # Environment variables for better compatibility environment.variables = { LIBVA_DRIVER_NAME = "nvidia"; # Hardware video acceleration XDG_SESSION_TYPE = "wayland"; # Force Wayland GBM_BACKEND = "nvidia-drm"; # Graphics backend for Wayland __GLX_VENDOR_LIBRARY_NAME = "nvidia"; # Use Nvidia driver for GLX WLR_NO_HARDWARE_CURSORS = "1"; # Fix for cursors on Wayland NIXOS_OZONE_WL = "1"; # Wayland support for Electron apps __GL_GSYNC_ALLOWED = "1"; # Enable G-Sync if available __GL_VRR_ALLOWED = "1"; # Enable VRR (Variable Refresh Rate) WLR_DRM_NO_ATOMIC = "1"; # Fix for some issues with Hyprland NVD_BACKEND = "direct"; # Configuration for new driver MOZ_ENABLE_WAYLAND = "1"; # Wayland support for Firefox }; # Configuration for proprietary packages nixpkgs.config = { nvidia.acceptLicense = true; }; # Nvidia configuration hardware = { nvidia = { open = false; # Proprietary driver for better performance nvidiaSettings = true; # Nvidia settings utility powerManagement = { enable = true; # Power management finegrained = true; # More precise power consumption control }; modesetting.enable = true; # Required for Wayland package = nvidiaDriverChannel; forceFullCompositionPipeline = true; # Prevents screen tearing # Configuration for hybrid AMD+Nvidia laptop prime = { # Optimized configuration for switchable graphics laptops offload = { enable = true; # Mode optimized for power saving enableOffloadCmd = true; # Allows running applications with dedicated GPU }; # sync.enable disabled as offload is generally better for laptops sync.enable = false; # PCI IDs verified for your hardware amdgpuBusId = "PCI:5:0:0"; # Integrated AMD GPU nvidiaBusId = "PCI:1:0:0"; # Dedicated Nvidia GPU }; }; # Enhanced graphics support graphics = { enable = true; package = nvidiaDriverChannel; enable32Bit = true; extraPackages = with pkgs; [ nvidia-vaapi-driver libva-vdpau-driver libvdpau-va-gl mesa egl-wayland vulkan-loader vulkan-validation-layers libva ]; }; }; # Nix cache for CUDA nix.settings = { substituters = ["https://cuda-maintainers.cachix.org"]; trusted-public-keys = [ "cuda-maintainers.cachix.org-1:0dq3bujKpuEPMCX6U4WylrUDZ9JyUG0VpVZa7CNfq5E=" ]; }; # Additional useful packages environment.systemPackages = with pkgs; [ vulkan-tools mesa-demos libva-utils # VA-API debugging tools ]; # Enable Nvidia container toolkit for GPU acceleration in containers (docker) hardware.nvidia-container-toolkit.enable = true; }