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

43 lines
1.5 KiB
Nix
Raw Permalink 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)