{...}: { programs.nixvim.plugins = { cmp = { autoEnableSources = false; enable = true; settings = { snippet.expand = "function(args) require('luasnip').lsp_expand(args.body) end"; formatting = { fields = ["kind" "abbr" "menu"]; format = '' function(entry, vim_item) local kind_icons = { Text = "", Method = "", Function = "", Constructor = "", Field = " ", Variable = "", Class = "", Interface = "", Module = "", Property = "", Unit = "", Value = "", Enum = "", Keyword = "", Snippet = "", Color = "", File = "", Reference = "", Folder = "", EnumMember = "", Constant = "", Struct = "", Event = "", Operator = "", TypeParameter = " ", Misc = " ", } vim_item.kind = string.format("%s", kind_icons[vim_item.kind]) vim_item.abbr = vim_item.abbr .. " " .. (vim_item.menu and vim_item.menu or "") if vim.fn.strchars(vim_item.abbr) > 50 then vim_item.abbr = vim.fn.strcharpart(vim_item.abbr, 0, 50) .. "..." end vim_item.menu = ({ nvim_lsp = "[LSP]", luasnip = "[Snippet]", buffer = "[Buffer]", path = "[Path]" })[entry.source.name] return vim_item end ''; }; mapping.__raw = '' cmp.mapping.preset.insert({ ["<C-d>"] = cmp.mapping.scroll_docs(-4), ["<C-f>"] = cmp.mapping.scroll_docs(4), ["<C-Space>"] = cmp.mapping.complete(), ["<CR>"] = cmp.mapping.confirm({ behavior = cmp.ConfirmBehavior.Replace, select = true, }), ["<S-TAB>"] = cmp.mapping.select_prev_item(), ["<TAB>"] = cmp.mapping.select_next_item(), })''; window = { completion.__raw = "cmp.config.window.bordered()"; documentation.__raw = "cmp.config.window.bordered()"; }; sources = [ {name = "nvim_lsp";} {name = "luasnip";} {name = "path";} {name = "buffer";} {name = "crates";} ]; }; }; cmp_luasnip.enable = true; cmp-buffer.enable = true; cmp-path.enable = true; cmp-nvim-lsp.enable = true; luasnip.enable = true; }; }