{ pkgs, ... }: let shutdownWaitMinutes = 15; shutdownScript = pkgs.writeShellScriptBin "shutdown-wait" '' STATUS_FILES="/media/internal/backups-pub-solar/status" running="" for f in $STATUS_FILES; do declare started declare finished started=$(source $f ; echo ''${BACKUP_STARTED}) finished=$(source $f ; echo ''${BACKUP_FINISHED}) if [ -z "''${finished}" ]; then echo "backup $(dirname $f) still running" running="yes" break fi done if [ -n "''${running}" ] && [ "''${running}" = "yes" ]; then echo "backups are still running" exit 1 fi echo "WARNING: System will be shut down within the next 15 minutes" | wall sleep 10 shutdown -P +${builtins.toString shutdownWaitMinutes} ''; in { systemd.services."shutdown-after-backup" = { enable = true; serviceConfig = { ExecStart = "${shutdownScript}/bin/shutdown-wait"; Type = "oneshot"; }; }; systemd.timers."shutdown-after-backup" = { enable = true; timerConfig = { OnCalendar = "3..9:* Etc/UTC"; }; wantedBy = [ "timers.target" ]; partOf = [ "shutdown-after-backup.service" ]; }; }