mirror of
https://github.com/moons-14/dotfiles.git
synced 2026-10-06 06:08:11 +09:00
power
This commit is contained in:
@@ -7,12 +7,57 @@
|
|||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
cfg = config.my.applications.swayidle;
|
cfg = config.my.applications.swayidle;
|
||||||
noctaliaPkg = inputs.noctalia.packages.${pkgs.system}.default;
|
|
||||||
noctaliaExe = lib.getExe noctaliaPkg;
|
|
||||||
|
|
||||||
lockCmd = "${pkgs.bash}/bin/bash -lc '${noctaliaExe} ipc call lockScreen lock'";
|
noctaliaPkg = inputs.noctalia.packages.${pkgs.system}.default;
|
||||||
lockAndSuspendCmd = "${pkgs.bash}/bin/bash -lc '${noctaliaExe} ipc call sessionMenu lockAndSuspend'";
|
noctalia = lib.getExe noctaliaPkg;
|
||||||
dpmsOn = "${pkgs.niri}/bin/niri msg action power-on-monitors";
|
|
||||||
|
bash = lib.getExe pkgs.bash;
|
||||||
|
brightnessctl = lib.getExe pkgs.brightnessctl;
|
||||||
|
niri = lib.getExe pkgs.niri;
|
||||||
|
rm = "${pkgs.coreutils}/bin/rm";
|
||||||
|
|
||||||
|
brightnessState = "$XDG_RUNTIME_DIR/swayidle-brightness";
|
||||||
|
|
||||||
|
noctaliaCall = target: action: "${bash} -lc '${noctalia} ipc call ${target} ${action}'";
|
||||||
|
|
||||||
|
lockCmd = noctaliaCall "lockScreen" "lock";
|
||||||
|
|
||||||
|
# AC 接続中は何もしない。つまり battery-only の処理にする。
|
||||||
|
skipIfOnAC = ''
|
||||||
|
for supply in /sys/class/power_supply/*; do
|
||||||
|
if [ -f "$supply/type" ] \
|
||||||
|
&& [ "$(< "$supply/type")" = "Mains" ] \
|
||||||
|
&& [ -f "$supply/online" ] \
|
||||||
|
&& [ "$(< "$supply/online")" = "1" ]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
'';
|
||||||
|
|
||||||
|
dimScreen = pkgs.writeShellScript "swayidle-dim-screen" ''
|
||||||
|
${skipIfOnAC}
|
||||||
|
|
||||||
|
${brightnessctl} get > "${brightnessState}" 2>/dev/null || exit 0
|
||||||
|
${brightnessctl} set 10% >/dev/null 2>&1 || true
|
||||||
|
'';
|
||||||
|
|
||||||
|
restoreBrightness = pkgs.writeShellScript "swayidle-restore-brightness" ''
|
||||||
|
if [ -f "${brightnessState}" ]; then
|
||||||
|
saved=$(< "${brightnessState}")
|
||||||
|
${brightnessctl} set "$saved" >/dev/null 2>&1 || true
|
||||||
|
${rm} -f "${brightnessState}"
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
|
||||||
|
lockAndSuspend = pkgs.writeShellScript "swayidle-lock-and-suspend" ''
|
||||||
|
${skipIfOnAC}
|
||||||
|
${noctaliaCall "sessionMenu" "lockAndSuspend"}
|
||||||
|
'';
|
||||||
|
|
||||||
|
afterResume = pkgs.writeShellScript "swayidle-after-resume" ''
|
||||||
|
${niri} msg action power-on-monitors
|
||||||
|
${restoreBrightness}
|
||||||
|
'';
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
options.my.applications.swayidle = {
|
options.my.applications.swayidle = {
|
||||||
@@ -24,40 +69,32 @@ in
|
|||||||
{
|
{
|
||||||
services.swayidle = {
|
services.swayidle = {
|
||||||
enable = true;
|
enable = true;
|
||||||
systemdTarget = "graphical-session.target";
|
systemdTargets = [ "graphical-session.target" ];
|
||||||
|
|
||||||
timeouts = [
|
timeouts = [
|
||||||
{
|
{
|
||||||
timeout = 300;
|
timeout = 300;
|
||||||
command = lockAndSuspendCmd;
|
command = "${dimScreen}";
|
||||||
|
resumeCommand = "${restoreBrightness}";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
timeout = 360;
|
||||||
|
command = "${lockAndSuspend}";
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
events = [
|
events = {
|
||||||
{
|
lock = lockCmd;
|
||||||
event = "lock";
|
before-sleep = lockCmd;
|
||||||
command = lockCmd;
|
after-resume = "${afterResume}";
|
||||||
}
|
};
|
||||||
{
|
|
||||||
event = "before-sleep";
|
|
||||||
command = lockCmd;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
event = "after-resume";
|
|
||||||
command = dpmsOn;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.user.services.swayidle = {
|
systemd.user.services.swayidle.Service.PassEnvironment = [
|
||||||
Service = {
|
|
||||||
PassEnvironment = [
|
|
||||||
"WAYLAND_DISPLAY"
|
"WAYLAND_DISPLAY"
|
||||||
"XDG_RUNTIME_DIR"
|
"XDG_RUNTIME_DIR"
|
||||||
"DBUS_SESSION_BUS_ADDRESS"
|
"DBUS_SESSION_BUS_ADDRESS"
|
||||||
];
|
];
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user