{ lib, config, options, ... }: let cfg = config.youthlic; in { options = { youthlic.plugins = lib.mkOption { type = lib.types.attrsOf (lib.types.submodule ({ name, lib, ... }: { freeformType = lib.types.anything; options = { enable = lib.mkEnableOption "nvimPlugins.${name}"; }; })); default = {}; }; }; config = let enabledPlugins = lib.filterAttrs (_name: value: value.enable) cfg.plugins; in lib.mkMerge [ { plugins = enabledPlugins; } { plugins = lib.pipe enabledPlugins [ builtins.attrNames (lib.filter (name: options.plugins.${name} ? luaConfig)) (map (name: lib.nameValuePair name { luaConfig.post = #lua '' _M.load("${name}") ''; })) lib.listToAttrs ]; } ]; }