Co-authored-by: Aaron Andersen <aaron@fosslib.net> Co-authored-by: Silvan Mosberger <infinisil@icloud.com>wip/yesman
parent
4387bbf149
commit
f2730d881b
@ -0,0 +1,91 @@ |
||||
{ config, lib, pkgs, ... }: |
||||
|
||||
with lib; |
||||
|
||||
let |
||||
|
||||
cfg = config.services.davmail; |
||||
|
||||
configType = with types; |
||||
either (either (attrsOf configType) str) (either int bool) // { |
||||
description = "davmail config type (str, int, bool or attribute set thereof)"; |
||||
}; |
||||
|
||||
toStr = val: if isBool val then boolToString val else toString val; |
||||
|
||||
linesForAttrs = attrs: concatMap (name: let value = attrs.${name}; in |
||||
if isAttrs value |
||||
then map (line: name + "." + line) (linesForAttrs value) |
||||
else [ "${name}=${toStr value}" ] |
||||
) (attrNames attrs); |
||||
|
||||
configFile = pkgs.writeText "davmail.properties" (concatStringsSep "\n" (linesForAttrs cfg.config)); |
||||
|
||||
in |
||||
|
||||
{ |
||||
options.services.davmail = { |
||||
enable = mkEnableOption "davmail, an MS Exchange gateway"; |
||||
|
||||
url = mkOption { |
||||
type = types.str; |
||||
description = "Outlook Web Access URL to access the exchange server, i.e. the base webmail URL."; |
||||
example = "https://outlook.office365.com/EWS/Exchange.asmx"; |
||||
}; |
||||
|
||||
config = mkOption { |
||||
type = configType; |
||||
default = {}; |
||||
description = '' |
||||
Davmail configuration. Refer to |
||||
<link xlink:href="http://davmail.sourceforge.net/serversetup.html"/> |
||||
and <link xlink:href="http://davmail.sourceforge.net/advanced.html"/> |
||||
for details on supported values. |
||||
''; |
||||
example = literalExample '' |
||||
{ |
||||
davmail.allowRemote = true; |
||||
davmail.imapPort = 55555; |
||||
davmail.bindAddress = "10.0.1.2"; |
||||
davmail.smtpSaveInSent = true; |
||||
davmail.folderSizeLimit = 10; |
||||
davmail.caldavAutoSchedule = false; |
||||
log4j.logger.rootLogger = "DEBUG"; |
||||
} |
||||
''; |
||||
}; |
||||
}; |
||||
|
||||
config = mkIf cfg.enable { |
||||
|
||||
services.davmail.config.davmail = mapAttrs (name: mkDefault) { |
||||
server = true; |
||||
disableUpdateCheck = true; |
||||
logFilePath = "/var/log/davmail/davmail.log"; |
||||
logFileSize = "1MB"; |
||||
mode = "auto"; |
||||
url = cfg.url; |
||||
caldavPort = 1080; |
||||
imapPort = 1143; |
||||
ldapPort = 1389; |
||||
popPort = 1110; |
||||
smtpPort = 1025; |
||||
}; |
||||
|
||||
systemd.services.davmail = { |
||||
description = "DavMail POP/IMAP/SMTP Exchange Gateway"; |
||||
after = [ "network.target" ]; |
||||
wantedBy = [ "multi-user.target" ]; |
||||
|
||||
serviceConfig = { |
||||
Type = "simple"; |
||||
ExecStart = "${pkgs.davmail}/bin/davmail ${configFile}"; |
||||
Restart = "on-failure"; |
||||
DynamicUser = "yes"; |
||||
LogsDirectory = "davmail"; |
||||
}; |
||||
}; |
||||
|
||||
environment.systemPackages = [ pkgs.davmail ]; |
||||
}; |
||||
} |
Loading…
Reference in new issue