flake.nix is getting too big and this makes it easier to understand what
is going on with e.g. callPackage.
---
 crane-build.nix | 139 +++++++++++++++++++++++++++++++++++
 flake.nix       | 189 ++++++------------------------------------------
 2 files changed, 163 insertions(+), 165 deletions(-)
 create mode 100644 crane-build.nix

diff --git a/crane-build.nix b/crane-build.nix
new file mode 100644
index 00000000..9b764ec9
--- /dev/null
+++ b/crane-build.nix
@@ -0,0 +1,139 @@
+{
+  lib,
+  pkgs,
+
+  # build time
+  pkg-config,
+  rustPlatform,
+
+  # run time
+  fuse3,
+  keyutils,
+  libaio,
+  libsodium,
+  liburcu,
+  libuuid,
+  lz4,
+  udev,
+  zlib,
+  zstd,
+
+  crane,
+  rustVersion ? "latest",
+  version,
+}:
+let
+  craneLib = (crane.mkLib pkgs).overrideToolchain (
+    p: p.rust-bin.stable."${rustVersion}".minimal.override { extensions = [ 
"clippy" ]; }
+  );
+
+  args = {
+    inherit version;
+    src = ./.;
+    strictDeps = true;
+
+    env = {
+      PKG_CONFIG_SYSTEMD_SYSTEMDSYSTEMUNITDIR = "${placeholder 
"out"}/lib/systemd/system";
+      PKG_CONFIG_UDEV_UDEVDIR = "${placeholder "out"}/lib/udev";
+    };
+
+    makeFlags = [
+      "INITRAMFS_DIR=${placeholder "out"}/etc/initramfs-tools"
+      "PREFIX=${placeholder "out"}"
+      "VERSION=${version}"
+    ];
+
+    dontStrip = true;
+
+    nativeBuildInputs = [
+      pkg-config
+      rustPlatform.bindgenHook
+    ];
+
+    buildInputs = [
+      keyutils
+      libaio
+      libsodium
+      liburcu
+      libuuid
+      lz4
+      udev
+      zlib
+      zstd
+    ];
+  };
+
+  cargoArtifacts = craneLib.buildDepsOnly args;
+
+  package = craneLib.buildPackage (
+    args
+    // {
+      inherit cargoArtifacts;
+
+      enableParallelBuilding = true;
+      buildPhaseCargoCommand = ''
+        make ''${enableParallelBuilding:+-j''${NIX_BUILD_CORES}} $makeFlags
+      '';
+      doNotPostBuildInstallCargoBinaries = true;
+      installPhaseCommand = ''
+        make ''${enableParallelBuilding:+-j''${NIX_BUILD_CORES}} $makeFlags 
install
+      '';
+
+      doInstallCheck = true;
+      installCheckPhase = ''
+        runHook preInstallCheck
+
+        test "$($out/bin/bcachefs version)" = "${version}"
+
+        runHook postInstallCheck
+      '';
+
+      meta = {
+        description = "Userspace tools for bcachefs";
+        license = lib.licenses.gpl2Only;
+        mainProgram = "bcachefs";
+      };
+    }
+  );
+
+  packageFuse = package.overrideAttrs (
+    final: prev: {
+      makeFlags = prev.makeFlags ++ [ "BCACHEFS_FUSE=1" ];
+      buildInputs = prev.buildInputs ++ [ fuse3 ];
+    }
+  );
+
+  cargo-clippy = craneLib.cargoClippy (
+    args
+    // {
+      inherit cargoArtifacts;
+      cargoClippyExtraArgs = "--all-targets --all-features -- --deny warnings";
+    }
+  );
+
+  # we have to build our own `craneLib.cargoTest`
+  cargo-test = craneLib.mkCargoDerivation (
+    args
+    // {
+      inherit cargoArtifacts;
+      doCheck = true;
+
+      enableParallelChecking = true;
+
+      pnameSuffix = "-test";
+      buildPhaseCargoCommand = "";
+      checkPhaseCargoCommand = ''
+        make ''${enableParallelChecking:+-j''${NIX_BUILD_CORES}} $makeFlags 
libbcachefs.a
+        cargo test --profile release -- --nocapture
+      '';
+    }
+  );
+in
+{
+  inherit
+    cargo-clippy
+    cargo-test
+    package
+    packageFuse
+    ;
+}
diff --git a/flake.nix b/flake.nix
index c2ee9fd6..8b38ba19 100644
--- a/flake.nix
+++ b/flake.nix
@@ -74,113 +74,9 @@
 
           rev = self.shortRev or self.dirtyShortRev or (lib.substring 0 8 
self.lastModifiedDate);
           version = "${cargoToml.package.version}+${rev}";
