{
  flake,
  fzf,
  inputOverrides ? { },
  lib,
  python3,
  writeShellApplication,
  writeText,
}:
let
  inputOverridesFile = writeText "home-manager-test-input-overrides.json" (
    builtins.toJSON (lib.mapAttrs (_name: input: input.outPath) inputOverrides)
  );
in
writeShellApplication {
  name = "tests";
  runtimeInputs = [
    python3
    fzf
  ];
  runtimeEnv = {
    # Explicitly enable experimental features, in case someone runs e.g.
    #   nix run .#tests --extra-experimental-features 'nix-command flakes'
    # without enabling them globally.
    HOME_MANAGER_TEST_INPUT_OVERRIDES = inputOverridesFile;
    NIX_CONFIG = ''
      experimental-features = nix-command flakes
    '';
  };
  text = ''
    exec python3 ${flake}/tests/tests.py "$@"
  '';
}