return { "hrsh7th/nvim-cmp", opts = { sources = { { name = "ledger" }, { name = "luasnip", option = { show_autosnippets = true, use_show_condition = true, }, }, { name = "nvim_lsp", priority = 1 }, { name = "nvim_lsp_signature_help" }, { name = "nvim_lua" }, { name = "path" }, { name = "emoji" }, }, formatting = { format = { mode = "symbol_text", maxwidth = 50, before = function(entry, vim_item) return vim_item end, menu = { buffer = "[Buffer]", nvim_lsp = "[LSP]", luasnip = "[LuaSnip]", nvim_lua = "[Lua]", latex_symbols = "[Latex]", }, }, }, }, config = function(_, opts) local cmp = require("cmp") local luasnip = require("luasnip") local lspkind = require("lspkind") cmp.setup({ sources = opts.sources, --experimental = { ghost_text = { hl_group = "Comment" } }, snippet = { expand = function(args) require("luasnip").lsp_expand(args.body) end, }, formatting = { format = lspkind.cmp_format(opts.formatting.format) }, mapping = { [""] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_prev_item() elseif luasnip.jumpable(-1) then luasnip.jump(-1) else fallback() end end, { "i", "s" }), [""] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_next_item() elseif luasnip.expand_or_jumpable() then luasnip.expand_or_jump() else fallback() end end, { "i", "s" }), [""] = cmp.mapping(function(fallback) if luasnip.choice_active() then luasnip.change_choice(1) else fallback() end end, { "i", "s" }), [""] = cmp.mapping.scroll_docs(-4), [""] = cmp.mapping.scroll_docs(4), [""] = cmp.mapping.complete(), [""] = cmp.mapping.close(), [""] = cmp.mapping.confirm({ behavior = cmp.ConfirmBehavior.Insert, select = true, -- Automatically select first item on CR }), }, }) end, dependencies = { { "L3MON4D3/LuaSnip" }, { "hrsh7th/cmp-emoji" }, { "hrsh7th/cmp-nvim-lsp" }, { "hrsh7th/cmp-nvim-lsp-signature-help" }, { "hrsh7th/cmp-nvim-lua" }, { "hrsh7th/cmp-path" }, { "onsails/lspkind.nvim" }, { "saadparwaiz1/cmp_luasnip" }, { "someone-stole-my-name/cmp-ledger" }, }, }