{ config, lib, pkgs, ... }: { systemd = { timers = { tgbot-send = { wantedBy = [ "timers.target" ]; timerConfig = { OnCalendar = "*-*-01 16:00:00"; Persistent = true; }; }; network-watchdog = { wantedBy = [ "timers.target" ]; timerConfig = { OnBootSec = 30; AccuracySec = 1; OnUnitActiveSec = 10; }; }; }; services = { tgbot-send = { serviceConfig.Type = "oneshot"; script = '' . /secrets/tgbot.env for msg in "''${MESSAGES[@]}"; do TEXT="''${msg#*:}" CHAT_ID="''${msg%%:*}" ${pkgs.curl}/bin/curl -X POST "https://api.telegram.org/$BOT/sendMessage" \ -d "chat_id=$CHAT_ID" -d "text=$TEXT" 2> /dev/null | ${pkgs.jq}/bin/jq sleep 1 done ''; }; network-watchdog = { serviceConfig = { Type = "oneshot"; LogLevelMax = "notice"; }; script = '' if [ ! -e /run/network.failures ] || [ ! -e /run/network.limit ] || \ ${pkgs.curl}/bin/curl --head --max-time 3 https://www.google.com; then limit=3 failures=0 else limit=$(cat /run/network.limit) failures=$((1+$(cat /run/network.failures))) [ $failures -gt 1 ] && echo "<5>failures = $failures" fi if [ $failures -ge $limit ]; then echo "<4>restarting NetworkManager" systemctl restart NetworkManager.service [ $limit -lt 60 ] && limit=$((4*$limit/3)) failures=0 fi echo $limit > /run/network.limit echo $failures > /run/network.failures ''; }; }; }; }