return { -- Main Snacks Configuration with Core Features & Keymaps { "folke/snacks.nvim", priority = 1000, lazy = false, ---@type snacks.Config opts = { bigfile = { enabled = true }, dashboard = { enabled = true }, explorer = { enabled = true }, indent = { enabled = true }, input = { enabled = true }, notifier = { enabled = true }, quickfile = { enabled = true }, scope = { enabled = true }, scroll = { enabled = true }, statuscolumn = { enabled = true }, words = { enabled = true }, picker = { enabled = true, win = { input = { keys = { -- Toggle between root and cwd [""] = { "toggle_cwd", mode = { "n", "i" } }, }, }, }, }, }, -- stylua: ignore keys = { -- Quick Access { ",", function() Snacks.picker.buffers() end, desc = "Buffers" }, { "/", function() Snacks.picker.lines() end, desc = "Buffer Lines" }, { "", function() Snacks.picker.buffers() end, desc = "Buffers" }, -- Find (f prefix) { "fb", function() Snacks.picker.buffers() end, desc = "[F]ind [B]uffers" }, { "fc", function() Snacks.picker.files({ cwd = vim.fn.stdpath('config') }) end, desc = "[F]ind [C]onfig Files" }, { "ff", function() Snacks.picker.files() end, desc = "[F]ind [F]iles" }, { "fg", function() Snacks.picker.git_files() end, desc = "[F]ind [G]it Files" }, { "fr", function() Snacks.picker.recent() end, desc = "[F]ind [R]ecent Files" }, -- Git (g prefix) { "gd", function() Snacks.picker.git_diff() end, desc = "Git [D]iff" }, { "gs", function() Snacks.picker.git_status() end, desc = "Git [S]tatus" }, { "gS", function() Snacks.picker.git_stash() end, desc = "Git [S]tash" }, -- Search (s prefix) - Matching Telescope keymaps { "s.", function() Snacks.picker.recent() end, desc = "[S]earch Recent Files" }, { "s/", function() Snacks.picker.grep_buffers() end, desc = "[S]earch in Open Files" }, { "sb", function() Snacks.picker.lines() end, desc = "[S]earch [B]uffer Lines" }, { "sB", function() Snacks.picker.grep_buffers() end, desc = "[S]earch Open [B]uffers" }, { "sc", function() Snacks.picker.commands() end, desc = "[S]earch [C]ommands" }, { "sd", function() Snacks.picker.diagnostics() end, desc = "[S]earch [D]iagnostics" }, { "sf", function() Snacks.picker.files() end, desc = "[S]earch [F]iles" }, { "sg", function() Snacks.picker.grep() end, desc = "[S]earch by [G]rep" }, { "sh", function() Snacks.picker.help() end, desc = "[S]earch [H]elp" }, { "sk", function() Snacks.picker.keymaps() end, desc = "[S]earch [K]eymaps" }, { "sm", function() Snacks.picker.marks() end, desc = "[S]earch [M]arks" }, { "sn", function() Snacks.picker.files({ cwd = vim.fn.stdpath('config') }) end, desc = "[S]earch [N]eovim files" }, { "sr", function() Snacks.picker.resume() end, desc = "[S]earch [R]esume" }, { "ss", function() Snacks.picker() end, desc = "[S]earch [S]elect Picker" }, { "sw", function() Snacks.picker.grep_word() end, desc = "[S]earch current [W]ord", mode = { "n", "x" } }, -- Notifications { "n", function() Snacks.picker.notifications() end, desc = "Notification History" }, { "un", function() Snacks.notifier.hide() end, desc = "Dismiss Notifications" }, -- Explorer { "fe", function() Snacks.explorer({ cwd = vim.fs.root(0, ".git") or vim.fn.getcwd() }) end, desc = "[F]ile [E]xplorer (root)" }, { "fE", function() Snacks.explorer() end, desc = "[F]ile [E]xplorer (cwd)" }, { "e", "fe", desc = "Explorer (root)", remap = true }, { "E", "fE", desc = "Explorer (cwd)", remap = true }, -- UI { "uC", function() Snacks.picker.colorschemes() end, desc = "Colorschemes" }, }, }, }