nvf/modules/plugins/completion/nvim-cmp/nvim-cmp.nix

104 lines
3.1 KiB
Nix
Raw Normal View History

2024-10-06 12:42:35 +02:00
{
lib,
config,
...
}: let
inherit (lib.options) mkEnableOption mkOption literalExpression literalMD;
2024-10-06 21:54:11 +02:00
inherit (lib.types) str attrsOf nullOr either;
2024-10-06 12:42:35 +02:00
inherit (lib.generators) mkLuaInline;
inherit (lib.nvim.binds) mkMappingOption;
2024-10-06 21:54:11 +02:00
inherit (lib.nvim.types) mkPluginSetupOption luaInline mergelessListOf;
2024-10-06 12:42:35 +02:00
inherit (lib.nvim.lua) toLuaObject;
2024-10-06 21:54:11 +02:00
inherit (builtins) isString;
2024-10-06 12:42:35 +02:00
cfg = config.vim.autocomplete.nvim-cmp;
in {
options.vim.autocomplete.nvim-cmp = {
enable = mkEnableOption "nvim-cmp" // {default = false;};
setupOpts = mkPluginSetupOption "the autocomplete plugin" {
completion.completeopt = mkOption {
type = str;
default = "menu,menuone,noinsert";
description = ''
2024-10-06 12:42:35 +02:00
A comma-separated list of options for completion.
2023-04-18 01:48:44 +03:00
2024-10-06 12:42:35 +02:00
See `:help completeopt` for the complete list.
2023-04-18 01:48:44 +03:00
'';
};
2024-10-06 21:54:11 +02:00
sorting.comparators = mkOption {
type = mergelessListOf (either str luaInline);
default = [
"offset"
"exact"
"score"
"kind"
"length"
"sort_text"
];
description = ''
The comparator functions used for sorting completions.
You can either pass a valid inline lua function
(see `:help cmp-config.sorting.comparators`),
or a string, in which case the builtin comparator with that name will
be used.
'';
apply = map (
c:
if isString c
then mkLuaInline ("cmp.config.compare." + c)
else c
);
};
2024-10-06 12:42:35 +02:00
};
2023-04-18 01:48:44 +03:00
2024-10-06 12:42:35 +02:00
mappings = {
complete = mkMappingOption "Complete [nvim-cmp]" "<C-Space>";
confirm = mkMappingOption "Confirm [nvim-cmp]" "<CR>";
next = mkMappingOption "Next item [nvim-cmp]" "<Tab>";
previous = mkMappingOption "Previous item [nvim-cmp]" "<S-Tab>";
close = mkMappingOption "Close [nvim-cmp]" "<C-e>";
scrollDocsUp = mkMappingOption "Scroll docs up [nvim-cmp]" "<C-d>";
scrollDocsDown = mkMappingOption "Scroll docs down [nvim-cmp]" "<C-f>";
};
2023-04-18 01:48:44 +03:00
2024-10-06 12:42:35 +02:00
format = mkOption {
type = luaInline;
default = mkLuaInline ''
function(entry, vim_item)
vim_item.menu = (${toLuaObject cfg.sources})[entry.source.name]
return vim_item
end
'';
defaultText = literalMD ''
```lua
function(entry, vim_item)
vim_item.menu = (''${toLuaObject config.vim.autocomplete.nvim-cmp.sources})[entry.source.name]
return vim_item
end
```
'';
description = ''
2024-10-06 21:54:11 +02:00
The function used to customize the completion menu entires. This is
outside of `setupOpts` because of internal reasons, make sure to use
this one, instead of its `setupOpts` equivalent.
2023-04-18 01:48:44 +03:00
2024-10-06 12:42:35 +02:00
See `:help cmp-config.formatting.format`.
'';
};
sources = mkOption {
type = attrsOf (nullOr str);
default = {};
description = "The list of sources used by nvim-cmp";
example = literalExpression ''
{
nvim-cmp = null;
buffer = "[Buffer]";
}
'';
};
};
}