{ description = "Landkreis-Sprints"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; rust-overlay.url = "github:oxalica/rust-overlay"; flake-utils.url = "github:numtide/flake-utils"; }; outputs = { nixpkgs, rust-overlay, flake-utils, ... }: flake-utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; overlays = [ (import rust-overlay) ]; }; rust = pkgs.rust-bin.stable.latest.default.override { extensions = [ "rustfmt" "clippy" ]; }; in { devShells.default = pkgs.mkShell { packages = with pkgs; [ rust postgresql postgis sqlx-cli gdal geos proj pkg-config openssl ]; shellHook = '' export PGDATA="$PWD/.pgdata" export PGHOST="$PWD/.pgsocket" export PGPORT="5433" export PGDATABASE="county_sprints" export PGUSER="county_sprints" mkdir -p "$PGHOST" if [ ! -f "$PGDATA/PG_VERSION" ]; then echo "initialising PostgreSQL..." initdb \ --auth=trust \ --no-locale \ "$PGDATA" >/dev/null cat >> "$PGDATA/postgresql.conf" </dev/null 2>&1; then pg_ctl \ -D "$PGDATA" \ -o "-k $PGHOST -p $PGPORT" \ -l "$PGDATA/postgresql.log" \ start >/dev/null fi if ! psql \ -h "$PGHOST" \ -p "$PGPORT" \ -d postgres \ -tAc "SELECT 1 FROM pg_roles WHERE rolname='$PGUSER'" | grep -q 1 then createuser \ -h "$PGHOST" \ -p "$PGPORT" \ "$PGUSER" fi if ! psql \ -h "$PGHOST" \ -p "$PGPORT" \ -d postgres \ -tAc "SELECT 1 FROM pg_database WHERE datname='$PGDATABASE'" | grep -q 1 then createdb \ -h "$PGHOST" \ -p "$PGPORT" \ -O "$PGUSER" \ "$PGDATABASE" fi if ! psql \ -h "$PGHOST" \ -p "$PGPORT" \ -d "$PGDATABASE" \ -tAc "SELECT 1 FROM pg_extension WHERE extname='postgis'" | grep -q 1 then psql \ -h "$PGHOST" \ -p "$PGPORT" \ -d "$PGDATABASE" \ -c "CREATE EXTENSION postgis;" >/dev/null fi export DATABASE_URL="postgresql://$PGUSER@/$PGDATABASE?host=$PGHOST&port=$PGPORT" echo echo "========================================" echo " county-sprints development environment" echo "========================================" echo "DATABASE_URL=$DATABASE_URL" echo ''; }; } ); }