From d5a2a06fde097561fe8766d372a33b6077c80e9f Mon Sep 17 00:00:00 2001 From: Manuel Thalmann Date: Tue, 14 May 2024 15:24:17 +0200 Subject: [PATCH] Allow specifying custom envs and secrets for providers --- lib/modules/rclone.nix | 47 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 44 insertions(+), 3 deletions(-) diff --git a/lib/modules/rclone.nix b/lib/modules/rclone.nix index 8405326..4f19a7b 100644 --- a/lib/modules/rclone.nix +++ b/lib/modules/rclone.nix @@ -1,8 +1,17 @@ { config, lib, pkgs, ... }: let + mkProvider = + { secretLoader ? ({ ... }: ""), envLoader ? ({ ... }: { }), options ? {}, ... }: { + inherit + secretLoader + envLoader + options + ; + }; + syncProviders = { - nextcloud = {}; - proton = {}; + nextcloud = mkProvider {}; + proton = mkProvider {}; }; syncType = lib.types.submodule ( @@ -39,6 +48,11 @@ let default = []; }; }; + + config = { + environment = syncProviders.${config.type}.envLoader config; + secretsScript = syncProviders.${config.type}.secretLoader config; + }; }); in { options = { @@ -89,7 +103,34 @@ in { (lib.getExe script); }; }; - }; + } // ( + lib.attrsets.concatMapAttrs + (name: sync: + let + serviceName = "rclone-sync-${name}"; + in { + ${serviceName} = { + Unit = { + Description = "${sync.type}"; + }; + + Service = { + Environment = lib.mapAttrsToList + (key: val: (lib.escapeShellArg "${key}=${val}")) + sync.environment; + + ExecStart = + let + script = pkgs.writeShellScriptBin serviceName '' + ${sync.secretsScript} + bash -c echo hello world + ''; + in + (lib.getExe script); + }; + }; + }) + cfg.configs); targets.rclone = { Unit = {