fix config

This commit is contained in:
Noa Aarts 2024-03-16 17:28:00 +01:00
parent d371faf31e
commit 5877dab542
2 changed files with 139 additions and 87 deletions

View file

@ -9,66 +9,66 @@ function(event)
vim.keymap.set("n", keys, func, { buffer = event.buf, desc = "LSP: " .. desc }) vim.keymap.set("n", keys, func, { buffer = event.buf, desc = "LSP: " .. desc })
end end
-- Jump to the definition of the word under your cursor. -- 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. -- This is where a variable was first declared, or where a function is defined, etc.
-- To jump back, press <C-T>. -- To jump back, press <C-T>.
map("gd", require("telescope.builtin").lsp_definitions, "[G]oto [D]efinition") map("gd", require("telescope.builtin").lsp_definitions, "[G]oto [D]efinition")
-- Find references for the word under your cursor. -- Find references for the word under your cursor.
map("gr", require("telescope.builtin").lsp_references, "[G]oto [R]eferences") map("gr", require("telescope.builtin").lsp_references, "[G]oto [R]eferences")
-- Jump to the implementation of the word under your cursor. -- Jump to the implementation of the word under your cursor.
-- Useful when your language has ways of declaring types without an actual implementation. -- Useful when your language has ways of declaring types without an actual implementation.
map("gI", require("telescope.builtin").lsp_implementations, "[G]oto [I]mplementation") map("gI", require("telescope.builtin").lsp_implementations, "[G]oto [I]mplementation")
-- Jump to the type of the word under your cursor. -- 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 -- 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*. -- the definition of its *type*, not where it was *defined*.
map("<leader>D", require("telescope.builtin").lsp_type_definitions, "Type [D]efinition") map("<leader>D", require("telescope.builtin").lsp_type_definitions, "Type [D]efinition")
-- Fuzzy find all the symbols in your current document. -- Fuzzy find all the symbols in your current document.
-- Symbols are things like variables, functions, types, etc. -- Symbols are things like variables, functions, types, etc.
map("<leader>ds", require("telescope.builtin").lsp_document_symbols, "[D]ocument [S]ymbols") map("<leader>ds", require("telescope.builtin").lsp_document_symbols, "[D]ocument [S]ymbols")
-- Fuzzy find all the symbols in your current workspace -- Fuzzy find all the symbols in your current workspace
-- Similar to document symbols, except searches over your whole project. -- Similar to document symbols, except searches over your whole project.
map( map(
"<leader>ws", "<leader>ws",
require("telescope.builtin").lsp_dynamic_workspace_symbols, require("telescope.builtin").lsp_dynamic_workspace_symbols,
"[W]orkspace [S]ymbols" "[W]orkspace [S]ymbols"
) )
-- Rename the variable under your cursor -- Rename the variable under your cursor
-- Most Language Servers support renaming across files, etc. -- Most Language Servers support renaming across files, etc.
map("<leader>rn", vim.lsp.buf.rename, "[R]e[n]ame") map("<leader>rn", vim.lsp.buf.rename, "[R]e[n]ame")
-- Execute a code action, usually your cursor needs to be on top of an error -- 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. -- or a suggestion from your LSP for this to activate.
map("<leader>ca", vim.lsp.buf.code_action, "[C]ode [A]ction") map("<leader>ca", vim.lsp.buf.code_action, "[C]ode [A]ction")
-- Opens a popup that displays documentation about the word under your cursor -- Opens a popup that displays documentation about the word under your cursor
-- See `:help K` for why this keymap -- See `:help K` for why this keymap
map("K", vim.lsp.buf.hover, "Hover Documentation") map("K", vim.lsp.buf.hover, "Hover Documentation")
-- WARN: This is not Goto Definition, this is Goto Declaration. -- WARN: This is not Goto Definition, this is Goto Declaration.
-- For example, in C this would take you to the header -- For example, in C this would take you to the header
map("gD", vim.lsp.buf.declaration, "[G]oto [D]eclaration") map("gD", vim.lsp.buf.declaration, "[G]oto [D]eclaration")
-- The following two autocommands are used to highlight references of the -- The following two autocommands are used to highlight references of the
-- word under your cursor when your cursor rests there for a little while. -- word under your cursor when your cursor rests there for a little while.
-- See `:help CursorHold` for information about when this is executed -- See `:help CursorHold` for information about when this is executed
-- --
-- When you move your cursor, the highlights will be cleared (the second autocommand). -- 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) local client = vim.lsp.get_client_by_id(event.data.client_id)
if client and client.server_capabilities.documentHighlightProvider then if client and client.server_capabilities.documentHighlightProvider then
vim.api.nvim_create_autocmd({ "CursorHold", "CursorHoldI" }, { vim.api.nvim_create_autocmd({ "CursorHold", "CursorHoldI" }, {
buffer = event.buf, buffer = event.buf,
callback = vim.lsp.buf.document_highlight, callback = vim.lsp.buf.document_highlight,
}) })
vim.api.nvim_create_autocmd({ "CursorMoved", "CursorMovedI" }, { vim.api.nvim_create_autocmd({ "CursorMoved", "CursorMovedI" }, {
buffer = event.buf, buffer = event.buf,
callback = vim.lsp.buf.clear_references, callback = vim.lsp.buf.clear_references,
}) })
end end
end end

