{ fetchgit, fetchzip, lib, }: lib.makeOverridable ( { owner, repo, rev, domain ? "git.9front.org", name ? "source", leaveDotGit ? false, deepClone ? false, ... # For hash agility }@args: let passthruAttrs = removeAttrs args [ "domain" "owner" "repo" "rev" "leaveDotGit" "deepClone" ]; useFetchGit = leaveDotGit || deepClone; fetcher = if useFetchGit then fetchgit else fetchzip; gitRepoUrl = "git://${domain}/${owner}/${repo}"; fetcherArgs = ( if useFetchGit then { # git9 does not support shallow fetches inherit rev leaveDotGit; url = gitRepoUrl; } else { url = "https://${domain}/${owner}/${repo}/${rev}/snap.tar.gz"; passthru = { inherit gitRepoUrl; }; } ) // passthruAttrs // { inherit name; }; in fetcher fetcherArgs // { inherit rev; } )