testing ags again-.-
This commit is contained in:
95
home/core/services/power-monitor/default.nix
Normal file
95
home/core/services/power-monitor/default.nix
Normal file
@@ -0,0 +1,95 @@
|
||||
{
|
||||
pkgs,
|
||||
lib,
|
||||
config,
|
||||
...
|
||||
}: let
|
||||
script = pkgs.writeShellScript "power_monitor.sh" ''
|
||||
BAT=$(echo /sys/class/power_supply/BAT*)
|
||||
BAT_STATUS="$BAT/status"
|
||||
BAT_CAP="$BAT/capacity"
|
||||
|
||||
AC_PROFILE="performance"
|
||||
BAT_PROFILE="power-saver"
|
||||
|
||||
# wait a while if needed
|
||||
[ -z "$STARTUP_WAIT" ] || sleep "$STARTUP_WAIT"
|
||||
|
||||
# start the monitor loop
|
||||
currentStatus=$(cat "$BAT_STATUS")
|
||||
prevProfile=$AC_PROFILE
|
||||
prevStatus=Charging
|
||||
|
||||
# initial run
|
||||
if [ "$currentStatus" = "Discharging" ]; then
|
||||
profile="$BAT_PROFILE"
|
||||
hyprctl -i 0 --batch 'keyword decoration:blur:enabled false; keyword animations:enabled false'
|
||||
else
|
||||
profile="$AC_PROFILE"
|
||||
hyprctl -i 0 --batch 'keyword decoration:blur:enabled true; keyword animations:enabled true'
|
||||
fi
|
||||
|
||||
# set the new profile
|
||||
if [ $prevProfile != "$profile" ]; then
|
||||
echo setting power profile to "$profile"
|
||||
powerprofilesctl set "$profile"
|
||||
fi
|
||||
|
||||
prevProfile="$profile"
|
||||
prevStatus="$currentStatus"
|
||||
|
||||
# event loop
|
||||
while true; do
|
||||
currentStatus=$(cat "$BAT_STATUS")
|
||||
if [ "$currentStatus" != "$prevStatus" ]; then
|
||||
# read the current state
|
||||
if [ "$currentStatus" = "Discharging" ]; then
|
||||
profile="$BAT_PROFILE"
|
||||
hyprctl -i 0 --batch 'keyword decoration:blur:enabled false; keyword animations:enabled false'
|
||||
else
|
||||
profile="$AC_PROFILE"
|
||||
hyprctl -i 0 --batch 'keyword decoration:blur:enabled true; keyword animations:enabled true'
|
||||
fi
|
||||
|
||||
# set the new profile
|
||||
if [ $prevProfile != "$profile" ]; then
|
||||
echo setting power profile to "$profile"
|
||||
powerprofilesctl set "$profile"
|
||||
fi
|
||||
|
||||
prevProfile="$profile"
|
||||
prevStatus="$currentStatus"
|
||||
fi
|
||||
|
||||
# wait for the next power change event
|
||||
inotifywait -qq "$BAT_STATUS" "$BAT_CAP"
|
||||
done
|
||||
'';
|
||||
|
||||
dependencies = with pkgs; [
|
||||
coreutils
|
||||
config.wayland.windowManager.hyprland.package
|
||||
power-profiles-daemon
|
||||
inotify-tools
|
||||
jaq
|
||||
];
|
||||
in {
|
||||
# Power state monitor. Switches Power profiles based on charging state.
|
||||
# Plugged in - performance
|
||||
# Unplugged - power-saver
|
||||
systemd.user.services.power-monitor = {
|
||||
Unit = {
|
||||
Description = "Power Monitor";
|
||||
After = ["power-profiles-daemon.service"];
|
||||
};
|
||||
|
||||
Service = {
|
||||
Environment = "PATH=/run/wrappers/bin:${lib.makeBinPath dependencies}";
|
||||
Type = "simple";
|
||||
ExecStart = script;
|
||||
Restart = "on-failure";
|
||||
};
|
||||
|
||||
Install.WantedBy = ["default.target"];
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user