mirror of
https://github.com/nix-community/home-manager.git
synced 2026-01-11 17:39:37 +08:00
davmail: init module (#6674)
This commit is contained in:
@@ -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";
|
||||
|
||||
@@ -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
|
||||
|
||||
128
modules/services/davmail.nix
Normal file
128
modules/services/davmail.nix
Normal 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 ];
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
@@ -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
|
||||
|
||||
41
tests/modules/services/davmail/custom-settings.nix
Normal file
41
tests/modules/services/davmail/custom-settings.nix
Normal 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
|
||||
''
|
||||
}
|
||||
'';
|
||||
}
|
||||
4
tests/modules/services/davmail/default.nix
Normal file
4
tests/modules/services/davmail/default.nix
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
davmail-custom-settings = ./custom-settings.nix;
|
||||
davmail-imitateOutlook = ./imitateOutlook.nix;
|
||||
}
|
||||
37
tests/modules/services/davmail/imitateOutlook.nix
Normal file
37
tests/modules/services/davmail/imitateOutlook.nix
Normal 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
|
||||
''
|
||||
}
|
||||
'';
|
||||
}
|
||||
Reference in New Issue
Block a user