ooknet/modules/nixos/workstation/gaming/gamemode.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;
};
};
};
};
}