infrastructure/nixos/postgres.nix
2024-09-27 21:27:55 -07:00

69 lines
1.8 KiB
Nix

{
config,
lib,
...
}: let
inherit (lib.modules) mkIf mkDefault mkAfter;
inherit (lib) versions;
cfg = config.services.postgresql;
in {
services.postgresql = {
enable = mkDefault true;
ensureDatabases = ["hass" "invidious" "dex" "keycloak" "vaultwarden"];
ensureUsers = [
{
name = "hass";
ensureDBOwnership = true;
authentication.int.allow = !config.services.home-assistant.enable;
}
{
name = "invidious";
ensureDBOwnership = true;
authentication.int.allow = !config.services.invidious.enable;
}
{
name = "dex";
ensureDBOwnership = true;
authentication.local.allow = true;
}
{
name = "keycloak";
ensureDBOwnership = true;
authentication.int.allow = !config.services.keycloak.enable;
}
{
name = "vaultwarden";
ensureDBOwnership = true;
authentication.int.allow = !config.services.vaultwarden.enable;
}
];
};
services.postgresqlBackup = {
enable = mkDefault cfg.enable;
compression = mkDefault "none";
location = mkDefault "/mnt/shared/postgresql/dump";
startAt = mkDefault "*-*-* 00:30:00";
databases = [
#"hass" # only used for recorder (entity state history) module, so just a useless large cache?
"invidious"
#"dex"
"keycloak"
"vaultwarden"
];
};
systemd = {
services.postgresql = mkIf cfg.enable {
gensokyo-zone.sharedMounts."postgresql/${versions.major cfg.package.version}".path = cfg.dataDir;
postStart = mkAfter ''
$PSQL -tAf ${config.sops.secrets.postgresql-init.path}
'';
};
};
sops.secrets.postgresql-init = {
sopsFile = mkDefault ./secrets/postgres.yaml;
owner = "postgres";
group = "postgres";
};
}