From 4fe7e2a26a6fa26d150aba711bdf5c03b117c276 Mon Sep 17 00:00:00 2001 From: Spencer Gilbert Date: Mon, 24 Aug 2026 23:33:19 -0400 Subject: [PATCH] [nvim] Add leader key, telescope, treesitter, diagnostics, and LSP defaults --- nvim/init.lua | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 62 insertions(+), 1 deletion(-) diff --git a/nvim/init.lua b/nvim/init.lua index c1e9956..3702826 100644 --- a/nvim/init.lua +++ b/nvim/init.lua @@ -1,10 +1,23 @@ -vim.pack.add { { src = 'https://github.com/catppuccin/nvim', name = 'catppuccin' } } +-- Leader key must be set before plugins load +vim.g.mapleader = ' ' +vim.g.maplocalleader = ' ' + +-- Plugins managed by vim.pack (installed to $XDG_DATA_HOME/nvim/site/pack/core/opt) +vim.pack.add { + { src = 'https://github.com/catppuccin/nvim', name = 'catppuccin' }, + { src = 'https://github.com/nvim-treesitter/nvim-treesitter', name = 'nvim-treesitter' }, + { src = 'https://github.com/nvim-telescope/telescope.nvim', name = 'telescope' }, + { src = 'https://github.com/nvim-telescope/telescope-fzf-native.nvim', name = 'telescope-fzf-native' }, +} -- Custom filetype detection require('filetypes.helm') +-- Colorscheme (must load after plugins that define highlight groups) vim.cmd.colorscheme('catppuccin-frappe') +-- OPTIONS + vim.o.number = true vim.o.relativenumber = true @@ -34,6 +47,11 @@ vim.o.listchars = 'tab:>· ,trail:·,extends:>,precedes:<,nbsp:+,eol:$' -- See `:h 'confirm'` vim.o.confirm = true +-- Completion options for LSP completion menus +vim.o.completeopt = 'menuone,noselect,popup' + +-- KEYMAPS + -- Use to exit terminal mode vim.keymap.set('t', '', '') @@ -47,6 +65,14 @@ vim.keymap.set({ 'n' }, '', 'j') vim.keymap.set({ 'n' }, '', 'k') vim.keymap.set({ 'n' }, '', 'l') +-- Telescope keybindings +local builtin = require('telescope.builtin') +vim.keymap.set('n', 'ff', builtin.find_files, { desc = 'Find files' }) +vim.keymap.set('n', 'fg', builtin.live_grep, { desc = 'Live grep' }) +vim.keymap.set('n', 'fb', builtin.buffers, { desc = 'Buffers' }) +vim.keymap.set('n', 'fh', builtin.help_tags, { desc = 'Help tags' }) +vim.keymap.set('n', 'fk', builtin.keymaps, { desc = 'Keymaps' }) + -- Highlight when yanking (copying) text. Try `yap` in normal mode to test. -- See `:h vim.hl.on_yank()` local highlight_group = vim.api.nvim_create_augroup('highlight', { clear = true }) @@ -72,5 +98,40 @@ vim.api.nvim_create_autocmd('FileType', { end, }) +-- LSP: diagnostics display with virtual text and inline signs +vim.diagnostic.config({ + signs = { text = { [vim.diagnostic.severity.ERROR] = '✗' } }, + virtual_text = true, + underline = true, + update_in_insert = true, + float = { border = 'single', source = 'if_many' }, +}) + +-- LSP: disable the built-in global keymaps (gra, gri, grn, grr, grt) +-- so they don't conflict with normal usage +vim.keymap.del('n', 'gra') +vim.keymap.del('n', 'gri') +vim.keymap.del('n', 'grn') +vim.keymap.del('n', 'grr') +vim.keymap.del('n', 'grt') +vim.keymap.del('n', 'gO') + +-- LSP: LspAttach handler — set up per-buffer keymaps when LSP attaches +local lsp_group = vim.api.nvim_create_augroup('lsp', { clear = true }) +vim.api.nvim_create_autocmd('LspAttach', { + group = lsp_group, + desc = 'Set up LSP keymaps on attach', + callback = function(ev) + local client = vim.lsp.get_client_by_id(ev.data.client_id) + if not client then return end + + local opts = { buffer = ev.buf, desc = 'vim.lsp: ' .. client.name } + + vim.keymap.set('n', 'grn', function() vim.lsp.buf.rename(opts) end, opts) + vim.keymap.set({ 'n', 'v' }, 'gra', function() vim.lsp.buf.code_action(opts) end, opts) + vim.keymap.set('n', 'K', function() vim.lsp.buf.hover(opts) end, opts) + end, +}) + -- Enable language servers (loaded from lua/lsp/.lua) vim.lsp.enable({ 'gopls', 'helm_ls', 'yaml_language_server' }) -- 2.51.2