Skip to content

Instantly share code, notes, and snippets.

@risicle
Created September 18, 2025 09:56
Show Gist options
  • Select an option

  • Save risicle/984c35466a37922b01e9b6c8bdc15e16 to your computer and use it in GitHub Desktop.

Select an option

Save risicle/984c35466a37922b01e9b6c8bdc15e16 to your computer and use it in GitHub Desktop.
{
lib,
stdenv,
makeWrapper,
writeScript,
postgresql,
varRoot,
label,
port,
}:
stdenv.mkDerivation rec {
name = "pg-local-${label}";
unpackPhase = " ";
configurePhase = " ";
buildPhase = " ";
checkPhase = " ";
initName = "init-${name}";
dataDir = "${varRoot}/${name}/data";
runDir = "${varRoot}/${name}/run";
initPgLocal = writeScript initName ''
#!/bin/bash
test -e ${dataDir} || (mkdir -p ${dataDir} && ${postgresql}/bin/initdb -D ${dataDir})
test -e ${runDir} || mkdir -p ${runDir}
'';
buildInputs = [ makeWrapper ];
installPhase = ''
mkdir -p $out/bin
for pgprog in ${postgresql}/bin/* ; do
local -a EXTRA_FLAGS=()
if [ "$(basename $pgprog)" = 'postgres' ] ; then
EXTRA_FLAGS+=("--add-flags" "-h 127.0.0.1 -k ${runDir}")
fi
makeWrapper $pgprog "$out/bin/$(basename $pgprog)-${label}" \
--set PGDATA ${dataDir} \
--set PGPORT ${toString port} \
--set PGHOST localhost \
"''${EXTRA_FLAGS[@]}"
done
ln -s $initPgLocal $out/bin/${initName}
'';
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment