return { { "folke/which-key.nvim", init = function() local wk = require("which-key") wk.add({ { "", ":m .+1==", desc = "Move line down" }, { "", ":m .-2==", desc = "Move line up" }, { mode = "v", { "", ":m '>+1gv=gv", desc = "Move line down" }, { "", ":m '<-2gv=gv", desc = "Move line up" }, }, { mode = "i", { "", ":m .+1==gi", desc = "Move line down" }, { "", ":m .-2==gi", desc = "Move line up" }, }, { "", "Commander", desc = "Commander" }, { "", "FzfLua git_files", desc = "Find git files" }, { ",", group = "Search" }, { ",p", "FzfLua files", desc = "Files files" }, { ",b", "FzfLua buffers", desc = "Buffer List" }, { ",q", "FzfLua quickfix", desc = "Quickfix" }, { ",c", "FzfLua command_history", desc = "Quickfix" }, { ",e", ":e **/*", desc = "Open with autocomplete" }, { ",f", ":find **/*", desc = "Find with autocomplete" }, { "p", group = "Search" }, { "pc", "FzfLua git_commits", desc = "Git commits" }, { "pf", "FzfLua git_bcommits", desc = "Git file history" }, { "pb", "FzfLua git_branches", desc = "Git branches" }, { "ph", "FzfLua git_statuscr>", desc = "Git status" }, { "ps", "FzfLua live_grep", desc = "Project search" }, -- { -- "ds", -- function() -- require("utils.telescope").search_dotfiles() -- end, -- desc = "Search dot files 🔭", -- }, { "K", "Lspsaga hover_doc", desc = "Show documentation" }, { "", "Lspsaga hover_doc ++keep", desc = "Show documentation (keep)" }, { "", "Lspsaga rename", desc = "Rename variable" }, { "g", group = "Go to" }, { "gd", ":Lspsaga goto_definition", desc = "Go to definition" }, { "gD", function() vim.lsp.buf.declaration() end, desc = "Go to declaration", }, { "gt", ":Lspsaga goto_type_definition", desc = "Go to type definition" }, { "gh", ":Lspsaga finder", desc = "LSP Finder" }, { "gH", ":Lspsaga finder ++normal", desc = "LSP Finder (keep)" }, { "gj", ":Lspsaga diagnostic_jump_next", desc = "Next diagnostic message" }, { "gk", ":Lspsaga diagnostic_jump_prev", desc = "Previous diagnostic message" }, { "a", group = "Local File Actions" }, { "ac", "Lspsaga code_action", desc = "Code action" }, { "ag", function() vim.diagnostic.open_float(0, { scope = "line", focusable = false }) end, desc = "Show line diagnostics", }, { "ad", "Glance definitions", desc = "Definitions", }, { "ar", "Glance references", desc = "References", }, { "ai", "Glance implementations", desc = "References", }, { "at", "Glance type_definitions", desc = "Type definitions", }, { "aI", "Lspsaga incoming_calls", desc = "Incoming calls", }, { "aO", "Lspsaga outgoing_calls", desc = "Outgoing calls", }, { "O", "Lspsaga outline", desc = "Toggle Outline", icon = "󰷐", }, { "g", group = "Git", }, { "gd", "DiffviewOpen", desc = "Diff view", }, { "»", "]", noremap = false, }, { "«", "[", noremap = false, }, { "h", group = "git signs" }, { "hs", function() require("gitsigns").stage_hunk() end, desc = "Stage hunk", }, { "hu", function() require("gitsigns").undo_stage_hunk() end, desc = "Undo stage hunk", }, { "hv", function() require("gitsigns").preview_hunk() end, desc = "Preview hunk", }, { "hb", function() require("gitsigns").blame_line() end, desc = "Blame line", }, { "hR", function() require("gitsigns").reset_buffer() end, desc = "Reset buffer", }, { "hr", function() require("gitsigns").reset_hunk() end, desc = "Reset hunk", }, { "hS", function() require("gitsigns").stage_buffer() end, desc = "Stage buffer", }, { "hU", function() require("gitsigns").reset_buffer_index() end, desc = "Reset buffer index", }, { mode = "v", { "hs", function() require("gitsigns").stage_hunk({ vim.fn.line("."), vim.fn.line("v") }) end, desc = "Stage hunk", }, { "hr", function() require("gitsigns").reset_hunk({ vim.fn.line("."), vim.fn.line("v") }) end, desc = "Reset hunk", }, }, { "]c", function() if vim.wo.diff then vim.cmd.normal({ "]c", bang = true }) else vim.schedule(function() require("gitsigns").nav_hunk("next") end) end end, desc = "Next hunk", }, { "[c", function() if vim.wo.diff then vim.cmd.normal({ "[c", bang = true }) else vim.schedule(function() require("gitsigns").nav_hunk("prev") end) end end, desc = "Previous hunk", }, { "u", "UndotreeToggle", desc = "Undotree", icon = "" }, { "c", group = "quickfix" }, { "co", "copen", desc = "Open" }, { "cf", "cfirst", desc = "First result" }, { "cl", "clast", desc = "Last result" }, { "cn", "cnext", desc = "Next result" }, { "cp", "cprevious", desc = "Previous result" }, { "cc", "cclose", desc = "Close" }, { "c", group = "Location List" }, { "co", "lopen", desc = "Open" }, { "cf", "lfirst", desc = "First result" }, { "cl", "llast", desc = "Last result" }, { "cn", "lnext", desc = "Next result" }, { "cp", "lprevious", desc = "Previous result" }, { "cc", "lclose", desc = "Close" }, { "", "Neotree toggle", desc = "Toggle neo-tree" }, { "t", "lua Snacks.terminal.toggle()", desc = "Toggle Terminal" }, { mode = { "t" }, { "t", "lua Snacks.terminal.toggle()", desc = "Toggle Terminal" } }, { mode = { "n", "x", "o" }, { "s", function() require("flash").jump() end, desc = "Flash ⚡", }, { "S", function() require("flash").treesitter() end, desc = "Flash Treesitter ⚡", }, }, { mode = { "o", "x" }, { "R", function() require("flash").treesitter_search() end, desc = "Flash Treesitter search ⚡", }, }, { mode = "c", { "", function() require("flash").toggle() end, desc = "Toggle Flash Search ⚡", }, }, }) end, } }