{ system, target ? null, pkgsSrc, cargo2nixOverlay, compiler ? "rustc", release ? false, }: let pkgs = if target != null then import pkgsSrc { inherit system; crossSystem = { config = target; isStatic = true; }; overlays = [ cargo2nixOverlay ]; } else import pkgsSrc { inherit system; overlays = [ cargo2nixOverlay ]; }; toolchainOptions = { rustVersion = "1.75.0"; }; packageFun = import ./Cargo.nix; codegenOpts = { "armv6l-unknown-linux-musleabihf" = [ "target-feature=+crt-static" "link-arg=-static" ]; # compile as dynamic with static-pie "x86_64-unknown-linux-musl" = [ "target-feature=+crt-static" "link-arg=-static-pie" ]; }; # NixOS and Rust/Cargo triples do not match for ARM, fix it here. rustTarget = if target == "armv6l-unknown-linux-musleabihf" then "arm-unknown-linux-musleabihf" else target; in pkgs.rustBuilder.makePackageSet ({ inherit release packageFun codegenOpts; target = rustTarget; } // toolchainOptions)