{ config, service, pkgs }: let inherit (pkgs) writeShellScriptBin; in { Unit = { Description = "${service} service"; X-Restart-Triggers = [ "${config.repo-clone.pkg}" ]; }; Service = { Type = "exec"; ExecStart = let execName = service; script = writeShellScriptBin execName '' clone_repo() { git clone "$1" "$2" } while IFS="" read -r p || [ -n "$p" ] do args=($p) # [0]: repo-url [1]: target-path repo=''${args[0]} target=''${args[1]} if [ -d "$target" ]; then if ${pkgs.findutils}/bin/find "$target" -maxdepth 0 -empty | read v; then echo "Cloning Repo: $repo to $target" clone_repo "$repo" "$target" else echo "Files already found: $target" fi else echo "Making Directory: $target" ${pkgs.coreutils}/bin/mkdir -p "$target" echo "Cloning Repo: $repo to $target" clone_repo "$repo" "$target" fi done < "${config.repo-clone.pkg}" ''; in "${script}/bin/${execName}"; RemainAfterExit = "yes"; }; Install.WantedBy = [ "multi-user.target" ]; }