feat: nix module with smtp options

This commit is contained in:
Henri Bourcereau 2026-05-09 09:31:37 +02:00
parent 1ffd479013
commit 546eb1fe33

View file

@ -41,6 +41,39 @@ in
description = "Port the relay server listens on."; description = "Port the relay server listens on.";
}; };
smtp = {
host = mkOption {
type = types.str;
default = "127.0.0.1";
description = "SMTP server hostname.";
};
port = mkOption {
type = types.port;
default = 1025;
description = "SMTP server port.";
};
from = mkOption {
type = types.str;
default = "noreply@trictrac.local";
description = "Sender address for outgoing mail.";
};
user = mkOption {
type = types.str;
default = "";
description = "SMTP username (leave empty to skip authentication).";
};
passwordFile = mkOption {
type = types.nullOr types.path;
default = null;
example = "/run/secrets/trictrac-smtp-password";
description = ''
Path to a file containing a single line: SMTP_PASSWORD=<secret>.
Loaded as a systemd EnvironmentFile so the secret never appears in
the Nix store or process environment of other units.
'';
};
};
createDatabaseLocally = mkOption { createDatabaseLocally = mkOption {
type = types.bool; type = types.bool;
default = true; default = true;
@ -136,8 +169,13 @@ in
wantedBy = [ "multi-user.target" ]; wantedBy = [ "multi-user.target" ];
environment = { environment = {
# Use TCP + trust auth (matches NixOS postgresql.authentication above)
DATABASE_URL = "postgresql://${cfg.user}@127.0.0.1/${cfg.user}"; DATABASE_URL = "postgresql://${cfg.user}@127.0.0.1/${cfg.user}";
APP_URL = "${cfg.protocol}://${cfg.hostname}";
SMTP_HOST = cfg.smtp.host;
SMTP_PORT = toString cfg.smtp.port;
SMTP_FROM = cfg.smtp.from;
} // optionalAttrs (cfg.smtp.user != "") {
SMTP_USER = cfg.smtp.user;
}; };
serviceConfig = { serviceConfig = {
@ -149,6 +187,7 @@ in
WorkingDirectory = "/var/lib/trictrac"; WorkingDirectory = "/var/lib/trictrac";
ExecStartPre = "${setupScript}"; ExecStartPre = "${setupScript}";
ExecStart = "${pkgs.trictrac}/bin/relay-server"; ExecStart = "${pkgs.trictrac}/bin/relay-server";
EnvironmentFile = mkIf (cfg.smtp.passwordFile != null) cfg.smtp.passwordFile;
Restart = "on-failure"; Restart = "on-failure";
RestartSec = "5s"; RestartSec = "5s";
}; };