Should `filterPackages` check `meta.hydraPlatforms`?
sigprof opened this issue · 2 comments
Currently filterPackages
has this piece of code:
platforms = meta.hydraPlatforms or meta.platforms or allSystems;
However, is checking meta.hydraPlatforms
the proper thing here? Many packages use meta.hydraPlatforms = [];
to mark “trivial” packages (e.g., wrappers like firefox
) that are not really useful to cache on Hydra; this does not mean that the package does not build. There are other cases when meta.hydraPlatforms
is empty (e.g., packages having non-free dependencies like NVidia drivers, or packages with outputs not fitting into Hydra limits). So if I want to reexport such packages from my flake, then I either cannot use filterPackages
(which could otherwise be useful to avoid exporting packages that don't actually build for a particular system), or would need to patch out meta.hydraPlatform
from packages (which does not seem to be right).
I don't remember the original reasoning. It's probably safe to remove it.
Nixpkgs apparently does its platform check like this:
https://github.com/NixOS/nixpkgs/blob/c49e4ce3fc0cebbe3e0cba75f0ea86bf28a76b1a/pkgs/stdenv/generic/check-meta.nix#L61-L63
And the result of this check is exposed as meta.unsupported
in all derivations made with stdenv.mkDerivation
. But it cannot be used to implement exactly the same filtering as done currently by filterPackages
, because the Nixpkgs code uses hostPlatform.system
instead of getting a system
parameter (however, I'm not sure whether filtering packages already instantiated for one system while checking meta.platform
against a different system name makes any sense).
BTW, another feature that the current filterPackages
code does not support is meta.badPlatforms
— some packages in Nixpkgs use that.