feat(hardware): add gpu modules for intel/amd/nvidia
This commit is contained in:
		
							parent
							
								
									eb93983bfe
								
							
						
					
					
						commit
						8f229750b0
					
				
					 4 changed files with 136 additions and 0 deletions
				
			
		
							
								
								
									
										29
									
								
								system/modules/hardware/gpu/amd/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								system/modules/hardware/gpu/amd/default.nix
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,29 @@
 | 
			
		|||
{ config, lib, pkgs, ... }:
 | 
			
		||||
 | 
			
		||||
let
 | 
			
		||||
  gpu = config.systemModules.hardware.gpu;
 | 
			
		||||
  inherit (lib) mkIf mkDefault;
 | 
			
		||||
  inherit (builtins) elem;
 | 
			
		||||
in
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
  config = mkIf (elem gpu.type ["amd"]) {
 | 
			
		||||
    hardware.opengl = {
 | 
			
		||||
      extraPackages = with pkgs; [
 | 
			
		||||
        vulkan-tools
 | 
			
		||||
        vulkan-loader
 | 
			
		||||
        vulkan-extension-layer
 | 
			
		||||
        vulkan-validation-layer
 | 
			
		||||
        amdvlk
 | 
			
		||||
        mesa
 | 
			
		||||
      ];
 | 
			
		||||
      extraPackages32 = [ pkgs.driversi686Linux.amdvlk ];
 | 
			
		||||
      boot = {
 | 
			
		||||
        initrd.kernelModules = ["amdgpu"];
 | 
			
		||||
        kernelModules = ["amdgpu"];
 | 
			
		||||
      };
 | 
			
		||||
      environment.systemPackages = [ pkgs.nvtopPackages.amd ];
 | 
			
		||||
      services.xserver.videoDrivers = mkDefault ["modesetting" "amdgpu"];
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										19
									
								
								system/modules/hardware/gpu/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								system/modules/hardware/gpu/default.nix
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,19 @@
 | 
			
		|||
{ lib, ... }:
 | 
			
		||||
 | 
			
		||||
let
 | 
			
		||||
  inherit (lib) types mkOption;
 | 
			
		||||
in
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
  imports = [
 | 
			
		||||
    ./amd
 | 
			
		||||
    ./intel
 | 
			
		||||
    ./nvidia
 | 
			
		||||
  ];
 | 
			
		||||
 | 
			
		||||
  options.systemModules.hardware.gpu.type = mkOption {
 | 
			
		||||
    type = with types; nullOr (enum ["intel" "amd" "nvidia"]);
 | 
			
		||||
    default = null;
 | 
			
		||||
    description = "Type of gpu system module to use";
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										37
									
								
								system/modules/hardware/gpu/intel/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								system/modules/hardware/gpu/intel/default.nix
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,37 @@
 | 
			
		|||
{ config, lib, pkgs, ... }:
 | 
			
		||||
 | 
			
		||||
let
 | 
			
		||||
  gpu = config.systemModules.hardware.gpu;
 | 
			
		||||
  inherit (lib) mkIf;
 | 
			
		||||
  inherit (builtins) elem;
 | 
			
		||||
 | 
			
		||||
  vaapiIntel = pkgs.vaapiIntel.override {enableHypbridCodec = true;};
 | 
			
		||||
in
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
  config = mkIf (elem gpu.type ["intel"]) {
 | 
			
		||||
    
 | 
			
		||||
    services.xserver.videoDrivers = ["modesetting"];
 | 
			
		||||
    hardware.opengl = {
 | 
			
		||||
      extraPackages = with pkgs; [
 | 
			
		||||
        vaapiIntel
 | 
			
		||||
        vaapiVdpau
 | 
			
		||||
        libvdpau-va-gl
 | 
			
		||||
 | 
			
		||||
        intel-compute-runtime
 | 
			
		||||
        intel-media-driver
 | 
			
		||||
      ];
 | 
			
		||||
      extraPackages32 = with pkgs.pkgsi686Linux; [
 | 
			
		||||
        vaapiIntel
 | 
			
		||||
        vaapiVdpau
 | 
			
		||||
        libvdpau-va-gl
 | 
			
		||||
 | 
			
		||||
        intel-media-driver
 | 
			
		||||
      ];
 | 
			
		||||
    };
 | 
			
		||||
    boot.initrd.kernelModules = ["i915"];    
 | 
			
		||||
    environment.variables = mkIf config.hardware.opengl.enable {
 | 
			
		||||
      VDPAU_DRIVER = "va_gl";
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										51
									
								
								system/modules/hardware/gpu/nvidia/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								system/modules/hardware/gpu/nvidia/default.nix
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,51 @@
 | 
			
		|||
{ config, lib, pkgs, ... }:
 | 
			
		||||
 | 
			
		||||
let
 | 
			
		||||
  gpu = config.systemModules.hardware.gpu;
 | 
			
		||||
  inherit (lib) mkIf mkDefault;
 | 
			
		||||
  inherit (builtins) elem;
 | 
			
		||||
  production = config.boot.kernelPackages.nvidiaPackages.production;
 | 
			
		||||
  # beta = config.boot.kernelPackages.nvidiaPackages.beta;
 | 
			
		||||
in
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
# TODO: make option to choose nvidia package
 | 
			
		||||
  config = mkIf (elem gpu.type ["nvidia"]) {
 | 
			
		||||
    hardware = {
 | 
			
		||||
      nvidia = {
 | 
			
		||||
        open = mkDefault true;
 | 
			
		||||
        package = production;
 | 
			
		||||
        forceFullCompositionPipeline = true;
 | 
			
		||||
        nvidiaSettings = false;
 | 
			
		||||
        nvidiaPersistenced = true;
 | 
			
		||||
        modesetting.enable = true;
 | 
			
		||||
        powermanagement = {
 | 
			
		||||
          enable = mkDefault true;
 | 
			
		||||
          finegrained = mkDefault false;
 | 
			
		||||
        };
 | 
			
		||||
      };
 | 
			
		||||
      opengl = {
 | 
			
		||||
        extraPackages = with pkgs; [ nvidia-vaapi-driver ];
 | 
			
		||||
        extraPackages32 = with pkgs.pkgsi686Linux; [ nvidia-vaapi-driver ];
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
    environment.systemPackages = with pkgs; [
 | 
			
		||||
 | 
			
		||||
      libva
 | 
			
		||||
      libva-utils
 | 
			
		||||
 | 
			
		||||
      vulkan-loader
 | 
			
		||||
      vulkan-validation-layers
 | 
			
		||||
      vulkan-tools
 | 
			
		||||
      vulkan-extension-layer
 | 
			
		||||
 | 
			
		||||
      mesa
 | 
			
		||||
 | 
			
		||||
      nvtopPackages.nvidia
 | 
			
		||||
    ];
 | 
			
		||||
    environment.sessionVariables = {
 | 
			
		||||
      LIBVA_DRIVER_NAME = "nvidia";
 | 
			
		||||
      NVD_BACKEND = "direct";
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue