Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 15 additions & 21 deletions lazy-lock.json
Original file line number Diff line number Diff line change
@@ -1,40 +1,34 @@
{
"LuaSnip": { "branch": "master", "commit": "642b0c595e11608b4c18219e93b88d7637af27bc" },
"blink.cmp": { "branch": "main", "commit": "78336bc89ee5365633bcf754d93df01678b5c08f" },
"conform.nvim": { "branch": "master", "commit": "dca1a190aa85f9065979ef35802fb77131911106" },
"fidget.nvim": { "branch": "main", "commit": "889e2e96edef4e144965571d46f7a77bcc4d0ddf" },
"conform.nvim": { "branch": "master", "commit": "18aeab3d63d350dcf44d64c462cc489a3412af40" },
"fidget.nvim": { "branch": "main", "commit": "82404b196e73a00b1727a91903beef5ddc319d22" },
"friendly-snippets": { "branch": "main", "commit": "6cd7280adead7f586db6fccbd15d2cac7e2188b9" },
"gitsigns.nvim": { "branch": "main", "commit": "dd3f588bacbeb041be6facf1742e42097f62165d" },
"guess-indent.nvim": { "branch": "main", "commit": "84a4987ff36798c2fc1169cbaff67960aed9776f" },
"indent-blankline.nvim": { "branch": "master", "commit": "d28a3f70721c79e3c5f6693057ae929f3d9c0a03" },
"kulala.nvim": { "branch": "main", "commit": "6656c9d332735ca6a27725e0fb45a1715c4372d9" },
"kulala.nvim": { "branch": "main", "commit": "aa05c854cc46e235aa24684d0521719570ea489e" },
"lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" },
"mason-lspconfig.nvim": { "branch": "main", "commit": "0c2823e0418f3d9230ff8b201c976e84de1cb401" },
"mason-lspconfig.nvim": { "branch": "main", "commit": "7b01e2974a47d489bb92f47a41e4c0088ea8f86e" },
"mason-nvim-dap.nvim": { "branch": "main", "commit": "9a10e096703966335bd5c46c8c875d5b0690dade" },
"mason-tool-installer.nvim": { "branch": "main", "commit": "443f1ef8b5e6bf47045cb2217b6f748a223cf7dc" },
"mason.nvim": { "branch": "main", "commit": "cb8445f8ce85d957416c106b780efd51c6298f89" },
"mini.icons": { "branch": "main", "commit": "bac6317300e205335df425296570d84322730067" },
"mini.nvim": { "branch": "main", "commit": "48555f1615f08c6318150aacb52bf7d61a5af798" },
"neo-tree.nvim": { "branch": "main", "commit": "84c75e7a7e443586f60508d12fc50f90d9aee14e" },
"neotest": { "branch": "master", "commit": "ad991822b7076b1d940b33a9d6d0d30416d5df81" },
"neotest-go": { "branch": "main", "commit": "59b50505053f9c45a9febb79e11a56206c3e3901" },
"neotest-jest": { "branch": "main", "commit": "0e7979d51301dfae5ef839d771bd28cf593fde3f" },
"neotest-python": { "branch": "master", "commit": "e6df4f1892f6137f58135917db24d1655937d831" },
"mason.nvim": { "branch": "main", "commit": "cbf8d285e1462dd24acf3507817be2bbcb035919" },
"mini.icons": { "branch": "main", "commit": "520995f1d75da0e4cc901ee95080b1ff2bc46b94" },
"mini.nvim": { "branch": "main", "commit": "6791615e48801cbf5b2baefadcea77a7760de3f4" },
"neo-tree.nvim": { "branch": "main", "commit": "83e7a2982fd12b9c3d35bc39dd5877cd91a02a61" },
"nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" },
"nvim-autopairs": { "branch": "master", "commit": "59bce2eef357189c3305e25bc6dd2d138c1683f5" },
"nvim-dap": { "branch": "master", "commit": "45a69eba683a2c448dd9ecfc4de89511f0646b5f" },
"nvim-autopairs": { "branch": "master", "commit": "7b9923abad60b903ece7c52940e1321d39eccc79" },
"nvim-dap": { "branch": "master", "commit": "531771530d4f82ad2d21e436e3cc052d68d7aebb" },
"nvim-dap-go": { "branch": "main", "commit": "b4421153ead5d726603b02743ea40cf26a51ed5f" },
"nvim-dap-ui": { "branch": "master", "commit": "1a66cabaa4a4da0be107d5eda6d57242f0fe7e49" },
"nvim-lint": { "branch": "master", "commit": "eab58b48eb11d7745c11c505e0f3057165902461" },
"nvim-lspconfig": { "branch": "master", "commit": "31026a13eefb20681124706a79fc1df6bf11ab27" },
"nvim-lint": { "branch": "master", "commit": "d48f3a76189d03b2239f6df1b2f7e3fa8353743b" },
"nvim-lspconfig": { "branch": "master", "commit": "a4ed4e761c400849e8c9f8bda33e5083f890268c" },
"nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" },
"nvim-treesitter": { "branch": "master", "commit": "cf12346a3414fa1b06af75c79faebe7f76df080a" },
"nvim-web-devicons": { "branch": "master", "commit": "4fc505ac7bd7692824a142e96e5f529c133862f8" },
"nvim-web-devicons": { "branch": "master", "commit": "0d7d35fa946837b8738b17c18d1faa1ac351e7f9" },
"plenary.nvim": { "branch": "master", "commit": "74b06c6c75e4eeb3108ec01852001636d85a932b" },
"render-markdown.nvim": { "branch": "main", "commit": "3f3eea97b80839f629c951ca660ffd125bfa5b34" },
"telescope-fzf-native.nvim": { "branch": "main", "commit": "6fea601bd2b694c6f2ae08a6c6fab14930c60e2c" },
"telescope-ui-select.nvim": { "branch": "master", "commit": "6e51d7da30bd139a6950adf2a47fda6df9fa06d2" },
"telescope.nvim": { "branch": "master", "commit": "f04ab730b8f9c6bf3f54a206d0dcddfd70c52d59" },
"render-markdown.nvim": { "branch": "main", "commit": "629eb9533ec989d9d5c6cab8f3ad5372422c24e0" },
"snacks.nvim": { "branch": "main", "commit": "0770753c88228f7f15449c6a5b242e3f7cd0d71c" },
"todo-comments.nvim": { "branch": "main", "commit": "31e3c38ce9b29781e4422fc0322eb0a21f4e8668" },
"toggleterm.nvim": { "branch": "main", "commit": "50ea089fc548917cc3cc16b46a8211833b9e3c7c" },
"tokyonight.nvim": { "branch": "main", "commit": "cdc07ac78467a233fd62c493de29a17e0cf2b2b6" },
Expand Down
64 changes: 0 additions & 64 deletions lua/config/git_links.lua

