{ pkgs, ... }: { virtualisation.arion = { backend = "docker"; projects = { "db".settings.services."db".service = { restart = "unless-stopped"; build.context = "/nix/store"; build.dockerfile = builtins.baseNameOf "${pkgs.writeScript "pgDockerfile" '' FROM postgres:16 # install packages RUN apt-get update \ && apt-get install -y --no-install-recommends \ postgresql-16-postgis \ && rm -rf /var/lib/apt/lists/* ''}"; environment = { POSTGRES_PASSWORD = "balls1234"; POSTGRES_USER = "admin"; POSTGRES_DB = "admin_db"; PGDATA = "/var/lib/postgresql/data/pgdata"; }; ports = [ "5432:5432" ]; volumes = [ "/mnt/postgres:/var/lib/postgresql/data" # PG init script "${pkgs.writeScript "init.sh" '' #!/bin/bash # Create additional databases psql -v --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL create database bitcoin; create database osm; EOSQL # Create additional users psql -v --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL create user gis; create user satoshi; EOSQL # Setup bitcoin db psql -v --username "$POSTGRES_USER" --dbname "bitcoin" <<-EOSQL grant all privileges on database bitcoin to satoshi; EOSQL # Setup osm db psql -v --username "$POSTGRES_USER" --dbname "osm" <<-EOSQL grant all privileges on database osm to gis; create extension if not exists postgis; create extension if not exists hstore; EOSQL ''}:/docker-entrypoint-initdb.d/init.sh" ]; }; }; }; }