132 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			132 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{ config
 | 
						|
, lib
 | 
						|
, pkgs
 | 
						|
, ...
 | 
						|
}:
 | 
						|
let
 | 
						|
  inherit (lib) mkEnableOption mkIf;
 | 
						|
  inherit (lib.my-namespace) disabled enabled;
 | 
						|
 | 
						|
  cfg = config.my-namespace.hardware.graphics-nvidia-prime-amd;
 | 
						|
in
 | 
						|
{
 | 
						|
  options.my-namespace.hardware.graphics-nvidia-prime-amd = {
 | 
						|
    enable = mkEnableOption "Enable nvidia";
 | 
						|
  };
 | 
						|
  config = mkIf cfg.enable {
 | 
						|
 | 
						|
    # Enable NVIDIA driver for X11 and Wayland
 | 
						|
    services.xserver.videoDrivers = [ "amdgpu" "nvidia" ];
 | 
						|
 | 
						|
    # Enable OpenGL
 | 
						|
    hardware.graphics = {
 | 
						|
      enable = true;
 | 
						|
      extraPackages = with pkgs; [ nvidia-vaapi-driver ];
 | 
						|
    };
 | 
						|
 | 
						|
    # Use Beta Driver Package
 | 
						|
    boot.extraModulePackages = [ config.boot.kernelPackages.nvidia_x11_beta ];
 | 
						|
 | 
						|
 | 
						|
 | 
						|
    boot.loader.systemd-boot.consoleMode = "max";
 | 
						|
 | 
						|
    # Enable required Kernel Modules
 | 
						|
    boot.initrd.kernelModules = [
 | 
						|
      "amdgpu"
 | 
						|
      "nvidia"
 | 
						|
      # "nvidia-drm"
 | 
						|
      "nvidiafb"
 | 
						|
      # "nvidia-uvm"
 | 
						|
      # "nvidia-modeset"
 | 
						|
      # "i2c-nvidia_gpu"    
 | 
						|
    ];
 | 
						|
 | 
						|
 | 
						|
    boot.kernelParams = [
 | 
						|
      "amdgpu.modeset=1"
 | 
						|
      "nvidia-drm.fbdev=1"
 | 
						|
      "nvidia-drm.modeset=0"
 | 
						|
      #  "nvidia.NVreg_PreserveVideoMemoryAllocations=0"
 | 
						|
      "amd_iommu=on"
 | 
						|
      # "vfio-pci.ids=\"10de:2489,10de:228b\""
 | 
						|
      # "nomodeset"
 | 
						|
      #  "nvidia_drm.modeset=1"
 | 
						|
    ];
 | 
						|
 | 
						|
 | 
						|
    # Blacklist intel and nouveau
 | 
						|
    boot.blacklistedKernelModules = [
 | 
						|
      "i915"
 | 
						|
      "nouveau"
 | 
						|
      # "nvidia"
 | 
						|
      # "nvidia-drm"
 | 
						|
      # "nvidia-uvm"
 | 
						|
      # "nvidiafb"
 | 
						|
      # "nvidia_drm"
 | 
						|
      # "nvidia_modeset"
 | 
						|
    ];
 | 
						|
 | 
						|
    # Extra blacklist nouveau
 | 
						|
    boot.extraModprobeConfig = ''
 | 
						|
      blacklist nouveau
 | 
						|
      options nouveau modeset=0
 | 
						|
    '';
 | 
						|
 | 
						|
    # Configure NVIDIA driver
 | 
						|
    hardware.nvidia = {
 | 
						|
      # 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.beta;
 | 
						|
      # package = config.boot.kernelPackages.nvidiaPackages.none;
 | 
						|
      # package = config.boot.kernelPackages.nvidiaPackages.production;
 | 
						|
 | 
						|
      forceFullCompositionPipeline = false;
 | 
						|
 | 
						|
      prime = {
 | 
						|
        offload = {
 | 
						|
          enable = true;
 | 
						|
          enableOffloadCmd = true;
 | 
						|
        };
 | 
						|
        reverseSync.enable = false;
 | 
						|
        # 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
 | 
						|
      };
 | 
						|
 | 
						|
    };
 | 
						|
 | 
						|
    # Add user to extra groups
 | 
						|
    users.users.andreas = {
 | 
						|
      extraGroups = [ "video" "render" ];
 | 
						|
    };
 | 
						|
 | 
						|
  };
 | 
						|
}
 |