refactored plugins and configurations

This commit is contained in:
2026-05-19 18:33:44 -06:00
parent 5c35466664
commit 4137b7424d
14 changed files with 550 additions and 563 deletions

View File

@@ -2,6 +2,10 @@
local augroup = vim.api.nvim_create_augroup
local autocmd = vim.api.nvim_create_autocmd
-- ─────────────────────────────────────────────────────────────────────────────
-- General UX
-- ─────────────────────────────────────────────────────────────────────────────
-- Highlight on yank
augroup("YankHighlight", { clear = true })
autocmd("TextYankPost", {
@@ -72,13 +76,17 @@ autocmd("BufWritePre", {
end,
})
-- ─────────────────────────────────────────────────────────────────────────────
-- Filetype-specific settings
-- ─────────────────────────────────────────────────────────────────────────────
-- Set specific options for certain filetypes
augroup("FileTypeSettings", { clear = false })
augroup("FileTypeSettings", { clear = true })
-- Go files: use tabs
-- Go + Makefile files: use tabs
autocmd("FileType", {
group = "FileTypeSettings",
pattern = "go",
pattern = { "go", "make" },
callback = function()
vim.opt_local.expandtab = false
vim.opt_local.tabstop = 4
@@ -86,18 +94,7 @@ autocmd("FileType", {
end,
})
-- Makefile: use tabs
autocmd("FileType", {
group = "FileTypeSettings",
pattern = "make",
callback = function()
vim.opt_local.expandtab = false
vim.opt_local.tabstop = 4
vim.opt_local.shiftwidth = 4
end,
})
-- Markdown: enable wrap
-- Markdown: soft wrap + spell
autocmd("FileType", {
group = "FileTypeSettings",
pattern = "markdown",
@@ -107,6 +104,19 @@ autocmd("FileType", {
end,
})
-- SQL family: skip autoformat-on-save (LazyVim's pipeline respects vim.b.autoformat)
autocmd("FileType", {
group = "FileTypeSettings",
pattern = { "sql", "mysql", "plsql" },
callback = function()
vim.b.autoformat = false
end,
})
-- ─────────────────────────────────────────────────────────────────────────────
-- Project / tooling hints
-- ─────────────────────────────────────────────────────────────────────────────
autocmd("DirChanged", {
callback = function()
if vim.fn.filereadable(".devcontainer/devcontainer.json") == 1 then
@@ -122,21 +132,7 @@ autocmd("BufRead", {
local name = vim.fn.fnamemodify(args.file, ":t")
vim.notify(
"Generated " .. name .. ". Use: `go tool pprof -http=:0 " .. name .. "` or `go tool trace " .. name .. "`",
vim.log.levels.INFO)
vim.log.levels.INFO
)
end,
})
-- SQL files
-- autocmd("FileType", {
-- pattern = { "sql", "mysql", "plsql" },
-- callback = function()
-- local cmp = require("cmp")
-- cmp.setup.buffer({
-- sources = {
-- { name = "vim-dadbod" },
-- { name = "nvim_lsp" },
-- { name = "buffer" },
-- },
-- })
-- end,
-- })

View File

@@ -1,35 +1,37 @@
-- Custom keymaps
local map = vim.keymap.set
-- Terminal keymaps
-- <leader>th - Open terminal in horizontal split
map("n", "<leader>th", function()
-- ─────────────────────────────────────────────────────────────────────────────
-- Terminal
-- ─────────────────────────────────────────────────────────────────────────────
-- LazyVim uses <leader>t* for the Test group (neotest). Putting terminal
-- splits under capital <leader>T avoids that collision while staying mnemonic.
map("n", "<leader>Th", function()
vim.cmd("split | terminal")
vim.cmd("startinsert")
end, { desc = "Terminal (horizontal split)" })
-- <leader>tv - Open terminal in vertical split
map("n", "<leader>tv", function()
map("n", "<leader>Tv", function()
vim.cmd("vsplit | terminal")
vim.cmd("startinsert")
end, { desc = "Terminal (vertical split)" })
-- Terminal mode: Escape to normal mode
map("t", "<Esc><Esc>", "<C-\\><C-n>", { desc = "Exit terminal mode" })
-- Explorer keymaps (Snacks explorer)
-- Ctrl+Shift+e - Toggle explorer
map("n", "<C-e>", function() Snacks.explorer() end, { desc = "Toggle Explorer" })
map("i", "<C-e>", function() Snacks.explorer() end, { desc = "Toggle Explorer" })
-- ─────────────────────────────────────────────────────────────────────────────
-- Explorer (Snacks)
-- ─────────────────────────────────────────────────────────────────────────────
-- Using Ctrl-Shift-e here matches the README. Note: some terminals
-- (Terminal.app, basic xterm) don't transmit Ctrl+Shift+letter distinctly —
-- if it doesn't fire, use LazyVim's <leader>e / <leader>fe instead.
map({ "n", "i" }, "<C-S-e>", function()
Snacks.explorer()
end, { desc = "Toggle Explorer" })
-- Note: Ctrl+Shift+v and Ctrl+Shift+h for opening files in splits
-- are configured in the snacks picker config (lua/plugins/editor.lua)
-- as they need to work within the explorer buffer context
-- Additional useful keymaps
-- Better window navigation
map("n", "<C-h>", "<C-w>h", { desc = "Go to left window" })
-- ─────────────────────────────────────────────────────────────────────────────
-- Window navigation
-- ─────────────────────────────────────────────────────────────────────────────
map("n", "<C-h>", "<C-w>h", { desc = "Go left window" })
map("n", "<C-j>", "<C-w>j", { desc = "Go to lower window" })
map("n", "<C-k>", "<C-w>k", { desc = "Go to upper window" })
map("n", "<C-l>", "<C-w>l", { desc = "Go to right window" })
@@ -40,75 +42,98 @@ map("n", "<C-Down>", "<cmd>resize -2<cr>", { desc = "Decrease window height" })
map("n", "<C-Left>", "<cmd>vertical resize -2<cr>", { desc = "Decrease window width" })
map("n", "<C-Right>", "<cmd>vertical resize +2<cr>", { desc = "Increase window width" })
-- Buffer navigation
map("n", "<S-h>", "<cmd>bprevious<cr>", { desc = "Prev buffer" })
map("n", "<S-l>", "<cmd>bnext<cr>", { desc = "Next buffer" })
-- ─────────────────────────────────────────────────────────────────────────────
-- Buffers / editing
-- ─────────────────────────────────────────────────────────────────────────────
map("n", "<S-h>", "<cmd>bprevious<cr>", { desc = "Prev Buffer" })
map("n", "<S-l>", "<cmd>bnext<cr>", { desc = "Next Buffer" })
-- Clear search highlight
map("n", "<Esc>", "<cmd>nohlsearch<cr>", { desc = "Clear search highlight" })
-- Save file
map({ "n", "i", "v", "s" }, "<C-s>", "<cmd>w<cr><esc>", { desc = "Save file" })
-- Better indenting in visual mode
map("v", "<", "<gv")
map("v", ">", ">gv")
map("v", "<", "<gv", { desc = "Indent left, keep selection" })
map("v", ">", ">gv", { desc = "Indent right, keep selection" })
-- Move lines up/down
map("n", "<A-j>", "<cmd>m .+1<cr>==", { desc = "Move line down" })
map("n", "<A-k>", "<cmd>m .-2<cr>==", { desc = "Move line up" })
map("v", "<A-j>", ":m '>+1<cr>gv=gv", { desc = "Move selection down" })
map("v", "<A-k>", ":m '<-2<cr>gv=gv", { desc = "Move selection up" })
map("n", "<A-j>", ":m '>+1<cr>gv=gv", { desc = "Move selection down" })
map("n", "<A-k>", ":m '<-2<cr>gv=gv", { desc = "Move selection up" })
-- Quick access to AI chat
-- ─────────────────────────────────────────────────────────────────────────────
-- AI (Avante)
-- ─────────────────────────────────────────────────────────────────────────────
map("n", "<leader>aa", "<cmd>AvanteAsk<cr>", { desc = "AI Ask" })
map("v", "<leader>aa", "<cmd>AvanteAsk<cr>", { desc = "AI Ask (selection)" })
map("n", "<leader>ac", "<cmd>AvanteChat<cr>", { desc = "AI Chat" })
map("n", "<leader>at", "<cmd>AvanteToggle<cr>", { desc = "AI Toggle" })
-- Database keymaps
map("n", "<leader>db", "<cmd>DBUIToggle<cr>", { desc = "Toggle DB UI" })
map("n", "<leader>da", "<cmd>DBUIAddConnection<cr>", { desc = "Add DB Connection" })
-- ─────────────────────────────────────────────────────────────────────────────
-- Database (vim-dadbod)
-- ─────────────────────────────────────────────────────────────────────────────
-- Moved off <leader>db to free that for the DAP breakpoint default.
map("n", "<leader>Du", "<cmd>DBUIToggle<cr>", { desc = "Toggle DB UI" })
map("n", "<leader>Da", "<cmd>DBUIAddConnection<cr>", { desc = "Add DB Connection" })
map("n", "<leader>Df", "<cmd>DBUIFindBuffer<cr>", { desc = "Find DB Buffer" })
-- Neotest
local neotest = require("neotest")
map("n", "<leader>tt", neotest.run.run, { desc = "Run nearest test" })
-- ─────────────────────────────────────────────────────────────────────────────
-- Tests (neotest)
-- ─────────────────────────────────────────────────────────────────────────────
-- IMPORTANT: do NOT `require("neotest")` at module top — it eager-loads the
-- plugin on every startup. Wrap each binding in a function so the require
-- happens at keypress time, letting Lazy.nvim load on demand.
map("n", "<leader>tt", function()
require("neotest").run.run()
end, { desc = "Run nearest test" })
map("n", "<leader>tf", function()
neotest.run.run(vim.fn.expand("%"))
require("neotest").run.run(vim.fn.expand("%"))
end, { desc = "Run test file" })
map("n", "<leader>ts", neotest.summary.toggle)
map("n", "<leader>to", neotest.output.open)
map("n", "<leader>ts", function()
require("neotest").summary.toggle()
end, { desc = "Toggle test summary" })
map("n", "<leader>to", function()
require("neotest").output.open()
end, { desc = "Open test output" })
map("n", "<leader>tc", "<cmd>Coverage<cr>", { desc = "Show coverage" })
-- Go benchmark
map("n", "<leader>gb", function()
-- ─────────────────────────────────────────────────────────────────────────────
-- Go: benchmarks & profiling
-- ─────────────────────────────────────────────────────────────────────────────
-- Using <leader>cg* (Code > Go) to avoid colliding with Git's <leader>g group.
map("n", "<leader>cgb", function()
vim.cmd("!go test -bench=. -benchmem ./...")
end, { desc = "Go benchmarks" })
map("n", "<leader>gpc", function()
map("n", "<leader>cgpc", function()
vim.cmd("!go test -run=^$ -bench=. -cpuprofile cpu.out ./...")
end, { desc = "Go CPU profile" })
map("n", "<leadger>gpm", function()
map("n", "<leader>cgpm", function()
vim.cmd("!go test -run=^$ -bench=. -memprofile mem.out ./...")
end, { desc = "Go memory profile" })
map("n", "<leader>gpt", function()
vim.cmd("!go test -run=^$ -bench. -trace trace.out ./...")
map("n", "<leader>cgpt", function()
vim.cmd("!go test -run=^$ -bench=. -trace trace.out ./...")
end, { desc = "Go trace profile" })
-- ─────────────────────────────────────────────────────────────────────────────
-- Overseer
-- ─────────────────────────────────────────────────────────────────────────────
map("n", "<leader>or", "<cmd>OverseerRun<cr>", { desc = "Run task" })
map("n", "<leader>ot", "<cmd>OverseerToogle<cr>", { desc = "Task list" })
map("n", "<leader>ot", "<cmd>OverseerToggle<cr>", { desc = "Task list" })
-- Aerial
-- ─────────────────────────────────────────────────────────────────────────────
-- Symbols / outline
-- ─────────────────────────────────────────────────────────────────────────────
map("n", "<leader>so", "<cmd>AerialToggle<cr>", { desc = "Symbols outline" })
map("n", "<leader>sh", vim.lsp.buf.incoming_calls, { desc = "Incoming calls" })
map("n", "<leader>sc", vim.lsp.buf.outgoing_calls, { desc = "Outgoing calls" })
-- Diagnostics
map("n", "<leader>xx", "<cmd>Trouble diagnostics toggle<cr>")
map("n", "<leader>xw", "<cmd>Trouble workspace_diagnostics<cr>")
map("n", "<leader>xt", "<cmd>Trouble todo<cr>")
-- ─────────────────────────────────────────────────────────────────────────────
-- Diagnostics (Trouble)
-- ─────────────────────────────────────────────────────────────────────────────
map("n", "<leader>xx", "<cmd>Trouble diagnostics toggle<cr>", { desc = "Diagnostics (Trouble)" })
map("n", "<leader>xw", "<cmd>Trouble workspace_diagnostics<cr>", { desc = "Workspace diagnostics" })
map("n", "<leader>xt", "<cmd>Trouble todo<cr>", { desc = "TODOs (Trouble)" })
-- Git Support
map("n", "<leader>gg", "<cmd>Neogit<cr>", { desc = "Neogit" })
-- ─────────────────────────────────────────────────────────────────────────────
-- Git
-- ─────────────────────────────────────────────────────────────────────────────
-- LazyVim's <leader>gg is lazygit by default; mapping Neogit to <leader>gn.
map("n", "<leader>gn", "<cmd>Neogit<cr>", { desc = "Neogit" })