6.NUR/lib/evalRepo.nix
2024-11-22 19:10:50 +00:00

43 lines
1.5 KiB
Nix
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
name,
url,
src,
pkgs, # Do not use this for anything other than passing it along as an argument to the repository
lib,
}:
let
prettyName = "${name}";
# Arguments passed to each repositories default.nix
passedArgs = {
pkgs =
if pkgs != null then
pkgs
else
throw ''
NUR import call didn't receive a pkgs argument, but the evaluation of NUR's ${prettyName} repository requires it.
This is either because
- You're trying to use a package from that repository, but didn't pass a `pkgs` argument to the NUR import.
In that case, refer to the installation instructions at https://github.com/nix-community/nur#installation on how to properly import NUR
- You're trying to use a module/overlay from that repository, but it didn't properly declare their module.
In that case, inform the maintainer of the repository: ${url}
'';
};
expr = import src;
args = builtins.functionArgs expr;
# True if not all arguments are either passed by default (e.g. pkgs) or defaulted (e.g. foo ? 10)
usesCallPackage =
!lib.all (arg: lib.elem arg (lib.attrNames passedArgs) || args.${arg}) (lib.attrNames args);
in
if usesCallPackage then
throw ''
NUR repository ${prettyName} is using the deprecated callPackage syntax which
might result in infinite recursion when used with NixOS modules.
''
else
expr (builtins.intersectAttrs args passedArgs)