From 193b76b4a7cdb8566df40da1423d087710ba4b84 Mon Sep 17 00:00:00 2001 From: Martin Fischer Date: Fri, 2 Oct 2026 17:18:58 +0200 Subject: feat(workstation): set up LSP with nvim --- user/nvim/init.lua | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'user') diff --git a/user/nvim/init.lua b/user/nvim/init.lua index 282d086..a05a7f9 100644 --- a/user/nvim/init.lua +++ b/user/nvim/init.lua @@ -22,6 +22,41 @@ pick.setup({ source = { show = pick.default_show } }) -- Reuse Neovim's popup-menu selection color for mini.pick's selected item. vim.api.nvim_set_hl(0, 'MiniPickMatchCurrent', { link = 'PmenuSel' }) +-- Enable language servers when they are available (for example, from a nix shell). +local language_servers = { + { name = 'rust_analyzer', cmd = { 'rust-analyzer' } }, + { name = 'pyright', cmd = { 'pyright-langserver', '--stdio' } }, + { name = 'ts_ls', cmd = { 'typescript-language-server', '--stdio' } }, + { name = 'gopls', cmd = { 'gopls' } }, + { name = 'nixd', cmd = { 'nixd' } }, + { name = 'svelte', cmd = { 'svelteserver', '--stdio' } }, +} + +for _, server in ipairs(language_servers) do + local command = vim.fn.exepath(server.cmd[1]) + if command ~= '' then + server.cmd[1] = command + vim.lsp.config(server.name, { cmd = server.cmd }) + vim.lsp.enable(server.name) + end +end + +require('blink.cmp').setup({ + keymap = { + preset = 'default', + [''] = { 'accept', 'fallback' }, + }, + sources = { + -- Only show completion items provided by an attached LSP. This disables + -- blink.cmp's default buffer/path/snippet sources, which otherwise trigger + -- completions in plain text and Markdown files. + default = { 'lsp' }, + }, + completion = { + documentation = { auto_show = true }, + }, +}) + -- Keyboard shortcuts -- Clear search highlighting with Escape. @@ -31,6 +66,13 @@ vim.keymap.set('n', '', function() pick.builtin.files() end, { desc = 'Pick files' }) +vim.keymap.set('n', 'gd', vim.lsp.buf.definition, { + desc = 'LSP: Go to definition', +}) +vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, { + desc = 'LSP: Go to declaration', +}) + -- Disable netrw's directory browser; directory arguments are handled below with MiniPick. vim.g.loaded_netrw = 1 vim.g.loaded_netrwPlugin = 1 -- cgit v1.3.1