{ python3Packages, python3, fetchFromGitHub, git, openssh }:

let
  uritemplate_0_2_0 = python3Packages.github3_py.overrideAttrs(oa: rec {
  	version = "0.2.0";
  	src = python3Packages.fetchPypi {
      pname = "uritemplate.py";
      inherit version;
      sha256 = "1pfk04pmnysz0383lwzgig8zqlwiv2n4pmq51f0mc60zz1jimq4g";
    };
  });
  github3_py_0_9_6 = python3Packages.github3_py.overrideAttrs(oa: rec {
    version = "0.9.6";
    src = python3Packages.fetchPypi {
      pname = "github3.py";
      inherit version;
      sha256 = "1i8xnh586z4kka7pjl7cy08fmzjs14c8jdp8ykb9jjpzsy2xncdq";
    };
    propagatedBuildInputs = [ python3Packages.requests uritemplate_0_2_0 ];
  });
in
  python3Packages.buildPythonApplication {
    name = "homu";
    src = fetchFromGitHub {
      owner = "servo";
      repo = "homu";
      rev = "2ea53e76ebac3e5fa11bc39054b3cd4c42eff607";
      sha256 = "1ih7s8zfbpq0qb9vqbxzr0r4s9ff52l4ipr916kwbck3ygliq3r9";
    };
    patches = [ ./patch-cache-directory.patch ./disable-ssh-host-keycheck.patch ];
    postInstall = "chmod 755 $out/${python3.sitePackages}/homu/git_helper.py";
    propagatedBuildInputs = [ github3_py_0_9_6 git openssh ] ++ (with python3Packages; [ toml jinja2 requests bottle waitress retrying ]);
    checkPhase = "python -m unittest discover tests -v";
  }