mirror of
https://github.com/moons-14/dotfiles.git
synced 2026-10-06 07:08:12 +09:00
79 lines
2.1 KiB
Nix
79 lines
2.1 KiB
Nix
{ lib, pkgs, ... }:
|
|
let
|
|
brightnessctl = lib.getExe pkgs.brightnessctl;
|
|
loginctl = lib.getExe' pkgs.systemd "loginctl";
|
|
rm = lib.getExe' pkgs.coreutils "rm";
|
|
systemctl = lib.getExe' pkgs.systemd "systemctl";
|
|
wlopm = lib.getExe pkgs.wlopm;
|
|
noctalia = lib.getExe pkgs.noctalia-shell;
|
|
|
|
brightnessState = "$XDG_RUNTIME_DIR/swayidle-brightness";
|
|
|
|
onBattery = pkgs.writeShellScript "swayidle-on-battery" ''
|
|
[ "''${SWAYIDLE_ASSUME_AC:-0}" = 1 ] && exit 1
|
|
|
|
for supply in /sys/class/power_supply/*; do
|
|
[ -f "$supply/type" ] || continue
|
|
[ "$(< "$supply/type")" = "Battery" ] || continue
|
|
[ -f "$supply/status" ] || continue
|
|
[ "$(< "$supply/status")" = "Discharging" ] && exit 0
|
|
done
|
|
|
|
exit 1
|
|
'';
|
|
|
|
isLocked = pkgs.writeShellScript "swayidle-is-locked" ''
|
|
[ -n "$XDG_SESSION_ID" ] \
|
|
&& [ "$(${loginctl} show-session "$XDG_SESSION_ID" \
|
|
--property=LockedHint --value)" = "yes" ]
|
|
'';
|
|
|
|
dimScreen = pkgs.writeShellScript "swayidle-dim-screen" ''
|
|
if ${onBattery}; then
|
|
${brightnessctl} get > "${brightnessState}" 2>/dev/null || exit 0
|
|
${brightnessctl} set 10% >/dev/null 2>&1 || true
|
|
elif ${isLocked}; then
|
|
${wlopm} --off '*'
|
|
fi
|
|
'';
|
|
|
|
restoreScreen = pkgs.writeShellScript "swayidle-restore-screen" ''
|
|
${wlopm} --on '*' >/dev/null 2>&1 || true
|
|
|
|
if [ -f "${brightnessState}" ]; then
|
|
${brightnessctl} set "$(< "${brightnessState}")" >/dev/null 2>&1 || true
|
|
${rm} -f "${brightnessState}"
|
|
fi
|
|
'';
|
|
|
|
suspend = pkgs.writeShellScript "swayidle-suspend" ''
|
|
if ${onBattery} || ${isLocked}; then
|
|
exec ${systemctl} suspend
|
|
fi
|
|
'';
|
|
in
|
|
{
|
|
services.swayidle = {
|
|
enable = true;
|
|
systemdTargets = [ "graphical-session.target" ];
|
|
|
|
timeouts = [
|
|
{
|
|
timeout = 300;
|
|
command = "${dimScreen}";
|
|
resumeCommand = "${restoreScreen}";
|
|
}
|
|
{
|
|
timeout = 360;
|
|
command = "${suspend}";
|
|
}
|
|
];
|
|
|
|
events = {
|
|
lock = "${noctalia} msg session lock";
|
|
before-sleep = "${noctalia} msg session lock";
|
|
after-resume = "${restoreScreen}";
|
|
};
|
|
};
|
|
}
|