2018-08-06 10:02:49 +00:00
|
|
|
{ config, lib, pkgs, ... }:
|
|
|
|
|
|
|
|
with lib;
|
|
|
|
|
|
|
|
let
|
|
|
|
|
|
|
|
cfg = config.programs.msmtp;
|
|
|
|
|
2020-02-01 23:39:17 +00:00
|
|
|
msmtpAccounts =
|
|
|
|
filter (a: a.msmtp.enable) (attrValues config.accounts.email.accounts);
|
2018-08-06 10:02:49 +00:00
|
|
|
|
|
|
|
onOff = p: if p then "on" else "off";
|
|
|
|
|
2020-02-01 23:39:17 +00:00
|
|
|
accountStr = account:
|
|
|
|
with account;
|
|
|
|
concatStringsSep "\n" ([ "account ${name}" ]
|
|
|
|
++ mapAttrsToList (n: v: n + " " + v) ({
|
|
|
|
host = smtp.host;
|
|
|
|
from = address;
|
|
|
|
auth = "on";
|
|
|
|
user = userName;
|
|
|
|
tls = onOff smtp.tls.enable;
|
|
|
|
tls_starttls = onOff smtp.tls.useStartTls;
|
|
|
|
} // optionalAttrs (msmtp.tls.fingerprint != null) {
|
|
|
|
tls_fingerprint = msmtp.tls.fingerprint;
|
|
|
|
} // optionalAttrs (smtp.port != null) { port = toString smtp.port; }
|
2021-08-02 18:23:50 +00:00
|
|
|
// optionalAttrs (smtp.tls.certificatesFile != null) {
|
|
|
|
tls_trust_file = smtp.tls.certificatesFile;
|
|
|
|
} // optionalAttrs (passwordCommand != null) {
|
2020-12-10 21:32:34 +00:00
|
|
|
passwordeval = toString passwordCommand;
|
2022-09-05 08:51:49 +00:00
|
|
|
} // msmtp.extraConfig) ++ optional primary "account default : ${name}"
|
|
|
|
++ map (alias: ''
|
2020-02-01 23:39:17 +00:00
|
|
|
|
2022-09-05 08:51:49 +00:00
|
|
|
account ${alias} : ${name}
|
|
|
|
from ${alias}
|
|
|
|
'') aliases);
|
2018-08-06 10:02:49 +00:00
|
|
|
|
|
|
|
configFile = mailAccounts: ''
|
|
|
|
# Generated by Home Manager.
|
|
|
|
|
|
|
|
${cfg.extraConfig}
|
|
|
|
|
|
|
|
${concatStringsSep "\n\n" (map accountStr mailAccounts)}
|
2021-04-08 11:01:55 +00:00
|
|
|
|
|
|
|
${cfg.extraAccounts}
|
2018-08-06 10:02:49 +00:00
|
|
|
'';
|
|
|
|
|
2020-02-01 23:39:17 +00:00
|
|
|
in {
|
2018-08-06 10:02:49 +00:00
|
|
|
|
|
|
|
options = {
|
|
|
|
programs.msmtp = {
|
2023-07-01 23:45:18 +00:00
|
|
|
enable = mkEnableOption "msmtp";
|
2018-08-06 10:02:49 +00:00
|
|
|
|
|
|
|
extraConfig = mkOption {
|
|
|
|
type = types.lines;
|
|
|
|
default = "";
|
2023-07-01 23:45:18 +00:00
|
|
|
description = ''
|
2023-06-30 23:30:13 +00:00
|
|
|
Extra configuration lines to add to {file}`~/.msmtprc`.
|
|
|
|
See <https://marlam.de/msmtp/msmtprc.txt> for examples.
|
|
|
|
|
2021-05-07 20:45:25 +00:00
|
|
|
Note, if running msmtp fails with the error message "account default
|
|
|
|
was already defined" then you probably have an account command here.
|
|
|
|
Account commands should be placed in
|
2023-06-30 23:30:13 +00:00
|
|
|
[](#opt-accounts.email.accounts._name_.msmtp.extraConfig).
|
2018-08-06 10:02:49 +00:00
|
|
|
'';
|
|
|
|
};
|
2021-04-08 11:01:55 +00:00
|
|
|
|
|
|
|
extraAccounts = mkOption {
|
|
|
|
type = types.lines;
|
|
|
|
default = "";
|
2023-07-01 23:45:18 +00:00
|
|
|
description = ''
|
2023-06-30 23:30:13 +00:00
|
|
|
Extra configuration lines to add to the end of {file}`~/.msmtprc`.
|
|
|
|
See <https://marlam.de/msmtp/msmtprc.txt> for examples.
|
2021-04-08 11:01:55 +00:00
|
|
|
'';
|
|
|
|
};
|
2018-08-06 10:02:49 +00:00
|
|
|
};
|
2020-06-15 22:45:20 +00:00
|
|
|
|
|
|
|
accounts.email.accounts = mkOption {
|
|
|
|
type = with types; attrsOf (submodule (import ./msmtp-accounts.nix));
|
|
|
|
};
|
2018-08-06 10:02:49 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
config = mkIf cfg.enable {
|
|
|
|
home.packages = [ pkgs.msmtp ];
|
|
|
|
|
2019-02-10 16:53:33 +00:00
|
|
|
xdg.configFile."msmtp/config".text = configFile msmtpAccounts;
|
2018-08-06 10:02:49 +00:00
|
|
|
|
2020-02-01 23:39:17 +00:00
|
|
|
home.sessionVariables = {
|
2018-08-06 10:02:49 +00:00
|
|
|
MSMTP_QUEUE = "${config.xdg.dataHome}/msmtp/queue";
|
|
|
|
MSMTP_LOG = "${config.xdg.dataHome}/msmtp/queue.log";
|
|
|
|
};
|
|
|
|
};
|
|
|
|
}
|