return { "folke/snacks.nvim", priority = 1000, lazy = false, ---@type snacks.Config opts = { bigfile = { enabled = true }, dashboard = { enabled = true, 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 = "terminal", cmd = "ascii-image-converter ~/.config/nvimimg.jpg -C -c", random = 10, pane = 2, indent = 4, height = 30, }, }, preset = { header = [[ ▄▄▄▄▄▄▄ ▄▄▄ ▄▄▄ ▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄ ▄▄ █ █ █ █ █ █ █ █ ██ █ █ █ █ █ ▄▄▄█ █ █ █ ▄ █ ▄▄▄▄▄█ █ ▄ █ ▄▄▄█ █▄█ █ █ █▄▄▄█ █ █ █ █▄█ █ █▄▄▄▄▄ █ █ █ █ █▄▄▄█ █ █ ▄▄▄█ █▄▄▄█ █ █▄▄▄▄▄ █▄▄▄ █ █▄█ █ ▄▄▄█ █ █ █▄▄▄█ █ █ ▄ █▄▄▄▄▄█ █ ██ █ █▄▄▄ █ █ █▄▄▄▄▄▄▄█▄▄▄▄▄▄▄█▄▄▄█▄█ █▄▄█▄▄▄▄▄▄▄█▄▄▄██▄▄▄▄▄▄██▄▄▄▄▄▄▄█ █▄▄▄█ ]], -- stylua: ignore ---@type snacks.dashboard.Item[] keys = { { icon = " ", key = "f", desc = "Find File", action = ":lua Snacks.dashboard.pick('files')" }, { icon = " ", key = "n", desc = "New File", action = ":ene | startinsert" }, { icon = " ", key = "g", desc = "Find Text", action = ":lua Snacks.dashboard.pick('live_grep')" }, { icon = " ", key = "r", desc = "Recent Files", action = ":lua Snacks.dashboard.pick('oldfiles')" }, { icon = " ", key = "c", desc = "Config", action = ":lua Snacks.dashboard.pick('files', {cwd = vim.fn.stdpath('config')})" }, { icon = " ", key = "s", desc = "Restore Session", section = "session" }, { icon = " ", key = "x", desc = "Lazy Extras", action = ":LazyExtras" }, { icon = "󰒲 ", key = "l", desc = "Lazy", action = ":Lazy" }, { icon = " ", key = "q", desc = "Quit", action = ":qa" }, }, }, }, indent = { enabled = true }, input = { enabled = true }, notifier = { enabled = true, timeout = 3000, }, quickfile = { enabled = true }, scroll = { enabled = true }, statuscolumn = { enabled = true }, words = { enabled = true }, styles = { notification = { wo = { wrap = true }, -- Wrap notifications }, }, }, keys = { { "z", function() Snacks.zen() end, desc = "Toggle Zen Mode", }, { "Z", function() Snacks.zen.zoom() end, desc = "Toggle Zoom", }, { ".", function() Snacks.scratch() end, desc = "Toggle Scratch Buffer", }, { "S", function() Snacks.scratch.select() end, desc = "Select Scratch Buffer", }, { "n", function() Snacks.notifier.show_history() end, desc = "Notification History", }, { "bd", function() Snacks.bufdelete() end, desc = "Delete Buffer", }, { "cR", function() Snacks.rename.rename_file() end, desc = "Rename File", }, { "gB", function() Snacks.gitbrowse() end, desc = "Git Browse", mode = { "n", "v" }, }, { "gb", function() Snacks.git.blame_line() end, desc = "Git Blame Line", }, { "gf", function() Snacks.lazygit.log_file() end, desc = "Lazygit Current File History", }, { "gg", function() Snacks.lazygit() end, desc = "Lazygit", }, { "gl", function() Snacks.lazygit.log() end, desc = "Lazygit Log (cwd)", }, { "un", function() Snacks.notifier.hide() end, desc = "Dismiss All Notifications", }, { "", function() Snacks.terminal() end, desc = "Toggle Terminal", }, { "", function() Snacks.terminal() end, desc = "which_key_ignore", }, { "]]", function() Snacks.words.jump(vim.v.count1) end, desc = "Next Reference", mode = { "n", "t" }, }, { "[[", function() Snacks.words.jump(-vim.v.count1) end, desc = "Prev Reference", mode = { "n", "t" }, }, { "N", desc = "Neovim News", function() Snacks.win({ file = vim.api.nvim_get_runtime_file("doc/news.txt", false)[1], width = 0.6, height = 0.6, wo = { spell = false, wrap = false, signcolumn = "yes", statuscolumn = " ", conceallevel = 3, }, }) end, }, }, init = function() vim.api.nvim_create_autocmd("User", { pattern = "VeryLazy", callback = function() -- Setup some globals for debugging (lazy-loaded) _G.dd = function(...) Snacks.debug.inspect(...) end _G.bt = function() Snacks.debug.backtrace() end vim.print = _G.dd -- Override print to use snacks for `:=` command -- Create some toggle mappings Snacks.toggle.option("spell", { name = "Spelling" }):map("us") Snacks.toggle.option("wrap", { name = "Wrap" }):map("uw") Snacks.toggle.option("relativenumber", { name = "Relative Number" }):map("uL") Snacks.toggle.diagnostics():map("ud") Snacks.toggle.line_number():map("ul") Snacks.toggle .option("conceallevel", { off = 0, on = vim.o.conceallevel > 0 and vim.o.conceallevel or 2 }) :map("uc") Snacks.toggle.treesitter():map("uT") Snacks.toggle.option("background", { off = "light", on = "dark", name = "Dark Background" }):map("ub") Snacks.toggle.inlay_hints():map("uh") Snacks.toggle.indent():map("ug") Snacks.toggle.dim():map("uD") end, }) end, }