From b5442f6657d4245866104989a1f75ec0a5fe06ed Mon Sep 17 00:00:00 2001 From: Stefan Kreutz Date: Thu, 16 Apr 2026 15:22:51 +0200 Subject: Add PostgreSQL version-specific Nix packages --- CHANGELOG.md | 4 ++++ README.md | 6 +++++ examples/nixos/flake.nix | 7 +++++- flake.nix | 58 +++++++++++++++++++++++++++++++----------------- 4 files changed, 54 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d61e20..2ddeb67 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,10 @@ The format is based on [Keep A Changelog][] and this project adheres to [Semanti ## Unreleased +### Added + +* Added PostgreSQL version-specific packages to Nix flake + ## [0.3.0] - 2026-04-16 ### Added diff --git a/README.md b/README.md index 07aae60..599c083 100644 --- a/README.md +++ b/README.md @@ -96,6 +96,12 @@ Alternatively you can run or install the experimental Nix flake: nix run git+https://git.skreutz.com/temp-postgres.git -- --help ``` +You can optionally select the PostgreSQL version provided by Nixpkgs: + +```sh +nix run git+https://git.skreutz.com/temp-postgres.git#temp-postgres_18 -- --help +``` + Try using Nix' `--refresh` flag, or adding `?ref=main&shallow=0` to the URL if you experience caching issues. See the [NixOS example](./examples/nixos) for how to install `temp-postgres` on NixOS using Nix flakes. diff --git a/examples/nixos/flake.nix b/examples/nixos/flake.nix index f97422c..78bc39a 100644 --- a/examples/nixos/flake.nix +++ b/examples/nixos/flake.nix @@ -29,7 +29,12 @@ modules = [ # The following goes typically into ./configuration.nix { - environment.systemPackages = [ inputs.temp-postgres.packages.${system}.default ]; + environment.systemPackages = [ + inputs.temp-postgres.packages.${system}.default + + # Optionally select the PostgreSQL version provided by Nixpkgs. + #inputs.temp-postgres.packages.${system}.temp-postgres_18 + ]; users.users.stefan = { isNormalUser = true; diff --git a/flake.nix b/flake.nix index 7b2eb9c..2076939 100644 --- a/flake.nix +++ b/flake.nix @@ -30,28 +30,46 @@ 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; - - packages.temp-postgres = pkgs.stdenv.mkDerivation { - name = "temp-postgres-${version}-${revision}"; - 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 [ pkgs.postgresql ]} - ''; - }; + packages = { + default = self'.packages.temp-postgres; + temp-postgres = mkPackage { postgresql = pkgs.postgresql; }; + } + // postgresqlVersions; formatter = pkgs.nixfmt-tree; -- cgit v1.3