{ pkgs , config , lib , ... }: let inherit (lib) mkEnableOption mkIf; cfg = config.my-namespace.hardware.novidia; in { options.my-namespace.hardware.novidia = { enable = mkEnableOption "Bypass nvidia driver"; }; hardware.graphics = mkIf cfg.enable{ enable = false; extraPackages = with pkgs; [ nvidia-vaapi-driver ]; }; config = mkIf cfg.enable { # Enable OpenGL hardware.graphics = { enable = false; extraPackages = with pkgs; [ nvidia-vaapi-driver ]; }; # Load nvidia driver for Xorg and Wayland # boot.extraModulePackages = [ config.boot.kernelPackages.nvidia_x11 ]; # boot.extraModulePackages = [ config.boot.kernelPackages.nvidia_x11_production ]; boot.extraModulePackages = [ config.boot.kernelPackages.nvidia_x11 ]; boot.loader.systemd-boot.consoleMode = "max"; boot.kernelParams = [ # "nvidia-drm.fbdev=1" # "nvidia-drm.modeset=1" # "nvidia.NVreg_PreserveVideoMemoryAllocations=1" # "nomodeset" # "nvidia_drm.modeset=1" ]; boot.blacklistedKernelModules = [ "i915" "nouveau" ]; boot.extraModprobeConfig = '' blacklist nouveau options nouveau modeset=0 ''; # boot.extraModprobeConfig = "options nvidia " + lib.concatStringsSep " " [ # # nvidia assume that by default your CPU does not support PAT, # # but this is effectively never the case in 2023 # "NVreg_UsePageAttributeTable=1" # # This may be a noop, but it's somewhat uncertain # "NVreg_EnablePCIeGen3=1" # # This is sometimes needed for ddc/ci support, see # # https://www.ddcutil.com/nvidia/ # # # # Current monitor does not support it, but this is useful for # # the future # "NVreg_RegistryDwords=RMUseSwI2c=0x01;RMI2cSpeed=100" # # When (if!) I get another nvidia GPU, check for resizeable bar # # settings # ]; services.xserver.videoDrivers = [ "nvidia" ]; boot.initrd.kernelModules = [ # "nvidia" # "nvidia-drm" # "nvidiafb" # "nvidia-modeset" # "nvidia-uvm" # "i2c-nvidia_gpu" ]; #boot.initrd.kernelModules = [ "nvidia" ]; hardware.enableAllFirmware = true; hardware.nvidia = { nvidiaPersistenced = true; # Modesetting is required. modesetting.enable = true; # Nvidia power management. Experimental, and can cause sleep/suspend to fail. # Enable this if you have graphical corruption issues or application crashes after waking # up from sleep. This fixes it by saving the entire VRAM memory to /tmp/ instead # of just the bare essentials. powerManagement.enable = true; # Fine-grained power management. Turns off GPU when not in use. # Experimental and only works on modern Nvidia GPUs (Turing or newer). powerManagement.finegrained = false; # Use the NVidia open source kernel module (not to be confused with the # independent third-party "nouveau" open source driver). # Support is limited to the Turing and later architectures. Full list of # supported GPUs is at: # https://github.com/NVIDIA/open-gpu-kernel-modules#compatible-gpus # Only available from driver 515.43.04+ # Currently alpha-quality/buggy, so false is currently the recommended setting. open = false; # Enable the Nvidia settings menu, # accessible via `nvidia-settings`. nvidiaSettings = true; # Optionally, you may need to select the appropriate driver version for your specific GPU. package = config.boot.kernelPackages.nvidiaPackages.stable; # package = config.boot.kernelPackages.nvidiaPackages.production; }; hardware.nvidia.prime = { offload = { enable = true; enableOffloadCmd = true; }; # Make sure to use the correct Bus ID values for your system! # intelBusId = "PCI:0:2:0"; nvidiaBusId = "PCI:01:0:0"; amdgpuBusId = "PCI:50:0:0"; #For AMD GPU }; users.users.andreas = { extraGroups = [ "video" "render" ]; }; }; }