plugins/cmp: add cmp_ai source

This commit is contained in:
Gaetan Lepage 2024-06-14 11:06:45 +02:00 committed by Gaétan Lepage
parent 582641a639
commit 3834c4e0db
5 changed files with 138 additions and 1 deletions

View file

@ -5,6 +5,7 @@
calc = "cmp-calc"; calc = "cmp-calc";
dap = "cmp-dap"; dap = "cmp-dap";
cmdline = "cmp-cmdline"; cmdline = "cmp-cmdline";
cmp_ai = "cmp-ai";
cmp-clippy = "cmp-clippy"; cmp-clippy = "cmp-clippy";
cmp-cmdline-history = "cmp-cmdline-history"; cmp-cmdline-history = "cmp-cmdline-history";
cmp_pandoc = "cmp-pandoc-nvim"; cmp_pandoc = "cmp-pandoc-nvim";

View file

@ -0,0 +1,95 @@
{
lib,
helpers,
config,
...
}:
with lib;
let
cfg = config.plugins.cmp-ai;
in
{
meta.maintainers = [ maintainers.GaetanLepage ];
options.plugins.cmp-ai = {
settings = helpers.mkSettingsOption {
description = "Options provided to the `require('cmp_ai.config'):setup` function.";
options = {
max_lines = helpers.defaultNullOpts.mkUnsignedInt 50 ''
How many lines of buffer context to use.
'';
run_on_every_keystroke = helpers.defaultNullOpts.mkBool true ''
Generate new completion items on every keystroke.
'';
provider = helpers.defaultNullOpts.mkStr "HF" ''
Which AI provider to use.
Check the [README](https://github.com/tzachar/cmp-ai/blob/main/README.md) to learn about
available options.
'';
provider_options = helpers.defaultNullOpts.mkAttrsOf types.anything { } ''
Options to forward to the provider.
'';
notify = helpers.defaultNullOpts.mkBool true ''
As some completion sources can be quit slow, setting this to `true` will trigger a
notification when a completion starts and ends using `vim.notify`.
'';
notify_callback = helpers.defaultNullOpts.mkLuaFn' {
description = ''
The default notify function uses `vim.notify`, but an override can be configured.
'';
pluginDefault = ''
function(msg)
vim.notify(msg)
end
'';
example = ''
function(msg)
require('notify').notify(msg, vim.log.levels.INFO, {
title = 'OpenAI',
render = 'compact',
})
end
'';
};
ignored_file_types = helpers.defaultNullOpts.mkAttrsOf' {
type = types.bool;
description = "Which filetypes to ignore.";
pluginDefault = { };
example = {
lua = true;
html = true;
};
};
};
example = {
max_lines = 1000;
provider = "HF";
notify = true;
notify_callback = ''
function(msg)
vim.notify(msg)
end
'';
run_on_every_keystroke = true;
ignored_file_types = {
lua = true;
};
};
};
};
config = mkIf cfg.enable {
extraConfigLua = ''
require('cmp_ai.config'):setup(${helpers.toLuaObject cfg.settings})
'';
};
}

View file

@ -23,6 +23,7 @@ in
imports = [ imports = [
./codeium-nvim.nix ./codeium-nvim.nix
./copilot-cmp.nix ./copilot-cmp.nix
./cmp-ai.nix
./cmp-fish.nix ./cmp-fish.nix
./cmp-git.nix ./cmp-git.nix
./cmp-tabby.nix ./cmp-tabby.nix

View file

@ -0,0 +1,37 @@
{
empty = {
# We do not provide the required HF_API_KEY environment variable.
tests.dontRun = true;
plugins.cmp = {
enable = true;
settings.sources = [ { name = "cmp_ai"; } ];
};
};
example = {
# We do not provide the required HF_API_KEY environment variable.
tests.dontRun = true;
plugins = {
cmp = {
enable = true;
settings.sources = [ { name = "cmp_ai"; } ];
};
cmp-ai.settings = {
max_lines = 1000;
provider = "HF";
notify = true;
notify_callback = ''
function(msg)
vim.notify(msg)
end
'';
run_on_every_keystroke = true;
ignored_file_types = {
lua = true;
};
};
};
};
}

View file

@ -14,7 +14,10 @@
settings.sources = settings.sources =
with pkgs.lib; with pkgs.lib;
let let
disabledSources = optional (pkgs.stdenv.hostPlatform.system == "aarch64-linux") "cmp_tabnine"; disabledSources = [
# We do not provide the required HF_API_KEY environment variable.
"cmp_ai"
] ++ optional (pkgs.stdenv.hostPlatform.system == "aarch64-linux") "cmp_tabnine";
filterFunc = sourceName: !(elem sourceName disabledSources); filterFunc = sourceName: !(elem sourceName disabledSources);