50 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{
 | 
						|
  lib,
 | 
						|
  config,
 | 
						|
  pkgs,
 | 
						|
  inputs',
 | 
						|
  ...
 | 
						|
}: let
 | 
						|
  inherit (lib) optionalString elem getExe getExe' mkIf;
 | 
						|
  inherit (config.ooknet.workstation) profiles environment;
 | 
						|
 | 
						|
  hyprctl = "${getExe' inputs'.hyprland.packages.hyprland "hyprctl"} -i 0";
 | 
						|
  notify-send = getExe pkgs.libnotify;
 | 
						|
  powerprofilectl = getExe pkgs.power-profiles-daemon;
 | 
						|
 | 
						|
  optimizeScriptStart = pkgs.writeShellScript "gamemode-start" ''
 | 
						|
    ${optionalString (environment == "hyprland") ''
 | 
						|
      ${hyprctl} -i 0 --batch "\
 | 
						|
        keyword misc:vfr false; \
 | 
						|
        keyword render:direct_scanout true; \
 | 
						|
        keyword general:allow_tearing true" \
 | 
						|
    ''}
 | 
						|
    ${powerprofilectl} set performance
 | 
						|
    ${notify-send} 'Gamemode Started'
 | 
						|
  '';
 | 
						|
 | 
						|
  optimizeScriptStop = pkgs.writeShellScript "gamemode-end" ''
 | 
						|
    ${optionalString (environment == "hyprland") ''
 | 
						|
      ${hyprctl} -i 0 reload
 | 
						|
    ''}
 | 
						|
    ${powerprofilectl} set balanced
 | 
						|
    ${notify-send} 'Gamemode Stopped'
 | 
						|
  '';
 | 
						|
in {
 | 
						|
  config = mkIf (elem "gaming" profiles) {
 | 
						|
    environment.systemPackages = [pkgs.power-profiles-daemon];
 | 
						|
    programs.gamemode = {
 | 
						|
      enable = true;
 | 
						|
      settings = {
 | 
						|
        general = {
 | 
						|
          renice = 15;
 | 
						|
          softrealtime = "auto";
 | 
						|
        };
 | 
						|
        custom = {
 | 
						|
          start = optimizeScriptStart.outPath;
 | 
						|
          end = optimizeScriptStop.outPath;
 | 
						|
        };
 | 
						|
      };
 | 
						|
    };
 | 
						|
  };
 | 
						|
}
 |