grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / mail / offlineimap.nix
blob6566a3cee11e0d76a285f708f5d6af25b8adba84
1 { config, lib, pkgs, ... }:
2 let
3   cfg = config.services.offlineimap;
4 in {
6   options.services.offlineimap = {
7     enable = lib.mkEnableOption "OfflineIMAP, a software to dispose your mailbox(es) as a local Maildir(s)";
9     install = lib.mkOption {
10       type = lib.types.bool;
11       default = false;
12       description = ''
13         Whether to install a user service for Offlineimap. Once
14         the service is started, emails will be fetched automatically.
16         The service must be manually started for each user with
17         "systemctl --user start offlineimap" or globally through
18         {var}`services.offlineimap.enable`.
19       '';
20     };
22     package = lib.mkPackageOption pkgs "offlineimap" { };
24     path = lib.mkOption {
25       type = lib.types.listOf lib.types.path;
26       default = [];
27       example = lib.literalExpression "[ pkgs.pass pkgs.bash pkgs.notmuch ]";
28       description = "List of derivations to put in Offlineimap's path.";
29     };
31     onCalendar = lib.mkOption {
32       type = lib.types.str;
33       default = "*:0/3"; # every 3 minutes
34       description = "How often is offlineimap started. Default is '*:0/3' meaning every 3 minutes. See systemd.time(7) for more information about the format.";
35     };
37     timeoutStartSec = lib.mkOption {
38       type = lib.types.str;
39       default = "120sec"; # Kill if still alive after 2 minutes
40       description = "How long waiting for offlineimap before killing it. Default is '120sec' meaning every 2 minutes. See systemd.time(7) for more information about the format.";
41     };
42   };
43   config = lib.mkIf (cfg.enable || cfg.install) {
44     systemd.user.services.offlineimap = {
45       description = "Offlineimap: a software to dispose your mailbox(es) as a local Maildir(s)";
46       serviceConfig = {
47         Type      = "oneshot";
48         ExecStart = "${cfg.package}/bin/offlineimap -u syslog -o -1";
49         TimeoutStartSec = cfg.timeoutStartSec;
50       };
51       path = cfg.path;
52     };
53     environment.systemPackages = [ cfg.package ];
54     systemd.user.timers.offlineimap = {
55       description = "offlineimap timer";
56       timerConfig               = {
57         Unit = "offlineimap.service";
58         OnCalendar = cfg.onCalendar;
59         # start immediately after computer is started:
60         Persistent = "true";
61       };
62     } // lib.optionalAttrs cfg.enable { wantedBy = [ "default.target" ]; };
63   };