From 5877dab5420d26d17e1dce3ba1fcee98e8284be8 Mon Sep 17 00:00:00 2001 From: Noa Aarts Date: Sat, 16 Mar 2024 17:28:00 +0100 Subject: [PATCH] fix config --- common/nvim/lsp_autocmd.lua | 102 ++++++++++++++--------------- common/nvim/nvim.nix | 124 +++++++++++++++++++++++++----------- 2 files changed, 139 insertions(+), 87 deletions(-) diff --git a/common/nvim/lsp_autocmd.lua b/common/nvim/lsp_autocmd.lua index abd777f..c251be7 100644 --- a/common/nvim/lsp_autocmd.lua +++ b/common/nvim/lsp_autocmd.lua @@ -9,66 +9,66 @@ function(event) vim.keymap.set("n", keys, func, { buffer = event.buf, desc = "LSP: " .. desc }) end --- Jump to the definition of the word under your cursor. --- This is where a variable was first declared, or where a function is defined, etc. --- To jump back, press . -map("gd", require("telescope.builtin").lsp_definitions, "[G]oto [D]efinition") + -- Jump to the definition of the word under your cursor. + -- This is where a variable was first declared, or where a function is defined, etc. + -- To jump back, press . + map("gd", require("telescope.builtin").lsp_definitions, "[G]oto [D]efinition") --- Find references for the word under your cursor. -map("gr", require("telescope.builtin").lsp_references, "[G]oto [R]eferences") + -- Find references for the word under your cursor. + map("gr", require("telescope.builtin").lsp_references, "[G]oto [R]eferences") --- Jump to the implementation of the word under your cursor. --- Useful when your language has ways of declaring types without an actual implementation. -map("gI", require("telescope.builtin").lsp_implementations, "[G]oto [I]mplementation") + -- Jump to the implementation of the word under your cursor. + -- Useful when your language has ways of declaring types without an actual implementation. + map("gI", require("telescope.builtin").lsp_implementations, "[G]oto [I]mplementation") --- Jump to the type of the word under your cursor. --- Useful when you're not sure what type a variable is and you want to see --- the definition of its *type*, not where it was *defined*. -map("D", require("telescope.builtin").lsp_type_definitions, "Type [D]efinition") + -- Jump to the type of the word under your cursor. + -- Useful when you're not sure what type a variable is and you want to see + -- the definition of its *type*, not where it was *defined*. + map("D", require("telescope.builtin").lsp_type_definitions, "Type [D]efinition") --- Fuzzy find all the symbols in your current document. --- Symbols are things like variables, functions, types, etc. -map("ds", require("telescope.builtin").lsp_document_symbols, "[D]ocument [S]ymbols") + -- Fuzzy find all the symbols in your current document. + -- Symbols are things like variables, functions, types, etc. + map("ds", require("telescope.builtin").lsp_document_symbols, "[D]ocument [S]ymbols") --- Fuzzy find all the symbols in your current workspace --- Similar to document symbols, except searches over your whole project. -map( - "ws", - require("telescope.builtin").lsp_dynamic_workspace_symbols, - "[W]orkspace [S]ymbols" -) + -- Fuzzy find all the symbols in your current workspace + -- Similar to document symbols, except searches over your whole project. + map( + "ws", + require("telescope.builtin").lsp_dynamic_workspace_symbols, + "[W]orkspace [S]ymbols" + ) --- Rename the variable under your cursor --- Most Language Servers support renaming across files, etc. -map("rn", vim.lsp.buf.rename, "[R]e[n]ame") + -- Rename the variable under your cursor + -- Most Language Servers support renaming across files, etc. + map("rn", vim.lsp.buf.rename, "[R]e[n]ame") --- Execute a code action, usually your cursor needs to be on top of an error --- or a suggestion from your LSP for this to activate. -map("ca", vim.lsp.buf.code_action, "[C]ode [A]ction") + -- Execute a code action, usually your cursor needs to be on top of an error + -- or a suggestion from your LSP for this to activate. + map("ca", vim.lsp.buf.code_action, "[C]ode [A]ction") --- Opens a popup that displays documentation about the word under your cursor --- See `:help K` for why this keymap -map("K", vim.lsp.buf.hover, "Hover Documentation") + -- Opens a popup that displays documentation about the word under your cursor + -- See `:help K` for why this keymap + map("K", vim.lsp.buf.hover, "Hover Documentation") --- WARN: This is not Goto Definition, this is Goto Declaration. --- For example, in C this would take you to the header -map("gD", vim.lsp.buf.declaration, "[G]oto [D]eclaration") + -- WARN: This is not Goto Definition, this is Goto Declaration. + -- For example, in C this would take you to the header + map("gD", vim.lsp.buf.declaration, "[G]oto [D]eclaration") --- The following two autocommands are used to highlight references of the --- word under your cursor when your cursor rests there for a little while. --- See `:help CursorHold` for information about when this is executed --- --- When you move your cursor, the highlights will be cleared (the second autocommand). -local client = vim.lsp.get_client_by_id(event.data.client_id) -if client and client.server_capabilities.documentHighlightProvider then - vim.api.nvim_create_autocmd({ "CursorHold", "CursorHoldI" }, { - buffer = event.buf, - callback = vim.lsp.buf.document_highlight, - }) + -- The following two autocommands are used to highlight references of the + -- word under your cursor when your cursor rests there for a little while. + -- See `:help CursorHold` for information about when this is executed + -- + -- When you move your cursor, the highlights will be cleared (the second autocommand). + local client = vim.lsp.get_client_by_id(event.data.client_id) + if client and client.server_capabilities.documentHighlightProvider then + vim.api.nvim_create_autocmd({ "CursorHold", "CursorHoldI" }, { + buffer = event.buf, + callback = vim.lsp.buf.document_highlight, + }) - vim.api.nvim_create_autocmd({ "CursorMoved", "CursorMovedI" }, { - buffer = event.buf, - callback = vim.lsp.buf.clear_references, - }) -end + vim.api.nvim_create_autocmd({ "CursorMoved", "CursorMovedI" }, { + buffer = event.buf, + callback = vim.lsp.buf.clear_references, + }) + end end diff --git a/common/nvim/nvim.nix b/common/nvim/nvim.nix index 213375c..c46e9de 100644 --- a/common/nvim/nvim.nix +++ b/common/nvim/nvim.nix @@ -5,18 +5,6 @@ # needed for the nvim config, neovim itself is a system package already ripgrep ]; - # programs.neovim = { - # enable = true; - # defaultEditor = true; - # - # viAlias = true; - # vimAlias = true; - # vimdiffAlias = true; - # - # extraLuaConfig = '' - # ${builtins.readFile ./init.lua} - # ''; - # }; programs.nixvim = { enable = true; defaultEditor = true; @@ -59,31 +47,29 @@ foldmethod = "expr"; foldexpr = "nvim_treesitter#foldexpr()"; - autoGroups = { - "kickstart-highlight-yank" = { clear = true; }; - "kickstart-lsp-attach" = {clear = true; }; - }; + }; + autoGroups = { + "kickstart-highlight-yank" = { clear = true; }; + }; - autoCmd = [ - { - event = "TextYankPost"; - group = "kickstart-highlight-yank"; - callback = ''function() vim.highlight.on_yank() end''; - } - { - event = "LspAttach"; - group = "kickstart-lsp-attach"; - callback = builtins.readFile ./lsp_autocmd.lua; - } - ]; + autoCmd = [ + { + event = "TextYankPost"; + group = "kickstart-highlight-yank"; + command = ''lua vim.highlight.on_yank()''; + } + { + event = ["BufReadPost" "FileReadPost"]; + command = "normal zR"; + } + ]; + + filetype.extension = { + templ = "templ"; }; keymaps = [ { mode = "n"; key = ""; action = "nohlsearch";} - { mode = "n"; key = "[d"; lua = true; action = "vim.diagnostic.goto_prev"; options.desc = "Go to previous [D]iagnostic message" ;} - { mode = "n"; key = "]d"; lua = true; action = "vim.diagnostic.goto_next"; options.desc = "Go to next [D]iagnostic message" ;} - { mode = "n"; key = "e"; lua = true; action = "vim.diagnostic.open_float"; options.desc = "Show diagnostic [E]rror messages" ;} - { mode = "n"; key = "q"; lua = true; action = "vim.diagnostic.setloclist"; options.desc = "Open diagnostic [Q]uickfix list" ;} { mode = "t"; key = ""; action = ""; options.desc = "Exit terminal mode" ;} { mode = "n"; key = ""; action = ""; options.desc = "Move focus to the left window" ;} { mode = "n"; key = ""; action = ""; options.desc = "Move focus to the right window" ;} @@ -130,10 +116,7 @@ ui-select.enable = true; }; keymaps = { - "sh" = { - action = "help_tags"; - desc = "[S]earch [H]elp"; - }; + "sh" = { action = "help_tags"; desc = "[S]earch [H]elp"; }; "sk" = { action = "keymaps"; desc = "[S]earch [K]eymaps"; }; "sf" = { action = "find_files"; desc = "[S]earch [F]iles"; }; "ss" = { action = "builtin"; desc = "[S]earch [S]elect Telescope"; }; @@ -179,11 +162,80 @@ indent = true; folding = true; nixvimInjections = true; + ignoreInstall = [ + "comment" + ]; }; treesitter-context = { enable = true; maxLines = 8; }; + lsp = { + enable = true; + # TODO: use onAttach instead of the autocmd + onAttach = '' + local map = function(keys, func, desc) + vim.keymap.set("n", 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" + ) + local client = vim.lsp.get_client_by_id(event.data.client_id) + if client and client.server_capabilities.documentHighlightProvider then + vim.api.nvim_create_autocmd({ "CursorHold", "CursorHoldI" }, { + buffer = event.buf, + callback = vim.lsp.buf.document_highlight, + }) + vim.api.nvim_create_autocmd({ "CursorMoved", "CursorMovedI" }, { + buffer = event.buf, + callback = vim.lsp.buf.clear_references, + }) + end + ''; + # NOTE: there can also be keymaps for lsp apparently + + keymaps = { + diagnostic = { + "[d" = "goto_prev"; + "]d" = "goto_next"; + "e" = "open_float"; + "q" = "setloclist"; + }; + lspBuf = { + "K" = "hover"; + "rn" = "rename"; + "ca" = "code_action"; + "gD" = "declaration"; + }; + }; + +# { mode = "n"; key = "[d"; lua = true; action = "vim.diagnostic.goto_prev"; options.desc = "Go to previous [D]iagnostic message" ;} +# { mode = "n"; key = "]d"; lua = true; action = "vim.diagnostic.goto_next"; options.desc = "Go to next [D]iagnostic message" ;} +# { mode = "n"; key = "e"; lua = true; action = "vim.diagnostic.open_float"; options.desc = "Show diagnostic [E]rror messages" ;} +# { mode = "n"; key = "q"; lua = true; action = "vim.diagnostic.setloclist"; options.desc = "Open diagnostic [Q]uickfix list" ;} + servers = { + gopls.enable = true; + htmx.enable = true; + lua-ls.enable = true; + nil_ls.enable = true; + pyright.enable = true; + rust-analyzer = { + enable = true; + installRustc = false; + installCargo = false; + }; + }; + }; + lsp-format = { + enable = true; + }; }; extraPlugins = with pkgs.vimPlugins; [ vim-sleuth