kadmin 0.7.0

Rust bindings for the Kerberos administration interface (kadm5)
Documentation
{
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable-small";
    rust-overlay.url = "github:oxalica/rust-overlay";
    futils.url = "github:numtide/flake-utils";
  };

  outputs =
    { self
    , nixpkgs
    , rust-overlay
    , futils
    ,
    } @ inputs:
    let
      inherit (nixpkgs) lib;
      inherit (futils.lib) eachDefaultSystem defaultSystems;

      nixpkgsFor = lib.genAttrs defaultSystems (system:
        import nixpkgs {
          inherit system;
          overlays = [
            rust-overlay.overlays.default
          ];
        });
    in
    eachDefaultSystem
      (system:
      let
        pkgs = nixpkgsFor.${system};
      in
      {
        devShell =
          pkgs.mkShell
            {
              buildInputs = with pkgs; [
                (lib.hiPrio rust-bin.nightly.latest.rustfmt)
                (rust-bin.fromRustupToolchainFile ./rust-toolchain.toml)
                sccache

                python314
                uv

                clang
                glibc
                krb5.out
                krb5.dev
                # heimdal.dev
                libclang
                openssl
                pkg-config

                cargo-msrv
                cargo-release
                cargo-workspaces
                git
                just
                valgrind
              ];

              RUST_SRC_PATH = "${pkgs.rust.packages.stable.rustPlatform.rustLibSrc}";
              RUST_BACKTRACE = 1;
              RUSTC_WRAPPER = "sccache";
              LIBCLANG_PATH = "${pkgs.libclang.lib}/lib";
              UV_NO_BINARY_PACKAGE = "maturin ruff";

              KADMIN_MIT_CLIENT_INCLUDES = "${pkgs.krb5.dev}/include";
              KADMIN_MIT_SERVER_INCLUDES = "${pkgs.krb5.dev}/include";
              KADMIN_HEIMDAL_CLIENT_INCLUDES = "${pkgs.heimdal.dev}/include";
              KADMIN_HEIMDAL_SERVER_INCLUDES = "${pkgs.heimdal.dev}/include";
              KADMIN_MIT_CLIENT_KRB5_CONFIG = "${pkgs.krb5.dev}/bin/krb5-config";
              KADMIN_MIT_SERVER_KRB5_CONFIG = "${pkgs.krb5.dev}/bin/krb5-config";
              KADMIN_HEIMDAL_CLIENT_KRB5_CONFIG = "${pkgs.heimdal.dev}/bin/krb5-config";
              KADMIN_HEIMDAL_SERVER_KRB5_CONFIG = "${pkgs.heimdal.dev}/bin/krb5-config";

              K5TEST_MIT_KDB5_UTIL = "${pkgs.krb5}/bin/kdb5_util";
              K5TEST_MIT_KRB5KDC = "${pkgs.krb5}/bin/krb5kdc";
              K5TEST_MIT_KADMIN = "${pkgs.krb5}/bin/kadmin";
              K5TEST_MIT_KADMIN_LOCAL = "${pkgs.krb5}/bin/kadmin.local";
              K5TEST_MIT_KADMIND = "${pkgs.krb5}/bin/kadmind";
              K5TEST_MIT_KPROP = "${pkgs.krb5}/bin/kprop";
              K5TEST_MIT_KINIT = "${pkgs.krb5}/bin/kinit";
              K5TEST_MIT_KLIST = "${pkgs.krb5}/bin/klist";

              K5TEST_HEIMDAL_KDC = "${pkgs.heimdal}/libexec/kdc";
              K5TEST_HEIMDAL_KADMIN = "${pkgs.heimdal}/bin/kadmin";
              K5TEST_HEIMDAL_KADMIND = "${pkgs.heimdal}/libexec/kadmind";
              K5TEST_HEIMDAL_KINIT = "${pkgs.heimdal}/bin/kinit";
              K5TEST_HEIMDAL_KLIST = "${pkgs.heimdal}/bin/klist";
              K5TEST_HEIMDAL_KTUTIL = "${pkgs.heimdal}/bin/ktutil";
            };
      });
}