return { { "saghen/blink.cmp", -- optional: provides snippets for the snippet source dependencies = { "rafamadriz/friendly-snippets" }, -- use a release tag to download pre-built binaries version = "1.*", -- AND/OR build from source, requires nightly: https://rust-lang.github.io/rustup/concepts/channels.html#working-with-nightly-rust -- build = 'cargo build --release', -- If you use nix, you can build from source using latest nightly rust with: -- build = 'nix run .#build-plugin', ---@module 'blink.cmp' ---@type blink.cmp.Config opts = { -- 'default' (recommended) for mappings similar to built-in completions (C-y to accept) -- 'super-tab' for mappings similar to vscode (tab to accept) -- 'enter' for enter to accept -- 'none' for no mappings -- -- All presets have the following mappings: -- C-space: Open menu or open docs if already open -- C-n/C-p or Up/Down: Select next/previous item -- C-e: Hide menu -- C-k: Toggle signature help (if signature.enabled = true) -- -- See :h blink-cmp-config-keymap for defining your own keymap keymap = { -- set to 'none' to disable the 'default' preset preset = "super-tab", [""] = { "select_prev", "fallback" }, [""] = { "select_next", "fallback" }, [""] = { "hide", "fallback" }, -- disable a keymap from the preset [""] = {}, [""] = {}, [""] = {}, -- show with a list of providers -- [""] = { -- function(cmp) -- cmp.show({ providers = { "snippets" } }) -- end, -- }, -- control whether the next command will be run when using a function -- [""] = { -- function(cmp) -- if some_condition then -- return -- end -- runs the next command -- return true -- doesn't run the next command -- end, -- "select_next", -- }, }, appearance = { -- 'mono' (default) for 'Nerd Font Mono' or 'normal' for 'Nerd Font' -- Adjusts spacing to ensure icons are aligned nerd_font_variant = "mono", highlight_ns = vim.api.nvim_create_namespace("blink_cmp"), -- Sets the fallback highlight groups to nvim-cmp's highlight groups -- Useful for when your theme doesn't support blink.cmp -- Will be removed in a future release use_nvim_cmp_as_default = true, }, completion = { documentation = { auto_show = false, auto_show_delay_ms = 230, update_delay_ms = 50, treesitter_highlighting = true, draw = function(opts) opts.default_implementation() end, window = { min_width = 16, max_width = 80, max_height = 24, border = "padded", -- Defaults to `vim.o.winborder` on nvim 0.11+ or 'padded' when not defined/<=0.10 winblend = 0, winhighlight = "Normal:BlinkCmpDoc,FloatBorder:BlinkCmpDocBorder,EndOfBuffer:BlinkCmpDoc", -- Note that the gutter will be disabled when border ~= 'none' scrollbar = true, }, }, ghost_text = { enabled = true, show_with_selection = true, show_without_selection = true, show_with_menu = true, show_without_menu = true, }, -- ─────────────────────────────────< mini-icons config >────────────────────────────── menu = { draw = { columns = { { "kind_icon" }, { "label", gap = 1 } }, components = { label = { text = function(ctx) return require("colorful-menu").blink_components_text(ctx) end, highlight = function(ctx) return require("colorful-menu").blink_components_highlight(ctx) end, }, kind_icon = { text = function(ctx) local kind_icon, _, _ = require("mini.icons").get("lsp", ctx.kind) return kind_icon end, -- (optional) use highlights from mini.icons highlight = function(ctx) local _, hl, _ = require("mini.icons").get("lsp", ctx.kind) return hl end, }, kind = { -- (optional) use highlights from mini.icons highlight = function(ctx) local _, hl, _ = require("mini.icons").get("lsp", ctx.kind) return hl end, }, }, }, }, }, -- Default list of enabled providers defined so that you can extend it -- elsewhere in your config, without redefining it, due to `opts_extend` sources = { default = { "lazydev", "lsp", "path", "snippets", "buffer" }, providers = { lazydev = { name = "LazyDev", module = "lazydev.integrations.blink", -- make lazydev completions top priority (see `:h blink.cmp`) score_offset = 100, }, }, }, -- (Default) Rust fuzzy matcher for typo resistance and significantly better performance -- You may use a lua implementation instead by using `implementation = "lua"` or fallback to the lua implementation, -- when the Rust fuzzy matcher is not available, by using `implementation = "prefer_rust"` -- -- See the fuzzy documentation for more information fuzzy = { implementation = "prefer_rust" }, }, opts_extend = { "sources.default" }, }, -- ─────────────────────────────────< colorful menu.nvim >───────────────────────────────── { "xzbdmw/colorful-menu.nvim", opts = { { ls = { lua_ls = { -- Maybe you want to dim arguments a bit. arguments_hl = "@comment", }, gopls = { -- By default, we render variable/function's type in the right most side, -- to make them not to crowd together with the original label. -- when true: -- foo *Foo -- ast "go/ast" -- when false: -- foo *Foo -- ast "go/ast" align_type_to_right = true, -- When true, label for field and variable will format like "foo: Foo" -- instead of go's original syntax "foo Foo". If align_type_to_right is -- true, this option has no effect. add_colon_before_type = false, -- See https://github.com/xzbdmw/colorful-menu.nvim/pull/36 preserve_type_when_truncate = true, }, -- for lsp_config or typescript-tools ts_ls = { -- false means do not include any extra info, -- see https://github.com/xzbdmw/colorful-menu.nvim/issues/42 extra_info_hl = "@comment", }, vtsls = { -- false means do not include any extra info, -- see https://github.com/xzbdmw/colorful-menu.nvim/issues/42 extra_info_hl = "@comment", }, ["rust-analyzer"] = { -- Such as (as Iterator), (use std::io). extra_info_hl = "@comment", -- Similar to the same setting of gopls. align_type_to_right = true, -- See https://github.com/xzbdmw/colorful-menu.nvim/pull/36 preserve_type_when_truncate = true, }, clangd = { -- Such as "From ". extra_info_hl = "@comment", -- Similar to the same setting of gopls. align_type_to_right = true, -- the hl group of leading dot of "•std::filesystem::permissions(..)" import_dot_hl = "@comment", -- See https://github.com/xzbdmw/colorful-menu.nvim/pull/36 preserve_type_when_truncate = true, }, zls = { -- Similar to the same setting of gopls. align_type_to_right = true, }, roslyn = { extra_info_hl = "@comment", }, dartls = { extra_info_hl = "@comment", }, -- The same applies to pyright/pylance basedpyright = { -- It is usually import path such as "os" extra_info_hl = "@comment", }, -- If true, try to highlight "not supported" languages. fallback = true, -- this will be applied to label description for unsupport languages fallback_extra_info_hl = "@comment", }, -- If the built-in logic fails to find a suitable highlight group for a label, -- this highlight is applied to the label. fallback_highlight = "@variable", -- If provided, the plugin truncates the final displayed text to -- this width (measured in display cells). Any highlights that extend -- beyond the truncation point are ignored. When set to a float -- between 0 and 1, it'll be treated as percentage of the width of -- the window: math.floor(max_width * vim.api.nvim_win_get_width(0)) -- Default 60. max_width = 60, }, }, -- config = function() -- -- You don't need to set these options. -- require("colorful-menu").setup({ -- ls = { -- lua_ls = { -- -- Maybe you want to dim arguments a bit. -- arguments_hl = "@comment", -- }, -- gopls = { -- -- By default, we render variable/function's type in the right most side, -- -- to make them not to crowd together with the original label. -- -- -- when true: -- -- foo *Foo -- -- ast "go/ast" -- -- -- when false: -- -- foo *Foo -- -- ast "go/ast" -- align_type_to_right = true, -- -- When true, label for field and variable will format like "foo: Foo" -- -- instead of go's original syntax "foo Foo". If align_type_to_right is -- -- true, this option has no effect. -- add_colon_before_type = false, -- -- See https://github.com/xzbdmw/colorful-menu.nvim/pull/36 -- preserve_type_when_truncate = true, -- }, -- -- for lsp_config or typescript-tools -- ts_ls = { -- -- false means do not include any extra info, -- -- see https://github.com/xzbdmw/colorful-menu.nvim/issues/42 -- extra_info_hl = "@comment", -- }, -- vtsls = { -- -- false means do not include any extra info, -- -- see https://github.com/xzbdmw/colorful-menu.nvim/issues/42 -- extra_info_hl = "@comment", -- }, -- ["rust-analyzer"] = { -- -- Such as (as Iterator), (use std::io). -- extra_info_hl = "@comment", -- -- Similar to the same setting of gopls. -- align_type_to_right = true, -- -- See https://github.com/xzbdmw/colorful-menu.nvim/pull/36 -- preserve_type_when_truncate = true, -- }, -- clangd = { -- -- Such as "From ". -- extra_info_hl = "@comment", -- -- Similar to the same setting of gopls. -- align_type_to_right = true, -- -- the hl group of leading dot of "•std::filesystem::permissions(..)" -- import_dot_hl = "@comment", -- -- See https://github.com/xzbdmw/colorful-menu.nvim/pull/36 -- preserve_type_when_truncate = true, -- }, -- zls = { -- -- Similar to the same setting of gopls. -- align_type_to_right = true, -- }, -- roslyn = { -- extra_info_hl = "@comment", -- }, -- dartls = { -- extra_info_hl = "@comment", -- }, -- -- The same applies to pyright/pylance -- basedpyright = { -- -- It is usually import path such as "os" -- extra_info_hl = "@comment", -- }, -- -- If true, try to highlight "not supported" languages. -- fallback = true, -- -- this will be applied to label description for unsupport languages -- fallback_extra_info_hl = "@comment", -- }, -- -- If the built-in logic fails to find a suitable highlight group for a label, -- -- this highlight is applied to the label. -- fallback_highlight = "@variable", -- -- If provided, the plugin truncates the final displayed text to -- -- this width (measured in display cells). Any highlights that extend -- -- beyond the truncation point are ignored. When set to a float -- -- between 0 and 1, it'll be treated as percentage of the width of -- -- the window: math.floor(max_width * vim.api.nvim_win_get_width(0)) -- -- Default 60. -- max_width = 60, -- }) -- end, }, -- ───────────────────────────────────────< extras >─────────────────────────────────────── { "folke/lazydev.nvim", ft = "lua", -- only load on lua files opts = { library = { -- See the configuration section for more details -- Load luvit types when the `vim.uv` word is found { path = "${3rd}/luv/library", words = { "vim%.uv" } }, }, }, }, }