603b73f1e1
Coercing the derivation to string causes the package to be built during evaluation rather than during actual realization which is completely unnecessary because we don't need additional Nix expression information for the package (nor do we need it for the service). Signed-off-by: aszlig <aszlig@redmoonstudios.org> Cc: @DamienCassou Cc: @Profpatsch (stumbled on this because of him)
73 lines
2.4 KiB
Nix
73 lines
2.4 KiB
Nix
{ config, lib, pkgs, ... }:
|
|
|
|
with lib;
|
|
|
|
let
|
|
cfg = config.services.offlineimap;
|
|
in {
|
|
|
|
options.services.offlineimap = {
|
|
enable = mkEnableOption "Offlineimap, a software to dispose your mailbox(es) as a local Maildir(s).";
|
|
|
|
install = mkOption {
|
|
type = types.bool;
|
|
default = false;
|
|
example = true;
|
|
description = ''
|
|
Whether to install a user service for Offlineimap. Once
|
|
the service is started, emails will be fetched automatically.
|
|
|
|
The service must be manually started for each user with
|
|
"systemctl --user start offlineimap" or globally through
|
|
<varname>services.offlineimap.enable</varname>.
|
|
'';
|
|
};
|
|
|
|
package = mkOption {
|
|
type = types.package;
|
|
default = pkgs.offlineimap;
|
|
defaultText = "pkgs.offlineimap";
|
|
description = "Offlineimap derivation to use.";
|
|
};
|
|
|
|
path = mkOption {
|
|
type = types.listOf types.path;
|
|
default = [];
|
|
example = literalExample "[ pkgs.pass pkgs.bash pkgs.notmuch ]";
|
|
description = "List of derivations to put in Offlineimap's path.";
|
|
};
|
|
|
|
onCalendar = mkOption {
|
|
type = types.str;
|
|
default = "*:0/3"; # every 3 minutes
|
|
description = "How often is offlineimap started. Default is '*:0/3' meaning every 3 minutes. See systemd.time(7) for more information about the format.";
|
|
};
|
|
|
|
timeoutStartSec = mkOption {
|
|
type = types.str;
|
|
default = "120sec"; # Kill if still alive after 2 minutes
|
|
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.";
|
|
};
|
|
};
|
|
config = mkIf (cfg.enable || cfg.install) {
|
|
systemd.user.services.offlineimap = {
|
|
description = "Offlineimap: a software to dispose your mailbox(es) as a local Maildir(s)";
|
|
serviceConfig = {
|
|
Type = "oneshot";
|
|
ExecStart = "${cfg.package}/bin/offlineimap -u syslog -o -1";
|
|
TimeoutStartSec = cfg.timeoutStartSec;
|
|
};
|
|
path = cfg.path;
|
|
};
|
|
environment.systemPackages = [ cfg.package ];
|
|
systemd.user.timers.offlineimap = {
|
|
description = "offlineimap timer";
|
|
timerConfig = {
|
|
Unit = "offlineimap.service";
|
|
OnCalendar = cfg.onCalendar;
|
|
# start immediately after computer is started:
|
|
Persistent = "true";
|
|
};
|
|
} // optionalAttrs cfg.enable { wantedBy = [ "default.target" ]; };
|
|
};
|
|
}
|