···55 {
66 packages =
77 let
88- # Wrapper that handles platform-incompatible packages by catching eval errors.
99- # This breaks laziness (evaluates all packages upfront) but ensures:
1010- # - Platform-incompatible packages are filtered out for `nix flake check`
1111- # - Real errors in package definitions are still caught and reported
1212- #
1313- # Note: tryEval catches both platform errors AND real errors. However, real errors
1414- # will still surface when the package is evaluated on platforms where dependencies exist.
88+ # Wrapper that handles platform-incompatible packages by:
99+ # 1. Catching eval errors during callPackage
1010+ # 2. Filtering based on meta.platforms
1511 platformAwareCallPackage =
1612 path: args:
1713 let
1814 result = builtins.tryEval (pkgs.callPackage path args);
1515+ pkg = result.value;
1616+ isSupported = result.success && lib.meta.availableOn pkgs.stdenv.hostPlatform pkg;
1917 in
2020- if result.success then result.value else null;
1818+ if isSupported then pkg else null;
21192220 allPackages = lib.packagesFromDirectoryRecursive {
2321 callPackage = platformAwareCallPackage;