-
-          mkCommon =
-            {
-              crane,
-              pkgs,
-              rustVersion ? "latest",
-
-              # build time
-              buildPackages,
-              pkg-config,
-              rustPlatform,
-
-              # run time
-              keyutils,
-              libaio,
-              libsodium,
-              liburcu,
-              libuuid,
-              lz4,
-              udev,
-              zlib,
-              zstd,
-            }:
-            let
-              craneLib = (crane.mkLib pkgs).overrideToolchain (
-                p: p.rust-bin.stable."${rustVersion}".minimal.override { 
extensions = [ "clippy" ]; }
-              );
-
-              args = {
-                inherit version;
-                src = self;
-                strictDeps = true;
-
-                env = {
-                  PKG_CONFIG_SYSTEMD_SYSTEMDSYSTEMUNITDIR = "${placeholder 
"out"}/lib/systemd/system";
-                  PKG_CONFIG_UDEV_UDEVDIR = "${placeholder "out"}/lib/udev";
-                };
-
-                makeFlags = [
-                  "INITRAMFS_DIR=${placeholder "out"}/etc/initramfs-tools"
-                  "PREFIX=${placeholder "out"}"
-                  "VERSION=${version}"
-                ];
-
-                dontStrip = true;
-
-                nativeBuildInputs = [
-                  pkg-config
-                  rustPlatform.bindgenHook
-                ];
-
-                buildInputs = [
-                  keyutils
-                  libaio
-                  libsodium
-                  liburcu
-                  libuuid
-                  lz4
-                  udev
-                  zlib
-                  zstd
-                ];
-
-                meta = {
-                  description = "Userspace tools for bcachefs";
-                  license = lib.licenses.gpl2Only;
-                  mainProgram = "bcachefs";
-                };
-              };
-
-              cargoArtifacts = craneLib.buildDepsOnly args;
-            in
-            {
-              inherit args cargoArtifacts craneLib;
-            };
-          common = pkgs.callPackage mkCommon { inherit crane; };
-
-          mkPackage =
-            { common, name }:
-            common.craneLib.buildPackage (
-              common.args
-              // {
-                inherit (common) cargoArtifacts;
-                pname = name;
-
-                enableParallelBuilding = true;
-                buildPhaseCargoCommand = ''
-                  make ''${enableParallelBuilding:+-j''${NIX_BUILD_CORES}} 
$makeFlags
-                '';
-                doNotPostBuildInstallCargoBinaries = true;
-                installPhaseCommand = ''
-                  make ''${enableParallelBuilding:+-j''${NIX_BUILD_CORES}} 
$makeFlags install
-                '';
-
-                doInstallCheck = true;
-                installCheckPhase = ''
-                  runHook preInstallCheck
-
-                  test "$($out/bin/bcachefs version)" = "${version}"
-
-                  runHook postInstallCheck
-                '';
-              }
-            );
-
-          mkPackages =
-            name: systems:
+        in
+        {
+          packages =
             let
               packagesForSystem =
                 crossSystem:
@@ -190,90 +86,53 @@
                     inherit crossSystem localSystem;
                     overlays = [ (import rust-overlay) ];
                   };
