{ config , pkgs , lib , ... }: with lib; let cfg = config.dadada.ddns; ddnsConfig = hostNames: { systemd.timers = listToAttrs (forEach hostNames (hostname: nameValuePair "ddns-${hostname}" { wantedBy = [ "timers.target" ]; partOf = [ "ddns-${hostname}.service" ]; timerConfig.OnCalendar = "hourly"; })); systemd.services = listToAttrs (forEach hostNames (hostname: nameValuePair "ddns-${hostname}" { serviceConfig.Type = "oneshot"; script = '' function url() { echo "https://svc.joker.com/nic/update?username=$1&password=$2&hostname=$3" } IFS=':' read -r user password < /var/lib/ddns/credentials unset IFS curl_url=$(url "$user" "$password" ${hostname}) ${pkgs.curl}/bin/curl -4 "$curl_url" ${pkgs.curl}/bin/curl -6 "$curl_url" ''; })); }; in { options = { dadada.ddns.domains = mkOption { type = types.listOf types.str; description = '' Enables DDNS for these domains. ''; example = '' [ "example.com" ] ''; default = [ ]; }; }; config = ddnsConfig cfg.domains; }