From 466b79672cc365f276123af9e4db0593b5e00b48 Mon Sep 17 00:00:00 2001 From: Aditya Date: Mon, 4 Mar 2024 19:05:45 +0530 Subject: [PATCH] add completion --- config/completion/cmp.nix | 167 ++++++++++++++++++++++++++++++++++++++ config/default.nix | 2 + 2 files changed, 169 insertions(+) create mode 100644 config/completion/cmp.nix diff --git a/config/completion/cmp.nix b/config/completion/cmp.nix new file mode 100644 index 0000000..6e9ef42 --- /dev/null +++ b/config/completion/cmp.nix @@ -0,0 +1,167 @@ +{ + plugins = { + nvim-cmp = { + enable = true; + autoEnableSources = true; + experimental = { + ghost_text = true; + }; + performance = { + debounce = 60; + fetchingTimeout = 200; + maxViewEntries = 30; + }; + snippet = { + expand = "luasnip"; + }; + formatting = { + fields = ["kind" "abbr" "menu"]; + expandableIndicator = true; + }; + window = { + completion = { + border = "rounded"; + winhighlight = "Normal:Normal,FloatBorder:FloatBorder,CursorLine:Visual,Search:None"; + }; + documentation = { + border = "rounded"; + }; + }; + sources = [ + { + name = "nvim_lsp"; # lsp + } + { + name = "buffer"; # text within current buffer + option.get_bufnrs.__raw = "vim.api.nvim_list_bufs"; + keywordLength = 3; + } + { + name = "path"; # file system paths + keywordLength = 3; + } + { + name = "luasnip"; # snippets + keywordLength = 3; + } + ]; + + mapping = { + "" = { + modes = ["i" "s"]; + action = '' + function(fallback) + if cmp.visible() then + cmp.select_next_item() + elseif luasnip.expand_or_jumpable() then + luasnip.expand_or_jump() + else + fallback() + end + end + ''; + }; + "" = { + modes = ["i" "s"]; + action = '' + function(fallback) + if cmp.visible() then + cmp.select_prev_item() + elseif luasnip.jumpable(-1) then + luasnip.jump(-1) + else + fallback() + end + end + ''; + }; + "" = { + action = "cmp.mapping.select_next_item()"; + }; + "" = { + action = "cmp.mapping.select_prev_item()"; + }; + "" = { + action = "cmp.mapping.abort()"; + }; + "" = { + action = "cmp.mapping.scroll_docs(-4)"; + }; + "" = { + action = "cmp.mapping.scroll_docs(4)"; + }; + "" = { + action = "cmp.mapping.complete()"; + }; + "" = { + action = "cmp.mapping.confirm({ select = true })"; + }; + "" = { + action = "cmp.mapping.confirm({ behavior = cmp.ConfirmBehavior.Replace, 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 = false;}; # autocomplete for cmdline + }; + 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({'/', "?" }, { + sources = { + { name = 'buffer' } + } + }) + + -- Set configuration for specific filetype. + cmp.setup.filetype('gitcommit', { + sources = cmp.config.sources({ + { name = 'cmp_git' }, -- You can specify the `cmp_git` source if you were installed it. + }, { + { name = 'buffer' }, + }) + }) + + -- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore). + cmp.setup.cmdline(':', { + sources = cmp.config.sources({ + { name = 'path' } + }, { + { name = 'cmdline' } + }), + }) ''; +} + diff --git a/config/default.nix b/config/default.nix index cdf7493..39143a8 100644 --- a/config/default.nix +++ b/config/default.nix @@ -6,6 +6,8 @@ ./colorschemes/catppuccin.nix ./colorschemes/rose-pine.nix + ./completion/cmp.nix + ./sets.nix ./dap/dap.nix ./keymaps.nix