2023-02-07 21:15:13 +00:00
|
|
|
{ local ? ./., pkgs, prs ? { }, unstable ? { } }:
|
|
|
|
|
|
|
|
with pkgs.lib;
|
|
|
|
|
|
|
|
let
|
2023-05-17 01:24:49 +00:00
|
|
|
revision = rev: hash: import (pkgs.fetchFromGitHub {
|
|
|
|
inherit hash rev;
|
2023-02-07 21:15:13 +00:00
|
|
|
owner = "NixOS";
|
|
|
|
repo = "nixpkgs";
|
2023-05-17 01:24:49 +00:00
|
|
|
}) { inherit (pkgs) config; overlays = [ ]; };
|
|
|
|
|
|
|
|
fromLocal = pname: deps: pkgs.callPackage (local + "/${pname}.nix") deps;
|
|
|
|
|
|
|
|
fromPr = pname: (revision "refs/pull/${toString prs.${pname}.issue}/head" prs.${pname}.hash).${pname};
|
2023-02-07 21:15:13 +00:00
|
|
|
in
|
|
|
|
{
|
2023-05-17 01:24:49 +00:00
|
|
|
inherit revision;
|
|
|
|
|
2023-02-07 21:15:13 +00:00
|
|
|
any = "";
|
|
|
|
|
|
|
|
local = builtins.mapAttrs fromLocal;
|
|
|
|
|
|
|
|
release = v: versionAtLeast trivial.release v;
|
|
|
|
|
|
|
|
until = p: v: value: assert assertMsg (! versionAtLeast p.version v)
|
|
|
|
"${p.pname} no longer requires an override"; value;
|
|
|
|
|
|
|
|
unstableUntil = pv: builtins.mapAttrs
|
|
|
|
(p: v:
|
|
|
|
let
|
|
|
|
isTest = builtins.isBool v;
|
|
|
|
inStable = pkgs ? ${p} && (if isTest then v else versionAtLeast pkgs.${p}.version v);
|
|
|
|
inUnstable = unstable ? ${p} && (if isTest then !v else versionAtLeast unstable.${p}.version v);
|
|
|
|
inLocal = pathExists (local + "/${p}.nix");
|
|
|
|
in
|
|
|
|
assert assertMsg (! inStable) "${p} ${v} is available in stable";
|
|
|
|
if inUnstable then assert assertMsg (! inLocal) "${p} ${v} is available in unstable"; unstable.${p}
|
|
|
|
else if prs ? ${p} then fromPr p
|
|
|
|
else if inLocal then fromLocal p { }
|
|
|
|
else throw "no package for ${p} ${v}"
|
|
|
|
)
|
|
|
|
pv;
|
|
|
|
}
|