msmtp: add module

msmtp is a simple mail transfer agent (MTA).
This commit is contained in:
Matthieu Coudron 2018-08-06 19:02:49 +09:00 committed by Robert Helgesson
parent 906965b48b
commit cfa06c3f38
No known key found for this signature in database
GPG key ID: 36BDAA14C2797E89
5 changed files with 111 additions and 0 deletions

View file

@ -318,6 +318,7 @@ in
type = types.attrsOf (types.submodule [ type = types.attrsOf (types.submodule [
mailAccountOpts mailAccountOpts
(import ../programs/mbsync-accounts.nix) (import ../programs/mbsync-accounts.nix)
(import ../programs/msmtp-accounts.nix)
(import ../programs/notmuch-accounts.nix) (import ../programs/notmuch-accounts.nix)
]); ]);
default = {}; default = {};

View file

@ -758,6 +758,13 @@ in
A new modules is available: 'programs.chromium'. A new modules is available: 'programs.chromium'.
''; '';
} }
{
time = "2018-08-20T20:27:26+00:00";
message = ''
A new module is available: 'programs.msmtp'.
'';
}
]; ];
}; };
} }

View file

@ -45,6 +45,7 @@ let
./programs/man.nix ./programs/man.nix
./programs/mbsync.nix ./programs/mbsync.nix
./programs/mercurial.nix ./programs/mercurial.nix
./programs/msmtp.nix
./programs/neovim.nix ./programs/neovim.nix
./programs/newsboat.nix ./programs/newsboat.nix
./programs/notmuch.nix ./programs/notmuch.nix

View file

@ -0,0 +1,25 @@
{ config, lib, ... }:
with lib;
{
options.msmtp = {
enable = mkOption {
type = types.bool;
default = false;
description = ''
Whether to enable msmtp.
</para><para>
If enabled then it is possible to use the
<option>--account</option> command line option to send a
message for a given account using the <command>msmtp</command>
or <command>msmtpq</command> tool. For example,
<command>msmtp --account=private</command>
would send using the account defined in
<option>accounts.email.accounts.private</option>. If the
<option>--account</option> option is not given then the
primary account will be used.
'';
};
};
}

View file

@ -0,0 +1,77 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.msmtp;
dag = config.lib.dag;
msmtpAccounts = filter (a: a.msmtp.enable)
(attrValues config.accounts.email.accounts);
onOff = p: if p then "on" else "off";
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;
tls_trust_file = smtp.tls.certificatesFile;
}
// optionalAttrs (smtp.port != null) {
port = toString smtp.port;
}
// optionalAttrs (passwordCommand != null) {
# msmtp requires the password to finish with a newline.
passwordeval = ''${pkgs.bash}/bin/bash -c "${toString passwordCommand}; echo"'';
}
)
++ optional primary "\naccount default : ${name}"
);
configFile = mailAccounts: ''
# Generated by Home Manager.
${cfg.extraConfig}
${concatStringsSep "\n\n" (map accountStr mailAccounts)}
'';
in
{
options = {
programs.msmtp = {
enable = mkEnableOption "msmtp";
extraConfig = mkOption {
type = types.lines;
default = "";
description = ''
Extra configuration lines to add to <filename>~/.msmtprc</filename>.
See <link xlink:href="https://marlam.de/msmtp/msmtprc.txt"/> for examples.
'';
};
};
};
config = mkIf cfg.enable {
home.packages = [ pkgs.msmtp ];
home.file.".msmtprc".text = configFile msmtpAccounts;
home.sessionVariables = {
MSMTP_QUEUE = "${config.xdg.dataHome}/msmtp/queue";
MSMTP_LOG = "${config.xdg.dataHome}/msmtp/queue.log";
};
};
}