lifetracker/modules/apps/gamemode/default.nix
2025-01-24 21:42:14 -08:00

74 lines
1.8 KiB
Nix

{
lib,
config,
username,
pkgs,
...
}:
let
cfg = config.gamemode;
gamemode-start = (
pkgs.writeShellApplication {
name = "gamemode-start";
runtimeInputs = with pkgs; [
libnotify
];
text = ''
notify-send -t 3000 -u low 'GameMode' 'GameMode started' -i applications-games -a 'GameMode'
#kscreen-doctor output.DP-1.wcg.enable output.DP-1.hdr.enable output.DP-1.brightness.100;
'';
}
);
gamemode-end = (
pkgs.writeShellApplication {
name = "gamemode-end";
runtimeInputs = with pkgs; [
libnotify
];
text = ''
notify-send -t 3000 -u low 'GameMode' 'GameMode stopped' -i applications-games -a 'GameMode'
#kscreen-doctor output.DP-1.wcg.disable output.DP-1.hdr.disable output.DP-1.brightness.100;
'';
}
);
in
{
options = {
gamemode = {
enable = lib.mkEnableOption "Enable gamemode in NixOS & home-manager";
};
};
config = lib.mkIf cfg.enable {
programs.gamemode = {
enable = true;
settings = {
general = {
desiredgov = "performance";
disable_splitlock = 1;
inhibit_screensaver = 1;
ioprio = 0;
renice = 10;
softrealtime = "auto";
};
cpu = {
park_cores = "yes";
pin_cores = "yes";
};
gpu = {
apply_gpu_optimisations = "accept-responsibility";
amd_performance_level = "high";
};
custom = {
# https://github.com/Electrostasy/dots/blob/master/hosts/terra/gaming.nix
start = "${lib.getBin gamemode-start}/bin/gamemode-start";
end = "${lib.getBin gamemode-end}/bin/gamemode-end";
};
};
};
users.users.${username}.extraGroups = [ "gamemode" ];
home-manager.users.${username} = { };
};
}