Add blink.cmp

This commit is contained in:
Thomas Avé 2024-12-20 01:45:54 +01:00
parent bb57aa3e1d
commit 81d8ac0e84
4 changed files with 175 additions and 286 deletions

View File

@ -8,11 +8,11 @@
"locked": {
"lastModified": 1,
"narHash": "sha256-DuhR3y0gPZG0AJ2FDd+nUKzQMwT+c/DFIUWNDQ5Uyx4=",
"path": "/nix/store/mrbllpbisbzxmncrp9qm07vmmcwyqlbk-source/home/ags",
"path": "/nix/store/kiva355rzlqaqhs56h8klkcggdg0wivf-source/home/ags",
"type": "path"
},
"original": {
"path": "/nix/store/mrbllpbisbzxmncrp9qm07vmmcwyqlbk-source/home/ags",
"path": "/nix/store/kiva355rzlqaqhs56h8klkcggdg0wivf-source/home/ags",
"type": "path"
}
},

View File

@ -0,0 +1,172 @@
return {
'saghen/blink.cmp',
dependencies = {
'rafamadriz/friendly-snippets',
'honza/vim-snippets',
'neovim/nvim-lspconfig',
'williamboman/mason-lspconfig.nvim',
},
build = 'nix run .#build-plugin',
keys = {
{"<leader>n", vim.diagnostic.goto_next},
{"<leader>p", vim.diagnostic.goto_prev},
{"<leader>f", vim.lsp.buf.code_action},
{"gd", vim.lsp.buf.definition},
{"gr", vim.lsp.buf.references},
{"<space><space>", vim.lsp.buf.hover},
{"<leader>rn", vim.lsp.buf.rename},
},
opts = {
keymap = {
['<CR>'] = { 'accept', 'fallback' },
['<Tab>'] = { 'select_next', 'snippet_forward', 'fallback' },
['<S-Tab>'] = { 'snippet_backward', 'fallback' },
['<Up>'] = { 'select_prev', 'fallback' },
['<Down>'] = { 'select_next', 'fallback' },
['<C-k>'] = { 'select_prev', 'fallback' },
['<C-j>'] = { 'select_next', 'fallback' },
['<C-S-k>'] = { 'scroll_documentation_up', 'fallback' },
['<C-S-j>'] = { 'scroll_documentation_down', 'fallback' },
},
appearance = {
nerd_font_variant = 'mono'
},
sources = {
default = { 'lsp', 'path', 'snippets', 'buffer' },
providers = {
lsp = {
async = true,
timeout_ms = 0,
}
}
},
completion = {
menu = {
min_width = 25,
},
documentation = {
auto_show = true,
auto_show_delay_ms = 0,
},
list = {
selection = 'auto_insert',
}
},
-- experimental signature help support
signature = { enabled = true }
},
lazy = false,
config = function(_, opts)
require('blink.cmp').setup(opts)
local lspconfig = require('lspconfig')
local filetypes = { "bibtex", "gitcommit", "markdown", "org", "tex", "restructuredtext", "rsweave", "latex", "quarto", "rmd", "context", "html", "xhtml", "typst", "mail" }
local lsp_opts = {
servers = {
basedpyright = {
settings = {
basedpyright = {
analysis = {
typeCheckingMode = "basic",
autoImportCompletions = true
}
}
}
},
emmet_ls = {
filetypes = { "css", "eruby", "html", "javascript", "javascriptreact", "less", "sass", "scss", "svelte", "pug", "typescriptreact", "vue" },
init_options = {
html = {
options = {
["bem.enabled"] = true,
},
},
}
},
clangd = {
cmd = {
"clangd",
"--background-index",
"--clang-tidy",
"-j=8",
"--clang-tidy-checks=*",
"--all-scopes-completion",
"--completion-style=bundled",
"--cross-file-rename",
"--completion-style=detailed",
"--header-insertion-decorators",
"--header-insertion=iwyu",
"--pch-storage=memory"
}
},
tinymist = {
offset_encoding = "utf-8",
},
lua_ls = {
settings = {
Lua = {
runtime = {
-- Tell the language server which version of Lua you're using (most likely LuaJIT in the case of Neovim)
version = 'LuaJIT',
},
diagnostics = {
-- Get the language server to recognize the `vim` global
globals = {'vim', 'use', 'awesome', 'client', 'root'},
},
workspace = {
-- Make the server aware of Neovim runtime files
library = {
['/usr/share/nvim/runtime/lua'] = true,
['/usr/share/nvim/runtime/lua/lsp'] = true,
['/usr/share/awesome/lib'] = true
}
},
-- Do not send telemetry data containing a randomized but unique identifier
telemetry = {
enable = false,
},
},
},
},
ltex = {
on_attach = function(_, _)
require("ltex_extra").setup{
load_langs = {"nl-BE", "en-US", "en-GB"},
init_check = true,
}
end,
settings = {
ltex = {
enabled = filetypes,
language = "en-GB"
},
},
filetypes = filetypes
},
texlab = {},
nixd = {},
bashls = {},
csharp_ls = {},
cmake = {},
jsonls = {},
kotlin_language_server = {},
dockerls = {},
vimls = {},
html = {},
yamlls = {},
cssls = {},
jdtls = {},
rust_analyzer = {},
gopls = {},
ruff = {},
}
}
for server, config in pairs(lsp_opts.servers) do
config.capabilities = require('blink.cmp').get_lsp_capabilities(config.capabilities)
lspconfig[server].setup(config)
end
vim.diagnostic.config({
virtual_text = false
})
vim.cmd("autocmd CursorHold,CursorHoldI * lua vim.diagnostic.open_float(nil, {focus=false})")
end
}

