2023-02-20 11:42:13 +01:00
|
|
|
{
|
|
|
|
lib,
|
2023-11-06 15:04:08 +01:00
|
|
|
helpers,
|
2023-02-20 11:42:13 +01:00
|
|
|
config,
|
2023-11-06 15:04:08 +01:00
|
|
|
pkgs,
|
2023-02-20 11:42:13 +01:00
|
|
|
...
|
2023-11-06 15:04:08 +01:00
|
|
|
}:
|
|
|
|
with lib; {
|
|
|
|
options.plugins.nvim-lightbulb = {
|
|
|
|
enable = mkEnableOption "nvim-lightbulb, showing available code actions";
|
2023-01-22 04:36:24 +01:00
|
|
|
|
2023-11-06 15:04:08 +01:00
|
|
|
package = helpers.mkPackageOption "nvim-lightbulb" pkgs.vimPlugins.nvim-lightbulb;
|
2023-01-22 04:36:24 +01:00
|
|
|
|
2023-11-06 15:04:08 +01:00
|
|
|
ignore = helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" ''
|
|
|
|
LSP client names to ignore
|
|
|
|
'';
|
2023-01-22 04:36:24 +01:00
|
|
|
|
2023-11-06 15:04:08 +01:00
|
|
|
sign = {
|
|
|
|
enabled = helpers.defaultNullOpts.mkBool true "";
|
|
|
|
priority = helpers.defaultNullOpts.mkInt 10 "";
|
|
|
|
};
|
2023-01-22 04:36:24 +01:00
|
|
|
|
2023-11-06 15:04:08 +01:00
|
|
|
float = {
|
|
|
|
enabled = helpers.defaultNullOpts.mkBool false "";
|
2023-01-22 04:36:24 +01:00
|
|
|
|
2023-11-06 15:04:08 +01:00
|
|
|
text = helpers.defaultNullOpts.mkStr "💡" "Text to show in the popup float";
|
2023-01-22 04:36:24 +01:00
|
|
|
|
2023-11-06 15:04:08 +01:00
|
|
|
winOpts = helpers.defaultNullOpts.mkNullable (types.attrsOf types.anything) "{}" ''
|
|
|
|
Options for the floating window (see |vim.lsp.util.open_floating_preview| for more information)
|
|
|
|
'';
|
|
|
|
};
|
2023-01-22 04:36:24 +01:00
|
|
|
|
2023-11-06 15:04:08 +01:00
|
|
|
virtualText = {
|
|
|
|
enabled = helpers.defaultNullOpts.mkBool false "";
|
2023-01-22 04:36:24 +01:00
|
|
|
|
2023-11-06 15:04:08 +01:00
|
|
|
text = helpers.defaultNullOpts.mkStr "💡" "Text to show at virtual text";
|
2023-01-22 04:36:24 +01:00
|
|
|
|
2023-11-06 15:04:08 +01:00
|
|
|
hlMode = helpers.defaultNullOpts.mkStr "replace" ''
|
|
|
|
highlight mode to use for virtual text (replace, combine, blend), see
|
|
|
|
:help nvim_buf_set_extmark() for reference
|
|
|
|
'';
|
|
|
|
};
|
2023-01-22 04:36:24 +01:00
|
|
|
|
2023-11-06 15:04:08 +01:00
|
|
|
statusText = {
|
|
|
|
enabled = helpers.defaultNullOpts.mkBool false "";
|
2023-01-22 04:36:24 +01:00
|
|
|
|
2023-11-06 15:04:08 +01:00
|
|
|
text = helpers.defaultNullOpts.mkStr "💡" "Text to provide when code actions are available";
|
2023-01-22 04:36:24 +01:00
|
|
|
|
2023-11-06 15:04:08 +01:00
|
|
|
textUnavailable = helpers.defaultNullOpts.mkStr "" ''
|
|
|
|
Text to provide when no actions are available
|
|
|
|
'';
|
|
|
|
};
|
2023-01-22 04:36:24 +01:00
|
|
|
|
2023-11-06 15:04:08 +01:00
|
|
|
autocmd = {
|
|
|
|
enabled = helpers.defaultNullOpts.mkBool false "";
|
2023-01-22 04:36:24 +01:00
|
|
|
|
2023-11-06 15:04:08 +01:00
|
|
|
pattern = helpers.defaultNullOpts.mkNullable (types.listOf types.str) ''["*"]'' "";
|
2023-01-22 04:36:24 +01:00
|
|
|
|
2023-11-06 15:04:08 +01:00
|
|
|
events =
|
|
|
|
helpers.defaultNullOpts.mkNullable (types.listOf types.str)
|
|
|
|
''["CursorHold" "CursorHoldI"]'' "";
|
2023-01-22 04:36:24 +01:00
|
|
|
};
|
2023-11-06 15:04:08 +01:00
|
|
|
};
|
2023-01-22 04:36:24 +01:00
|
|
|
|
2023-11-06 15:04:08 +01:00
|
|
|
config = let
|
|
|
|
cfg = config.plugins.nvim-lightbulb;
|
|
|
|
setupOptions = {
|
|
|
|
inherit (cfg) ignore sign autocmd;
|
|
|
|
float = {
|
|
|
|
inherit (cfg.float) enabled text;
|
|
|
|
win_opts = cfg.float.winOpts;
|
|
|
|
};
|
|
|
|
virtual_text = {
|
|
|
|
inherit (cfg.virtualText) enabled text;
|
|
|
|
hl_mode = cfg.virtualText.hlMode;
|
2023-01-22 04:36:24 +01:00
|
|
|
};
|
2023-11-06 15:04:08 +01:00
|
|
|
status_text = {
|
|
|
|
inherit (cfg.statusText) enabled text;
|
|
|
|
text_unavailable = cfg.statusText.textUnavailable;
|
2023-02-20 11:42:13 +01:00
|
|
|
};
|
2023-11-06 15:04:08 +01:00
|
|
|
};
|
|
|
|
in
|
|
|
|
mkIf cfg.enable {
|
|
|
|
extraPlugins = [cfg.package];
|
|
|
|
extraConfigLua = ''
|
|
|
|
require("nvim-lightbulb").setup(${helpers.toLuaObject setupOptions})
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
}
|