···896896or `fetchhg` with `fetchSubmodules` or `fetchSubrepos` set to `true`,
897897respectively. Otherwise, the fetcher uses `fetchzip`.
898898899899+## `fetchFromRadicle` {#fetchfromradicle}
900900+901901+This is used with Radicle repositories. The arguments expected are similar to `fetchgit`.
902902+903903+Requires a `seed` argument (e.g. `seed.radicle.xyz` or `rosa.radicle.xyz`) and a `repo` argument
904904+(the repository id *without* the `rad:` prefix). Also accepts an optional `node` argument which
905905+contains the id of the node from which to fetch the specified ref. If `node` is `null` (the
906906+default), a canonical ref is fetched instead.
907907+908908+```nix
909909+fetchFromRadicle {
910910+ seed = "seed.radicle.xyz";
911911+ repo = "z3gqcJUoA1n9HaHKufZs5FCSGazv5"; # heartwood
912912+ tag = "releases/1.3.0";
913913+ hash = "sha256-4o88BWKGGOjCIQy7anvzbA/kPOO+ZsLMzXJhE61odjw=";
914914+}
915915+```
916916+899917## `requireFile` {#requirefile}
900918901919`requireFile` allows requesting files that cannot be fetched automatically, but whose content is known.
···11{
22 radicle-httpd,
33 fetchFromGitHub,
44- fetchgit,
54 lib,
65 buildNpmPackage,
76 writeText,
···7574 # same repo. For this reason we pin the sources to each other, but due to
7675 # radicle-httpd using a more limited sparse checkout we need to carry a
7776 # separate hash.
7878- src = fetchgit {
7979- inherit (radicle-httpd.src) url rev;
8080- hash = "sha256-HRSrLdiDETTWNF+Rzvlg1XQerXcCE2xaY+6Xbq5pItI=";
7777+ src = radicle-httpd.src.override {
7878+ hash = "sha256-1OhZ0x21NlZIiTPCRpvdUsx5UmeLecTjVzH8DWllPr8=";
7979+ sparseCheckout = [ ];
8180 };
82818382 postPatch = ''
···283283 releases = list(filter(lambda x: not x["prerelease"], all_releases))
284284285285 if len(releases) == 0:
286286- raise ValueError(f"{homepage} does not contain any stable releases")
286286+ logging.warning(f"{homepage} does not contain any stable releases, looking for tags instead...")
287287+ url = f"https://api.github.com/repos/{owner}/{repo}/tags"
288288+ all_tags = _fetch_github(url)
289289+ # Releases are used with a couple of fields that tags possess as well. We will fake these releases.
290290+ releases = [{'tag_name': tag['name'], 'tarball_url': tag['tarball_url']} for tag in all_tags]
291291+292292+ if len(releases) == 0:
293293+ raise ValueError(f"{homepage} does not contain any stable releases neither tags, stopping now.")
287294288295 versions = map(lambda x: strip_prefix(x["tag_name"]), releases)
289296 version = _determine_latest_version(current_version, target, versions)
···457464 successful_fetch = True
458465 break
459466 except ValueError:
467467+ logging.exception(f"Failed to fetch releases for {pname}")
460468 continue
461469462470 if not successful_fetch:
···14751475 midori = throw "'midori' original project has been abandonned upstream and the package was broken for a while in nixpkgs"; # Added 2025-05-19
14761476 midori-unwrapped = midori; # Added 2025-05-19
14771477 MIDIVisualizer = midivisualizer; # Added 2024-06-12
14781478+ mihomo-party = throw "'mihomo-party' has been removed due to upstream license violation"; # Added 2025-08-20
14781479 mikutter = throw "'mikutter' has been removed because the package was broken and had no maintainers"; # Added 2024-10-01
14791480 mime-types = mailcap; # Added 2022-01-21
14801481 minetest = luanti; # Added 2024-11-11