feat: lab: generic functions for mail
This commit is contained in:
@@ -16,6 +16,26 @@ with lib;
|
|||||||
let
|
let
|
||||||
domain = "hectic-lab.com";
|
domain = "hectic-lab.com";
|
||||||
matrixDomain = "accord.tube";
|
matrixDomain = "accord.tube";
|
||||||
|
mailUserNames = [
|
||||||
|
"security"
|
||||||
|
"founders"
|
||||||
|
"lvgkcfjl"
|
||||||
|
"yukkop"
|
||||||
|
"daniil-perlyk"
|
||||||
|
"iana-perlyk"
|
||||||
|
"snuff"
|
||||||
|
"antoshka"
|
||||||
|
];
|
||||||
|
mkMailPasswordSecret = name: {
|
||||||
|
name = "mailserver/${name}/hashedPassword";
|
||||||
|
value = {};
|
||||||
|
};
|
||||||
|
mkMailLoginAccount = name: {
|
||||||
|
inherit name;
|
||||||
|
value = {
|
||||||
|
hashedPasswordFile = config.sops.secrets."mailserver/${name}/hashedPassword".path;
|
||||||
|
};
|
||||||
|
};
|
||||||
sslOpts = {
|
sslOpts = {
|
||||||
sslCertificate = config.sops.secrets."ssl/porkbun/${domain}/domain.cert.pem".path;
|
sslCertificate = config.sops.secrets."ssl/porkbun/${domain}/domain.cert.pem".path;
|
||||||
sslCertificateKey = config.sops.secrets."ssl/porkbun/${domain}/private.key.pem".path;
|
sslCertificateKey = config.sops.secrets."ssl/porkbun/${domain}/private.key.pem".path;
|
||||||
@@ -91,6 +111,24 @@ in {
|
|||||||
gnupg.sshKeyPaths = [ ];
|
gnupg.sshKeyPaths = [ ];
|
||||||
age.sshKeyPaths = [ "/etc/ssh/ssh_host_ed25519_key" ];
|
age.sshKeyPaths = [ "/etc/ssh/ssh_host_ed25519_key" ];
|
||||||
defaultSopsFile = "${flake}/sus/hectic-lab.yaml";
|
defaultSopsFile = "${flake}/sus/hectic-lab.yaml";
|
||||||
|
secrets = builtins.listToAttrs (map mkMailPasswordSecret mailUserNames) // {
|
||||||
|
"init-postgresql" = {
|
||||||
|
key = "init-postgresql";
|
||||||
|
};
|
||||||
|
"ssl/porkbun/${domain}/domain.cert.pem" = {
|
||||||
|
group = "nginx";
|
||||||
|
mode = "0440";
|
||||||
|
};
|
||||||
|
"ssl/porkbun/${domain}/private.key.pem" = {
|
||||||
|
group = "nginx";
|
||||||
|
mode = "0440";
|
||||||
|
};
|
||||||
|
"ssl/porkbun/${domain}/public.key.pem" = {
|
||||||
|
group = "nginx";
|
||||||
|
mode = "0440";
|
||||||
|
};
|
||||||
|
"wg-bfs/private-key" = {};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
users.users.root.openssh.authorizedKeys.keys = [
|
users.users.root.openssh.authorizedKeys.keys = [
|
||||||
@@ -120,43 +158,10 @@ in {
|
|||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
sops.secrets."mailserver/security/hashedPassword" = {};
|
|
||||||
sops.secrets."mailserver/yukkop/hashedPassword" = {};
|
|
||||||
sops.secrets."mailserver/daniil-perlyk/hashedPassword" = {};
|
|
||||||
sops.secrets."mailserver/snuff/hashedPassword" = {};
|
|
||||||
sops.secrets."mailserver/antoshka/hashedPassword" = {};
|
|
||||||
sops.secrets."mailserver/founders/hashedPassword" = {};
|
|
||||||
sops.secrets."mailserver/lvgkcfjl/hashedPassword" = {};
|
|
||||||
sops.secrets."init-postgresql" = {
|
|
||||||
key = "init-postgresql";
|
|
||||||
};
|
|
||||||
|
|
||||||
services.mailserver = {
|
services.mailserver = {
|
||||||
enable = true;
|
enable = true;
|
||||||
domain = domain;
|
domain = domain;
|
||||||
loginAccounts = {
|
loginAccounts = builtins.listToAttrs (map mkMailLoginAccount mailUserNames);
|
||||||
"security" = {
|
|
||||||
hashedPasswordFile = config.sops.secrets."mailserver/security/hashedPassword".path;
|
|
||||||
};
|
|
||||||
"founders" = {
|
|
||||||
hashedPasswordFile = config.sops.secrets."mailserver/founders/hashedPassword".path;
|
|
||||||
};
|
|
||||||
"lvgkcfjl" = {
|
|
||||||
hashedPasswordFile = config.sops.secrets."mailserver/lvgkcfjl/hashedPassword".path;
|
|
||||||
};
|
|
||||||
"yukkop" = {
|
|
||||||
hashedPasswordFile = config.sops.secrets."mailserver/yukkop/hashedPassword".path;
|
|
||||||
};
|
|
||||||
"daniil-perlyk" = {
|
|
||||||
hashedPasswordFile = config.sops.secrets."mailserver/daniil-perlyk/hashedPassword".path;
|
|
||||||
};
|
|
||||||
"snuff" = {
|
|
||||||
hashedPasswordFile = config.sops.secrets."mailserver/snuff/hashedPassword".path;
|
|
||||||
};
|
|
||||||
"antoshka" = {
|
|
||||||
hashedPasswordFile = config.sops.secrets."mailserver/antoshka/hashedPassword".path;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
mailserver.stateVersion = 3;
|
mailserver.stateVersion = 3;
|
||||||
@@ -196,10 +201,6 @@ in {
|
|||||||
"d /var/www/store 0755 nginx nginx -"
|
"d /var/www/store 0755 nginx nginx -"
|
||||||
];
|
];
|
||||||
|
|
||||||
sops.secrets."ssl/porkbun/${domain}/domain.cert.pem" = { group = "nginx"; mode = "0440"; };
|
|
||||||
sops.secrets."ssl/porkbun/${domain}/private.key.pem" = { group = "nginx"; mode = "0440"; };
|
|
||||||
sops.secrets."ssl/porkbun/${domain}/public.key.pem" = { group = "nginx"; mode = "0440"; };
|
|
||||||
|
|
||||||
services.nginx = {
|
services.nginx = {
|
||||||
enable = true;
|
enable = true;
|
||||||
# NOTE(yukkop): virtualHosts.${domain} is owned by the hectic-landing module
|
# NOTE(yukkop): virtualHosts.${domain} is owned by the hectic-landing module
|
||||||
@@ -273,8 +274,6 @@ in {
|
|||||||
|
|
||||||
# === WireGuard (disabled) ===
|
# === WireGuard (disabled) ===
|
||||||
|
|
||||||
sops.secrets."wg-bfs/private-key" = {};
|
|
||||||
|
|
||||||
# networking.wireguard.interfaces = let
|
# networking.wireguard.interfaces = let
|
||||||
# subnet = "10.13.37";
|
# subnet = "10.13.37";
|
||||||
# externalInterface = "eth0";
|
# externalInterface = "eth0";
|
||||||
|
|||||||
+4
-2
@@ -5,6 +5,8 @@ mailserver:
|
|||||||
hashedPassword: ENC[AES256_GCM,data:zjhCFkmmMzQHn09uRz1S4NTNU8hVRY5ZSYRHn6Gd0u09Fc7inNVSPrO+Br41UagPmv526w9MMQoIbV3RiJq6E/mfhAouqybYbQ==,iv:aVjn+/X2ESgZU7p7jETONaqtsD2/NAFOd7IIbunTRaI=,tag:kueml9QdQYVBceFMCgWoGA==,type:str]
|
hashedPassword: ENC[AES256_GCM,data:zjhCFkmmMzQHn09uRz1S4NTNU8hVRY5ZSYRHn6Gd0u09Fc7inNVSPrO+Br41UagPmv526w9MMQoIbV3RiJq6E/mfhAouqybYbQ==,iv:aVjn+/X2ESgZU7p7jETONaqtsD2/NAFOd7IIbunTRaI=,tag:kueml9QdQYVBceFMCgWoGA==,type:str]
|
||||||
daniil-perlyk:
|
daniil-perlyk:
|
||||||
hashedPassword: ENC[AES256_GCM,data:vlmz39OxJ0iavBYW1ij2pn/1wFOx+yBWR16ZCDlnGvc9/BNwd8vhAPJw7D+bujA89UMAvIC7ERiSNzR2uamp0+aH8gKyzchEXg==,iv:H1NVynfp5X18PcyR2/R4mNZ69KpcbzAc+D2akl3aAmE=,tag:YjYh/y5o3bkajWDsyctJUw==,type:str]
|
hashedPassword: ENC[AES256_GCM,data:vlmz39OxJ0iavBYW1ij2pn/1wFOx+yBWR16ZCDlnGvc9/BNwd8vhAPJw7D+bujA89UMAvIC7ERiSNzR2uamp0+aH8gKyzchEXg==,iv:H1NVynfp5X18PcyR2/R4mNZ69KpcbzAc+D2akl3aAmE=,tag:YjYh/y5o3bkajWDsyctJUw==,type:str]
|
||||||
|
iana-perlyk:
|
||||||
|
hashedPassword: ENC[AES256_GCM,data:RkMAMTIBvI84nccOU69GZsx3iblDPm11SnTGjTqVBFWES24bXH4bcU3Xq7lszY5xcH0W93uFULqGI3wom+szA1XefiGcpKhR9Q==,iv:DjahflSSkOoJyjBAC19AMu+OqOkD3H9PwenE4ylI9W4=,tag:qbcNFnKo7nipC3POsAxtdQ==,type:str]
|
||||||
founders:
|
founders:
|
||||||
hashedPassword: ENC[AES256_GCM,data:E+Xu/Ul3rFLlYDD0LGGRnc6RADlWmXpOM2OfkZFSzAf5thm8leRi9x5sroP25cO8CcSyBcOiUCBv3RC5ooXklm4cmpOx8LA8ug==,iv:RLbU6SBHKOBRCNZ6naxQMaNjWZOlNui6OaaVM2QkdZs=,tag:sO7CD+PVkdtvPvlUrpzW+g==,type:str]
|
hashedPassword: ENC[AES256_GCM,data:E+Xu/Ul3rFLlYDD0LGGRnc6RADlWmXpOM2OfkZFSzAf5thm8leRi9x5sroP25cO8CcSyBcOiUCBv3RC5ooXklm4cmpOx8LA8ug==,iv:RLbU6SBHKOBRCNZ6naxQMaNjWZOlNui6OaaVM2QkdZs=,tag:sO7CD+PVkdtvPvlUrpzW+g==,type:str]
|
||||||
snuff:
|
snuff:
|
||||||
@@ -75,7 +77,7 @@ sops:
|
|||||||
Yk43ZmlTc09aNFV1VjdjN2RWQlFWTDQKcYSvA2lHP8GS0lkYY19Tm8RXmFHQX5Ck
|
Yk43ZmlTc09aNFV1VjdjN2RWQlFWTDQKcYSvA2lHP8GS0lkYY19Tm8RXmFHQX5Ck
|
||||||
qV2Fn22Fic4M5FVKDEMfaO6WmeXgki9a8dGeO9LlC+Phf16SOq7eLw==
|
qV2Fn22Fic4M5FVKDEMfaO6WmeXgki9a8dGeO9LlC+Phf16SOq7eLw==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
lastmodified: "2026-05-27T12:36:35Z"
|
lastmodified: "2026-05-31T17:04:00Z"
|
||||||
mac: ENC[AES256_GCM,data:dqVqDqMRJFVhT78mO8q+X+Mf4TUqxY4ApOdkMAF9bvyvPAPW7kxbKEvn9H5LBDev9CNxfNF9siqaa7aEdATM6ylhrcWPdzPN04LorojdMNRQy/WFQ0rB1Lz1RrIvwltQD5K8RSPFCWWtF8rhqVTGdFafwCWpdmuKTx0HEPNXsPY=,iv:cWHx326j4aycz17N+q2NNqq0VwfeupmOiPdAtZRz7ws=,tag:LOKuvivMogAGQoVlSTu/vg==,type:str]
|
mac: ENC[AES256_GCM,data:wkOHWvNXw3Cfh5ettROAstBdqNj2q5vna4LyOrhkyko4x4U+RhMDghUhtVy/AS48hX2yf5w13eIub/+10jm+HGxw70KA9LK9JuqsjdX8/IpJgWD52/ueZu+iO+dGGCXHLtu2ufWXwuqYAF0ea2sfQygChfhBclgNXYdmnJeOycQ=,iv:/i/0OGCziRYZodT0+dP72wzPV6lsKjieJavp/9LQXj0=,tag:OsM0Qy9o0wzmcgCNr6Bo0Q==,type:str]
|
||||||
unencrypted_suffix: _unencrypted
|
unencrypted_suffix: _unencrypted
|
||||||
version: 3.10.2
|
version: 3.10.2
|
||||||
|
|||||||
Reference in New Issue
Block a user