# derived from NixOS wiki { config, pkgs, lib, ... }: let username = config.mods.nextcloud.username; password = if (config.sops.secrets ? nextcloud.path) then config.sops.secrets.nextcloud.path else ""; url = config.mods.nextcloud.url; synclist = config.mods.nextcloud.synclist; in lib.mkIf config.mods.nextcloud.enable { systemd.user = { services = ( builtins.listToAttrs ( map (opts: { name = "${opts.name}"; value = { Unit = { Description = "Auto sync Nextcloud"; After = "network-online.target"; }; Service = { Type = "simple"; ExecStart = "${pkgs.bash}/bin/bash -c '${pkgs.nextcloud-client}/bin/nextcloudcmd -h --path ${opts.remote} ${opts.local} https://${username}:$(bat ${password})@${url}'"; TimeoutStopSec = "180"; KillMode = "process"; KillSignal = "SIGINT"; }; Install.WantedBy = [ "multi-user.target" ]; }; }) synclist ) ); timers = ( builtins.listToAttrs ( map (opts: { name = "${opts.name}"; value = { Unit.Description = "Automatic sync files with Nextcloud when booted up after 1 minute then rerun every 60 minutes"; Timer.OnBootSec = "1min"; Timer.OnUnitActiveSec = "60min"; Install.WantedBy = [ "multi-user.target" "timers.target" ]; }; }) synclist ) ); startServices = true; }; }