From 81d8ac0e842f65e87157c752460f7553f79d8843 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Av=C3=A9?= Date: Fri, 20 Dec 2024 01:45:54 +0100 Subject: [PATCH] Add blink.cmp --- flake.lock | 4 +- home/nvim/files/lua/plugins/blink.lua | 172 +++++++++++++ home/nvim/files/lua/plugins/catppuccin.lua | 1 + home/nvim/files/lua/plugins/nvim-cmp.lua | 284 --------------------- 4 files changed, 175 insertions(+), 286 deletions(-) create mode 100644 home/nvim/files/lua/plugins/blink.lua delete mode 100644 home/nvim/files/lua/plugins/nvim-cmp.lua diff --git a/flake.lock b/flake.lock index f53478f..f5370a3 100644 --- a/flake.lock +++ b/flake.lock @@ -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" } }, diff --git a/home/nvim/files/lua/plugins/blink.lua b/home/nvim/files/lua/plugins/blink.lua new file mode 100644 index 0000000..b76915d --- /dev/null +++ b/home/nvim/files/lua/plugins/blink.lua @@ -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 = { + {"n", vim.diagnostic.goto_next}, + {"p", vim.diagnostic.goto_prev}, + {"f", vim.lsp.buf.code_action}, + {"gd", vim.lsp.buf.definition}, + {"gr", vim.lsp.buf.references}, + {"", vim.lsp.buf.hover}, + {"rn", vim.lsp.buf.rename}, + }, + opts = { + keymap = { + [''] = { 'accept', 'fallback' }, + [''] = { 'select_next', 'snippet_forward', 'fallback' }, + [''] = { 'snippet_backward', 'fallback' }, + [''] = { 'select_prev', 'fallback' }, + [''] = { 'select_next', 'fallback' }, + [''] = { 'select_prev', 'fallback' }, + [''] = { 'select_next', 'fallback' }, + [''] = { 'scroll_documentation_up', 'fallback' }, + [''] = { '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 +} diff --git a/home/nvim/files/lua/plugins/catppuccin.lua b/home/nvim/files/lua/plugins/catppuccin.lua index 7e0e040..5a62f4a 100644 --- a/home/nvim/files/lua/plugins/catppuccin.lua +++ b/home/nvim/files/lua/plugins/catppuccin.lua @@ -6,6 +6,7 @@ return { integrations = { mason = true, lsp_trouble = true, + blink_cmp = true, }, custom_highlights = function(colors) return { diff --git a/home/nvim/files/lua/plugins/nvim-cmp.lua b/home/nvim/files/lua/plugins/nvim-cmp.lua deleted file mode 100644 index d542970..0000000 --- a/home/nvim/files/lua/plugins/nvim-cmp.lua +++ /dev/null @@ -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 = { - [''] = 'expand_or_advance', - [''] = 'previous', - }, - }, - }}, - }, - keys = { - {"n", vim.diagnostic.goto_next}, - {"p", vim.diagnostic.goto_prev}, - {"f", vim.lsp.buf.code_action}, - {"gd", vim.lsp.buf.definition}, - {"gr", vim.lsp.buf.references}, - {"", vim.lsp.buf.hover}, - {"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({ - [''] = cmp.mapping.confirm({ select = false }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items. - [""] = cmp.mapping(select_next, { "i", "s" }), - [""] = cmp.mapping(select_next, { "i", "s" }), - [""] = cmp.mapping(select_previous, { "i", "s" }), - [""] = 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, -}