|
|
|
@@ -1,5 +1,9 @@
|
|
|
|
final: prev: {
|
|
|
|
final: prev: {
|
|
|
|
postgresql = { config, lib, ... }: let
|
|
|
|
postgresql = {
|
|
|
|
|
|
|
|
config,
|
|
|
|
|
|
|
|
lib,
|
|
|
|
|
|
|
|
...
|
|
|
|
|
|
|
|
}: let
|
|
|
|
cfg = config.services.postgresql;
|
|
|
|
cfg = config.services.postgresql;
|
|
|
|
|
|
|
|
|
|
|
|
postStartScript = prev.writeScript "postgresql-post-start" ''
|
|
|
|
postStartScript = prev.writeScript "postgresql-post-start" ''
|
|
|
|
@@ -17,7 +21,8 @@ final: prev: {
|
|
|
|
echo "Creating database: ${prev.lib.escapeShellArg db}"
|
|
|
|
echo "Creating database: ${prev.lib.escapeShellArg db}"
|
|
|
|
${cfg.package}/bin/createdb -h localhost -p ${toString cfg.port} -U ${cfg.superUser} ${prev.lib.escapeShellArg db}
|
|
|
|
${cfg.package}/bin/createdb -h localhost -p ${toString cfg.port} -U ${cfg.superUser} ${prev.lib.escapeShellArg db}
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
'') cfg.ensureDatabases}
|
|
|
|
'')
|
|
|
|
|
|
|
|
cfg.ensureDatabases}
|
|
|
|
|
|
|
|
|
|
|
|
# Create users and set permissions
|
|
|
|
# Create users and set permissions
|
|
|
|
${prev.lib.concatMapStringsSep "\n" (user: ''
|
|
|
|
${prev.lib.concatMapStringsSep "\n" (user: ''
|
|
|
|
@@ -49,7 +54,8 @@ final: prev: {
|
|
|
|
echo "Granting ${prev.lib.escapeShellArg perm} to ${prev.lib.escapeShellArg user.name}"
|
|
|
|
echo "Granting ${prev.lib.escapeShellArg perm} to ${prev.lib.escapeShellArg user.name}"
|
|
|
|
${cfg.package}/bin/psql -h localhost -p ${toString cfg.port} -U ${cfg.superUser} -c "GRANT ${prev.lib.escapeShellArg perm} TO \"${prev.lib.escapeShellArg user.name}\""
|
|
|
|
${cfg.package}/bin/psql -h localhost -p ${toString cfg.port} -U ${cfg.superUser} -c "GRANT ${prev.lib.escapeShellArg perm} TO \"${prev.lib.escapeShellArg user.name}\""
|
|
|
|
'') (prev.lib.optionals (user ? ensurePermissions) (prev.lib.mapAttrsToList (target: perm: "${perm} ON ${target}") user.ensurePermissions))}
|
|
|
|
'') (prev.lib.optionals (user ? ensurePermissions) (prev.lib.mapAttrsToList (target: perm: "${perm} ON ${target}") user.ensurePermissions))}
|
|
|
|
'') cfg.ensureUsers}
|
|
|
|
'')
|
|
|
|
|
|
|
|
cfg.ensureUsers}
|
|
|
|
|
|
|
|
|
|
|
|
# Run initial script if provided
|
|
|
|
# Run initial script if provided
|
|
|
|
${prev.lib.optionalString (cfg.initialScript != null) ''
|
|
|
|
${prev.lib.optionalString (cfg.initialScript != null) ''
|
|
|
|
@@ -57,7 +63,6 @@ final: prev: {
|
|
|
|
${cfg.package}/bin/psql -h localhost -p ${toString cfg.port} -U ${cfg.superUser} -f ${cfg.initialScript}
|
|
|
|
${cfg.package}/bin/psql -h localhost -p ${toString cfg.port} -U ${cfg.superUser} -f ${cfg.initialScript}
|
|
|
|
''}
|
|
|
|
''}
|
|
|
|
'';
|
|
|
|
'';
|
|
|
|
|
|
|
|
|
|
|
|
in {
|
|
|
|
in {
|
|
|
|
config = prev.lib.mkIf cfg.enable {
|
|
|
|
config = prev.lib.mkIf cfg.enable {
|
|
|
|
launchd.user.agents.postgresql = prev.lib.mkIf (cfg.ensureDatabases != [] || cfg.ensureUsers != [] || cfg.initialScript != null) {
|
|
|
|
launchd.user.agents.postgresql = prev.lib.mkIf (cfg.ensureDatabases != [] || cfg.ensureUsers != [] || cfg.initialScript != null) {
|
|
|
|
|