plugins/cmp: refactor sources list & mkCmpSourcePlugin

List mkCmpSourcePlugin args directly in `sources/default.nix`,
similar to LSP's language-servers list.
This commit is contained in:
Matt Sturgeon 2024-06-29 09:58:18 +01:00
parent 3a8d4fee35
commit 17f4aa5556
No known key found for this signature in database
GPG key ID: 4F91844CED1A8299
5 changed files with 218 additions and 93 deletions

View file

@ -1,28 +0,0 @@
{
lib,
helpers,
config,
pkgs,
...
}:
with helpers.vim-plugin;
with lib;
{
mkCmpSourcePlugin =
{
name,
sourceName,
extraPlugins ? [ ],
useDefaultPackage ? true,
...
}:
mkVimPlugin config {
inherit name;
extraPlugins = extraPlugins ++ (lists.optional useDefaultPackage pkgs.vimPlugins.${name});
maintainers = [ maintainers.GaetanLepage ];
# Register the source -> plugin name association
imports = [ { cmpSourcePlugins.${sourceName} = name; } ];
};
}

View file

@ -1,48 +0,0 @@
# Maps each source name to the plugin that provides it
{
async_path = "cmp-async-path";
buffer = "cmp-buffer";
calc = "cmp-calc";
dap = "cmp-dap";
cmdline = "cmp-cmdline";
cmp_ai = "cmp-ai";
cmp-clippy = "cmp-clippy";
cmp-cmdline-history = "cmp-cmdline-history";
cmp_pandoc = "cmp-pandoc-nvim";
cmp_tabby = "cmp-tabby";
cmp_tabnine = "cmp-tabnine";
codeium = "codeium-nvim";
conventionalcommits = "cmp-conventionalcommits";
copilot = "copilot-cmp";
crates = "crates-nvim";
dictionary = "cmp-dictionary";
digraphs = "cmp-digraphs";
emoji = "cmp-emoji";
fish = "cmp-fish";
fuzzy_buffer = "cmp-fuzzy-buffer";
fuzzy_path = "cmp-fuzzy-path";
git = "cmp-git";
greek = "cmp-greek";
latex_symbols = "cmp-latex-symbols";
look = "cmp-look";
luasnip = "cmp_luasnip";
nvim_lsp = "cmp-nvim-lsp";
nvim_lsp_document_symbol = "cmp-nvim-lsp-document-symbol";
nvim_lsp_signature_help = "cmp-nvim-lsp-signature-help";
nvim_lua = "cmp-nvim-lua";
npm = "cmp-npm";
omni = "cmp-omni";
pandoc_references = "cmp-pandoc-references";
path = "cmp-path";
rg = "cmp-rg";
snippy = "cmp-snippy";
spell = "cmp-spell";
tmux = "cmp-tmux";
treesitter = "cmp-treesitter";
ultisnips = "cmp-nvim-ultisnips";
vim_lsp = "cmp-vim-lsp";
vimwiki-tags = "cmp-vimwiki-tags";
vsnip = "cmp-vsnip";
yanky = "cmp_yanky";
zsh = "cmp-zsh";
}

View file

@ -0,0 +1,30 @@
{
lib,
helpers,
config,
pkgs,
...
}:
{
pluginName,
sourceName,
defaultPackage ? pkgs.vimPlugins.${pluginName},
maintainers ? [ lib.maintainers.GaetanLepage ],
imports ? [ ],
...
}@args:
helpers.vim-plugin.mkVimPlugin config (
builtins.removeAttrs args [
"pluginName"
"sourceName"
]
// {
inherit defaultPackage maintainers;
name = pluginName;
imports = imports ++ [
# Register the source -> plugin name association
{ cmpSourcePlugins.${sourceName} = pluginName; }
];
}
)

View file

@ -13,8 +13,6 @@ in
meta.maintainers = [ maintainers.GaetanLepage ];
options.plugins.codeium-nvim = helpers.neovim-plugin.extraOptionsOptions // {
package = helpers.mkPluginPackageOption "codeium.nvim" pkgs.vimPlugins.codeium-nvim;
configPath = helpers.defaultNullOpts.mkStr {
__raw = "vim.fn.stdpath('cache') .. '/codeium/config.json'";
} "The path to the config file, used to store the API key.";

View file

