{ lib, rustPlatform, }: let readToml = path: builtins.fromTOML (builtins.readFile path); cargoToml = readToml ./Cargo.toml; pname = cargoToml.package.name; inherit (cargoToml.package) version description; 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/webnsupdate"; mainProgram = "webnsupdate"; }; }