{ config = { programs.neovim = { extraLuaConfig = /* lua */ '' -- Key mappings for various commands and navigation vim.api.nvim_set_keymap("n", "", "", { noremap = true }) vim.api.nvim_set_keymap("n", "", "", { noremap = true }) -- Buffers vim.api.nvim_set_keymap("n", "b", ":buffers", { noremap = true }) vim.api.nvim_set_keymap("n", "", ":bnext", { noremap = true }) vim.api.nvim_set_keymap("n", "", ":bprev", { noremap = true }) vim.api.nvim_set_keymap("n", "", ":bdel", { noremap = true }) -- Navigation vim.api.nvim_set_keymap("n", "e", ":e", { noremap = true }) vim.api.nvim_set_keymap("n", "E", ":e %:h", { noremap = true }) vim.api.nvim_set_keymap("n", "c", ":cd", { noremap = true }) vim.api.nvim_set_keymap("n", "C", ":cd %:h", { noremap = true }) -- Loclist vim.api.nvim_set_keymap("n", "l", ":lwindow", { noremap = true }) vim.api.nvim_set_keymap("n", "[l", ":lprev", { noremap = true }) vim.api.nvim_set_keymap("n", "]l", ":lnext", { noremap = true }) vim.api.nvim_set_keymap("n", "L", ":lhistory", { noremap = true }) vim.api.nvim_set_keymap("n", "[L", ":lolder", { noremap = true }) vim.api.nvim_set_keymap("n", "]L", ":lnewer", { noremap = true }) -- Quickfix vim.api.nvim_set_keymap("n", "q", ":cwindow", { noremap = true }) vim.api.nvim_set_keymap("n", "[q", ":cprev", { noremap = true }) vim.api.nvim_set_keymap("n", "]q", ":cnext", { noremap = true }) vim.api.nvim_set_keymap("n", "Q", ":chistory", { noremap = true }) vim.api.nvim_set_keymap("n", "[Q", ":colder", { noremap = true }) vim.api.nvim_set_keymap("n", "]Q", ":cnewer", { noremap = true }) -- Make vim.api.nvim_set_keymap("n", "m", ":make", { noremap = true }) -- Grep (replace with ripgrep) vim.api.nvim_set_keymap("n", "g", ":grep", { noremap = true }) if vim.fn.executable("rg") == 1 then vim.opt.grepprg = "rg --vimgrep" vim.opt.grepformat = "%f:%l:%c:%m" end -- Close other splits vim.api.nvim_set_keymap("n", "o", ":only", { noremap = true }) -- Sudo save vim.api.nvim_set_keymap("c", "w!!", "w !sudo tee > /dev/null %", { noremap = true }) -- Other utility key mappings vim.keymap.set("n", "", "ggVG", { desc = "Select all" }) vim.keymap.set("n", "", "p", { desc = "Paste" }) vim.keymap.set("i", "", "p", { desc = "Paste" }) vim.keymap.set("v", "", "y", { desc = "Yank" }) -- LSP-related mappings vim.keymap.set("n", "gD", vim.lsp.buf.declaration, { desc = "Go to declaration" }) vim.keymap.set("n", "gd", vim.lsp.buf.definition, { desc = "Go to definition" }) vim.keymap.set("n", "gi", vim.lsp.buf.implementation, { desc = "Go to implementation" }) vim.keymap.set("n", "K", vim.lsp.buf.hover, { desc = "Hover Documentation" }) vim.keymap.set("n", "a", vim.lsp.buf.code_action, { desc = "Code action" }) -- Diagnostics vim.keymap.set("n", "d", vim.diagnostic.open_float, { desc = "Floating diagnostic" }) vim.keymap.set("n", "[d", vim.diagnostic.goto_prev, { desc = "Previous diagnostic" }) vim.keymap.set("n", "]d", vim.diagnostic.goto_next, { desc = "Next diagnostic" }) vim.keymap.set("n", "gl", vim.diagnostic.setloclist, { desc = "Diagnostics on loclist" }) vim.keymap.set("n", "gq", vim.diagnostic.setqflist, { desc = "Diagnostics on quickfix" }) ''; }; }; }