From 148899497bcdf97ae98712012aa0100f7cfa47ed Mon Sep 17 00:00:00 2001 From: Leonora Tindall Date: Mon, 7 Oct 2024 07:55:51 -0500 Subject: [PATCH] Add many packages for neovim, and config for them --- rcfiles/neovim.lua | 124 +++++++++++++++++++++++++++++++++++++++++++++ vim.nix | 10 ++++ 2 files changed, 134 insertions(+) diff --git a/rcfiles/neovim.lua b/rcfiles/neovim.lua index 9844bf0..e439f01 100644 --- a/rcfiles/neovim.lua +++ b/rcfiles/neovim.lua @@ -36,6 +36,130 @@ vim.keymap.set('n', 'fb', tbuiltin.buffers, {}) vim.keymap.set('n', 'fh', tbuiltin.help_tags, {}) vim.keymap.set('n', 'fs', tbuiltin.spell_suggest, {}) +-- Mason (tool manager) setup +-- we want rust-analyzer and codelldb +require("mason").setup({ + ui = { + icons = { + package_installed = "✔️", + package_pending = "🔄", + package_uninstalled = "🌐" + } + } +}) +require("mason-lspconfig").setup() + +-- General LSP settings +-- from https://rsdlt.github.io/posts/rust-nvim-ide-guide-walkthrough-development-debug/ +local sign = function(opts) + vim.fn.sign_define(opts.name, { + texthl = opts.name, + text = opts.text, + numhl = '' + }) +end + +sign({name = 'DiagnosticSignError', text = '🛑'}) +sign({name = 'DiagnosticSignWarn', text = '⚠️'}) +sign({name = 'DiagnosticSignHint', text = '💭'}) +sign({name = 'DiagnosticSignInfo', text = '🗒️'}) + +vim.diagnostic.config({ + virtual_text = false, + signs = true, + update_in_insert = true, + underline = true, + severity_sort = false, + float = { + border = 'rounded', + source = 'always', + header = '', + prefix = '', + }, +}) + +vim.cmd([[ +set signcolumn=yes +autocmd CursorHold * lua vim.diagnostic.open_float(nil, { focusable = false }) +]]) + +-- Rust tools for Rust-specific LSP +local rt = require("rust-tools") +rt.setup({ + server = { + on_attach = function(_, bufnr) + -- ctrl + space for hover actions + vim.keymap.set("n", "", rt.hover_actions.hover_actions, { buffer = bufnr }) + -- ,a for code actions + vim.keymap.set("n", "a", rt.code_action_group.code_action_group, { buffer = bufnr }) + end, + } +}) + +-- set up treesitter +require('nvim-treesitter.configs').setup { + auto_install = false, + ident = { enable = true }, + rainbow = { + enable = true, + extended_mode = true, + max_file_lines = nil, + } +} + +-- completion setup +local cmp = require 'cmp' +cmp.setup({ + -- Enable LSP snippets + snippet = { + expand = function(args) + vim.fn["vsnip#anonymous"](args.body) + end, + }, + mapping = { + [''] = cmp.mapping.select_prev_item(), + [''] = cmp.mapping.select_next_item(), + -- Add tab support + [''] = cmp.mapping.select_prev_item(), + [''] = cmp.mapping.select_next_item(), + [''] = cmp.mapping.scroll_docs(-4), + [''] = cmp.mapping.scroll_docs(4), + [''] = cmp.mapping.complete(), + [''] = cmp.mapping.close(), + [''] = cmp.mapping.confirm({ + behavior = cmp.ConfirmBehavior.Insert, + select = true, + }) + }, + -- Installed sources: + sources = { + { name = 'path' }, -- file paths + { name = 'nvim_lsp', keyword_length = 3 }, -- from language server + { name = 'nvim_lsp_signature_help'}, -- display function signatures with current parameter emphasized + { name = 'nvim_lua', keyword_length = 2}, -- complete neovim's Lua runtime API such vim.lsp.* + { name = 'buffer', keyword_length = 2 }, -- source current buffer + { name = 'vsnip', keyword_length = 2 }, -- nvim-cmp source for vim-vsnip + { name = 'calc'}, -- source for math calculation + }, + window = { + completion = cmp.config.window.bordered(), + documentation = cmp.config.window.bordered(), + }, + formatting = { + fields = {'menu', 'abbr', 'kind'}, + format = function(entry, item) + local menu_icon ={ + nvim_lsp = 'λ', + vsnip = '⋗', + buffer = 'Ω', + path = '🖫', + } + item.menu = menu_icon[entry.source.name] + return item + end, + }, +}) + -- set terminal title function _G.current_tab() local curr_buf = vim.fn.bufnr() diff --git a/vim.nix b/vim.nix index faff9e1..1f8ce9f 100644 --- a/vim.nix +++ b/vim.nix @@ -8,6 +8,16 @@ plugins = with pkgs.vimPlugins; [ vim-nix rust-vim + rust-tools-nvim + nvim-cmp + snippets-nvim + nvim-treesitter + nvim-treesitter-parsers.rust + nvim-treesitter-parsers.lua + nvim-treesitter-parsers.toml + mason-nvim + mason-tool-installer-nvim + mason-lspconfig-nvim fzf-vim sleuth whitespace-nvim # ,t to trim whitespace