{ config, lib, flake-parts-lib, ... }: let inherit (flake-parts-lib) mkSubmoduleOptions mkPerSystemOption; in { options = { flake = mkSubmoduleOptions { devPackages = lib.mkOption { type = with lib.types; lazyAttrsOf (attrsOf package); default = { }; description = '' An attribute set of per-system packages intended to be consumed for development environments. ''; }; }; perSystem = mkPerSystemOption { options = { devPackages = lib.mkOption { type = with lib.types; attrsOf package; default = { }; description = '' An attribute set of per-system packages intended to be consumed for development environments. ''; }; }; }; }; config = { flake.devPackages = lib.mapAttrs (k: v: v.devPackages) (lib.filterAttrs (k: v: v.devPackages != { }) config.allSystems ); perInput = system: flake: lib.optionalAttrs (flake ? devPackages.${system}) { devPackages = flake.devPackages.${system}; }; }; }