nixfiles/hosts/hetzner-vm/modules/mailserver/default.nix

124 lines
2.6 KiB
Nix

{
config,
lib,
...
}:
with lib; let
cfg = config.mailserver;
in {
options.mailserver = {
enable = mkEnableOption "mailserver";
fqdn = mkOption {type = types.str;};
domains = mkOption {type = types.listOf types.str;};
ssl_config = mkOption {
type = types.submodule {
options = {
useACME = mkOption {
type = types.bool;
default = true;
};
cert = mkOption {
type = types.str;
default = "/var/lib/acme/${cfg.fqdn}/fullchain.pem";
};
key = mkOption {
type = types.str;
default = "/var/lib/acme/${cfg.fqdn}/key.pem";
};
};
};
default = {};
};
debug_mode = mkOption {
type = types.bool;
default = false;
};
enable_roundcube = mkOption {
type = types.bool;
default = true;
};
roundcube_url = mkOption {
type = types.str;
default = "${cfg.fqdn}";
};
accounts = mkOption {
# where name = email for login
type = types.attrsOf (types.submodule ({
config,
name,
...
}: {
options = {
name = mkOption {
type = types.str;
default = name;
};
passwordFile = mkOption {type = types.str;};
aliases = mkOption {type = types.listOf types.str;};
sieveScript = mkOption {type = types.nullOr types.lines;};
};
}));
};
extra_aliases_file = mkOption {
type = types.nullOr types.str;
default = null;
};
sieve_directory = mkOption {
type = types.str;
default = "/var/sieve";
};
dkim_directory = mkOption {
type = types.str;
default = "/var/dkim";
};
policyd_config = mkOption {
type = types.lines;
default = "";
};
extra_roundcube_config = mkOption {
type = types.lines;
default = "";
};
vmail_config = mkOption {
type = types.submodule {
options = {
user = mkOption {
type = types.str;
default = "vmail";
};
group = mkOption {
type = types.str;
default = "${cfg.vmail_config.user}";
};
user_id = mkOption {
type = types.number;
default = 5000;
};
group_id = mkOption {
type = types.number;
default = cfg.vmail_config.user_id;
};
directory = mkOption {
type = types.str;
default = "/home/${cfg.vmail_config.user}";
};
};
};
default = {};
};
};
}