Use the Nix C API from Rust.
The development environment and building with Nix are taken care of by nix-cargo-integration (options).
The dependency on Nix is taken care of with the nix-bindings-rust flake-parts module.
Example usage:
{
  outputs =
    inputs@{ self, flake-parts, ... }:
    flake-parts.lib.mkFlake { inherit inputs; }
    {
      imports = [
        inputs.nix-cargo-integration.flakeModule
        inputs.nix-bindings-rust.modules.flake.default
      ];
      perSystem = { config, pkgs, ... }: {
        # optional:
        nix-bindings-rust.nixPackage = pkgs.nix;
        nci.projects."myproject" = {
          depsDrvConfig = {
            imports = [ config.nix-bindings-rust.nciBuildConfig ];
          };
        };
      };
    };
}The following will open a shell with dependencies, and install pre-commit for automatic formatting.
$ nix developIf the rust-analyzer extension fails, make sure the devShell was loaded into VSCode via Nix Env Selector or direnv.