···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.
1515+ platformAwareCallPackage =
1616+ path: args:
1717+ let
1818+ result = builtins.tryEval (pkgs.callPackage path args);
1919+ in
2020+ if result.success then result.value else null;
2121+822 allPackages = lib.packagesFromDirectoryRecursive {
99- inherit (pkgs) callPackage;
2323+ callPackage = platformAwareCallPackage;
1024 directory = ./.;
1125 };
1226 in
1313- lib.filterAttrs (
1414- name: pkg: name != "flake-module" && lib.meta.availableOn pkgs.stdenv.hostPlatform pkg
1515- ) allPackages;
2727+ lib.filterAttrs (name: pkg: name != "flake-module" && pkg != null) allPackages;
1628 };
1729}