irongit

A readme explaining how to make neovim work fast

hygo-vim/lua/plugins/snacks.lua
549 lines10 KBLua
1local cwd = vim.fn.getcwd()
2return {
3 "folke/snacks.nvim",
4 priority = 1000,
5 lazy = false,
6 ---@type snacks.Config
7 opts = {
8 bigfile = { enabled = true },
9 dashboard = { enabled = true },
10 explorer = { enabled = true },
11 indent = { enabled = true },
12 input = { enabled = true },
13 notifier = {
14 enabled = true,
15 timeout = 3000,
16 },
17 picker = { enabled = true },
18 quickfile = { enabled = true },
19 scope = { enabled = true },
20 scroll = { enabled = true },
21 statuscolumn = { enabled = true },
22 words = { enabled = true },
23 styles = {},
24 },
25 keys = {
26 -- Top Pickers & Explorer
27 {
28 "<leader><space>",
29 function()
30 Snacks.picker.smart({ cwd = cwd })
31 end,
32 desc = "Smart Find Files",
33 },
34 {
35 "<leader>,",
36 function()
37 Snacks.picker.buffers()
38 end,
39 desc = "Buffers",
40 },
41 {
42 "<leader>/",
43 function()
44 Snacks.picker.grep()
45 end,
46 desc = "Grep",
47 },
48 {
49 "<leader>:",
50 function()
51 Snacks.picker.command_history()
52 end,
53 desc = "Command History",
54 },
55 {
56 "<leader>n",
57 function()
58 Snacks.picker.notifications()
59 end,
60 desc = "Notification History",
61 },
62 {
63 "<leader>e",
64 function()
65 Snacks.explorer({ cwd = cwd })
66 end,
67 desc = "File Explorer",
68 },
69 {
70 "<leader>E",
71 function()
72 Snacks.explorer()
73 end,
74 desc = "Root File Explorer",
75 },
76 -- find
77 {
78 "<leader>fb",
79 function()
80 Snacks.picker.buffers()
81 end,
82 desc = "Buffers",
83 },
84 {
85 "<leader>fc",
86 function()
87 Snacks.picker.files({ cwd = vim.fn.stdpath("config") })
88 end,
89 desc = "Find Config File",
90 },
91 {
92 "<leader>ff",
93 function()
94 Snacks.picker.files()
95 end,
96 desc = "Find Files",
97 },
98 {
99 "<leader>fg",
100 function()
101 Snacks.picker.git_files()
102 end,
103 desc = "Find Git Files",
104 },
105 {
106 "<leader>fp",
107 function()
108 Snacks.picker.projects()
109 end,
110 desc = "Projects",
111 },
112 {
113 "<leader>fr",
114 function()
115 Snacks.picker.recent()
116 end,
117 desc = "Recent",
118 },
119 -- git
120 {
121 "<leader>gb",
122 function()
123 Snacks.picker.git_branches()
124 end,
125 desc = "Git Branches",
126 },
127 {
128 "<leader>gl",
129 function()
130 Snacks.picker.git_log()
131 end,
132 desc = "Git Log",
133 },
134 {
135 "<leader>gL",
136 function()
137 Snacks.picker.git_log_line()
138 end,
139 desc = "Git Log Line",
140 },
141 {
142 "<leader>gs",
143 function()
144 Snacks.picker.git_status()
145 end,
146 desc = "Git Status",
147 },
148 {
149 "<leader>gS",
150 function()
151 Snacks.picker.git_stash()
152 end,
153 desc = "Git Stash",
154 },
155 {
156 "<leader>gd",
157 function()
158 Snacks.picker.git_diff()
159 end,
160 desc = "Git Diff (Hunks)",
161 },
162 {
163 "<leader>gf",
164 function()
165 Snacks.picker.git_log_file()
166 end,
167 desc = "Git Log File",
168 },
169 -- Grep
170 {
171 "<leader>sb",
172 function()
173 Snacks.picker.lines()
174 end,
175 desc = "Buffer Lines",
176 },
177 {
178 "<leader>sB",
179 function()
180 Snacks.picker.grep_buffers()
181 end,
182 desc = "Grep Open Buffers",
183 },
184 {
185 "<leader>sg",
186 function()
187 Snacks.picker.grep()
188 end,
189 desc = "Grep",
190 },
191 {
192 "<leader>sw",
193 function()
194 Snacks.picker.grep_word()
195 end,
196 desc = "Visual selection or word",
197 mode = { "n", "x" },
198 },
199 -- search
200 {
201 '<leader>s"',
202 function()
203 Snacks.picker.registers()
204 end,
205 desc = "Registers",
206 },
207 {
208 "<leader>s/",
209 function()
210 Snacks.picker.search_history()
211 end,
212 desc = "Search History",
213 },
214 {
215 "<leader>sa",
216 function()
217 Snacks.picker.autocmds()
218 end,
219 desc = "Autocmds",
220 },
221 {
222 "<leader>sb",
223 function()
224 Snacks.picker.lines()
225 end,
226 desc = "Buffer Lines",
227 },
228 {
229 "<leader>sc",
230 function()
231 Snacks.picker.command_history()
232 end,
233 desc = "Command History",
234 },
235 {
236 "<leader>sC",
237 function()
238 Snacks.picker.commands()
239 end,
240 desc = "Commands",
241 },
242 {
243 "<leader>sd",
244 function()
245 Snacks.picker.diagnostics()
246 end,
247 desc = "Diagnostics",
248 },
249 {
250 "<leader>sD",
251 function()
252 Snacks.picker.diagnostics_buffer()
253 end,
254 desc = "Buffer Diagnostics",
255 },
256 {
257 "<leader>sh",
258 function()
259 Snacks.picker.help()
260 end,
261 desc = "Help Pages",
262 },
263 {
264 "<leader>sH",
265 function()
266 Snacks.picker.highlights()
267 end,
268 desc = "Highlights",
269 },
270 {
271 "<leader>si",
272 function()
273 Snacks.picker.icons()
274 end,
275 desc = "Icons",
276 },
277 {
278 "<leader>sj",
279 function()
280 Snacks.picker.jumps()
281 end,
282 desc = "Jumps",
283 },
284 {
285 "<leader>sk",
286 function()
287 Snacks.picker.keymaps()
288 end,
289 desc = "Keymaps",
290 },
291 {
292 "<leader>sl",
293 function()
294 Snacks.picker.loclist()
295 end,
296 desc = "Location List",
297 },
298 {
299 "<leader>sm",
300 function()
301 Snacks.picker.marks()
302 end,
303 desc = "Marks",
304 },
305 {
306 "<leader>sM",
307 function()
308 Snacks.picker.man()
309 end,
310 desc = "Man Pages",
311 },
312 {
313 "<leader>sp",
314 function()
315 Snacks.picker.lazy()
316 end,
317 desc = "Search for Plugin Spec",
318 },
319 {
320 "<leader>sq",
321 function()
322 Snacks.picker.qflist()
323 end,
324 desc = "Quickfix List",
325 },
326 {
327 "<leader>sR",
328 function()
329 Snacks.picker.resume()
330 end,
331 desc = "Resume",
332 },
333 {
334 "<leader>su",
335 function()
336 Snacks.picker.undo()
337 end,
338 desc = "Undo History",
339 },
340 {
341 "<leader>uC",
342 function()
343 Snacks.picker.colorschemes()
344 end,
345 desc = "Colorschemes",
346 },
347 -- LSP
348 {
349 "gd",
350 function()
351 Snacks.picker.lsp_definitions()
352 end,
353 desc = "Goto Definition",
354 },
355 {
356 "gD",
357 function()
358 Snacks.picker.lsp_declarations()
359 end,
360 desc = "Goto Declaration",
361 },
362 {
363 "gr",
364 function()
365 Snacks.picker.lsp_references()
366 end,
367 nowait = true,
368 desc = "References",
369 },
370 {
371 "gI",
372 function()
373 Snacks.picker.lsp_implementations()
374 end,
375 desc = "Goto Implementation",
376 },
377 {
378 "gy",
379 function()
380 Snacks.picker.lsp_type_definitions()
381 end,
382 desc = "Goto T[y]pe Definition",
383 },
384 {
385 "<leader>ss",
386 function()
387 Snacks.picker.lsp_symbols()
388 end,
389 desc = "LSP Symbols",
390 },
391 {
392 "<leader>sS",
393 function()
394 Snacks.picker.lsp_workspace_symbols()
395 end,
396 desc = "LSP Workspace Symbols",
397 },
398 -- Other
399 {
400 "<leader>z",
401 function()
402 Snacks.zen()
403 end,
404 desc = "Toggle Zen Mode",
405 },
406 {
407 "<leader>Z",
408 function()
409 Snacks.zen.zoom()
410 end,
411 desc = "Toggle Zoom",
412 },
413 {
414 "<leader>.",
415 function()
416 Snacks.scratch()
417 end,
418 desc = "Toggle Scratch Buffer",
419 },
420 {
421 "<leader>S",
422 function()
423 Snacks.scratch.select()
424 end,
425 desc = "Select Scratch Buffer",
426 },
427 {
428 "<leader>n",
429 function()
430 Snacks.notifier.show_history()
431 end,
432 desc = "Notification History",
433 },
434 {
435 "<leader>bd",
436 function()
437 Snacks.bufdelete()
438 end,
439 desc = "Delete Buffer",
440 },
441 {
442 "<leader>cR",
443 function()
444 Snacks.rename.rename_file()
445 end,
446 desc = "Rename File",
447 },
448 {
449 "<leader>gB",
450 function()
451 Snacks.gitbrowse()
452 end,
453 desc = "Git Browse",
454 mode = { "n", "v" },
455 },
456 {
457 "<leader>gg",
458 function()
459 Snacks.lazygit()
460 end,
461 desc = "Lazygit",
462 },
463 {
464 "<leader>un",
465 function()
466 Snacks.notifier.hide()
467 end,
468 desc = "Dismiss All Notifications",
469 },
470 {
471 "<c-/>",
472 function()
473 Snacks.terminal()
474 end,
475 desc = "Toggle Terminal",
476 },
477 {
478 "<c-_>",
479 function()
480 Snacks.terminal()
481 end,
482 desc = "which_key_ignore",
483 },
484 {
485 "]]",
486 function()
487 Snacks.words.jump(vim.v.count1)
488 end,
489 desc = "Next Reference",
490 mode = { "n", "t" },
491 },
492 {
493 "[[",
494 function()
495 Snacks.words.jump(-vim.v.count1)
496 end,
497 desc = "Prev Reference",
498 mode = { "n", "t" },
499 },
500 {
501 "<leader>N",
502 desc = "Neovim News",
503 function()
504 Snacks.win({
505 file = vim.api.nvim_get_runtime_file("doc/news.txt", false)[1],
506 width = 0.6,
507 height = 0.6,
508 wo = {
509 spell = false,
510 wrap = false,
511 signcolumn = "yes",
512 statuscolumn = " ",
513 conceallevel = 3,
514 },
515 })
516 end,
517 },
518 },
519 init = function()
520 vim.api.nvim_create_autocmd("User", {
521 pattern = "VeryLazy",
522 callback = function()
523 -- Setup some globals for debugging (lazy-loaded)
524 _G.dd = function(...)
525 Snacks.debug.inspect(...)
526 end
527 _G.bt = function()
528 Snacks.debug.backtrace()
529 end
530 vim.print = _G.dd -- Override print to use snacks for `:=` command
531
532 -- Create some toggle mappings
533 Snacks.toggle.option("spell", { name = "Spelling" }):map("<leader>us")
534 Snacks.toggle.option("wrap", { name = "Wrap" }):map("<leader>uw")
535 Snacks.toggle.option("relativenumber", { name = "Relative Number" }):map("<leader>uL")
536 Snacks.toggle.diagnostics():map("<leader>ud")
537 Snacks.toggle.line_number():map("<leader>ul")
538 Snacks.toggle
539 .option("conceallevel", { off = 0, on = vim.o.conceallevel > 0 and vim.o.conceallevel or 2 })
540 :map("<leader>uc")
541 Snacks.toggle.treesitter():map("<leader>uT")
542 Snacks.toggle.option("background", { off = "light", on = "dark", name = "Dark Background" }):map("<leader>ub")
543 Snacks.toggle.inlay_hints():map("<leader>uh")
544 Snacks.toggle.indent():map("<leader>ug")
545 Snacks.toggle.dim():map("<leader>uD")
546 end,
547 })
548 end,
549}