--[[ Which-key configuration This file contains the configuration for which-key, organizing keybindings into logical groups with descriptions. ]] ---@diagnostic disable-next-line: undefined-global local vim = vim local M = {} function M.setup() -- Check if which-key is available local status_ok, wk = pcall(require, 'which-key') if not status_ok then return end -- Use the modern which-key v3 API with add() -- Define common keybindings and groups wk.add { -- Most frequent operations { 'w', 'w', desc = 'Save file' }, { 'q', 'q', desc = 'Quit' }, { 'Q', 'qa!', desc = 'Force quit all' }, { '/', 'nohlsearch', desc = 'Clear highlights' }, { 'e', 'Explore', desc = 'Open file explorer' }, -- File operations (f) { 'f', group = 'Find/Files' }, { 'ff', 'Telescope find_files', desc = 'Find files' }, { 'fg', 'Telescope live_grep', desc = 'Live grep' }, { 'fb', 'Telescope buffers', desc = 'Find buffers' }, { 'fr', 'Telescope oldfiles', desc = 'Recent files' }, -- Buffer operations (b) { 'b', group = 'Buffers' }, { 'bb', 'Telescope buffers', desc = 'Browse buffers' }, { 'bd', 'bd', desc = 'Delete buffer' }, { 'bn', 'bn', desc = 'Next buffer' }, { 'bp', 'bp', desc = 'Previous buffer' }, -- Git operations (g) { 'g', group = 'Git' }, { 'gs', 'Telescope git_status', desc = 'Git status' }, { 'gc', 'Telescope git_commits', desc = 'Git commits' }, { 'gb', 'Telescope git_branches', desc = 'Git branches' }, -- Code operations (c) { 'c', group = 'Code/Copilot' }, { 'ca', 'lua vim.lsp.buf.code_action()', desc = 'Code actions' }, { 'cf', 'lua vim.lsp.buf.format()', desc = 'Format code' }, -- Harpoon (h) { 'h', group = 'Harpoon' }, { 'ha', "lua require('harpoon.mark').add_file()", desc = 'Add file' }, { 'hh', "lua require('harpoon.ui').toggle_quick_menu()", desc = 'Toggle menu' }, { 'h1', "lua require('harpoon.ui').nav_file(1)", desc = 'File 1' }, { 'h2', "lua require('harpoon.ui').nav_file(2)", desc = 'File 2' }, { 'h3', "lua require('harpoon.ui').nav_file(3)", desc = 'File 3' }, { 'h4', "lua require('harpoon.ui').nav_file(4)", desc = 'File 4' }, -- LeetCode (l) { 'l', group = 'LeetCode' }, { 'll', 'Leet', desc = 'Open LeetCode' }, { 'ld', 'Leet daily', desc = 'Daily challenge' }, { 'lr', 'Leet random', desc = 'Random problem' }, { 'ls', 'Leet submit', desc = 'Submit solution' }, { 'lt', 'Leet test', desc = 'Test solution' }, -- Tab operations (t) { 't', group = 'Tabs' }, { 'tn', 'tabnew', desc = 'New tab' }, { 'tc', 'tabclose', desc = 'Close tab' }, { 'to', 'tabnewTelescope find_files', desc = 'New tab with file' }, { 't1', '1gt', desc = 'Tab 1' }, { 't2', '2gt', desc = 'Tab 2' }, { 't3', '3gt', desc = 'Tab 3' }, { 't4', '4gt', desc = 'Tab 4' }, -- Window operations (w) { 'w', group = 'Windows' }, { 'wv', 'vsplit', desc = 'Split vertically' }, { 'ws', 'split', desc = 'Split horizontally' }, { 'wq', 'q', desc = 'Close window' }, { 'wo', 'o', desc = 'Close other windows' }, { 'wh', 'h', desc = 'Go to left window' }, { 'wj', 'j', desc = 'Go to lower window' }, { 'wk', 'k', desc = 'Go to upper window' }, { 'wl', 'l', desc = 'Go to right window' }, -- Terminal operations (tt) { 'tt', group = 'Terminal' }, { 'ttt', 'ToggleTerm', desc = 'Toggle terminal' }, { 'ttf', 'ToggleTerm direction=float', desc = 'Floating terminal' }, { 'tth', 'ToggleTerm size=10 direction=horizontal', desc = 'Horizontal terminal' }, { 'ttv', 'ToggleTerm size=80 direction=vertical', desc = 'Vertical terminal' }, -- Trouble/Diagnostics (x) { 'x', group = 'Diagnostics/Trouble' }, { 'xx', 'TroubleToggle', desc = 'Toggle Trouble' }, { 'xw', 'TroubleToggle workspace_diagnostics', desc = 'Workspace diagnostics' }, { 'xd', 'TroubleToggle document_diagnostics', desc = 'Document diagnostics' }, { 'xq', 'TroubleToggle quickfix', desc = 'Quickfix list' }, { 'xl', 'TroubleToggle loclist', desc = 'Location list' }, -- Neorg (n) { 'n', group = 'Neorg' }, { 'ni', 'Neorg index', desc = 'Index' }, { 'nr', 'Neorg return', desc = 'Return' }, { 'nt', 'Neorg toggle-concealer', desc = 'Toggle concealer' }, { 'nm', 'Neorg inject-metadata', desc = 'Inject metadata' }, -- Neorg Journal (nj) { 'nj', group = 'Journal' }, { 'njj', 'Neorg journal today', desc = 'Today' }, { 'njt', 'Neorg journal tomorrow', desc = 'Tomorrow' }, { 'njy', 'Neorg journal yesterday', desc = 'Yesterday' }, -- Neorg Workspace (nw) { 'nw', group = 'Workspace' }, { 'nwn', 'Neorg workspace notes', desc = 'Notes' }, { 'nww', 'Neorg workspace work', desc = 'Work' }, { 'nwp', 'Neorg workspace personal', desc = 'Personal' }, -- Neorg Export (ne) { 'ne', group = 'Export' }, { 'neh', 'Neorg export to-html', desc = 'To HTML' }, { 'nem', 'Neorg export to-markdown', desc = 'To Markdown' }, { 'nep', 'Neorg export to-pdf', desc = 'To PDF' }, -- Diagnostics navigation { '[d', 'lua vim.diagnostic.goto_prev()', desc = 'Previous diagnostic' }, { ']d', 'lua vim.diagnostic.goto_next()', desc = 'Next diagnostic' }, } -- Visual mode mappings wk.add { { 'c', group = 'Code', mode = 'v' }, { 'cc', "'<,'>CommentToggle", desc = 'Comment selection', mode = 'v' }, { 'y', '"+y', desc = 'Yank to system clipboard', mode = 'v' }, { 'p', '"+p', desc = 'Paste from system clipboard', mode = 'v' }, } -- Buffer navigation shortcuts wk.add { { '', 'bnext', desc = 'Next buffer' }, { '', 'bprevious', desc = 'Previous buffer' }, } end return M