configuration/packages/override-utils.nix

44 lines
1.3 KiB
Nix
Raw Normal View History

2023-02-07 21:15:13 +00:00
{ local ? ./., pkgs, prs ? { }, unstable ? { } }:
with pkgs.lib;
let
revision = rev: hash: import (pkgs.fetchFromGitHub {
inherit hash rev;
2023-02-07 21:15:13 +00:00
owner = "NixOS";
repo = "nixpkgs";
}) { 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
{
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;
}