First commit
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
{
|
||||
description = "PostgreSQL";
|
||||
|
||||
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
|
||||
outputs = { self, nixpkgs, ... }@inputs:
|
||||
let
|
||||
pkgsFor = system: import nixpkgs { inherit system; };
|
||||
|
||||
shellHook = ''
|
||||
CONFIG_FILE=./config/config.yaml
|
||||
|
||||
if [ -f "$CONFIG_FILE" ]; then
|
||||
DB_USER=$(yq -r ".database.user" "$CONFIG_FILE")
|
||||
DB_PASSWORD=$(yq -r ".database.password" "$CONFIG_FILE")
|
||||
DB_PORT=$(yq -r ".database.port" "$CONFIG_FILE")
|
||||
DB_NAME=$(yq -r ".database.database" "$CONFIG_FILE")
|
||||
else
|
||||
echo "config.yaml not found, using defaults."
|
||||
exit
|
||||
fi
|
||||
|
||||
: "$${DB_USER:=$${USER}}"
|
||||
: "$${DB_PASSWORD:=password}"
|
||||
: "$${DB_PORT:=5432}"
|
||||
: "$${DB_NAME:=postgres}"
|
||||
|
||||
export PGDATA="$PWD/postgres-data-nix"
|
||||
export PGHOST="$PGDATA"
|
||||
|
||||
mkdir -p "$PGDATA"
|
||||
chmod 700 "$PGDATA"
|
||||
|
||||
mkdir -p "$PWD/.log"
|
||||
chmod 700 "$PWD/.log"
|
||||
|
||||
if [ ! -f "$PGDATA/PG_VERSION" ]; then
|
||||
echo "Initializing database..."
|
||||
initdb -D "$PGDATA" > .log/postgres.log 2>&1
|
||||
|
||||
echo "unix_socket_directories = '$PGDATA'" >> "$PGDATA/postgresql.conf"
|
||||
echo "listen_addresses = '127.0.0.1'" >> "$PGDATA/postgresql.conf"
|
||||
|
||||
pg_ctl -D "$PGDATA" -l .log/postgres.log -o "-k $PGDATA -p $DB_PORT" start
|
||||
|
||||
sleep 1
|
||||
|
||||
psql --dbname postgres -v ON_ERROR_STOP=1 <<EOSQL > .log/postgres.log 2>&1
|
||||
DO \$\$
|
||||
BEGIN
|
||||
IF NOT EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = '$DB_USER') THEN
|
||||
EXECUTE format('CREATE ROLE %I LOGIN PASSWORD %L', '$DB_USER', '$DB_PASSWORD');
|
||||
END IF;
|
||||
END
|
||||
\$\$;
|
||||
EOSQL
|
||||
|
||||
psql --dbname postgres -v ON_ERROR_STOP=1 <<EOSQL > .log/postgres.log 2>&1
|
||||
CREATE DATABASE "$DB_NAME" OWNER "$DB_USER";
|
||||
EOSQL
|
||||
else
|
||||
pg_ctl -D "$PGDATA" -l .log/postgres.log -o "-k $PGDATA -p $DB_PORT" start
|
||||
fi
|
||||
'';
|
||||
|
||||
in
|
||||
{
|
||||
devShells.x86_64-linux.default = let
|
||||
pkgs = pkgsFor "x86_64-linux";
|
||||
in pkgs.mkShell {
|
||||
packages = [ pkgs.postgresql_18 pkgs.yq ];
|
||||
shellHook = shellHook;
|
||||
};
|
||||
|
||||
devShells.aarch64-linux.default = let
|
||||
pkgs = pkgsFor "aarch64-linux";
|
||||
in pkgs.mkShell {
|
||||
packages = [ pkgs.postgresql_18 pkgs.yq ];
|
||||
shellHook = shellHook;
|
||||
};
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user