diff --git a/modules/common/energy.nix b/modules/common/energy.nix index 31635c5..eed44d0 100644 --- a/modules/common/energy.nix +++ b/modules/common/energy.nix @@ -1,8 +1,42 @@ -_: { +{ 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 + ''; + }; + }; }