{ pkgs ? import ./nixpkgs { } }:
let
  flakify = f: src: f // { outPath = src; };

  src = pkgs.fetchFromGitHub {
    owner = "nix-community";
    repo = "lanzaboote";
    rev = "614b538f0fcd4eda423abc36819a57eb4b241b1b";
    hash = "sha256:0m94c82yqvfz7y3wv9r3qxqp4w68swhd0q35ni4r84r163cbah31";
  };

  flake-parts-src = pkgs.fetchFromGitHub {
    owner = "hercules-ci";
    repo = "flake-parts";
    rev = "b253292d9c0a5ead9bc98c4e9a26c6312e27d69f";
    hash = "sha256-a0NYyp+h9hlb7ddVz4LUn1vT/PLwqfrWYcHMvFB1xYg=";
  };
  flake-parts-flake = import "${flake-parts-src}/flake.nix";
  flake-parts = flake-parts-flake.outputs {
    nixpkgs-lib = pkgs;
  };

  nix-systems-src = pkgs.fetchFromGitHub {
    owner = "nix-systems";
    repo = "default";
    rev = "da67096a3b9bf56a91d16901293e51ba5b49a27e";
    hash = "sha256:1bzg89hgcr2gvza35vqi4n1jbb2gz1yg4b8p7gry4ihsj2mnnbap";
  };

  flake-utils-src = pkgs.fetchFromGitHub {
    owner = "numtide";
    repo = "flake-utils";
    rev = "1ef2e671c3b0c19053962c07dbda38332dcebf26";
    hash = "sha256:0843cqkssadi6wm2xqrprln839cjh4ddacpz1f8j09x628sm3m5q";
  };
  flake-utils = (import "${flake-utils-src}/flake.nix").outputs {
    self = flake-utils;
    systems = nix-systems-src;
  };

  rust-overlay-src = pkgs.fetchFromGitHub {
    owner = "oxalica";
    repo = "rust-overlay";
    rev = "e0626adabd5ea461f80b1b11390da2a6575adb30";
    hash = "sha256:0syfyblhbmbnrzbn9yblxj4jyf0cr7yq9lqjcjh8xqdljgm544x0";
  };
  rust-overlay-flake = import "${rust-overlay-src}/flake.nix";
  rust-overlay = rust-overlay-flake.outputs {
    self = rust-overlay;
    nixpkgs = pkgs;
    flake-utils = flake-utils;
  };

  crane-src = pkgs.fetchFromGitHub {
    owner = "ipetkov";
    repo = "crane";
    rev = "v0.12.0";
    hash = "sha256:0znn7rhg5141v9sdmsain4z02cky2xkp5yibm5790rsg0sdp0i50";
  };
  crane = (import "${crane-src}/flake.nix").outputs {
    nixpkgs = flakify pkgs ./nixpkgs;
    inherit flake-utils rust-overlay;
  };

  flakeInputs = {
    self = flakeEval;
    nixpkgs = ./nixpkgs;
    crane = crane;
    rust-overlay = rust-overlay;
    inherit flake-parts;
    pre-commit-hooks-nix = null;
  };
  flakeEval = flake.outputs flakeInputs;

  flake = import "${src}/flake.nix";
in
  flakeEval