{ inputs, lib, config, self, ... }: { options.fleet = { overlays = let overlayType = lib.mkOptionType { name = "nixpkgs-overlay"; description = "nixpkgs overlay"; check = lib.isFunction; merge = lib.mergeOneOption; }; in lib.mkOption { description = "Nixpkgs overlays to apply at flake level (not in hosts)"; type = lib.types.listOf overlayType; default = with inputs; [ agenix.overlays.default (final: _: { inherit (disko.packages.${final.system}) disko; inherit (self.packages.${final.system}) deploy; inherit (self.packages.${final.system}) llm-workflow-engine; }) ]; }; brokenPackages = lib.mkOption { description = "Packages that are broken on a given system"; type = lib.types.attrsOf (lib.types.listOf lib.types.str); default = { aarch64-linux = [ "llm-workflow-engine" ]; x86_64-linux = [ ]; }; }; }; config.perSystem = { system, lib, pkgs, ... }: { _module.args.pkgs = lib.foldl ( legacyPackages: legacyPackages.extend ) inputs.nixpkgs.legacyPackages.${system} config.fleet.overlays; packages = builtins.removeAttrs (lib.mapAttrs' (name: value: { inherit name; value = pkgs.callPackage "${self}/packages/${name}" { dream2nix = inputs.dream2nix; projectRoot = self.outPath; packagePath = "packages/${name}"; inherit inputs; }; }) (lib.filterAttrs (_: type: type == "directory") (builtins.readDir "${self}/packages")) ) config.fleet.brokenPackages.${system}; }; }