{ stalwart-mail, callPackage, nixLib, rustPlatform, lib, }: let spamfilter = callPackage ./spam-filter.nix {}; in stalwart-mail.override { rustPlatform = rustPlatform // { buildRustPackage = prev: rustPlatform.buildRustPackage ( lib.attrsets.recursiveUpdate prev { pname = "stalwart-mail-patched"; passthru = nixLib.warnMerge (prev.passthru or {}) { # Use a reproducible source for the spamfilter instead of fetching it at runtime from GitHub. inherit spamfilter; } "stalwart-mail passthru"; cargoHash = "sha256-Rq18JumjKYt97WKIqnLakS+FQwsjt70irlYBYAYm3H8="; # The NixOS build tests should check if this works. # And this shaves of around 50% of the build time. doCheck = false; # We are already overriding it, so shaving of some unused features is okay. buildNoDefaultFeatures = true; buildFeatures = [ # "sqlite" # "postgres" # "mysql" "rocks" # "elastic" # "s3" "redis" "tls-native-roots" ]; cargoPatches = (prev.cargoPatches or []) ++ [ # `stalwart-mail` uses their bundled store, which makes it impossible to use our # own CA certificate (e.g., for tests). Thus use a native version. ./patches/0001-Allow-to-switch-to-operating-system-CA-root-store.patch ]; # Check that the enterprise feature is really disabled. postCheck = (prev.postCheck or "") + # bash '' if grep "enterprise" ./target/*/release/stalwart-mail.d; then echo "ERROR: Proprietary 'enterprise' feature active." exit 1 fi ''; meta.mainProgram = prev.meta.mainProgram or "stalwart-mail"; } ); }; }