summary refs log tree commit diff
path: root/.vim/lua/internal/plugins/blink.lua
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--.vim/lua/internal/plugins/blink.lua85
1 files changed, 85 insertions, 0 deletions
diff --git a/.vim/lua/internal/plugins/blink.lua b/.vim/lua/internal/plugins/blink.lua
new file mode 100644
index 0000000..1d0e0ae
--- /dev/null
+++ b/.vim/lua/internal/plugins/blink.lua
@@ -0,0 +1,85 @@
+return {
+  {
+    'saghen/blink.cmp',
+    version = '1.*',
+
+    lazy = false,
+
+    dependencies = {
+      {
+        'L3MON4D3/LuaSnip',
+        version = 'v2.*',
+        build = 'make install_jsregexp',
+        config = function()
+          require('internal.snippets')
+        end,
+      },
+    },
+
+    init = function()
+      vim.opt.completeopt = { 'menu', 'menuone', 'noselect' }
+      vim.opt.shortmess:append('c')
+      vim.opt.pumheight = 20 -- max height of completion window
+
+      local hl = vim.api.nvim_set_hl
+      hl(0, 'BlinkCmpSource', { link = 'Comment', force = true })
+      hl(0, 'BlinkCmpLabelDescription', { link = 'Comment', force = true })
+    end,
+
+    opts = {
+      -- TODO:
+      -- 'prefer_rust_with_warning', requires nightly rust, due to:
+      -- https://github.com/rust-lang/rust/issues/86656
+      fuzzy = { implementation = 'lua' },
+
+      appearance = {
+        -- fallback to cmp highlight names
+        use_nvim_cmp_as_default = true,
+        -- adjusts spacing to ensure icons are aligned
+        -- nerd_font_variant = 'normal',
+      },
+
+      sources = {
+        providers = {
+          buffer = { min_keyword_length = 3 },
+          snippets = { min_keyword_length = 3 },
+        },
+      },
+
+      completion = {
+        documentation = { auto_show = true },
+        menu = {
+          draw = {
+            columns = {
+              { 'kind_icon' },
+              { 'label', 'label_description', gap = 1 },
+              { 'source_name' },
+            },
+          },
+        },
+      },
+
+      signature = {
+        enabled = true,
+        window = { scrollbar = false }, -- BUG: weird artifacts
+      },
+
+      keymap = {
+        ['<C-space>'] = { 'show', 'show_documentation', 'hide_documentation' },
+        ['<C-e>'] = { 'cancel', 'fallback' },
+        ['<C-y>'] = { 'select_and_accept' },
+        ['<C-p>'] = { 'select_prev', 'fallback' },
+        ['<C-n>'] = { 'select_next', 'fallback' },
+        ['<C-b>'] = { 'scroll_documentation_up', 'fallback' },
+        ['<C-f>'] = { 'scroll_documentation_down', 'fallback' },
+        ['<Tab>'] = { 'select_and_accept', 'fallback' },
+        ['<C-j>'] = { 'snippet_forward', 'fallback' },
+        ['<C-k>'] = { 'snippet_backward', 'fallback' },
+        -- ['<C-l>'] = { 'show', 'hide', 'fallback' },
+      },
+
+      snippets = { preset = 'luasnip' },
+    },
+    opts_extend = { 'sources.default' },
+  },
+}