I think this is due to something about laziness trying to tie a knot in our brains. Validity is asserted at evaluation time of a package, but those attrs
passed to checkMeta
are from a point in evaluation before the actual package is produced to be accessible under pkgs.<pname>
. This could be the reason why the equality check fails when using the whole package. @Ericson2314 @roberth or @Artturin will know better.
That’s in mkDerivation
, and you can see the call to derivation
in the block where validity is used. So validity is definitely asserted before the derivation is created, and well, the packages in pkgs
are derivations. pkg
is not.
I think that’s the right time to check too, you don’t want to potentially build packages that have some kind of build time vulnerability or something, and I’m pretty sure you couldn’t prevent derivation
from adding the built package to the store, so there are some potential issues with licenses that don’t allow redistribution if the check happened any later.
I wonder if you could use this if you don’t want to hard-code those names:
allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) (map lib.getName [
pkgs.vscode
]);
Chances are this results in infinite recursion? In fact, any reference to a package in this function should result in infinite recursion.
No, that actually works. At least with my setup nixos-rebuild switch --upgrade-all
runs fine. Thank you!
That’s very surprising! Curious how the pkgs.vscode
resolves there without tripping up evaluation.
I didn’t use pkgs.vscode
specifically, but this works:
{
nixpkgs.config.allowUnfreePredicate = pkg:
builtins.elem (
lib.getName pkg
) (
map lib.getName [
pkgs.corefonts
pkgs.discord
pkgs.jetbrains.idea-ultimate
pkgs.spotify-unwrapped
pkgs.unrar
]
);
}