{ config, lib, flake-parts-lib, ... }: let inherit (flake-parts-lib) mkSubmoduleOptions mkPerSystemOption; in { options = { flake = mkSubmoduleOptions { devContainers = 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 = { devContainers = 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.devContainers = lib.mapAttrs (k: v: v.devContainers) (lib.filterAttrs (k: v: v.devContainers != { }) config.allSystems); perInput = system: flake: lib.optionalAttrs (flake ? devContainers.${system}) { devContainers = flake.devContainers.${system}; }; }; }