From eff15d27b48e213db7a4905d4ff72cb59349a0b9 Mon Sep 17 00:00:00 2001 From: Ching Pei Yang Date: Sat, 26 Oct 2024 01:51:58 +0200 Subject: [PATCH] cmp: install sourcess via cmp.sourcePlugins --- modules/plugins/assistant/copilot/config.nix | 17 +--- .../plugins/completion/nvim-cmp/config.nix | 77 ++++++++++--------- .../plugins/completion/nvim-cmp/nvim-cmp.nix | 10 ++- modules/plugins/lsp/config.nix | 18 +---- modules/plugins/snippets/luasnip/config.nix | 17 +--- modules/plugins/treesitter/config.nix | 8 +- modules/plugins/utility/telescope/config.nix | 5 +- 7 files changed, 68 insertions(+), 84 deletions(-) diff --git a/modules/plugins/assistant/copilot/config.nix b/modules/plugins/assistant/copilot/config.nix index 9c33714..9f92d14 100644 --- a/modules/plugins/assistant/copilot/config.nix +++ b/modules/plugins/assistant/copilot/config.nix @@ -56,21 +56,12 @@ in { (mkLuaKeymap ["i"] cfg.mappings.suggestion.prev "function() require('copilot.suggestion').prev() end" "[copilot] previous suggestion" {}) ]; }; - - copilot-cmp = mkIf cfg.cmp.enable { - package = "copilot-cmp"; - lazy = true; - after = optionalString config.vim.lazy.enable '' - local path = vim.fn.globpath(vim.o.packpath, 'pack/*/opt/copilot-cmp') - require("rtp_nvim").source_after_plugin_dir(path) - require("lz.n").trigger_load("copilot-lua") - ''; - }; - - nvim-cmp.after = mkIf cfg.cmp.enable "require('lz.n').trigger_load('copilot-cmp')"; }; - autocomplete.nvim-cmp.sources = {copilot = "[Copilot]";}; + autocomplete.nvim-cmp = { + sources = {copilot = "[Copilot]";}; + sourcePlugins = ["copilot-cmp"]; + }; # Disable plugin handled keymaps. # Setting it here so that it doesn't show up in user docs diff --git a/modules/plugins/completion/nvim-cmp/config.nix b/modules/plugins/completion/nvim-cmp/config.nix index 9140b05..27d0bfb 100644 --- a/modules/plugins/completion/nvim-cmp/config.nix +++ b/modules/plugins/completion/nvim-cmp/config.nix @@ -3,56 +3,57 @@ config, ... }: let - inherit (lib.modules) mkIf; + inherit (lib.modules) mkIf mkMerge; inherit (lib.strings) optionalString; inherit (lib.generators) mkLuaInline; inherit (lib.nvim.lua) toLuaObject; - inherit (builtins) attrNames; + inherit (lib.nvim.attrsets) mapListToAttrs; + inherit (builtins) attrNames typeOf tryEval concatStringsSep; cfg = config.vim.autocomplete.nvim-cmp; luasnipEnable = config.vim.snippets.luasnip.enable; + getPluginName = plugin: + if typeOf plugin == "string" + then plugin + else if (plugin ? pname && (tryEval plugin.pname).success) + then plugin.pname + else plugin.name; inherit (cfg) mappings; in { config = mkIf cfg.enable { vim = { startPlugins = ["rtp-nvim"]; - lazy.plugins = { - # cmp sources are loaded via lzn-auto-require as long as it is defined - # in cmp sources - cmp-buffer = { - package = "cmp-buffer"; - lazy = true; - after = '' - local path = vim.fn.globpath(vim.o.packpath, 'pack/*/opt/cmp-buffer') - require("rtp_nvim").source_after_plugin_dir(path) - ''; - }; - cmp-path = { - package = "cmp-path"; - lazy = true; - after = '' - local path = vim.fn.globpath(vim.o.packpath, 'pack/*/opt/cmp-path') - require("rtp_nvim").source_after_plugin_dir(path) - ''; - }; - nvim-cmp = { - package = "nvim-cmp"; - after = '' - ${optionalString luasnipEnable "local luasnip = require('luasnip')"} - require("lz.n").trigger_load("cmp-path") - local cmp = require("cmp") - cmp.setup(${toLuaObject cfg.setupOpts}) + lazy.plugins = mkMerge [ + (mapListToAttrs (package: { + name = getPluginName package; + value = { + inherit package; + lazy = true; + after = '' + local path = vim.fn.globpath(vim.o.packpath, 'pack/*/opt/${getPluginName package}') + require("rtp_nvim").source_after_plugin_dir(path) + ''; + }; + }) + cfg.sourcePlugins) + { + nvim-cmp = { + package = "nvim-cmp"; + after = '' + ${optionalString luasnipEnable "local luasnip = require('luasnip')"} + require("lz.n").trigger_load("cmp-path") + local cmp = require("cmp") + cmp.setup(${toLuaObject cfg.setupOpts}) - ${ - optionalString config.vim.lazy.enable '' - require("lz.n").trigger_load("cmp-buffer") - '' - } - ''; + ${concatStringsSep "\n" (map + (package: "require('lz.n').trigger_load(${toLuaObject (getPluginName package)})") + cfg.sourcePlugins)} + ''; - event = ["InsertEnter" "CmdlineEnter"]; - }; - }; + event = ["InsertEnter" "CmdlineEnter"]; + }; + } + ]; autocomplete.nvim-cmp = { sources = { @@ -61,6 +62,8 @@ in { path = "[Path]"; }; + sourcePlugins = ["cmp-buffer" "cmp-path"]; + setupOpts = { sources = map (s: {name = s;}) (attrNames cfg.sources); diff --git a/modules/plugins/completion/nvim-cmp/nvim-cmp.nix b/modules/plugins/completion/nvim-cmp/nvim-cmp.nix index 860a1c3..8246e71 100644 --- a/modules/plugins/completion/nvim-cmp/nvim-cmp.nix +++ b/modules/plugins/completion/nvim-cmp/nvim-cmp.nix @@ -4,10 +4,10 @@ ... }: let inherit (lib.options) mkEnableOption mkOption literalExpression literalMD; - inherit (lib.types) str attrsOf nullOr either; + inherit (lib.types) str attrsOf nullOr either listOf; inherit (lib.generators) mkLuaInline; inherit (lib.nvim.binds) mkMappingOption; - inherit (lib.nvim.types) mkPluginSetupOption luaInline mergelessListOf; + inherit (lib.nvim.types) mkPluginSetupOption luaInline mergelessListOf pluginType; inherit (lib.nvim.lua) toLuaObject; inherit (builtins) isString; @@ -99,5 +99,11 @@ in { } ''; }; + + sourcePlugins = mkOption { + type = listOf pluginType; + default = []; + description = "List of source plugins used by nvim-cmp."; + }; }; } diff --git a/modules/plugins/lsp/config.nix b/modules/plugins/lsp/config.nix index 63c21d5..841e28b 100644 --- a/modules/plugins/lsp/config.nix +++ b/modules/plugins/lsp/config.nix @@ -5,7 +5,6 @@ ... }: let inherit (lib.modules) mkIf; - inherit (lib.lists) optional; inherit (lib.strings) optionalString; inherit (lib.trivial) boolToString; inherit (lib.nvim.binds) addDescriptionsToMappings; @@ -23,20 +22,11 @@ in { config = mkIf cfg.enable { vim = { - lazy.plugins = { - cmp-nvim-lsp = { - package = "cmp-nvim-lsp"; - lazy = true; - after = '' - local path = vim.fn.globpath(vim.o.packpath, 'pack/*/opt/cmp-treesitter') - require("rtp_nvim").source_after_plugin_dir(path) - ''; - }; - nvim-cmp.after = mkIf usingNvimCmp "require('lz.n').trigger_load('cmp-nvim-lsp')"; + autocomplete.nvim-cmp = { + sources = {nvim_lsp = "[LSP]";}; + sourcePlugins = ["cmp-nvim-lsp"]; }; - autocomplete.nvim-cmp.sources = {nvim_lsp = "[LSP]";}; - pluginRC.lsp-setup = '' vim.g.formatsave = ${boolToString cfg.formatOnSave}; @@ -126,7 +116,7 @@ in { end local capabilities = vim.lsp.protocol.make_client_capabilities() - ${optionalString usingNvimCmp "capabilities = require('cmp_nvim_lsp').default_capabilities()"} + -- ${optionalString usingNvimCmp "capabilities = require('cmp_nvim_lsp').default_capabilities()"} ''; }; }; diff --git a/modules/plugins/snippets/luasnip/config.nix b/modules/plugins/snippets/luasnip/config.nix index 4fbbd2c..927b21f 100644 --- a/modules/plugins/snippets/luasnip/config.nix +++ b/modules/plugins/snippets/luasnip/config.nix @@ -4,7 +4,6 @@ ... }: let inherit (lib.modules) mkIf; - inherit (lib.strings) optionalString; cfg = config.vim.snippets.luasnip; in { @@ -16,20 +15,12 @@ in { lazy = true; after = cfg.loaders; }; - cmp-luasnip = mkIf config.vim.autocomplete.nvim-cmp.enable { - package = "cmp-luasnip"; - lazy = true; - after = '' - local path = vim.fn.globpath(vim.o.packpath, 'pack/*/opt/cmp-luasnip') - require("rtp_nvim").source_after_plugin_dir(path) - ''; - }; - nvim-cmp.after = optionalString config.vim.lazy.enable '' - require("lz.n").trigger_load("cmp-luasnip") - ''; }; startPlugins = cfg.providers; - autocomplete.nvim-cmp.sources = {luasnip = "[LuaSnip]";}; + autocomplete.nvim-cmp = { + sources = {luasnip = "[LuaSnip]";}; + sourcePlugins = ["cmp-luasnip"]; + }; }; }; } diff --git a/modules/plugins/treesitter/config.nix b/modules/plugins/treesitter/config.nix index e810d7e..e863d04 100644 --- a/modules/plugins/treesitter/config.nix +++ b/modules/plugins/treesitter/config.nix @@ -5,7 +5,7 @@ ... }: let inherit (lib.modules) mkIf mkMerge; - inherit (lib.lists) optional optionals; + inherit (lib.lists) optionals; inherit (lib.nvim.binds) mkSetBinding addDescriptionsToMappings; inherit (lib.nvim.lua) toLuaObject; inherit (lib.nvim.dag) entryBefore entryAfter; @@ -32,7 +32,11 @@ in { nvim-cmp.after = mkIf usingNvimCmp "require('lz.n').trigger_load('cmp-treesitter')"; }; - autocomplete.nvim-cmp.sources = {treesitter = "[Treesitter]";}; + autocomplete.nvim-cmp = { + sources = {treesitter = "[Treesitter]";}; + sourcePlugins = ["cmp-treesitter"]; + }; + treesitter.grammars = optionals cfg.addDefaultGrammars cfg.defaultGrammars; maps = { diff --git a/modules/plugins/utility/telescope/config.nix b/modules/plugins/utility/telescope/config.nix index 37bdc0f..d42e1bb 100644 --- a/modules/plugins/utility/telescope/config.nix +++ b/modules/plugins/utility/telescope/config.nix @@ -1,6 +1,6 @@ { + options, config, - pkgs, lib, ... }: let @@ -11,8 +11,7 @@ inherit (lib.nvim.binds) pushDownDefault mkSetLznBinding; cfg = config.vim.telescope; - self = import ./telescope.nix {inherit pkgs lib;}; - mappingDefinitions = self.options.vim.telescope.mappings; + mappingDefinitions = options.vim.telescope.mappings; mappings = addDescriptionsToMappings cfg.mappings mappingDefinitions; in {