{ 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}'"; 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}"; }; }; }; }; }