return { { 'folke/snacks.nvim', dependencies = { 'folke/trouble.nvim', }, lazy = false, priority = 1000, opts = { bigfile = { enabled = true }, bufdelete = { enabled = true }, dim = { enabled = true }, quickfile = { enabled = true }, notifier = { enabled = true }, terminal = { enabled = true }, indent = { enabled = true }, input = { enabled = true }, words = { enabled = true }, scope = { enabled = true }, picker = { enabled = true, matcher = { frecency = true }, layout = { preset = function() return vim.o.columns >= 120 and 'telescope' or 'vertical' end, }, sources = { files = { hidden = true }, grep = { hidden = true }, explorer = { hidden = true }, git_files = { untracked = true }, smart = { multi = { 'buffers', 'recent', 'files' }, }, }, actions = { trouble_open = function(...) return require('trouble.sources.snacks').actions.trouble_open.action(...) end, }, win = { input = { keys = { ['wq'] = { 'close', mode = 'i' }, [''] = { 'trouble_open', mode = { 'n', 'i' } }, }, }, list = { keys = { ['wq'] = { 'close', mode = 'i' }, }, }, }, }, }, config = function(_, opts) require('snacks').setup(opts) vim.api.nvim_set_hl(0, 'SnacksPickerDir', { fg = '#cccccc' }) end, keys = { { '', function() Snacks.terminal.toggle() end, mode = { 'n', 't' }, noremap = true, desc = 'terminal open', }, { '', function() Snacks.terminal.toggle('$SHELL') end, mode = { 'n', 't' }, noremap = true, desc = 'terminal open', }, { ']r', function() Snacks.words.jump(1, true) end, noremap = true, desc = 'next reference', }, { '[r', function() Snacks.words.jump(-1, true) end, noremap = true, desc = 'next reference', }, { '\\z', function() if Snacks.dim.enabled then Snacks.dim.disable() else Snacks.dim.enable() end end, noremap = true, desc = 'next reference', }, { 'gq', function() Snacks.bufdelete() end, noremap = true, silent = true, }, { 'gQ', function() Snacks.bufdelete.other() end, noremap = true, silent = true, }, { 'ff', function() Snacks.picker.smart() end, noremap = true, desc = 'Fuzzy find files', }, { 'fe', function() Snacks.explorer() end, noremap = true, desc = 'snacks explorer', }, { 'fg', function() Snacks.picker.git_files() end, noremap = true, silent = true, desc = 'Fuzzy find files', }, { 'fa', function() Snacks.picker.grep() end, noremap = true, silent = true, desc = 'Fuzzy find grep', }, { 'f8', function() Snacks.picker.grep_word() end, noremap = true, silent = true, desc = 'Fuzzy find grep word', }, { 'f?', function() Snacks.picker.pickers() end, noremap = true, silent = true, desc = 'See all pickers', }, { 'fu', function() Snacks.picker.undo() end, noremap = true, silent = true, desc = 'Pick undotree', }, { 'fj', function() Snacks.picker.jumps() end, noremap = true, silent = true, desc = 'Pick jumps', }, { 'f.', function() Snacks.picker.resume() end, noremap = true, silent = true, desc = 'Fuzzy find resume', }, { '', function() Snacks.picker.buffers() end, noremap = true, silent = true, desc = 'Fuzzy find buffers', }, { 'fn', function() Snacks.picker.notifications() end, noremap = true, silent = true, desc = 'pick notifications', }, { 'fm', function() vim.cmd.delmarks { args = { '0-9' } } Snacks.picker.pick { finder = 'vim_marks', format = 'file', ['local'] = false, global = true, actions = { markdel = function(picker) for _, item in ipairs(picker:selected()) do vim.cmd.delmarks { args = { item.label } } end vim.cmd('wshada') picker.list:set_selected() picker.list:set_target() picker:find() end, }, win = { input = { keys = { [''] = { 'markdel', mode = { 'n', 'i' } }, }, }, list = { keys = { ['dd'] = 'markdel' }, }, }, } end, noremap = true, silent = true, desc = 'pick global marks', }, { 'jf', function() require('plugins.lib.snacks_jj').status() end, noremap = true, silent = true, desc = 'pick notifications', }, { 'jj', function() require('plugins.lib.snacks_jj').revs() end, noremap = true, silent = true, desc = 'pick notifications', }, }, }, }