{ lib, flake-parts-lib, ... }: let inherit (lib) mkOption mkEnableOption types; inherit (flake-parts-lib) mkPerSystemOption; in { options.perSystem = mkPerSystemOption ( { pkgs, system, config, ... }: { options.koreader = mkOption { default = { }; type = types.lazyAttrsOf <| types.submoduleWith { shorthandOnlyDefinesConfig = true; modules = [ { _module.args = { inherit pkgs lib; }; } ({ name, ... }: { imports = [ ./main.nix ]; options = { enable = mkEnableOption name // { default = true; }; }; }) ]; }; }; config.packages = let koreaders = lib.filterAttrs (_: v: v.enable) config.koreader; in lib.mapAttrs' (name: value: { name = "koreader-${name}"; value = value.koreader.finalPackage; }) koreaders; } ); }