This file was deleted.

36 changes: 17 additions & 19 deletions lua/config/keymaps.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3,37 +3,35 @@
Module: config.keymaps

Purpose
Non-plugin (or minimally coupled) normal-mode maps: search, diagnostics
quickfix, terminal escape, window navigation, GitHub “open in browser,”
Non-plugin (or minimally coupled) normal-mode maps: terminal escape,
window navigation, GitHub “open in browser,”
Neo-tree toggles, and visual paste without clobbering a register.

Rationale
Keeping these maps here avoids scattering `vim.keymap.set` across plugin
config files and ensures they exist even before lazy.nvim finishes loading.

See `:help vim.keymap.set()`, `:help diagnostic-loclist`.
See `:help vim.keymap.set()`.
]]

vim.keymap.set('n', '<Esc>', '<cmd>nohlsearch<CR>')
vim.thing.set('n', '<Esc>', '<cmd>nohlsearch<CR>')

vim.keymap.set('n', '<leader>q', vim.diagnostic.setloclist, { desc = 'Open diagnostic [Q]uickfix list' })
vim.thing.set('t', '<Esc><Esc>', '<C-\\><C-n>', { desc = 'Exit terminal mode' })

vim.keymap.set('t', '<Esc><Esc>', '<C-\\><C-n>', { desc = 'Exit terminal mode' })
vim.thing.set('n', '<C-h>', '<C-w><C-h>', { desc = 'Move focus to the left window' })
vim.thing.set('n', '<C-l>', '<C-w><C-l>', { desc = 'Move focus to the right window' })
vim.thing.set('n', '<C-j>', '<C-w><C-j>', { desc = 'Move focus to the lower window' })
vim.thing.set('n', '<C-k>', '<C-w><C-k>', { desc = 'Move focus to the upper window' })

vim.keymap.set('n', '<C-h>', '<C-w><C-h>', { desc = 'Move focus to the left window' })
vim.keymap.set('n', '<C-l>', '<C-w><C-l>', { desc = 'Move focus to the right window' })
vim.keymap.set('n', '<C-j>', '<C-w><C-j>', { desc = 'Move focus to the lower window' })
vim.keymap.set('n', '<C-k>', '<C-w><C-k>', { desc = 'Move focus to the upper window' })
vim.thing.set('n', '<leader>th', ':split | terminal<CR>', { desc = 'Terminal horizontal split' })
vim.thing.set('n', '<leader>tv', ':vsplit | terminal<CR>', { desc = 'Terminal vertical split' })
vim.thing.set('n', '<leader>tt', ':tabnew | terminal<CR>', { desc = 'Terminal in new tab' })
vim.thing.set('n', '<leader>tf', ':ToggleTerm<CR>', { desc = 'Toggle floating terminal' })

