davmail: init module (#6674)

This commit is contained in:
Benedikt M. Rips
2025-03-23 15:01:35 +01:00
committed by GitHub
parent 9172a6f956
commit 57e9a8a290
7 changed files with 218 additions and 0 deletions

View File

@@ -66,6 +66,12 @@
github = "bertof";
githubId = 9915675;
};
bmrips = {
name = "Benedikt Rips";
email = "benedikt.rips@gmail.com";
github = "bmrips";
githubId = 20407973;
};
bricked = {
name = "Bricked";
email = "hello@bricked.dev";

View File

@@ -316,6 +316,7 @@ let
./services/conky.nix
./services/copyq.nix
./services/darkman.nix
./services/davmail.nix
./services/devilspie2.nix
./services/dropbox.nix
./services/dunst.nix

View File

@@ -0,0 +1,128 @@
{ config, lib, pkgs, ... }:
let
inherit (lib)
mapAttrsRecursive mkDefault mkEnableOption mkIf mkOption optionalAttrs
types;
cfg = config.services.davmail;
javaProperties = pkgs.formats.javaProperties { };
settingsFile = javaProperties.generate "davmail.properties" cfg.settings;
in {
meta.maintainers = [ lib.hm.maintainers.bmrips ];
options.services.davmail = {
enable = mkEnableOption "DavMail, an MS Exchange gateway.";
imitateOutlook = mkOption {
type = types.bool;
default = false;
description = "Whether DavMail pretends to be Outlook.";
example = true;
};
settings = mkOption {
type = javaProperties.type;
default = { };
description = ''
Davmail configuration. Refer to
<http://davmail.sourceforge.net/serversetup.html>
and <http://davmail.sourceforge.net/advanced.html>
for details on supported values.
'';
example = {
"davmail.url" = "https://outlook.office365.com/EWS/Exchange.asmx";
"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 {
assertions = [{
assertion = pkgs.stdenv.hostPlatform.isLinux;
message = "The DavMail service is only available on Linux.";
}];
services.davmail.settings = mapAttrsRecursive (_: mkDefault) {
"davmail.server" = true;
"davmail.disableUpdateCheck" = true;
"davmail.logFilePath" = "${config.xdg.stateHome}/davmail.log";
"davmail.logFileSize" = "1MB";
"davmail.mode" = "auto";
"davmail.url" = "https://outlook.office365.com/EWS/Exchange.asmx";
"davmail.caldavPort" = 1080;
"davmail.imapPort" = 1143;
"davmail.ldapPort" = 1389;
"davmail.popPort" = 1110;
"davmail.smtpPort" = 1025;
# The token file path is set because, otherwise, if oauth.persistToken
# is enabled, DavMail would attempt to write the token into generated
# configuration which lays in the Nix store.
"davmail.oauth.tokenFilePath" = "${config.xdg.stateHome}/davmail-tokens";
"log4j.logger.davmail" = "WARN";
"log4j.logger.httpclient.wire" = "WARN";
"log4j.logger.org.apache.commons.httpclient" = "WARN";
"log4j.rootLogger" = "WARN";
} // optionalAttrs cfg.imitateOutlook {
"davmail.oauth.clientId" = "d3590ed6-52b3-4102-aeff-aad2292ab01c";
"davmail.oauth.redirectUri" = "urn:ietf:wg:oauth:2.0:oob";
};
systemd.user.services.davmail = {
Unit = {
Description = "DavMail POP/IMAP/SMTP Exchange Gateway";
After = [ "graphical-session.target" "network.target" ];
};
Install.WantedBy = [ "graphical-session.target" ];
Service = {
Type = "simple";
ExecStart = "${pkgs.davmail}/bin/davmail ${settingsFile}";
Restart = "on-failure";
CapabilityBoundingSet = [ "" ];
DeviceAllow = [ "" ];
LockPersonality = true;
NoNewPrivileges = true;
PrivateDevices = true;
PrivateTmp = true;
PrivateUsers = true;
ProtectClock = true;
ProtectControlGroups = true;
ProtectSystem = "strict";
ProtectHostname = true;
ProtectKernelLogs = true;
ProtectKernelModules = true;
ProtectKernelTunables = true;
ProtectProc = "invisible";
RemoveIPC = true;
RestrictAddressFamilies = [ "AF_INET" "AF_INET6" ];
RestrictNamespaces = true;
RestrictRealtime = true;
RestrictSUIDSGID = true;
SystemCallArchitectures = "native";
SystemCallFilter = "@system-service";
SystemCallErrorNumber = "EPERM";
UMask = "0077";
};
};
home.packages = [ pkgs.davmail ];
};
}

View File

@@ -496,6 +496,7 @@ in import nmtSrc {
./modules/services/copyq
./modules/services/conky
./modules/services/darkman
./modules/services/davmail
./modules/services/devilspie2
./modules/services/dropbox
./modules/services/easyeffects

View File

@@ -0,0 +1,41 @@
{ config, pkgs, ... }: {
services.davmail = {
enable = true;
settings = {
"davmail.imapPort" = 4444;
"davmail.oauth.redirectUri" = "urn:ietf:wg:oauth:2.0:oob";
"davmail.persistToken" = true;
};
};
nmt.script = ''
serviceFile=home-files/.config/systemd/user/davmail.service
assertFileExists $serviceFile
configFile=$(grep -o '/nix/store/.*-davmail.properties' $TESTED/$serviceFile)
assertFileExists $configFile
assertFileContent $configFile ${
pkgs.writeText "custom-settings.properties" ''
# Generated with Nix
davmail.caldavPort = 1080
davmail.disableUpdateCheck = true
davmail.imapPort = 4444
davmail.ldapPort = 1389
davmail.logFilePath = ${config.xdg.stateHome}/davmail.log
davmail.logFileSize = 1MB
davmail.mode = auto
davmail.oauth.redirectUri = urn:ietf:wg:oauth:2.0:oob
davmail.oauth.tokenFilePath = ${config.xdg.stateHome}/davmail-tokens
davmail.persistToken = true
davmail.popPort = 1110
davmail.server = true
davmail.smtpPort = 1025
davmail.url = https://outlook.office365.com/EWS/Exchange.asmx
log4j.logger.davmail = WARN
log4j.logger.httpclient.wire = WARN
log4j.logger.org.apache.commons.httpclient = WARN
log4j.rootLogger = WARN
''
}
'';
}

View File

@@ -0,0 +1,4 @@
{
davmail-custom-settings = ./custom-settings.nix;
davmail-imitateOutlook = ./imitateOutlook.nix;
}

View File

@@ -0,0 +1,37 @@
{ config, pkgs, ... }: {
services.davmail = {
enable = true;
imitateOutlook = true;
};
nmt.script = ''
serviceFile=home-files/.config/systemd/user/davmail.service
assertFileExists $serviceFile
configFile=$(grep -o '/nix/store/.*-davmail.properties' $TESTED/$serviceFile)
assertFileExists $configFile
assertFileContent $configFile ${
pkgs.writeText "imitateOutlook.properties" ''
# Generated with Nix
davmail.caldavPort = 1080
davmail.disableUpdateCheck = true
davmail.imapPort = 1143
davmail.ldapPort = 1389
davmail.logFilePath = ${config.xdg.stateHome}/davmail.log
davmail.logFileSize = 1MB
davmail.mode = auto
davmail.oauth.clientId = d3590ed6-52b3-4102-aeff-aad2292ab01c
davmail.oauth.redirectUri = urn:ietf:wg:oauth:2.0:oob
davmail.oauth.tokenFilePath = ${config.xdg.stateHome}/davmail-tokens
davmail.popPort = 1110
davmail.server = true
davmail.smtpPort = 1025
davmail.url = https://outlook.office365.com/EWS/Exchange.asmx
log4j.logger.davmail = WARN
log4j.logger.httpclient.wire = WARN
log4j.logger.org.apache.commons.httpclient = WARN
log4j.rootLogger = WARN
''
}
'';
}