diff --git a/plugins/completion/cmp/cmp-helpers.nix b/plugins/completion/cmp/cmp-helpers.nix deleted file mode 100644 index 47889791..00000000 --- a/plugins/completion/cmp/cmp-helpers.nix +++ /dev/null @@ -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; } ]; - }; -} diff --git a/plugins/completion/cmp/sources.nix b/plugins/completion/cmp/sources.nix deleted file mode 100644 index baed7a5c..00000000 --- a/plugins/completion/cmp/sources.nix +++ /dev/null @@ -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"; -} diff --git a/plugins/completion/cmp/sources/_mk-cmp-plugin.nix b/plugins/completion/cmp/sources/_mk-cmp-plugin.nix new file mode 100644 index 00000000..8dbfceaa --- /dev/null +++ b/plugins/completion/cmp/sources/_mk-cmp-plugin.nix @@ -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; } + ]; + } +) diff --git a/plugins/completion/cmp/sources/codeium-nvim.nix b/plugins/completion/cmp/sources/codeium-nvim.nix index 1b274d75..0f815ff3 100644 --- a/plugins/completion/cmp/sources/codeium-nvim.nix +++ b/plugins/completion/cmp/sources/codeium-nvim.nix @@ -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."; diff --git a/plugins/completion/cmp/sources/default.nix b/plugins/completion/cmp/sources/default.nix index 448834fa..05de4158 100644 --- a/plugins/completion/cmp/sources/default.nix +++ b/plugins/completion/cmp/sources/default.nix @@ -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