{
  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
        ];
      }
    ];
}