View File

@ -6,6 +6,7 @@ return {
integrations = {
mason = true,
lsp_trouble = true,
blink_cmp = true,
},
custom_highlights = function(colors)
return {

View File

@ -1,284 +0,0 @@
local function select_next(fallback)
if require("cmp").visible() then
if require'snippy'.can_expand_or_advance() then
require("cmp").select_next_item({ behavior = require("cmp").SelectBehavior.Select })
else
require("cmp").select_next_item({ behavior = require("cmp").SelectBehavior.Insert })
end
elseif require'snippy'.can_expand_or_advance() then
require'snippy'.expand_or_advance()
else
fallback()
end
end
local function select_previous(fallback)
if require("cmp").visible() then
if require'snippy'.can_expand_or_advance() then
require("cmp").select_prev_item({ behavior = require("cmp").SelectBehavior.Select })
else
require("cmp").select_prev_item({ behavior = require("cmp").SelectBehavior.Insert })
end
elseif require'snippy'.can_jump(-1) then
require'snippy'.previous()
else
fallback()
end
end
return {
"hrsh7th/nvim-cmp",
dependencies = {
'hrsh7th/cmp-buffer',
'hrsh7th/cmp-cmdline',
'hrsh7th/cmp-nvim-lsp',
'hrsh7th/cmp-path',
'honza/vim-snippets',
'dcampos/cmp-snippy',
'neovim/nvim-lspconfig',
'williamboman/mason-lspconfig.nvim',
{'dcampos/nvim-snippy', opts = {
mappings = {
is = {
['<leader><Tab>'] = 'expand_or_advance',
['<leader><S-Tab>'] = 'previous',
},
},
}},
},
keys = {
{"<leader>n", vim.diagnostic.goto_next},
{"<leader>p", vim.diagnostic.goto_prev},
{"<leader>f", vim.lsp.buf.code_action},
{"gd", vim.lsp.buf.definition},
{"gr", vim.lsp.buf.references},
{"<space><space>", vim.lsp.buf.hover},
{"<leader>rn", vim.lsp.buf.rename},
},
lazy = false,
config = function ()
local cmp = require("cmp")
cmp.setup({
snippet = { expand = function(args) require('snippy').expand_snippet(args.body) end },
window = {
completion = cmp.config.window.bordered(),
documentation = cmp.config.window.bordered(),
},
mapping = cmp.mapping.preset.insert({
['<CR>'] = cmp.mapping.confirm({ select = false }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items.
["<Tab>"] = cmp.mapping(select_next, { "i", "s" }),
["<C-J>"] = cmp.mapping(select_next, { "i", "s" }),
["<S-Tab>"] = cmp.mapping(select_previous, { "i", "s" }),
["<C-K>"] = cmp.mapping(select_previous, { "i", "s" }),
}),
sources = cmp.config.sources({ { name = 'nvim_lsp' }, { name = 'path' }, { name = 'snippy' }, }, { { 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 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' }
})
})
local cmp_completion = require('nvim-autopairs.completion.cmp')
cmp.event:on('confirm_done',cmp_completion.on_confirm_done())
-- Setup lspconfig.
local capabilities = require('cmp_nvim_lsp').default_capabilities(vim.lsp.protocol.make_client_capabilities())
require('lspconfig').basedpyright.setup {
capabilities = capabilities,
settings = {
basedpyright = {
analysis = {
typeCheckingMode = "basic",
autoImportCompletions = true
}
}
}
}
require('lspconfig').texlab.setup {
capabilities = capabilities
}
require('lspconfig').nixd.setup {
capabilities = capabilities
}
require('lspconfig').clangd.setup {
capabilities = capabilities,
-- root_dir = function()
-- return require('lspconfig').util.root_pattern({'.clang-format', 'build/', 'compile_flags.txt'})
-- end,
cmd = {
"clangd",
"--background-index",
"--clang-tidy",
"-j=8",
"--clang-tidy-checks=*",
"--all-scopes-completion",
"--completion-style=bundled",
"--cross-file-rename",
"--completion-style=detailed",
"--header-insertion-decorators",
"--header-insertion=iwyu",
"--pch-storage=memory"
}
}
require('lspconfig').bashls.setup {
capabilities = capabilities
}
require('lspconfig').csharp_ls.setup {
capabilities = capabilities
}
require('lspconfig').tinymist.setup {
capabilities = capabilities,
offset_encoding = "utf-8",
}
require('lspconfig').cmake.setup {
capabilities = capabilities
}
require('lspconfig').jsonls.setup {
capabilities = capabilities
}
require('lspconfig').ts_ls.setup {
capabilities = capabilities
}
require('lspconfig').kotlin_language_server.setup {
capabilities = capabilities
}
require('lspconfig').vuels.setup {
capabilities = capabilities
}
require('lspconfig').dockerls.setup {
capabilities = capabilities
}
require('lspconfig').vimls.setup {
capabilities = capabilities
}
require('lspconfig').html.setup {
capabilities = capabilities
}
require('lspconfig').emmet_ls.setup({
capabilities = capabilities,
filetypes = { "css", "eruby", "html", "javascript", "javascriptreact", "less", "sass", "scss", "svelte", "pug", "typescriptreact", "vue" },
init_options = {
html = {
options = {
["bem.enabled"] = true,
},
},
}
})
require('lspconfig').yamlls.setup {
capabilities = capabilities
}
require('lspconfig').cssls.setup {
capabilities = capabilities
}
require('lspconfig').jdtls.setup {
capabilities = capabilities
}
require('lspconfig').rust_analyzer.setup {
capabilities = capabilities,
}
require('lspconfig').gopls.setup {
capabilities = capabilities
}
require('lspconfig').ruff.setup {
capabilities = capabilities
}
require('lspconfig').lua_ls.setup {
settings = {
Lua = {
runtime = {
-- Tell the language server which version of Lua you're using (most likely LuaJIT in the case of Neovim)
version = 'LuaJIT',
},
diagnostics = {
-- Get the language server to recognize the `vim` global
globals = {'vim', 'use', 'awesome', 'client', 'root'},
},
workspace = {
-- Make the server aware of Neovim runtime files
library = {
['/usr/share/nvim/runtime/lua'] = true,
['/usr/share/nvim/runtime/lua/lsp'] = true,
['/usr/share/awesome/lib'] = true
}
},
-- Do not send telemetry data containing a randomized but unique identifier
telemetry = {
enable = false,
},
},
},
}
local filetypes = { "bibtex", "gitcommit", "markdown", "org", "tex", "restructuredtext", "rsweave", "latex", "quarto", "rmd", "context", "html", "xhtml", "typst", "mail" }
require('lspconfig').ltex.setup {
capabilities = capabilities,
on_attach = function(_, _)
require("ltex_extra").setup{
load_langs = {"nl-BE", "en-US", "en-GB"},
init_check = true,
}
end,
settings = {
ltex = {
enabled = filetypes,
language = "en-GB"
},
},
filetypes = filetypes
}
vim.diagnostic.config({
virtual_text = false
})
-- Show line diagnostics automatically in hover window
vim.cmd("autocmd CursorHold,CursorHoldI * lua vim.diagnostic.open_float(nil, {focus=false})")
end,
}