system: packages: let # Adopted from nixpkgs.lib inherit (builtins) listToAttrs concatMap attrNames; nameValuePair = name: value: { inherit name value; }; filterAttrs = pred: set: listToAttrs ( concatMap (name: let v = set.${name}; in if pred name v then [(nameValuePair name v)] else [] ) (attrNames set) ); # Everything that nix flake check requires for the packages output sieve = n: v: with v; let inherit (builtins) isAttrs; isDerivation = x: isAttrs x && x ? type && x.type == "derivation"; platforms = meta.hydraPlatforms or meta.platforms or [ ]; in # check for isDerivation, so this is independently useful of # flattenTree, which also does filter on derviations isDerivation v && !meta.broken && builtins.elem system platforms ; in filterAttrs sieve packages