{ description = "Run the PostgreSQL server off a temporary data directory"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; flake-parts.url = "github:hercules-ci/flake-parts"; }; outputs = inputs@{ self, nixpkgs, flake-parts, ... }: flake-parts.lib.mkFlake { inherit inputs; } { systems = [ "x86_64-linux" "aarch64-linux" "aarch64-darwin" ]; perSystem = { self', pkgs, lib, ... }: let version = builtins.head (lib.splitString "\n" (builtins.readFile ./version)); revision = lib.toString (self.shortRev or self.dirtyShortRev or "unknown"); mkPackage = { postgresql, suffix ? "", }: pkgs.stdenv.mkDerivation { name = "temp-postgres-${version}-${revision}${suffix}"; version = "${version}-${revision}"; src = lib.cleanSource ( builtins.path { path = ./.; name = "temp-postgres"; } ); nativeBuildInputs = [ pkgs.makeBinaryWrapper ]; installPhase = '' mkdir -p $out/bin cp temp-postgres.sh $out/bin/temp-postgres mkdir -p $out/man/man1 cp temp-postgres.1 $out/man/man1/temp-postgres.1 wrapProgram $out/bin/temp-postgres --prefix PATH : ${lib.makeBinPath [ postgresql ]} ''; }; postgresqlVersions = lib.mapAttrs' ( name: drv: let postgresqlVersion = lib.removePrefix "postgresql_" name; in lib.nameValuePair "temp-postgres_${postgresqlVersion}" (mkPackage { postgresql = drv; suffix = "_${postgresqlVersion}"; }) ) pkgs.postgresqlVersions; in { packages = { default = self'.packages.temp-postgres; temp-postgres = mkPackage { postgresql = pkgs.postgresql; }; } // postgresqlVersions; formatter = pkgs.nixfmt-tree; devShells.default = pkgs.mkShell { nativeBuildInputs = with pkgs; [ gnumake gzip mandoc postgresql shellcheck ]; shellHook = '' export FLAKE=${self} ''; }; }; }; }