42 lines
1.4 KiB
Nix
42 lines
1.4 KiB
Nix
{ config, pkgs, ... }: {
|
|
services.logind.settings.Login = {
|
|
IdleAction = "suspend";
|
|
IdleActionSec = "5min";
|
|
HandleLidSwitch = "suspend";
|
|
HandleLidSwitchDocked = "ignore";
|
|
};
|
|
|
|
systemd.services.ssh-suspend-inhibitor = {
|
|
description = "Prevent suspend when SSH sessions are active";
|
|
wantedBy = [ "multi-user.target" ];
|
|
|
|
serviceConfig = {
|
|
Type = "simple";
|
|
Restart = "always";
|
|
ExecStart = pkgs.writeShellScript "ssh-inhibitor" ''
|
|
while true; do
|
|
# Vérifie s'il y a des sessions SSH actives
|
|
if ${pkgs.procps}/bin/pgrep -x sshd >/dev/null && \
|
|
[ $(${pkgs.procps}/bin/pgrep -P $(${pkgs.procps}/bin/pgrep -x sshd) | wc -l) -gt 0 ]; then
|
|
# Il y a des sessions SSH, on crée un inhibitor s'il n'existe pas
|
|
if [ ! -f /tmp/ssh-inhibitor.lock ]; then
|
|
${pkgs.systemd}/bin/systemd-inhibit --what=idle:sleep \
|
|
--who="SSH Session" \
|
|
--why="SSH session active" \
|
|
--mode=block \
|
|
sleep infinity &
|
|
echo $! > /tmp/ssh-inhibitor.lock
|
|
fi
|
|
else
|
|
# Pas de sessions SSH, on retire l'inhibitor
|
|
if [ -f /tmp/ssh-inhibitor.lock ]; then
|
|
kill $(cat /tmp/ssh-inhibitor.lock) 2>/dev/null || true
|
|
rm /tmp/ssh-inhibitor.lock
|
|
fi
|
|
fi
|
|
sleep 10
|
|
done
|
|
'';
|
|
};
|
|
};
|
|
}
|