From 46a3d2ba70decd1931e13c190bfa49217e57718d Mon Sep 17 00:00:00 2001 From: Stefan Kreutz Date: Thu, 30 Apr 2026 10:10:46 +0200 Subject: Rewrite in async Rust --- flake.nix | 73 ++++++++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 51 insertions(+), 22 deletions(-) (limited to 'flake.nix') diff --git a/flake.nix b/flake.nix index 2076939..1ca32d2 100644 --- a/flake.nix +++ b/flake.nix @@ -4,6 +4,7 @@ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; flake-parts.url = "github:hercules-ci/flake-parts"; + crane.url = "github:ipetkov/crane"; }; outputs = @@ -11,6 +12,7 @@ self, nixpkgs, flake-parts, + crane, ... }: flake-parts.lib.mkFlake { inherit inputs; } { @@ -28,9 +30,35 @@ ... }: let - version = builtins.head (lib.splitString "\n" (builtins.readFile ./version)); - revision = lib.toString (self.shortRev or self.dirtyShortRev or "unknown"); - mkPackage = + craneLib = crane.mkLib pkgs; + src = craneLib.cleanCargoSource ./.; + commonArgs = { + inherit src; + strictDeps = true; + }; + cargoArtifacts = craneLib.buildDepsOnly commonArgs; + crate = craneLib.buildPackage ( + commonArgs + // { + inherit cargoArtifacts; + nativeBuildInputs = [ + pkgs.coreutils + pkgs.postgresql + ]; + meta.mainProgram = "temp-postgres"; + VERGEN_GIT_SHA = + if self ? shortRev then + self.shortRev + else if self ? dirtyShortRev then + lib.strings.removeSuffix "-dirty" self.dirtyShortRev + else + "unknown"; + VERGEN_GIT_DIRTY = if self ? dirtyShortRev then "true" else "false"; + } + ); + version = crate.version; + revision = self.shortRev or self.dirtyShortRev or "unknown"; + wrap = { postgresql, suffix ? "", @@ -38,19 +66,11 @@ 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 = '' + buildCommand = '' 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 ]} + makeWrapper ${crate}/bin/temp-postgres $out/bin/temp-postgres \ + --prefix PATH : ${lib.makeBinPath [ postgresql ]} ''; }; postgresqlVersions = lib.mapAttrs' ( @@ -58,7 +78,7 @@ let postgresqlVersion = lib.removePrefix "postgresql_" name; in - lib.nameValuePair "temp-postgres_${postgresqlVersion}" (mkPackage { + lib.nameValuePair "temp-postgres_${postgresqlVersion}" (wrap { postgresql = drv; suffix = "_${postgresqlVersion}"; }) @@ -67,24 +87,33 @@ { packages = { default = self'.packages.temp-postgres; - temp-postgres = mkPackage { postgresql = pkgs.postgresql; }; + temp-postgres = wrap { postgresql = pkgs.postgresql; }; + temp-postgres-unwrapped = crate; } // postgresqlVersions; - formatter = pkgs.nixfmt-tree; - devShells.default = pkgs.mkShell { nativeBuildInputs = with pkgs; [ - gnumake - gzip - mandoc + cargo + cargo-audit + cargo-deny + cargo-edit + clippy + just + nixfmt postgresql - shellcheck + rust-analyzer + rustc + rustfmt + taplo + watchexec ]; shellHook = '' export FLAKE=${self} ''; }; + + formatter = pkgs.nixfmt-tree; }; }; } -- cgit v1.3