{ lib, rustPlatform }: let cargoToml = builtins.fromTOML (builtins.readFile ./Cargo.toml); inherit (cargoToml.package) name version description; pname = name; src = lib.cleanSourceWith { src = ./.; name = "${pname}-source"; # Adapted from # no need to pull in crane for just this filter = orig_path: type: let path = toString orig_path; base = baseNameOf path; parentDir = baseNameOf (dirOf path); matchesSuffix = lib.any (suffix: lib.hasSuffix suffix base) [ # Rust sources ".rs" # TOML files are often used to configure cargo based tools (e.g. .cargo/config.toml) ".toml" ]; isCargoLock = base == "Cargo.lock"; # .cargo/config.toml is captured above isOldStyleCargoConfig = parentDir == ".cargo" && base == "config"; in type == "directory" || matchesSuffix || isCargoLock || isOldStyleCargoConfig; }; in rustPlatform.buildRustPackage { inherit pname version src; cargoLock.lockFile = ./Cargo.lock; useNextest = true; meta = { inherit description; license = lib.licenses.mit; homepage = "https://github.com/jalil-salame/configuration.nix"; mainProgram = name; }; }