From c1be56ea1a8bb17674bdf46c895c196c80de32c8 Mon Sep 17 00:00:00 2001 From: caandt Date: Fri, 24 Jan 2025 13:13:42 -0600 Subject: [PATCH] nvim --- user/config/nvim/default.nix | 3 +- user/config/nvim/lua/u/lsp.lua | 50 +++++++++++++++++++++++++++++- user/config/nvim/lua/u/options.lua | 15 ++++++++- 3 files changed, 65 insertions(+), 3 deletions(-) diff --git a/user/config/nvim/default.nix b/user/config/nvim/default.nix index c5b685d..61b4461 100644 --- a/user/config/nvim/default.nix +++ b/user/config/nvim/default.nix @@ -20,9 +20,10 @@ vim-sleuth catppuccin-nvim tokyonight-nvim + gitsigns-nvim ]; extraPackages = with pkgs; [ - basedpyright + python3Packages.jedi-language-server clang-tools nixd ]; diff --git a/user/config/nvim/lua/u/lsp.lua b/user/config/nvim/lua/u/lsp.lua index 7f02735..c003dea 100644 --- a/user/config/nvim/lua/u/lsp.lua +++ b/user/config/nvim/lua/u/lsp.lua @@ -2,6 +2,54 @@ local lspconfig = require('lspconfig') local capabilities = vim.lsp.protocol.make_client_capabilities() capabilities = vim.tbl_deep_extend('force', capabilities, require('cmp_nvim_lsp').default_capabilities()) +vim.api.nvim_create_autocmd('LspAttach', { + group = vim.api.nvim_create_augroup('u-lsp-attach', { clear = true }), + callback = function(event) + local map = function(keys, func, desc, mode) + mode = mode or 'n' + vim.keymap.set(mode, keys, func, { buffer = event.buf, desc = 'LSP: ' .. desc }) + end + + map('gd', require('telescope.builtin').lsp_definitions, '[G]oto [D]efinition') + map('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences') + map('gI', require('telescope.builtin').lsp_implementations, '[G]oto [I]mplementation') + map('D', require('telescope.builtin').lsp_type_definitions, 'Type [D]efinition') + map('ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols') + map('ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols') + map('rn', vim.lsp.buf.rename, '[R]e[n]ame') + map('ca', vim.lsp.buf.code_action, '[C]ode [A]ction', { 'n', 'x' }) + map('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration') + + local client = vim.lsp.get_client_by_id(event.data.client_id) + if client and client.supports_method(vim.lsp.protocol.Methods.textDocument_documentHighlight) then + local highlight_augroup = vim.api.nvim_create_augroup('u-lsp-highlight', { clear = false }) + vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, { + buffer = event.buf, + group = highlight_augroup, + callback = vim.lsp.buf.document_highlight, + }) + vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, { + buffer = event.buf, + group = highlight_augroup, + callback = vim.lsp.buf.clear_references, + }) + vim.api.nvim_create_autocmd('LspDetach', { + group = vim.api.nvim_create_augroup('u-lsp-detach', { clear = true }), + callback = function(event2) + vim.lsp.buf.clear_references() + vim.api.nvim_clear_autocmds { group = 'u-lsp-highlight', buffer = event2.buf } + end, + }) + end + + if client and client.supports_method(vim.lsp.protocol.Methods.textDocument_inlayHint) then + map('th', function() + vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled { bufnr = event.buf }) + end, '[T]oggle Inlay [H]ints') + end + end, +}) + lspconfig.clangd.setup({ cmd = { "clangd", @@ -13,5 +61,5 @@ lspconfig.clangd.setup({ }, capabilities=capabilities }) -lspconfig.basedpyright.setup{} +lspconfig.jedi_language_server.setup{} lspconfig.nixd.setup{} diff --git a/user/config/nvim/lua/u/options.lua b/user/config/nvim/lua/u/options.lua index dd480ad..a2e0ea6 100644 --- a/user/config/nvim/lua/u/options.lua +++ b/user/config/nvim/lua/u/options.lua @@ -45,7 +45,7 @@ vim.opt.scrolloff = 8 vim.api.nvim_create_autocmd('TextYankPost', { desc = 'Highlight when yanking (copying) text', - group = vim.api.nvim_create_augroup('highlight-yank', { clear = true }), + group = vim.api.nvim_create_augroup('u-highlight-yank', { clear = true }), callback = function() vim.highlight.on_yank() end, @@ -57,3 +57,16 @@ statusline.section_location = function() return '%2l:%-2v' end vim.cmd.colorscheme 'tokyonight-storm' + +require('gitsigns').setup({ + signs = { + add = { text = '+' }, + change = { text = '*' }, + }, +}) + +require('nvim-treesitter.configs').setup({ + highlight = { + enable = true + } +})