{ pkgs ? import <nixpkgs> {} }:
pkgs.mkShell {
# nativeBuildInputs is usually what you want -- tools you need to run
nativeBuildInputs = [
# SCM - Pijul :-)
pkgs.buildPackages.pijul
# Rust programming
pkgs.buildPackages.rustc
pkgs.buildPackages.cargo
pkgs.buildPackages.rustfmt
# Database
pkgs.buildPackages.postgresql
pkgs.sqlx-cli
# Compile time requirements
pkgs.buildPackages.libiconv
# LibPijul dependencies
pkgs.buildPackages.xxHash
pkgs.buildPackages.zstd
] ++ pkgs.lib.optionals pkgs.stdenv.isDarwin
(with pkgs.darwin.apple_sdk.frameworks; [
CoreServices
Security
SystemConfiguration
]);
shellHook = ''
export PGDATA=$PWD/tmp/postgres_data
export PGHOST=$PWD/tmp/postgres
export LOG_PATH=$PWD/tmp/postgres/LOG
export PGDATABASE=postgres
export DATABASE_URL="postgresql:///postgres?host=$PGHOST"
if [ ! -d $PGHOST ]; then
mkdir -p $PGHOST
fi
if [ ! -d $PGDATA ]; then
echo 'Initializing postgresql database...'
initdb $PGDATA --auth=trust >/dev/null
fi
if ! pg_ctl status 1>/dev/null; then
pg_ctl start -l $LOG_PATH -o "-c listen_addresses= -c unix_socket_directories=$PGHOST"
fi
export REPOSITORY_ROOT="$PWD/tmp/repositories"
if [ ! -d $REPOSITORY_ROOT ]; then
mkdir $REPOSITORY_ROOT
fi
'';
}