crate2nix 0.13.0

crate2nix generates nix (as in NixOS) build files for rust using cargo.
Documentation
# Provided by callPackage or also directly usable via nix-build with defaults.
{ pkgs ? (
    let
      flakeLock = builtins.fromJSON (builtins.readFile ../flake.lock);
    in
    import "${builtins.fetchTree flakeLock.nodes.nixpkgs.locked}" { }
  )
, stdenv ? pkgs.stdenv
, lib ? pkgs.lib
, symlinkJoin ? pkgs.symlinkJoin
, makeWrapper ? pkgs.makeWrapper
, darwin ? pkgs.darwin
, defaultCrateOverrides ? pkgs.defaultCrateOverrides
, nix ? pkgs.nix
, cargo ? pkgs.cargo
, callPackage ? pkgs.callPackage
, nix-prefetch-git ? pkgs.nix-prefetch-git
  # Seperate arguements that are NOT filled by callPackage.
, cargoNixPath ? ./Cargo.nix
, release ? true
}:
let
  cargoNix = callPackage cargoNixPath { inherit release; };
  withoutTemplates = name: type:
    let
      baseName = builtins.baseNameOf (builtins.toString name);
    in
      !(baseName == "templates" && type == "directory");
  crate2nix = cargoNix.rootCrate.build.override {
    testCrateFlags = [
      "--skip nix_integration_tests"
    ];
    crateOverrides = defaultCrateOverrides // {
      crate2nix = { src, ... }: {
        src =
          if release
          then src
          else
            lib.cleanSourceWith {
              filter = withoutTemplates;
              inherit src;
            };
        dontFixup = !release;
      };
      cssparser-macros = attrs: assert builtins.trace "cssparser" true;{
        buildInputs = lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.Security ];
      };
    };
  };
  set_templates = if release then "" else "--set TEMPLATES_DIR ${./templates}";
in
symlinkJoin {
  name = crate2nix.name;
  paths = [ crate2nix ];
  buildInputs = [ makeWrapper cargo ];
  meta = {
    description = "Nix build file generator for rust crates.";
    longDescription = ''
      Crate2nix generates nix files from Cargo.toml/lock files
      so that you can build every crate individually in a nix sandbox.
    '';
    homepage = "https://github.com/nix-community/crate2nix";
    license = lib.licenses.asl20;
    maintainers = [
      {
        github = "kolloch";
        githubId = 339354;
        name = "Peter Kolloch";
      }
      lib.maintainers.andir
    ];
    mainProgram = "crate2nix";
    platforms = lib.platforms.all;
  };
  postBuild = ''
    # Fallback to built dependencies for cargo and nix-prefetch-url
    wrapProgram $out/bin/crate2nix ${set_templates}\
      --suffix PATH ":" ${lib.makeBinPath [ cargo nix nix-prefetch-git ]}
    rm -rf $out/lib $out/bin/crate2nix.d
    mkdir -p \
      $out/share/bash-completion/completions \
      $out/share/zsh/vendor-completions
    $out/bin/crate2nix completions -s 'bash' -o $out/share/bash-completion/completions
    $out/bin/crate2nix completions -s 'zsh' -o $out/share/zsh/vendor-completions
  '';
}