nvim/lua/plugins/snacks.lua

134 lines
6.7 KiB
Lua

return {
'folke/snacks.nvim',
priority = 1000,
version = false,
lazy = false,
---@type snacks.Config
opts = {
-- your configuration comes here
-- or leave it empty to use the default settings
-- refer to the configuration section below
bigfile = { enabled = true },
notifier = { enabled = false },
quickfile = { enabled = true },
statuscolumn = { enabled = true },
words = {
enabled = true,
modes = { 'n', 'c' },
},
indent = {
indent = {
hl = 'CmpItemKindNull',
only_scope = false,
only_current = false,
},
enabled = true,
animate = {
enabled = false,
},
scope = {
enabled = false,
},
chunk = {
enabled = false,
hl = 'Debug',
},
},
dashboard = {
sections = {
{ section = 'header' },
{ icon = '', title = 'Keymaps', section = 'keys', indent = 2, padding = 1 },
{ icon = '', title = 'Recent Files', section = 'recent_files', indent = 2, padding = 1 },
{ icon = '', title = 'Projects', section = 'projects', indent = 2, padding = 1 },
{ section = 'startup' },
},
},
picker = {
matcher = {
frecency = true,
cwd_bonus = true,
filename_bonus = true,
history_bonus = true,
},
win = {
input = {
keys = {
['<c-t>'] = { 'edit_tab', mode = { 'n', 'i' } },
},
},
},
formatters = {
file = {
truncate = 100,
filename_first = true,
},
},
},
},
keys = {
{ '<space>g', function() Snacks.lazygit() end, desc = 'Lazygit' },
{ '<space>gf', function() Snacks.lazygit.log_file() end, desc = 'Lazygit Current File History' },
{ '<space>gl', function() Snacks.lazygit.log() end, desc = 'Lazygit Log (cwd)' },
{ 'm', function() Snacks.words.jump(vim.v.count1) end, desc = 'Next Reference', mode = { 'n' } },
{ '<S-m>', function() Snacks.words.jump(-vim.v.count1) end, desc = 'Prev Reference', mode = { 'n' } },
-- Top Pickers & Explorer
{ '<leader><space>', function() Snacks.picker.smart() end, desc = 'Smart Find Files' },
{ '<leader>b', function() Snacks.picker.buffers() end, desc = 'Buffers' },
{ '<leader>l', function() Snacks.picker.grep() end, desc = 'Grep' },
{ '<leader>:', function() Snacks.picker.command_history() end, desc = 'Command History' },
{ '<leader>n', function() Snacks.picker.notifications() end, desc = 'Notification History' },
{ '<leader>e', function() Snacks.explorer() end, desc = 'File Explorer' },
-- find
-- { "<leader>fb", function() Snacks.picker.buffers() end, desc = "Buffers" },
-- { "<leader>f", function() Snacks.picker.files({ cwd = vim.fn.stdpath("config") }) end, desc = "Find Config File" },
{ '<leader>f', function() Snacks.picker.files() end, desc = 'Find Files' },
{ '<leader>g', function() Snacks.picker.git_files() end, desc = 'Find Git Files' },
{ '<space>p', function() Snacks.picker.projects() end, desc = 'Projects' },
{ '<leader>o', function() Snacks.picker.recent() end, desc = 'Recent' },
{ '<leader>i', function() Snacks.picker.recent({ filter = { cwd = true } }) end, desc = 'Recent in cwd' },
-- git
{ '<leader>nb', function() Snacks.picker.git_branches() end, desc = 'Git Branches' },
{ '<leader>nl', function() Snacks.picker.git_log() end, desc = 'Git Log' },
{ '<leader>nL', function() Snacks.picker.git_log_line() end, desc = 'Git Log Line' },
{ '<leader>ns', function() Snacks.picker.git_status() end, desc = 'Git Status' },
{ '<leader>nS', function() Snacks.picker.git_stash() end, desc = 'Git Stash' },
{ '<leader>nd', function() Snacks.picker.git_diff() end, desc = 'Git Diff (Hunks)' },
{ '<leader>nf', function() Snacks.picker.git_log_file() end, desc = 'Git Log File' },
-- Grep
{ '<leader>sb', function() Snacks.picker.lines() end, desc = 'Buffer Lines' },
{ '<leader>sB', function() Snacks.picker.grep_buffers() end, desc = 'Grep Open Buffers' },
-- { "<leader>sg", function() Snacks.picker.grep() end, desc = "Grep" },
{ '<leader>d', function() Snacks.picker.grep_word() end, desc = 'Visual selection or word', mode = { 'n', 'x' } },
-- search
-- { '<leader>s"', function() Snacks.picker.registers() end, desc = "Registers" },
-- { '<leader>s/', function() Snacks.picker.search_history() end, desc = "Search History" },
-- { "<leader>sa", function() Snacks.picker.autocmds() end, desc = "Autocmds" },
-- { "<leader>sb", function() Snacks.picker.lines() end, desc = "Buffer Lines" },
-- { "<leader>sc", function() Snacks.picker.command_history() end, desc = "Command History" },
-- { "<leader>sC", function() Snacks.picker.commands() end, desc = "Commands" },
{ '<leader>v', function() Snacks.picker.diagnostics() end, desc = 'Diagnostics' },
{ '<space>V', function() Snacks.picker.diagnostics_buffer() end, desc = 'Buffer Diagnostics' },
{ '<leader>sh', function() Snacks.picker.help() end, desc = 'Help Pages' },
{ '<leader>sH', function() Snacks.picker.highlights() end, desc = 'Highlights' },
{ '<leader>si', function() Snacks.picker.icons() end, desc = 'Icons' },
{ '<leader>j', function() Snacks.picker.jumps() end, desc = 'Jumps' },
{ '<leader>sk', function() Snacks.picker.keymaps() end, desc = 'Keymaps' },
{ '<leader>sl', function() Snacks.picker.loclist() end, desc = 'Location List' },
{ '<leader>sm', function() Snacks.picker.marks() end, desc = 'Marks' },
{ '<leader>sM', function() Snacks.picker.man() end, desc = 'Man Pages' },
{ '<leader>sp', function() Snacks.picker.lazy() end, desc = 'Search for Plugin Spec' },
{ '<leader>sq', function() Snacks.picker.qflist() end, desc = 'Quickfix List' },
{ '<leader>sR', function() Snacks.picker.resume() end, desc = 'Resume' },
{ '<leader>su', function() Snacks.picker.undo() end, desc = 'Undo History' },
-- { "<leader>uC", function() Snacks.picker.colorschemes() end, desc = "Colorschemes" },
-- LSP
{ '<space>d', function() Snacks.picker.lsp_definitions() end, desc = 'Goto Definition' },
{ '<space>D', function() Snacks.picker.lsp_declarations() end, desc = 'Goto Declaration' },
{ '<space>r', function() Snacks.picker.lsp_references() end, nowait = true, desc = 'References' },
{ '<space>I', function() Snacks.picker.lsp_implementations() end, desc = 'Goto Implementation' },
{ '<space>e', function() Snacks.picker.lsp_type_definitions() end, desc = 'Goto T[y]pe Definition' },
{ '<A-m>', function() Snacks.picker.lsp_symbols() end, desc = 'LSP Symbols' },
{ '<leader>sS', function() Snacks.picker.lsp_workspace_symbols() end, desc = 'LSP Workspace Symbols' },
},
}