View file

@ -5,18 +5,6 @@
# needed for the nvim config, neovim itself is a system package already # needed for the nvim config, neovim itself is a system package already
ripgrep ripgrep
]; ];
# programs.neovim = {
# enable = true;
# defaultEditor = true;
#
# viAlias = true;
# vimAlias = true;
# vimdiffAlias = true;
#
# extraLuaConfig = ''
# ${builtins.readFile ./init.lua}
# '';
# };
programs.nixvim = { programs.nixvim = {
enable = true; enable = true;
defaultEditor = true; defaultEditor = true;
@ -59,31 +47,29 @@
foldmethod = "expr"; foldmethod = "expr";
foldexpr = "nvim_treesitter#foldexpr()"; foldexpr = "nvim_treesitter#foldexpr()";
autoGroups = { };
"kickstart-highlight-yank" = { clear = true; }; autoGroups = {
"kickstart-lsp-attach" = {clear = true; }; "kickstart-highlight-yank" = { clear = true; };
}; };
autoCmd = [ autoCmd = [
{ {
event = "TextYankPost"; event = "TextYankPost";
group = "kickstart-highlight-yank"; group = "kickstart-highlight-yank";
callback = ''function() vim.highlight.on_yank() end''; command = ''lua vim.highlight.on_yank()'';
} }
{ {
event = "LspAttach"; event = ["BufReadPost" "FileReadPost"];
group = "kickstart-lsp-attach"; command = "normal zR";
callback = builtins.readFile ./lsp_autocmd.lua; }
} ];
];
filetype.extension = {
templ = "templ";
}; };
keymaps = [ keymaps = [
{ mode = "n"; key = "<Esc>"; action = "<cmd>nohlsearch<CR>";} { mode = "n"; key = "<Esc>"; action = "<cmd>nohlsearch<CR>";}
{ 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 = "<leader>e"; lua = true; action = "vim.diagnostic.open_float"; options.desc = "Show diagnostic [E]rror messages" ;}
{ mode = "n"; key = "<leader>q"; lua = true; action = "vim.diagnostic.setloclist"; options.desc = "Open diagnostic [Q]uickfix list" ;}
{ mode = "t"; key = "<Esc><Esc>"; action = "<C-\\><C-n>"; options.desc = "Exit terminal mode" ;} { mode = "t"; key = "<Esc><Esc>"; action = "<C-\\><C-n>"; options.desc = "Exit terminal mode" ;}
{ mode = "n"; key = "<C-h>"; action = "<C-w><C-h>"; options.desc = "Move focus to the left window" ;} { mode = "n"; key = "<C-h>"; action = "<C-w><C-h>"; options.desc = "Move focus to the left window" ;}
{ mode = "n"; key = "<C-l>"; action = "<C-w><C-l>"; options.desc = "Move focus to the right window" ;} { mode = "n"; key = "<C-l>"; action = "<C-w><C-l>"; options.desc = "Move focus to the right window" ;}
@ -130,10 +116,7 @@
ui-select.enable = true; ui-select.enable = true;
}; };
keymaps = { keymaps = {
"<leader>sh" = { "<leader>sh" = { action = "help_tags"; desc = "[S]earch [H]elp"; };
action = "help_tags";
desc = "[S]earch [H]elp";
};
"<leader>sk" = { action = "keymaps"; desc = "[S]earch [K]eymaps"; }; "<leader>sk" = { action = "keymaps"; desc = "[S]earch [K]eymaps"; };
"<leader>sf" = { action = "find_files"; desc = "[S]earch [F]iles"; }; "<leader>sf" = { action = "find_files"; desc = "[S]earch [F]iles"; };
"<leader>ss" = { action = "builtin"; desc = "[S]earch [S]elect Telescope"; }; "<leader>ss" = { action = "builtin"; desc = "[S]earch [S]elect Telescope"; };
@ -179,11 +162,80 @@
indent = true; indent = true;
folding = true; folding = true;
nixvimInjections = true; nixvimInjections = true;
ignoreInstall = [
"comment"
];
}; };
treesitter-context = { treesitter-context = {
enable = true; enable = true;
maxLines = 8; 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("<leader>D", require("telescope.builtin").lsp_type_definitions, "Type [D]efinition")
map("<leader>ds", require("telescope.builtin").lsp_document_symbols, "[D]ocument [S]ymbols")
map(
"<leader>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";
"<leader>e" = "open_float";
"<leader>q" = "setloclist";
};
lspBuf = {
"K" = "hover";
"<leader>rn" = "rename";
"<leader>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 = "<leader>e"; lua = true; action = "vim.diagnostic.open_float"; options.desc = "Show diagnostic [E]rror messages" ;}
# { mode = "n"; key = "<leader>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; [ extraPlugins = with pkgs.vimPlugins; [
vim-sleuth vim-sleuth