{
  config,
  lib,
  ...
}: let
  inherit (lib.modules) mkIf;
  inherit (lib.strings) optionalString;
  inherit (lib.nvim.dag) entryAnywhere;
  inherit (lib.nvim.lua) toLuaObject;

  cfg = config.vim.lsp;
in {
  config = mkIf (cfg.enable && cfg.lightbulb.enable) {
    vim = {
      startPlugins = ["nvim-lightbulb"];
      pluginRC.lightbulb = entryAnywhere ''
        local nvim_lightbulb = require("nvim-lightbulb")
        nvim_lightbulb.setup(${toLuaObject cfg.lightbulb.setupOpts})
        ${optionalString cfg.lightbulb.autocmd.enable ''
          vim.api.nvim_create_autocmd(${toLuaObject cfg.lightbulb.autocmd.events}, {
            pattern = ${toLuaObject cfg.lightbulb.autocmd.pattern},
            callback = function()
              nvim_lightbulb.update_lightbulb()
            end,
          })
        ''}
      '';
    };

    warnings = [
      # This could have been an assertion, but the chances of collision is very low and asserting here
      # might be too dramatic. Let's only warn the user, *in case* this occurs and is not intended. No
      # error will be thrown if 'lightbulb.setupOpts.autocmd.enable' has not been set by the user.
      (mkIf (cfg.lightbulb.autocmd.enable -> (cfg.lightbulb.setupOpts.autocmd.enabled or false)) ''
        Both 'vim.lsp.lightbulb.autocmd.enable' and 'vim.lsp.lightbulb.setupOpts.autocmd.enable' are set
        simultaneously. This might have performance implications due to frequent updates. Please set only
        one option to handle nvim-lightbulb autocmd.
      '')
    ];
  };
}