diff options
Diffstat (limited to 'infra/libkookie/home-manager/modules/services/lieer.nix')
-rw-r--r-- | infra/libkookie/home-manager/modules/services/lieer.nix | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/infra/libkookie/home-manager/modules/services/lieer.nix b/infra/libkookie/home-manager/modules/services/lieer.nix new file mode 100644 index 000000000000..571e2af75c84 --- /dev/null +++ b/infra/libkookie/home-manager/modules/services/lieer.nix @@ -0,0 +1,66 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + cfg = config.services.lieer; + + syncAccounts = filter (a: a.lieer.enable && a.lieer.sync.enable) + (attrValues config.accounts.email.accounts); + + escapeUnitName = name: + let + good = upperChars ++ lowerChars ++ stringToCharacters "0123456789-_"; + subst = c: if any (x: x == c) good then c else "-"; + in stringAsChars subst name; + + serviceUnit = account: { + name = escapeUnitName "lieer-${account.name}"; + value = { + Unit = { + Description = "lieer Gmail synchronization for ${account.name}"; + ConditionPathExists = "${account.maildir.absPath}/.gmailieer.json"; + }; + + Service = { + Type = "oneshot"; + ExecStart = "${pkgs.gmailieer}/bin/gmi sync"; + WorkingDirectory = account.maildir.absPath; + }; + }; + }; + + timerUnit = account: { + name = escapeUnitName "lieer-${account.name}"; + value = { + Unit = { + Description = "lieer Gmail synchronization for ${account.name}"; + }; + + Timer = { + OnCalendar = account.lieer.sync.frequency; + RandomizedDelaySec = 30; + }; + + Install = { WantedBy = [ "timers.target" ]; }; + }; + }; + +in { + meta.maintainers = [ maintainers.tadfisher ]; + + options = { + services.lieer.enable = + mkEnableOption "lieer Gmail synchronization service"; + + accounts.email.accounts = mkOption { + type = with types; attrsOf (submodule (import ./lieer-accounts.nix)); + }; + }; + + config = mkIf cfg.enable { + programs.lieer.enable = true; + systemd.user.services = listToAttrs (map serviceUnit syncAccounts); + systemd.user.timers = listToAttrs (map timerUnit syncAccounts); + }; +} |