{ helpers, ... }: { plugins.cmp = { enable = true; settings = { completion.completeopt = "menu,menuone,insert"; snippet.expand = '' function(args) require('luasnip').lsp_expand(args.body) end ''; mapping = { "" = "cmp.mapping.select_next_item({ behavior = cmp.SelectBehavior.Insert })"; "" = "cmp.mapping.select_prev_item({ behavior = cmp.SelectBehavior.Insert })"; "" = "cmp.mapping.scroll_docs(-4)"; "" = "cmp.mapping.scroll_docs(4)"; "" = "cmp.mapping.complete()"; "" = "cmp.mapping.abort()"; "" = helpers.mkRaw '' cmp.mapping({ i = function(fallback) if cmp.visible() and cmp.get_active_entry() then cmp.confirm({ behavior = cmp.ConfirmBehavior.Replace, select = false }) else fallback() end end, s = cmp.mapping.confirm({ select = true }), c = cmp.mapping.confirm({ behavior = cmp.ConfirmBehavior.Replace, select = true }), }) ''; }; sources = map (name: { inherit name; }) [ "nvim_lsp" "luasnip" "async_path" "buffer" "rg" ]; }; }; }