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 }, scope = { enabled = true }, terminal = { enabled = true }, indent = { enabled = true }, input = { enabled = true }, words = { 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', 'git_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', }, { 'fE', function() Snacks.explorer.reveal() end, noremap = true, silent = true, desc = 'snacks explorer open current file', }, { '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', }, { "f'", function() Snacks.picker.marks() end, noremap = true, silent = true, desc = 'Pick marks', }, { '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', }, { 'fj', function() require('nvim.lua.plugins.lib.snacks_jj').status() end, noremap = true, silent = true, desc = 'pick notifications', }, { 'fr', function() require('nvim.lua.plugins.lib.snacks_jj').revs() end, noremap = true, silent = true, desc = 'pick notifications', }, }, }, }