{ programs.nixvim.plugins = { cmp-emoji = { enable = true; }; cmp = { enable = true; cmdline = {}; settings = { autoEnableSources = true; experimental = { ghost_text = true; }; performance = { debounce = 60; fetchingTimeout = 200; maxViewEntries = 30; }; snippet = { expand = "function(args) require('luasnip').lsp_expand(args.body) end"; }; formatting = { fields = [ "kind" "abbr" "menu" ]; format = '' function(entry, vim_item) vim_item.kind = string.format('%s %s', kind_icons[vim_item.kind], vim_item.kind) vim_item.menu = ({ nvim_lsp = "[LSP]", nvim_lua = "[Lua]", luasnip = "[Snippet]", buffer = "[Buffer]", path = "[Path]", ["vim-dadbod-completion"] = "[SQL-dadbod]" })[entry.source.name] return vim_item end, ''; }; sources = [ { name = "nvim_lsp"; } { name = "nvim_lua"; } { name = "luasnip"; } { name = "buffer"; } { name = "path"; } { name = "vim-dadbod-completion"; } ]; window = { completion = { border = "solid"; }; documentation = { border = "solid"; }; }; mapping = { "" = "cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})"; "" = "cmp.mapping.select_prev_item()"; "" = "cmp.mapping.scroll_docs(-4)"; "" = "cmp.mapping.scroll_docs(4)"; "" = "cmp.mapping.confirm({ select = true })"; }; }; }; cmp-nvim-lsp = { enable = true; }; # lsp cmp-buffer = { enable = true; }; cmp-path = { enable = true; }; # file system paths cmp_luasnip = { enable = true; }; # snippets cmp-cmdline = { enable = true; }; # autocomplete for cmdline }; programs.nixvim.extraConfigLua = '' luasnip = require("luasnip") 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 = "", } local cmp = require'cmp' -- Use buffer source for `/` (if you enabled `native_menu`, this won't work anymore). cmp.setup.cmdline({'/', "?" }, { mapping = cmp.mapping.preset.cmdline(), sources = { { name = 'buffer' } } }) -- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore). cmp.setup.cmdline(':', { mapping = cmp.mapping.preset.cmdline(), sources = cmp.config.sources({ { name = 'path' } }, { { name = 'cmdline' } }), }) ''; }