Signed-off-by: Christoph Schmatzler <christoph@schmatzler.com>
This commit is contained in:
2025-08-23 16:05:11 +00:00
parent 14924e7b7b
commit acd58a2f53
5 changed files with 39 additions and 41 deletions

View File

@@ -27,6 +27,4 @@
TrackpadThreeFingerDrag = true; TrackpadThreeFingerDrag = true;
}; };
}; };
} }

View File

@@ -4,4 +4,3 @@
nix-direnv.enable = true; nix-direnv.enable = true;
}; };
} }

View File

@@ -1,7 +1,4 @@
{ {pkgs, ...}: {
pkgs,
...
}: {
imports = [ imports = [
./zellij.nix ./zellij.nix
]; ];

View File

@@ -105,4 +105,3 @@ final: prev: {
''; '';
}); });
} }

View File

@@ -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" ''
@@ -13,43 +17,45 @@ final: prev: {
# Create databases if they don't exist # Create databases if they don't exist
${prev.lib.concatMapStringsSep "\n" (db: '' ${prev.lib.concatMapStringsSep "\n" (db: ''
if ! ${cfg.package}/bin/psql -h localhost -p ${toString cfg.port} -U ${cfg.superUser} -lqt | cut -d'|' -f1 | grep -qw ${prev.lib.escapeShellArg db}; then if ! ${cfg.package}/bin/psql -h localhost -p ${toString cfg.port} -U ${cfg.superUser} -lqt | cut -d'|' -f1 | grep -qw ${prev.lib.escapeShellArg db}; then
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: ''
# Create user if it doesn't exist # Create user if it doesn't exist
if ! ${cfg.package}/bin/psql -h localhost -p ${toString cfg.port} -U ${cfg.superUser} -tAc "SELECT 1 FROM pg_roles WHERE rolname='${prev.lib.escapeShellArg user.name}'" | grep -q 1; then if ! ${cfg.package}/bin/psql -h localhost -p ${toString cfg.port} -U ${cfg.superUser} -tAc "SELECT 1 FROM pg_roles WHERE rolname='${prev.lib.escapeShellArg user.name}'" | grep -q 1; then
echo "Creating user: ${prev.lib.escapeShellArg user.name}" echo "Creating user: ${prev.lib.escapeShellArg user.name}"
${cfg.package}/bin/psql -h localhost -p ${toString cfg.port} -U ${cfg.superUser} -c "CREATE USER \"${prev.lib.escapeShellArg user.name}\"" ${cfg.package}/bin/psql -h localhost -p ${toString cfg.port} -U ${cfg.superUser} -c "CREATE USER \"${prev.lib.escapeShellArg user.name}\""
fi fi
# Set user privileges # Set user privileges
${prev.lib.optionalString (user ? ensureDBOwnership && user.ensureDBOwnership) '' ${prev.lib.optionalString (user ? ensureDBOwnership && user.ensureDBOwnership) ''
echo "Setting database ownership for ${prev.lib.escapeShellArg user.name}" echo "Setting database ownership for ${prev.lib.escapeShellArg user.name}"
${cfg.package}/bin/psql -h localhost -p ${toString cfg.port} -U ${cfg.superUser} -c "ALTER USER \"${prev.lib.escapeShellArg user.name}\" CREATEDB CREATEROLE" ${cfg.package}/bin/psql -h localhost -p ${toString cfg.port} -U ${cfg.superUser} -c "ALTER USER \"${prev.lib.escapeShellArg user.name}\" CREATEDB CREATEROLE"
''}
${prev.lib.optionalString (user ? ensureClauses) ''
${prev.lib.optionalString (user.ensureClauses ? superuser && user.ensureClauses.superuser) ''
echo "Granting superuser to ${prev.lib.escapeShellArg user.name}"
${cfg.package}/bin/psql -h localhost -p ${toString cfg.port} -U ${cfg.superUser} -c "ALTER USER \"${prev.lib.escapeShellArg user.name}\" SUPERUSER"
''} ''}
${prev.lib.optionalString (user.ensureClauses ? createdb && user.ensureClauses.createdb) ''
echo "Granting createdb to ${prev.lib.escapeShellArg user.name}"
${cfg.package}/bin/psql -h localhost -p ${toString cfg.port} -U ${cfg.superUser} -c "ALTER USER \"${prev.lib.escapeShellArg user.name}\" CREATEDB"
''}
''}
# Grant permissions (legacy support) ${prev.lib.optionalString (user ? ensureClauses) ''
${prev.lib.concatMapStringsSep "\n" (perm: '' ${prev.lib.optionalString (user.ensureClauses ? superuser && user.ensureClauses.superuser) ''
echo "Granting ${prev.lib.escapeShellArg perm} to ${prev.lib.escapeShellArg user.name}" echo "Granting superuser 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 "ALTER USER \"${prev.lib.escapeShellArg user.name}\" SUPERUSER"
'') (prev.lib.optionals (user ? ensurePermissions) (prev.lib.mapAttrsToList (target: perm: "${perm} ON ${target}") user.ensurePermissions))} ''}
'') cfg.ensureUsers} ${prev.lib.optionalString (user.ensureClauses ? createdb && user.ensureClauses.createdb) ''
echo "Granting createdb to ${prev.lib.escapeShellArg user.name}"
${cfg.package}/bin/psql -h localhost -p ${toString cfg.port} -U ${cfg.superUser} -c "ALTER USER \"${prev.lib.escapeShellArg user.name}\" CREATEDB"
''}
''}
# Grant permissions (legacy support)
${prev.lib.concatMapStringsSep "\n" (perm: ''
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}\""
'') (prev.lib.optionals (user ? ensurePermissions) (prev.lib.mapAttrsToList (target: perm: "${perm} ON ${target}") user.ensurePermissions))}
'')
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) {