summary refs log tree commit diff
path: root/.vim/lua/internal/plugins/blink.lua
blob: 1d0e0aec67af60087aa0361f4a018b0467ea163d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
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' },
  },
}