= 2: Rust :page-pagination: This sample assumes you've tried the Go example, as the Rust implementation of these concepts work identically. This example dives into the details of the overrides, which are necessary to run Rust builds in a minimal sandbox. Most Rust projects depend on external dependencies, written in e.g. C, and cannot be compiled with purely `rustc` inside a sandbox. To allow for this, Zilch's Rust support has been designed with this fact in mind. If we try to compile the example in this directory as-is, it fails, as the crate depends on `pyo3`, which depends on a working Python interpreter: [,console] ---- $ zilch-cli-rust -m examples/rust … Error: (error Error 0 builder for '/nix/store/n5l4w8m3fj3m1s06p75r0pqj8s9l8cmf-build.rs-run.drv' failed with exit code 101; last 17 log lines: > error: no Python 3.x interpreter found … > Package: pyo3-build-config > note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace ---- To fix this, we'll need to write an override file. This file describes to Zilch how to override the Rust environment. There's three override points, as described in xref:rust/usage.adoc[the more direct usage file]. We'll only use `buildScript` here, as `pyo3` is simple. Looking at the code, it seems that it expects a `python3` on `PATH`. To do this, we just need to write a fragment for that. Zilch knows how to append to these variables, so all we need is a file that contains the following: .zilch-override.json [,json] ---- { "pyo3-build-config": { "buildScript": { "PATH": "${pkgs.python3}/bin" } } } ---- Now, when the `build.rs` for `pyo3-build-config` is run, it will have `python3` available to it. The output that this build script generates, which is stored in the Nix store, also has references to the parts of `python3` that the build script used, ensuring that it is properly passed through to the crates that, in turn, depend on this build script; and the final binary has references to not just libc, but also python3: [,console] ---- $ zilch-cli-rust -m examples/rust -z override.json zilch-pyo3-example zilch_pyo3_example bin /nix/store/vqpj68dgswf8v64sq45banq6vn0fshnz-rustc-bin-zilch_pyo3_example-link $ nix-store -qR /nix/store/vqpj68dgswf8v64sq45banq6vn0fshnz-rustc-bin-zilch_pyo3_example-link | grep python /nix/store/cfapjd2rvqrpry4grb0kljnp8bvnvfxz-python3-3.13.8 # hooray! ---- Zilch ships with a series of overrides, primarily around what I (the developer) have come across. Some of these also use a helper that Zilch provides, which sets up `pkg-config` based packages recursively, the same way Nixpkgs does.