added postgres service

This commit is contained in:
Leyla Becker 2025-01-02 15:46:50 -06:00
parent afa04e1080
commit 6d2850e78f
2 changed files with 87 additions and 0 deletions

View file

@ -3,5 +3,6 @@
./network_storage ./network_storage
./reverse_proxy.nix ./reverse_proxy.nix
./jellyfin.nix ./jellyfin.nix
./postgres.nix
]; ];
} }

View file

@ -0,0 +1,86 @@
{
config,
lib,
pkgs,
...
}: {
options = {
host.postgres = {
enable = lib.mkEnableOption "enable postgres";
extraAdminUsers = lib.mkOption {
type = lib.types.attrsOf lib.types.submodule ({name, ...}: {
options = {
name = lib.mkOption {
type = lib.types.str;
default = name;
description = ''
What should this users name on the system be
'';
defaultText = lib.literalExpression "config.host.users.\${name}.name";
};
};
});
default = {};
};
extraDatabaseUsers = lib.mkOption {
type = lib.types.attrsOf lib.types.submodule ({name, ...}: {
options = {
name = lib.mkOption {
type = lib.types.str;
default = name;
description = ''
What should this users name on the system be
'';
defaultText = lib.literalExpression "config.host.users.\${name}.name";
};
};
});
default = {};
};
};
};
config = lib.mkIf config.host.postgres.enable {
services = {
postgresql = {
enable = true;
ensureUsers =
[
{
name = "postgres";
}
]
+ (lib.attrsets.mapAttrsToList (user: {
name = user.name;
ensureDBOwnership = true;
})
config.host.postgres.extraDatabaseUsers);
ensureDatabases = lib.attrsets.mapAttrsToList (user: user.name) config.host.postgres.extraDatabaseUsers;
identMap =
''
# ArbitraryMapName systemUser DBUser
# Administration Users
superuser_map root postgres
superuser_map postgres postgres
''
+ (
lib.strings.concatLines (lib.attrsets.mapAttrsToList (user: "superuser_map ${user.name} postgres") config.host.postgres.extraAdminUsers)
)
+ ''
# Client Users
''
+ (
lib.strings.concatLines (lib.attrsets.mapAttrsToList (user: "superuser_map ${user.name} ${user.name}") config.host.postgres.extraDatabaseUsers)
);
# configuration here lets users access the db that matches their name and lets user postgres access everything
authentication = pkgs.lib.mkOverride 10 ''
# type database DBuser origin-address auth-method optional_ident_map
local all postgres peer map=superuser_map
local sameuser all peer map=superuser_map
'';
};
};
};
}