config/modules/nixos/nvidia.nix
chloe caruso 4b91b37f4a feat: "autofmt" code formatter
different codebases use different formatters. autofmt looks for project
configuration to pick the correct formatter, allowing an editor to
simply point to the script and have all ambiguities resolved.

this commit overhauls the conform configuration to set up autofmt
correctly, as well installing it with 'pkgs.autofmt'

closes #6
2025-08-17 20:40:58 -07:00

110 lines
3 KiB
Nix

{
pkgs,
config,
...
}:
let
nvidiaDriverChannel = config.boot.kernelPackages.nvidiaPackages.latest;
in
{
services.xserver.videoDrivers = [
"nvidia"
"amdgpu"
];
nixpkgs.config = {
nvidia.acceptLicense = true;
allowUnfree = true;
};
# 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
];
# Blacklist nouveau to avoid conflicts
boot.blacklistedKernelModules = [ "nouveau" ];
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
};
hardware = {
nvidia = {
forceFullCompositionPipeline = true; # Prevents screen tearing
# Modesetting is required.
modesetting.enable = true;
powerManagement = {
enable = true; # Power management
finegrained = true; # More precise power consumption control
};
prime = {
offload = {
enable = true;
enableOffloadCmd = true;
};
nvidiaBusId = "PCI:1:0:0";
amdgpuBusId = "PCI:15:0:0";
};
# Use the NVidia open source kernel module (not to be confused with the
# independent third-party "nouveau" open source driver).
# Currently alpha-quality/buggy, so false is currently the recommended setting.
open = true;
# Environment variables for better compatibility
# Enable the Nvidia settings menu,
# accessible via `nvidia-settings`.
nvidiaSettings = true;
package = nvidiaDriverChannel;
# #Fixes a glitch
# nvidiaPersistenced = true;
};
nvidia-container-toolkit.enable = true;
graphics = {
enable = true;
package = nvidiaDriverChannel;
enable32Bit = true;
extraPackages = with pkgs; [
nvidia-vaapi-driver
vaapiVdpau
libvdpau-va-gl
mesa
egl-wayland
vulkan-loader
vulkan-validation-layers
libva
];
};
};
nix.settings = {
substituters = [ "https://cuda-maintainers.cachix.org" ];
trusted-public-keys = [
"cuda-maintainers.cachix.org-1:0dq3bujKpuEPMCX6U4WylrUDZ9JyUG0VpVZa7CNfq5E="
];
};
environment.systemPackages = with pkgs; [
vulkan-tools
glxinfo
libva-utils # VA-API debugging tools
];
}