41 lines
1.3 KiB
Nix
41 lines
1.3 KiB
Nix
|
{ local ? ./., pkgs, prs ? { }, unstable ? { } }:
|
||
|
|
||
|
with pkgs.lib;
|
||
|
|
||
|
let
|
||
|
fromLocal = pname: deps: pkgs.callPackage (local + "/${pname}.nix") deps;
|
||
|
|
||
|
fromPr = pname: (import (pkgs.fetchFromGitHub {
|
||
|
inherit (prs.${pname}) hash;
|
||
|
owner = "NixOS";
|
||
|
repo = "nixpkgs";
|
||
|
rev = "refs/pull/${toString prs.${pname}.issue}/head";
|
||
|
}) { inherit (pkgs) config; overlays = [ ]; }).${pname};
|
||
|
in
|
||
|
{
|
||
|
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;
|
||
|
}
|