return { groups = { { "s", group = "[S]earch", icon = "" }, { "c", group = "[C]ode", icon = "" }, { "d", group = "[D]iagnostics", icon = "" }, { "g", group = "[G]enerate", icon = "󰈏" }, { "r", group = "[R]ename", icon = "󰑕" }, { "w", group = "[W]orkspace", icon = "" }, { "t", group = "[T]ree", icon = "󱏒" }, { "l", group = "[L]azyGit", icon = "󰒲" }, { "o", group = "[O]verseer", icon = "󰈈" }, { "h", group = "[H]arpoon", icon = "󱡀" }, { "x", group = "[X] Trouble", icon = "󰋔" }, }, commands = { { "f", group = "[F]ormat", icon = "󰗈" }, { "p", group = "[P]recognition", icon = "󰬯" }, { "?", group = "[?] Cheatsheet", icon = "󰧹" }, }, gitsigns = { { "gs", function() require("gitsigns").stage_hunk() end, desc = "[G]it [S]tage Hunk", mode = { "n", "v" }, }, { "gr", function() require("gitsigns").reset_hunk() end, desc = "[G]it [R]eset Hunk", mode = { "n", "v" }, }, { "gp", function() require("gitsigns").preview_hunk() end, desc = "[G]it [P]review Hunk", mode = "n", }, { "gb", function() package.loaded.gitsigns.blame_line() end, desc = "[G]it [B]lame Line", mode = "n", }, { "]c", function() if vim.wo.diff then return "]c" end vim.schedule(function() require("gitsigns").next_hunk() end) return "" end, desc = "Next Hunk", mode = "n", expr = true, }, { "[c", function() if vim.wo.diff then return "[c" end vim.schedule(function() require("gitsigns").prev_hunk() end) return "" end, desc = "Previous Hunk", mode = "n", expr = true, }, }, harpoon = { { "ha", function() require("harpoon"):list():add() end, desc = "[H]arpoon [A]dd file", mode = "n", }, { "hq", function() local harpoon = require("harpoon") harpoon.ui:toggle_quick_menu(harpoon:list()) end, desc = "[H]arpoon [Q]uick menu", mode = "n", }, { "", function() require("harpoon"):list():select(1) end, desc = "Harpoon file 1", mode = "n", }, { "", function() require("harpoon"):list():select(2) end, desc = "Harpoon file 2", mode = "n", }, { "", function() require("harpoon"):list():select(3) end, desc = "Harpoon file 3", mode = "n", }, { "", function() require("harpoon"):list():select(4) end, desc = "Harpoon file 4", mode = "n", }, }, lazygit = { { "lg", function() vim.api.nvim_command("lua Snacks.lazygit()") end, desc = "[L]azy[G]it", mode = "n", }, { "ll", function() vim.api.nvim_command("lua Snacks.lazygit.log()") end, desc = "[L]azyGit [L]og", mode = "n", }, { "lf", function() vim.api.nvim_command("lua Snacks.lazygit.log_file()") end, desc = "[L]azyGit [F]ile Log", mode = "n", }, }, neogen = { { "gd", ":lua require('neogen').generate()", desc = "[G]enerate [D]ocumentation", mode = "n", }, }, neotree = { { "tt", function() vim.api.nvim_command("Neotree toggle") end, desc = "[T]ree [T]oggle", mode = "n", }, { "ts", function() vim.api.nvim_command("Neotree show") end, desc = "[T]ree [S]how", mode = "n", }, { "tc", function() vim.api.nvim_command("Neotree close") end, desc = "[T]ree [C]lose", mode = "n", }, { "tf", function() vim.api.nvim_command("Neotree focus") end, desc = "[T]ree [F]ocus", mode = "n", }, { "tg", function() vim.api.nvim_command("Neotree git_status") end, desc = "[T]ree [G]it Status", mode = "n", }, { "tb", function() vim.api.nvim_command("Neotree buffers") end, desc = "[T]ree [B]uffers", mode = "n", }, }, oil = { { "te", vim.cmd.Oil, desc = "[T]ree [E]dit", mode = "n" }, }, overseer = { { "ob", vim.cmd.OverseerBuild, desc = "[O]verseer [B]uild", mode = "n" }, { "oc", vim.cmd.OverseerRunCmd, desc = "[O]verseer Run [C]ommand", mode = "n" }, { "or", vim.cmd.OverseerRun, desc = "[O]verseer [R]un", mode = "n" }, { "ot", vim.cmd.OverseerToggle, desc = "[O]verseer [T]oggle", mode = "n" }, }, precognition = { { "p", function() if require("precognition").toggle() then vim.notify("Precognition ON") else vim.notify("Precognition OFF") end end, desc = "[P]recognition", mode = "n", }, }, telescope = function(telescope_builtin) return { { "sh", telescope_builtin.help_tags, desc = "[S]earch [H]elp", mode = "n", }, { "sk", telescope_builtin.keymaps, desc = "[S]earch [K]eymaps", mode = "n", }, { "sf", telescope_builtin.find_files, desc = "[S]earch [F]iles", mode = "n", }, { "sb", telescope_builtin.find_files, desc = "[S]earch file [B]rowser", mode = "n", }, { "ss", telescope_builtin.builtin, desc = "[S]earch [S]elect Telescope", mode = "n", }, { "sw", telescope_builtin.grep_string, desc = "[S]earch current [W]ord", mode = "n", }, { "sg", telescope_builtin.live_grep, desc = "[S]earch by [G]rep", mode = "n", }, { "sd", telescope_builtin.diagnostics, desc = "[S]earch [D]iagnostics", mode = "n", }, { "sr", telescope_builtin.resume, desc = "[S]earch [R]esume", mode = "n", }, { "s.", telescope_builtin.oldfiles, desc = '[S]earch Recent Files ("." for repeat)', mode = "n", }, { "", telescope_builtin.buffers, desc = "[ ] Find existing buffers", mode = "n", }, -- Slightly advanced example of overriding default behavior and theme { "/", function() -- You can pass additional configuration to telescope to change theme, layout, etc. telescope_builtin.current_buffer_fuzzy_find( require("telescope.themes").get_dropdown({ winblend = 10, previewer = false, }) ) end, desc = "[/] Fuzzily search in current buffer", mode = "n", }, -- Also possible to pass additional configuration options. -- See `:help telescope.builtin.live_grep()` for information about particular keys { "s/", function() telescope_builtin.live_grep({ grep_open_files = true, prompt_title = "Live Grep in Open Files", }) end, desc = "[S]earch [/] in Open Files", mode = "n", }, -- Shortcut for searching your neovim configuration files { "sn", function() telescope_builtin.find_files({ cwd = vim.fn.stdpath("config") }) end, desc = "[S]earch [N]eovim files", mode = "n", }, } end, todo_comments = { { "]t", function() require("todo-comments").jump_next() end, desc = "Next Todo Comment", }, { "[t", function() require("todo-comments").jump_prev() end, desc = "Previous Todo Comment", }, { "xt", "Trouble todo toggle", desc = "Todo" }, { "xT", "Trouble todo toggle filter = {tag = {TODO,FIX,FIXME}}", desc = "Todo/Fix/Fixme", }, { "st", "TodoTelescope", desc = "Todo" }, { "sT", "TodoTelescope keywords=TODO,FIX,FIXME", desc = "Todo/Fix/Fixme", }, }, trouble = { { "xx", "Trouble diagnostics toggle", desc = "Diagnostics" }, { "xX", "Trouble diagnostics toggle filter.buf=0", desc = "Buffer Diagnostics", }, { "cs", "Trouble symbols toggle", desc = "Symbols" }, { "cS", "Trouble lsp toggle", desc = "LSP references/definitions/... (Trouble)", }, { "xL", "Trouble loclist toggle", desc = "Location List" }, { "xQ", "Trouble qflist toggle", desc = "Quickfix List" }, { "[q", function() if require("trouble").is_open() then require("trouble").prev({ skip_groups = true, jump = true }) else local ok, err = pcall(vim.cmd.cprev) if not ok then vim.notify(err, vim.log.levels.ERROR) end end end, desc = "Previous Trouble/Quickfix Item", }, { "]q", function() if require("trouble").is_open() then require("trouble").next({ skip_groups = true, jump = true }) else local ok, err = pcall(vim.cmd.cnext) if not ok then if err then vim.notify(err, vim.log.levels.ERROR) else vim.notify("An error occured but returned nil!", vim.log.levels.ERROR) end end end end, desc = "Next Trouble/Quickfix Item", }, }, rainbow_delimiters = { { "(", function() local module = require("rainbow-delimiters") local bufnr = vim.api.nvim_get_current_buf() local is_enabled = module.is_enabled(bufnr) if is_enabled then module.disable(bufnr) print("Rainbow Delimiters: OFF") else module.enable(bufnr) print("Rainbow Delimiters: ON") end end, desc = "Toggle Rainbow Delimiters" }, }, }