Files
Dark Steveneq 646b892680
Some checks failed
Periodic Merges (6h) / master → staging-nixos (push) Failing after 12m50s
Periodic Merges (6h) / master → staging-next (push) Failing after 12m54s
Periodic Merges (24h) / merge-base(master,staging) → haskell-updates (push) Failing after 11m54s
Periodic Merges (6h) / staging-next → staging (push) Failing after 12m13s
Periodic Merges (24h) / staging-next-25.05 → staging-25.05 (push) Failing after 13m24s
Periodic Merges (24h) / release-25.05 → staging-next-25.05 (push) Failing after 14m28s
push sheeet
2025-10-09 14:15:47 +02:00

171 lines
3.9 KiB
Nix

lib: self:
let
inherit (lib) elemAt;
matchForgeRepo = builtins.match "(.+)/(.+)";
fetchers = lib.mapAttrs (_: fetcher: self.callPackage fetcher { }) {
github =
{ fetchFromGitHub }:
{
repo ? null,
...
}:
{ sha256, commit, ... }:
let
m = matchForgeRepo repo;
in
assert m != null;
fetchFromGitHub {
owner = elemAt m 0;
repo = elemAt m 1;
rev = commit;
inherit sha256;
};
gitlab =
{ fetchFromGitLab }:
{
repo ? null,
...
}:
{ sha256, commit, ... }:
let
m = matchForgeRepo repo;
in
assert m != null;
fetchFromGitLab {
owner = elemAt m 0;
repo = elemAt m 1;
rev = commit;
inherit sha256;
};
git = (
{ fetchgit }:
{
url ? null,
...
}:
{ sha256, commit, ... }:
(fetchgit {
rev = commit;
inherit sha256 url;
}).overrideAttrs
(_: {
GIT_SSL_NO_VERIFY = true;
})
);
bitbucket =
{ fetchhg }:
{
repo ? null,
...
}:
{ sha256, commit, ... }:
fetchhg {
rev = commit;
url = "https://bitbucket.com/${repo}";
inherit sha256;
};
hg =
{ fetchhg }:
{
url ? null,
...
}:
{ sha256, commit, ... }:
fetchhg {
rev = commit;
inherit sha256 url;
};
sourcehut =
{ fetchzip }:
{
repo ? null,
...
}:
{ sha256, commit, ... }:
fetchzip {
url = "https://git.sr.ht/~${repo}/archive/${commit}.tar.gz";
inherit sha256;
};
codeberg =
{ fetchzip }:
{
repo ? null,
...
}:
{ sha256, commit, ... }:
fetchzip {
url = "https://codeberg.org/${repo}/archive/${commit}.tar.gz";
inherit sha256;
};
};
in
{
melpaDerivation =
variant:
{
ename,
fetcher,
commit ? null,
sha256 ? null,
...
}@args:
let
sourceArgs = args.${variant};
version = sourceArgs.version or null;
deps = sourceArgs.deps or null;
error = sourceArgs.error or args.error or null;
hasSource = lib.hasAttr variant args;
pname = builtins.replaceStrings [ "@" ] [ "at" ] ename;
broken = error != null;
in
if hasSource then
lib.nameValuePair ename (
self.callPackage (
{ melpaBuild, fetchurl, ... }@pkgargs:
melpaBuild {
inherit pname ename;
inherit (sourceArgs) commit;
version = lib.optionalString (version != null) (
lib.concatStringsSep "." (
map toString
# Hack: Melpa archives contains versions with parse errors such as [ 4 4 -4 413 ] which should be 4.4-413
# This filter method is still technically wrong, but it's computationally cheap enough and tapers over the issue
(builtins.filter (n: n >= 0) version)
)
);
# TODO: Broken should not result in src being null (hack to avoid eval errors)
src = if (sha256 == null || broken) then null else fetchers.${fetcher} args sourceArgs;
recipe =
if commit == null then
null
else
fetchurl {
name = pname + "-recipe";
url = "https://raw.githubusercontent.com/melpa/melpa/${commit}/recipes/${ename}";
inherit sha256;
};
packageRequires = lib.optionals (deps != null) (
map (dep: pkgargs.${dep} or self.${dep} or null) deps
);
meta = (sourceArgs.meta or { }) // {
inherit broken;
};
}
) { }
)
else
null;
}