nixos-config/modules/services/gamemode/default.nix

67 lines
1.9 KiB
Nix
Raw Normal View History

{ config, lib, pkgs, ... }:
let
cfg = config.ptw.services.gamemode;
in {
options.ptw.services.gamemode = {
enable = lib.mkEnableOption "Enable and configure gamemode";
};
config = let
keyboardBrightnessScript = pkgs.writeShellScript "keyboard-brightness.sh" ''
${pkgs.rgb_keyboard}/bin/rgb_keyboard -l ripple -b "$1"
'';
in lib.mkIf cfg.enable {
security.sudo.extraConfig = ''
${config.ptw.system.singleUser} ALL = (ALL) NOPASSWD: ${keyboardBrightnessScript}
'';
programs.gamemode = {
enable = true;
enableRenice = true;
settings = {
general = {
reaper_freq = 5;
desiredgov = "performance";
igpu_desiredgov = "powersave";
igpu_power_threshold = 0.3;
softrealtime = "on";
renice = 0;
ioprio = 0;
inhibit_screensaver = 1;
};
gpu = {
amd_performance_level = "high";
};
custom = let
switchScript = groupName: "${pkgs.dbus}/bin/dbus-send --print-reply --dest=org.fcitx.Fcitx5 /controller org.fcitx.Fcitx.Controller1.SwitchInputMethodGroup string:'${groupName}'";
2023-02-22 12:35:28 +00:00
pauseFcitx = switchScript "Group 2";
resumeFcitx = switchScript "Group 1";
# The scripts
start = pkgs.writeShellScript "gamemode-start.sh" ''
# Disable Fcitx's IME
${pauseFcitx}
# Turn on the keyboard lights
${config.security.wrapperDir}/sudo ${keyboardBrightnessScript} 1
'';
end = pkgs.writeShellScript "gamemode-end.sh" ''
# Resume Fcitx's IME
${resumeFcitx}
# Turn off the keyboard lights
${config.security.wrapperDir}/sudo ${keyboardBrightnessScript} 0
'';
in {
start = "${start}";
end = "${end}";
};
};
};
};
}