@ -1,25 +1,198 @@
{
lib,
config,
helpers,
pkgs,
...
}:
with lib;
}@args:
let
cmpLib = import ../cmp-helpers.nix {
inherit
lib
config
helpers
pkgs
;
};
# A list of most cmp source plugins, passed to mkCmpSourcePlugin.
# More complex cmp sources can instead be defined as their own plugin
# and register their source-name association using the `cmpSourcePlugins` option.
sources = [
{
pluginName = "cmp-async-path";
sourceName = "async_path";
}
{
pluginName = "cmp-buffer";
sourceName = "buffer";
}
{
pluginName = "cmp-calc";
sourceName = "calc";
}
{
pluginName = "cmp-dap";
sourceName = "dap";
}
{
pluginName = "cmp-cmdline";
sourceName = "cmdline";
}
{
pluginName = "cmp-ai";
sourceName = "cmp_ai";
}
{
pluginName = "cmp-clippy";
sourceName = "cmp-clippy";
}
{
pluginName = "cmp-cmdline-history";
sourceName = "cmp-cmdline-history";
}
{
pluginName = "cmp-pandoc-nvim";
sourceName = "cmp_pandoc";
}
{
pluginName = "cmp-tabby";
sourceName = "cmp_tabby";
}
{
pluginName = "cmp-tabnine";
sourceName = "cmp_tabnine";
}
{
pluginName = "codeium-nvim";
sourceName = "codeium";
}
{
pluginName = "cmp-conventionalcommits";
sourceName = "conventionalcommits";
}
{
pluginName = "copilot-cmp";
sourceName = "copilot";
}
{
pluginName = "crates-nvim";
sourceName = "crates";
}
{
pluginName = "cmp-dictionary";
sourceName = "dictionary";
}
{
pluginName = "cmp-digraphs";
sourceName = "digraphs";
}
{
pluginName = "cmp-emoji";
sourceName = "emoji";
}
{
pluginName = "cmp-fish";
sourceName = "fish";
}
{
pluginName = "cmp-fuzzy-buffer";
sourceName = "fuzzy_buffer";
}
{
pluginName = "cmp-fuzzy-path";
sourceName = "fuzzy_path";
}
{
pluginName = "cmp-git";
sourceName = "git";
}
{
pluginName = "cmp-greek";
sourceName = "greek";
}
{
pluginName = "cmp-latex-symbols";
sourceName = "latex_symbols";
}
{
pluginName = "cmp-look";
sourceName = "look";
}
{
pluginName = "cmp_luasnip";
sourceName = "luasnip";
}
{
pluginName = "cmp-nvim-lsp";
sourceName = "nvim_lsp";
}
{
pluginName = "cmp-nvim-lsp-document-symbol";
sourceName = "nvim_lsp_document_symbol";
}
{
pluginName = "cmp-nvim-lsp-signature-help";
sourceName = "nvim_lsp_signature_help";
}
{
pluginName = "cmp-nvim-lua";
sourceName = "nvim_lua";
}
{
pluginName = "cmp-npm";
sourceName = "npm";
}
{
pluginName = "cmp-omni";
sourceName = "omni";
}
{
pluginName = "cmp-pandoc-references";
sourceName = "pandoc_references";
}
{
pluginName = "cmp-path";
sourceName = "path";
}
{
pluginName = "cmp-rg";
sourceName = "rg";
}
{
pluginName = "cmp-snippy";
sourceName = "snippy";
}
{
pluginName = "cmp-spell";
sourceName = "spell";
}
{
pluginName = "cmp-tmux";
sourceName = "tmux";
}
{
pluginName = "cmp-treesitter";
sourceName = "treesitter";
}
{
pluginName = "cmp-nvim-ultisnips";
sourceName = "ultisnips";
}
{
pluginName = "cmp-vim-lsp";
sourceName = "vim_lsp";
}
{
pluginName = "cmp-vimwiki-tags";
sourceName = "vimwiki-tags";
}
{
pluginName = "cmp-vsnip";
sourceName = "vsnip";
}
{
pluginName = "cmp_yanky";
sourceName = "yanky";
}
{
pluginName = "cmp-zsh";
sourceName = "zsh";
}
];
cmpSourcesPluginNames = import ../sources.nix;
pluginModules = mapAttrsToList (
sourceName: name: cmpLib.mkCmpSourcePlugin { inherit sourceName name; }
) cmpSourcesPluginNames;
mkCmpSourcePlugin = import ./_mk-cmp-plugin.nix args;
pluginModules = builtins.map mkCmpSourcePlugin sources;
in
{
# For extra cmp plugins