{
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.11";
    flake-utils.url = "github:numtide/flake-utils";
    rust-overlay.url = "github:oxalica/rust-overlay";
    crane.url = "github:ipetkov/crane";
  };
  outputs =
    {
      self,
      nixpkgs,
      flake-utils,
      rust-overlay,
      crane,
    }:
    flake-utils.lib.eachDefaultSystem (
      system:
      let
        overlays = [
          rust-overlay.overlays.default
        ];
        pkgs = import nixpkgs {
          inherit system overlays;
          config = {
            allowUnfree = true;
          };
        };

        # Import rust setup
        rustSetup = import ./nix/rust-setup.nix { inherit pkgs crane; };
        inherit (rustSetup) rustVersion rustPlatform craneLib;

        src = craneLib.cleanCargoSource ./.;

        commonArgs = {
          inherit src;

          # Add any build inputs needed
          buildInputs = with pkgs; [
            openssl
            pkg-config
          ];

          # Add any native build inputs
          nativeBuildInputs = with pkgs; [
            rustPlatform.bindgenHook
            pkg-config
          ];

          checkType = "debug";
          env = {
            OPENSSL_NO_VENDOR = "1";
            NIX_OUTPATH_USED_AS_RANDOM_SEED = "aaaaaaaaaa";
          };
        };

        cargoArtifacts = craneLib.buildDepsOnly commonArgs;
        individualCrateArgs = commonArgs // {
          inherit cargoArtifacts;
          inherit (craneLib.crateNameFromCargoToml { inherit src; }) version;
          # NB: we disable tests since we'll run them all via cargo-nextest
          doCheck = false;
        };

        # Import vault-hier package
        vault-hier = import ./nix/packages/vault-hier.nix {
          inherit
            pkgs
            craneLib
            individualCrateArgs
            ;
        };

        # Import devshell
        devshell_with_src = import ./nix/devshell.nix {
          inherit pkgs vault-hier rustVersion;
        };
      in
      {
        # Import checks
        checks = import ./nix/checks {
          inherit
            craneLib
            src
            commonArgs
            cargoArtifacts
            vault-hier
            pkgs
            ;
        };

        # Add packages output
        packages = {
          inherit vault-hier;
          default = vault-hier;
        };

        devShells = {
          inherit devshell_with_src;
          default = devshell_with_src;
        };

        # Add formatter for `nix fmt`
        formatter = pkgs.nixfmt-rfc-style;
      }
    );
}