{inputs, ...}: {
  perSystem = {
    pkgs,
    system,
    self',
    ...
  }: {
    # We build the alias to sieve tool here, this is a two step process, we first generate
    # a nix expression with the crate2nix tool from nixpkgs that directly calls rustc
    # and thus bypasses cargo. We could also generate this file by hand and version it,
    # but that would need regeneration every time some dependency is updated, so we
    # opt for build time generation. Afterwards we import and evaluate the generated
    # nix expression to build the package. For the explicit solution see:
    # https://nix-community.github.io/crate2nix/00_guides/30_generating/
    # and for the documentation to this one
    # https://nix-community.github.io/crate2nix/00_guides/31_auto_generating/
    # as this module uses idf and forces builds during the evaluation it might
    # have drastic performance implications, see
    # https://nix.dev/manual/nix/2.24/language/import-from-derivation
    packages.alias-to-sieve = let
      alias-to-sieve-nix = inputs.crate2nix.tools.${system}.generatedCargoNix {
        name = "alias-to-sieve";
        src = ./alias-to-sieve;
      };
    in
      (pkgs.callPackage alias-to-sieve-nix {}).rootCrate.build;
    checks.alias-to-sieve = self'.packages.alias-to-sieve.override {runTests = true;};
  };
}