+                  withCrossName =
+                    set: lib.mapAttrs' (name: value: lib.nameValuePair 
"${name}-${crossSystem}" value) set;
 
-                  common = pkgs'.callPackage mkCommon { inherit crane; };
-                  package = pkgs'.callPackage mkPackage { inherit common name; 
};
-                  packageFuse = package.overrideAttrs (
-                    final: prev: {
-                      makeFlags = prev.makeFlags ++ [ "BCACHEFS_FUSE=1" ];
-                      buildInputs = prev.buildInputs ++ [ pkgs'.fuse3 ];
-                    }
-                  );
+                  craneBuild = pkgs'.callPackage ./crane-build.nix { inherit 
crane version; };
+                  crossPackages = {
+                    "bcachefs-tools" = craneBuild.package;
+                    "bcachefs-tools-fuse" = craneBuild.packageFuse;
+                  };
                 in
-                [
-                  (lib.nameValuePair "${name}-${crossSystem}" package)
-                  (lib.nameValuePair "${name}-fuse-${crossSystem}" packageFuse)
-                ];
+                (withCrossName crossPackages) // lib.optionalAttrs 
(crossSystem == localSystem) crossPackages;
+              packages = lib.mergeAttrsList (map packagesForSystem systems);
             in
-            lib.listToAttrs (lib.flatten (map packagesForSystem systems));
-        in
-        {
-          packages =
-            let
-              inherit (cargoToml.package) name;
-            in
-            (mkPackages name systems)
+            packages
             // {
-              ${name} = config.packages."${name}-${system}";
-              "${name}-fuse" = config.packages."${name}-fuse-${system}";
-              default = config.packages.${name};
+              default = self'.packages.${cargoToml.package.name};
             };
 
           checks = {
-            inherit (config.packages)
+            inherit (self'.packages)
               bcachefs-tools
               bcachefs-tools-aarch64-linux
               bcachefs-tools-fuse
               bcachefs-tools-fuse-i686-linux
               ;
-
-            #cargo-clippy = common.craneLib.cargoClippy (
-            #  common.args
-            #  // {
-            #    inherit (common) cargoArtifacts;
-            #    cargoClippyExtraArgs = "--all-targets --all-features -- 
--deny warnings";
-            #  }
-            #);
-
-            # we have to build our own `craneLib.cargoTest`
-            cargo-test = common.craneLib.mkCargoDerivation (
-              common.args
-              // {
-                inherit (common) cargoArtifacts;
-                doCheck = true;
-
-                enableParallelChecking = true;
-
-                pnameSuffix = "-test";
-                buildPhaseCargoCommand = "";
-                checkPhaseCargoCommand = ''
-                  make ''${enableParallelChecking:+-j''${NIX_BUILD_CORES}} 
$makeFlags libbcachefs.a
-                  cargo test --profile release -- --nocapture
-                '';
-              }
-            );
+            inherit (pkgs.callPackage ./crane-build.nix { inherit crane 
version; })
+              # cargo-clippy
+              cargo-test
+              ;
 
             # cargo clippy with the current minimum supported rust version
             # according to Cargo.toml
             msrv =
               let
                 rustVersion = cargoToml.package.rust-version;
-                common = pkgs.callPackage mkCommon { inherit crane 
rustVersion; };
+                craneBuild = pkgs.callPackage ./crane-build.nix { inherit 
crane rustVersion version; };
               in
-              common.craneLib.cargoClippy (
-                common.args
-                // {
-                  pname = "msrv";
-                  inherit (common) cargoArtifacts;
-                  cargoClippyExtraArgs = "--all-targets --all-features";
+              craneBuild.cargo-test.overrideAttrs (
+                final: prev: {
+                  pname = "${prev.pname}-msrv";
                 }
               );
           };
 
           devShells.default = pkgs.mkShell {
             inputsFrom = [
-              config.packages.default
               config.treefmt.build.devShell
+              self'.packages.default
             ];
 
             # here go packages that aren't required for builds but are used for
-- 
2.51.0


Reply via email to