1
0
Fork 0
mirror of https://github.com/nix-community/home-manager.git synced 2025-11-22 10:19:39 +01:00
home-manager/modules/programs/msmtp.nix
zincentimeter 342b3e3e6d
msmtp: rename environment variables (#6839)
I've started seeing $HOME/log $HOME/.msmtp.queue.log populated after using
msmtp via neomutt. Although the latter is not, the former is a bit
annoying. Home-manager already tries to avoids this 1, so I was curious to why
this occured.

Interestingly this didn't happen until a month ago, so I've tried to git blame my way out of the problem both on my configuration and on upstream
home-manager however I didn't find a fitting change on the suspected dates.

Home-manager uses2 msmtpq script3 to send emails through which manages
also the queue of mails to be sent. As stated on upstream source of the script
4, it looks for MSMTPQ_Q and MSMTPQ_LOG variables to decide where to

https://git.marlam.de/gitweb/?p=msmtp.git;a=blob_plain;f=scripts/msmtpq/msmtpq;hb=HEAD
2025-04-22 17:22:16 +02:00

108 lines
2.8 KiB
Nix

{
config,
lib,
pkgs,
...
}:
let
inherit (lib) mkOption optionalAttrs types;
cfg = config.programs.msmtp;
msmtpAccounts = lib.filter (a: a.msmtp.enable) (lib.attrValues config.accounts.email.accounts);
onOff = p: if p then "on" else "off";
accountStr =
account:
with account;
lib.concatStringsSep "\n" (
[ "account ${name}" ]
++ lib.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; }
// optionalAttrs (smtp.tls.certificatesFile != null) {
tls_trust_file = smtp.tls.certificatesFile;
}
// optionalAttrs (passwordCommand != null) {
passwordeval = toString passwordCommand;
}
// msmtp.extraConfig
)
++ lib.optional primary "account default : ${name}"
++ map (alias: ''
account ${alias} : ${name}
from ${alias}
'') aliases
);
configFile = mailAccounts: ''
# Generated by Home Manager.
${cfg.extraConfig}
${lib.concatStringsSep "\n\n" (map accountStr mailAccounts)}
${cfg.extraAccounts}
'';
in
{
options = {
programs.msmtp = {
enable = lib.mkEnableOption "msmtp";
package = lib.mkPackageOption pkgs "msmtp" { };
extraConfig = mkOption {
type = types.lines;
default = "";
description = ''
Extra configuration lines to add to {file}`~/.msmtprc`.
See <https://marlam.de/msmtp/msmtprc.txt> for examples.
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
[](#opt-accounts.email.accounts._name_.msmtp.extraConfig).
'';
};
extraAccounts = mkOption {
type = types.lines;
default = "";
description = ''
Extra configuration lines to add to the end of {file}`~/.msmtprc`.
See <https://marlam.de/msmtp/msmtprc.txt> for examples.
'';
};
};
accounts.email.accounts = mkOption {
type = with types; attrsOf (submodule (import ./msmtp-accounts.nix));
};
};
config = lib.mkIf cfg.enable {
home.packages = [ cfg.package ];
xdg.configFile."msmtp/config".text = configFile msmtpAccounts;
home.sessionVariables = {
MSMTPQ_Q = "${config.xdg.dataHome}/msmtp/queue";
MSMTPQ_LOG = "${config.xdg.dataHome}/msmtp/queue.log";
};
};
}