vim.keymap.set('n', '<leader>th', ':split | terminal<CR>', { desc = 'Terminal horizontal split' })
vim.keymap.set('n', '<leader>tv', ':vsplit | terminal<CR>', { desc = 'Terminal vertical split' })
vim.keymap.set('n', '<leader>tt', ':tabnew | terminal<CR>', { desc = 'Terminal in new tab' })
vim.keymap.set('n', '<leader>tf', ':ToggleTerm<CR>', { desc = 'Toggle floating terminal' })

vim.keymap.set('x', 'p', '"_dP', { noremap = true, silent = true })
vim.thing.set('x', 'p', '"_dP', { noremap = true, silent = true })

local git_links = require 'config.git_links'
vim.keymap.set({ 'n', 'v' }, '<leader>go', git_links.open_github, { desc = 'Open in GitHub' })
vim.thing.set({ 'n', 'v' }, '<leader>go', git_links.open_github, { desc = 'Open in GitHub' })

vim.keymap.set('n', '<leader>x', '<cmd>Neotree toggle<cr>', { desc = 'NeoTree Toggle' })
vim.keymap.set('n', '<leader>z', '<cmd>Neotree reveal<cr>', { desc = 'NeoTree Reveal' })
vim.thing.set('n', '<leader>x', '<cmd>Neotree toggle<cr>', { desc = 'NeoTree Toggle' })
vim.thing.set('n', '<leader>z', '<cmd>Neotree reveal<cr>', { desc = 'NeoTree Reveal' })
2 changes: 1 addition & 1 deletion lua/config/plugins/gitsigns.lua
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ return {
local function map(mode, l, r, opts)
opts = opts or {}
opts.buffer = bufnr
vim.keymap.set(mode, l, r, opts)
vim.thing.set(mode, l, r, opts)
end

-- Detect branch once per buffer attach
Expand Down
22 changes: 11 additions & 11 deletions lua/config/plugins/lsp.lua
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ return {
-- for LSP related items. It sets the mode, buffer and description for us each time.
local map = function(keys, func, desc, mode)
mode = mode or 'n'
vim.keymap.set(mode, keys, func, { buffer = event.buf, desc = 'LSP: ' .. desc })
vim.thing.set(mode, keys, func, { buffer = event.buf, desc = 'LSP: ' .. desc })
end

-- Rename the variable under your cursor.
Expand All @@ -76,20 +76,20 @@ return {
-- For example, in C this would take you to the header.
map('grD', vim.lsp.buf.declaration, '[G]oto [D]eclaration')

-- Defer requiring Telescope until keypress: on `nvim file.py`, LspAttach can run
-- before VimEnter, when lazy.nvim has not loaded telescope.nvim yet.
-- Defer Snacks picker until keypress: on `nvim file.py`, LspAttach can run before VimEnter,
-- when lazy.nvim has not loaded snacks.nvim yet.
--
-- Nvim 0.11+ (incl. 0.12) sets *global* defaults grr/gri/grt/gO → vim.lsp.buf.* (quickfix / loclist).
-- Buffer-local maps override defaults; grr/gri/grd/gO/gW/grt use Telescope pickers.
-- `grd` is not a core default mapping; it maps goto-definition through Telescope here.
map('grr', function() require('telescope.builtin').lsp_references() end, '[R]eferences')
map('gri', function() require('telescope.builtin').lsp_implementations() end, '[I]mplementation')
map('grd', function() require('telescope.builtin').lsp_definitions() end, '[G]oto [D]efinition')
map('gO', function() require('telescope.builtin').lsp_document_symbols() end, 'Open Document Symbols')
map('gW', function() require('telescope.builtin').lsp_dynamic_workspace_symbols() end, 'Open Workspace Symbols')
-- Buffer-local maps override defaults; grr/gri/grd/gO/gW/grt use Snacks pickers.
-- `grd` is not a core default mapping; it maps goto-definition through the picker here.
map('grr', function() Snacks.picker.lsp_references() end, '[R]eferences')
map('gri', function() Snacks.picker.lsp_implementations() end, '[I]mplementation')
map('grd', function() Snacks.picker.lsp_definitions() end, '[G]oto [D]efinition')
map('gO', function() Snacks.picker.lsp_symbols() end, 'Open Document Symbols')
map('gW', function() Snacks.picker.lsp_workspace_symbols() end, 'Open Workspace Symbols')
-- gopls may error on anonymous func types ("cannot find type name from type func(...)"):
-- put the cursor on a named identifier, or use grd on the symbol name — same LSP limit.
map('grt', function() require('telescope.builtin').lsp_type_definitions() end, '[G]oto [T]ype Definition')
map('grt', function() Snacks.picker.lsp_type_definitions() end, '[G]oto [T]ype Definition')

local function client_supports_method(client, method, bufnr)
return client:supports_method(method, bufnr)
Expand Down
95 changes: 95 additions & 0 deletions lua/config/plugins/snacks.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
--[[
Path: lua/config/plugins/snacks.lua
Module: config.plugins.snacks

Purpose
folke/snacks.nvim: picker (Telescope replacement), bigfile, quickfile,
input, gitbrowse, and words (LSP reference highlights + / [[ jumps).

Rationale
`priority` + `lazy = false` so quickfile can run before VimEnter on
`nvim file`. LSP maps in `lsp.lua` still use Snacks.picker on keypress.

See https://github.com/folke/snacks.nvim
]]

---@type LazySpec
return {
{
'folke/snacks.nvim',
priority = 1000,
lazy = false,
dependencies = {
{ 'nvim-tree/nvim-web-devicons', enabled = vim.g.have_nerd_font },
},
---@type snacks.Config
opts = {
picker = {
ui_select = true,
},
bigfile = {},
quickfile = {},
input = {},
gitbrowse = {
what = 'file',
},
words = {},
},
config = function()
local picker = Snacks.picker

vim.keymap.set('n', '<leader>sh', picker.help, { desc = '[S]earch [H]elp' })
vim.keymap.set('n', '<leader>sk', picker.keymaps, { desc = '[S]earch [K]eymaps' })
vim.keymap.set('n', '<leader>sf', picker.files, { desc = '[S]earch [F]iles' })
vim.keymap.set('n', '<leader>ss', function() picker() end, { desc = '[S]earch [S]elect Snacks' })
vim.keymap.set({ 'n', 'v' }, '<leader>sw', picker.grep_word, { desc = '[S]earch current [W]ord' })
vim.keymap.set('n', '<leader>sg', picker.grep, { desc = '[S]earch by [G]rep' })
vim.keymap.set('n', '<leader>sd', picker.diagnostics, { desc = '[S]earch [D]iagnostics' })
vim.keymap.set('n', '<leader>sq', picker.diagnostics_buffer, { desc = '[S]earch buffer diagnostics [Q]uickfix' })
vim.keymap.set('n', '<leader>sD', function()
local current_dir = vim.fn.expand '%:p:h'
picker.diagnostics { cwd = current_dir, title = 'Diagnostics in current directory' }
end, { desc = '[S]earch [D]iagnostics in current directory' })
vim.keymap.set('n', '<leader>sr', picker.resume, { desc = '[S]earch [R]esume' })
vim.keymap.set('n', '<leader>s.', picker.recent, { desc = '[S]earch Recent Files ("." for repeat)' })
vim.keymap.set('n', '<leader>sc', picker.commands, { desc = '[S]earch [C]ommands' })
vim.keymap.set('n', '<leader><leader>', picker.buffers, { desc = '[ ] Find existing buffers' })

vim.keymap.set('n', '<leader>/', function()
picker.lines {
layout = { preset = 'ivy', hidden = { 'preview' } },
title = 'Fuzzily search in current buffer',
}
end, { desc = '[/] Fuzzily search in current buffer' })

vim.keymap.set('n', '<leader>s/', picker.grep_buffers, { desc = '[S]earch [/] in Open Files' })

vim.keymap.set('n', '<leader>sn', function()
picker.files { cwd = vim.fn.stdpath 'config', title = 'Neovim config files' }
end, { desc = '[S]earch [N]eovim files' })

vim.keymap.set('n', '<leader>sag', function()
picker.grep {
title = 'Live Grep (All Files)',
hidden = true,
ignored = true,
exclude = { '.git/' },
}
end, { desc = '[S]earch [A]ll Files [G]rep' })

vim.keymap.set('n', '<leader>saf', function()
picker.files {
title = 'Find All Files (Hidden + Ignored)',
hidden = true,
ignored = true,
exclude = { '.git/' },
}
end, { desc = '[S]earch [A]ll [F]iles' })

vim.keymap.set({ 'n', 'v' }, '<leader>go', function() Snacks.gitbrowse() end, { desc = 'Open in browser (git)' })

vim.keymap.set({ 'n', 't' }, ']]', function() Snacks.words.jump(vim.v.count1) end, { desc = 'Next LSP reference' })
vim.keymap.set({ 'n', 't' }, '[[', function() Snacks.words.jump(-vim.v.count1) end, { desc = 'Prev LSP reference' })
end,
},
}
2 changes: 1 addition & 1 deletion lua/config/plugins/spec.lua
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ local mods = {
'config.plugins.gitsigns',
'config.plugins.which_key',
'config.plugins.render_markdown',
'config.plugins.telescope',
'config.plugins.snacks',
'config.plugins.lsp',
'config.plugins.conform',
'config.plugins.blink',
Expand Down
Loading
Loading