aboutsummaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorTad Fisher <tadfisher@gmail.com>2020-02-20 23:30:59 -0800
committerRobert Helgesson <robert@rycee.net>2020-03-07 15:13:50 +0100
commit9f46d516fa13df70768a3211827d14f456fa6e85 (patch)
tree27cc1c12e61b3cc29f64847d171ffd2ef69b0dac /modules
parent60a939bd01dc66d1cbdc85a3f6dc78e4ca092537 (diff)
services.lieer: add module
Add 'services.lieer', which generates systemd timer and service units to synchronize a Gmail account with lieer. Per-account configuration lives in 'accounts.email.accounts.<name>.lieer.sync'.
Diffstat (limited to 'modules')
-rw-r--r--modules/accounts/email.nix6
-rw-r--r--modules/misc/news.nix8
-rw-r--r--modules/modules.nix1
-rw-r--r--modules/services/lieer-accounts.nix25
-rw-r--r--modules/services/lieer.nix62
5 files changed, 100 insertions, 2 deletions
diff --git a/modules/accounts/email.nix b/modules/accounts/email.nix
index f45e57472af..b347e5bb1a2 100644
--- a/modules/accounts/email.nix
+++ b/modules/accounts/email.nix
@@ -384,7 +384,7 @@ in
};
accounts = mkOption {
- type = types.attrsOf (types.submodule [
+ type = types.attrsOf (types.submodule ([
mailAccountOpts
(import ../programs/alot-accounts.nix pkgs)
(import ../programs/astroid-accounts.nix)
@@ -395,7 +395,9 @@ in
(import ../programs/neomutt-accounts.nix)
(import ../programs/notmuch-accounts.nix)
(import ../programs/offlineimap-accounts.nix)
- ]);
+ ] ++ optionals pkgs.stdenv.hostPlatform.isLinux [
+ (import ../services/lieer-accounts.nix)
+ ]));
default = {};
description = "List of email accounts.";
};
diff --git a/modules/misc/news.nix b/modules/misc/news.nix
index 048f9cbe558..6a5cce7e085 100644
--- a/modules/misc/news.nix
+++ b/modules/misc/news.nix
@@ -1373,6 +1373,14 @@ in
A new module is available: 'programs.lieer'.
'';
}
+
+ {
+ time = "2020-03-07T14:12:50+00:00";
+ condition = hostPlatform.isLinux;
+ message = ''
+ A new module is available: 'services.lieer'.
+ '';
+ }
];
};
}
diff --git a/modules/modules.nix b/modules/modules.nix
index 3d1283e380c..bca1e8ed9ca 100644
--- a/modules/modules.nix
+++ b/modules/modules.nix
@@ -128,6 +128,7 @@ let
(loadModule ./services/kdeconnect.nix { })
(loadModule ./services/keepassx.nix { })
(loadModule ./services/keybase.nix { })
+ (loadModule ./services/lieer.nix { condition = hostPlatform.isLinux; })
(loadModule ./services/lorri.nix { condition = hostPlatform.isLinux; })
(loadModule ./services/mbsync.nix { })
(loadModule ./services/mpd.nix { })
diff --git a/modules/services/lieer-accounts.nix b/modules/services/lieer-accounts.nix
new file mode 100644
index 00000000000..187f7dff980
--- /dev/null
+++ b/modules/services/lieer-accounts.nix
@@ -0,0 +1,25 @@
+{ lib, ... }:
+
+with lib;
+
+{
+ options.lieer.sync = {
+ enable = mkEnableOption "lieer synchronization service";
+
+ frequency = mkOption {
+ type = types.str;
+ default = "*:0/5";
+ description = ''
+ How often to synchronize the account.
+ </para><para>
+ This value is passed to the systemd timer configuration as the
+ onCalendar option. See
+ <citerefentry>
+ <refentrytitle>systemd.time</refentrytitle>
+ <manvolnum>7</manvolnum>
+ </citerefentry>
+ for more information about the format.
+ '';
+ };
+ };
+}
diff --git a/modules/services/lieer.nix b/modules/services/lieer.nix
new file mode 100644
index 00000000000..35ac7d643cc
--- /dev/null
+++ b/modules/services/lieer.nix
@@ -0,0 +1,62 @@
+{ 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";
+ };
+
+ config = mkIf cfg.enable {
+ programs.lieer.enable = true;
+ systemd.user.services = listToAttrs (map serviceUnit syncAccounts);
+ systemd.user.timers = listToAttrs (map timerUnit syncAccounts);
+ };
+}