this repo has no description
1local wk = require("which-key")
2
3local function qflist_is_open()
4 local is_open = false
5 for _, win in ipairs(vim.fn.getwininfo()) do
6 if win.quickfix == 1 then
7 is_open = true
8 break
9 end
10 end
11 return is_open
12end
13local function toggle_qf_list()
14 if qflist_is_open() then
15 vim.cmd("cclose")
16 else
17 vim.cmd("copen")
18 end
19end
20
21wk.add({
22 { "<C-h>", "<C-w>h", desc = "Move focus to left pane" },
23 { "<C-j>", "<C-w>j", desc = "Move focus to below pane" },
24 { "<C-k>", "<C-w>k", desc = "Move focus to above pane" },
25 { "<C-l>", "<C-w>l", desc = "Move focus to right pane" },
26
27 { "<M-h>", "5zh", desc = "Scroll left" },
28 { "<M-l>", "5zl", desc = "Scroll right" },
29
30 { "H", ":bp<cr>", desc = "Switch to previous buffer" },
31 { "L", ":bn<cr>", desc = "Switch to next buffer" },
32
33 -- Prevents the pane from being removed when closing a buffer
34 { "<leader>d", "<cmd>bp<bar>sp<bar>bn<bar>bd<cr>", desc = "Close buffer" },
35 { "<leader>D", "<cmd>bp<bar>sp<bar>bn<bar>bd!<cr>", desc = "Close buffer (force)" },
36 -- { "<leader>d", "<cmd>bd<cr>", desc = "Close buffer" },
37 -- { "<leader>D", "<cmd>bd!<cr>", desc = "Close buffer (force)" },
38 { "<leader>BD", "<cmd>bufdo bd<cr>", desc = "Close all buffers" },
39
40 { "<leader>n", "<cmd>vnew<CR>", desc = "New buffer" },
41
42 { "<C-t>", "<cmd>tabnext<cr>", desc = "Next tab", group = "tab" },
43 { "<leader>tn", "<cmd>tabnew<cr>", desc = "New Tab", group = "tab" },
44 { "<leader>td", "<cmd>tabclose<cr>", desc = "Close Tab", group = "tab" },
45
46 { "<leader>LC", "<cmd>ConfigLocalEdit<cr>", desc = "Edit local nvim config" },
47 -- { "<leader>N", "<cmd>vsp<cr><C-w>l<cmd>e NOTES.sethetter.md<cr>", desc = "Open personal notes" },
48 { "<leader>N", "<cmd>e NOTES.sethetter.md<cr>", desc = "Open personal notes" },
49
50 {
51 "<leader>/",
52 "<cmd>CommentToggle<cr>",
53 desc = "Toggle comment",
54 mode = { "n" },
55 },
56 {
57 "<leader>/",
58 ":'<,'>CommentToggle<cr>",
59 desc = "Toggle comment",
60 mode = { "v" },
61 },
62
63 -- { "E", "<cmd>Neotree position=current toggle reveal<cr>", desc = "Open file explorer" },
64 { "E", "<cmd>Neotree toggle reveal position=current<cr>", desc = "Open file explorer" },
65 { "<leader>e", "<cmd>Neotree toggle position=current<cr>", desc = "Open file explorer" },
66 -- { "<leader>E", "<cmd>Neotree focus reveal position=current<cr>", desc = "Open file explorer" },
67
68 { "<leader>h", "<cmd>noh<cr>", desc = "Clear highlight" },
69 { "<leader>v/", "<cmd>vsp<cr>", desc = "Split vertical", group = "split" },
70 { "<leader>v?", "<cmd>sp<cr>", desc = "Split horizontal", group = "split" },
71
72 {
73 "<leader>f",
74 "<cmd>Telescope find_files find_command=rg,--ignore,--hidden,--files,--iglob=!.git sort_mru=true<cr>",
75 desc = "Find files",
76 },
77 { "<leader>b", "<cmd>Telescope buffers<cr>", desc = "Buffers" },
78 { "<leader>sp", "<cmd>Telescope live_grep<cr>", desc = "Live grep" },
79 { "<leader>sh", "<cmd>Telescope help_tags<cr>", desc = "Help tags" },
80 { "<leader>sc", "<cmd>Telescope commands<cr>", desc = "Commands" },
81
82 {
83 "<leader>cl",
84 toggle_qf_list,
85 desc = "Toggle quickfix list",
86 group = "quickfix",
87 },
88 { "<leader>cn", "<cmd>cnext<cr>", desc = "Next QF item", group = "quickfix" },
89 { "<leader>cp", "<cmd>cprev<cr>", desc = "Prev QF item", group = "quickfix" },
90
91 {
92 "<leader>m",
93 function()
94 vim.diagnostic.setqflist({ open = true, focus = true })
95 end,
96 desc = "Diagnostics in qf list",
97 },
98
99 { "<leader>M", "<cmd>messages<cr>", desc = "Messages" },
100
101 { "<leader>T", ":term ", desc = "Run a terminal command" },
102
103 { "<leader>o", "<cmd>AerialToggle<cr>", desc = "Symbols outline" },
104
105 { "<leader>Z", "<cmd>Goyo<cr>", desc = "Goyo toggle" },
106
107 { "<leader>w", "<cmd>w<cr>", desc = "Save" },
108 { "<leader>X", "<cmd>x<cr>", desc = "Save and close" },
109 { "<leader>q", "<cmd>q<cr>", desc = "Quit" },
110 { "<leader>Q", "<cmd>qa<cr>", desc = "Quit all" },
111
112 {
113 "<leader>y",
114 function()
115 local filepath = vim.fn.expand('%:.')
116 local line = vim.fn.line('.')
117 local ref = filepath .. ':' .. line
118 vim.fn.system('pbcopy', ref)
119 vim.notify('Copied: ' .. ref, vim.log.levels.INFO)
120 end,
121 desc = "Copy filepath:line to clipboard"
122 },
123
124 { "[d", "<cmd>lua vim.diagnostic.goto_prev()<cr>", desc = "Previous diagnostic" },
125 { "]d", "<cmd>lua vim.diagnostic.goto_next()<cr>", desc = "Next diagnostic" },
126 { "[g", "<cmd>Gitsigns prev_hunk<cr>", desc = "Previous change" },
127 { "]g", "<cmd>Gitsigns next_hunk<cr>", desc = "Next change" },
128
129 { "K", "<cmd>lua vim.lsp.buf.hover()<cr>", desc = "Hover" },
130
131 { "g", group = "goto" },
132 { "gs", "<cmd>Telescope lsp_document_symbols<cr>", desc = "Document symbols" },
133 { "gS", "<cmd>Telescope lsp_dynamic_workspace_symbols<cr>", desc = "Workspace symbols" },
134 { "gD", "<cmd>lua vim.lsp.buf.declaration()<cr>", desc = "Declaration" },
135 { "gd", "<cmd>lua vim.lsp.buf.definition()<cr>", desc = "Definition" },
136 { "gi", "<cmd>lua vim.lsp.buf.implementation()<cr>", desc = "Implementation" },
137 { "gr", "<cmd>lua vim.lsp.buf.references()<cr>", desc = "References" },
138 { "g.", "<cmd>lua vim.lsp.buf.code_action()<cr>", desc = "Code action" },
139 { "<leader>R", "<cmd>lua vim.lsp.buf.rename()<cr>", desc = "Rename symbol" },
140 { "<leader>F", "<cmd>Format<CR>", desc = "Format buffer" },
141
142 { "<leader>gg", "<cmd>LazyGit<cr>", desc = "Lazygit", group = "git" },
143 { "<leader>gs", "<cmd>Telescope git_status<cr>", desc = "Git status", group = "git" },
144 { "<leader>gd", "<cmd>Gitsigns diffthis vertical=true HEAD<cr>", desc = "File diff", group = "git" },
145 { "<leader>Gd", ":Gitsigns diffthis vertical=true ", desc = "File diff provided ref", group = "git" },
146 { "<leader>GD", ":DiffviewOpen ", desc = "Diff provided ref", group = "git" },
147 { "<leader>gh", "<cmd>DiffviewFileHistory %<cr>", desc = "File history", group = "git" },
148 { "<leader>gH", "<cmd>DiffviewFileHistory<cr>", desc = "Git history", group = "git" },
149 { "<leader>gb", "<cmd>Gitsigns toggle_current_line_blame<cr>", desc = "Git history", group = "git" },
150 {
151 "<leader>gl",
152 '<cmd>lua require("gitlinker").get_buf_range_url("n", {action_callback = require("gitlinker.actions").copy_to_clipboard})<cr>',
153 desc = "Copy git url",
154 mode = "n",
155 silent = true,
156 },
157 {
158 "<leader>gl",
159 '<cmd>lua require("gitlinker").get_buf_range_url("v", {action_callback = require("gitlinker.actions").copy_to_clipboard})<cr>',
160 desc = "Copy git url",
161 mode = "v",
162 -- TODO: make this actually silent
163 silent = true,
164 },
165
166 { "<leader>PP", "<cmd>Lazy<cr>", desc = "Manage plugins", group = "plugin" },
167
168 { "<leader>CI", ":CodeCompanion<CR>", desc = "Code Companion inline", mode = { "n", "v" }, group = "codecompanion" },
169 { "<leader>CC", ":CodeCompanionChat<CR>", desc = "Claude edit selection", mode = { "n", "v" }, group = "codecompanion" },
170})