.dots/nvim/.config/nvim/lua/lazy-plugins/collection-snacks-nvim.lua

507 lines
8.3 KiB
Lua

return {
"folke/snacks.nvim",
lazy = false,
opts = {
dim = {},
explorer = {
replace_netrw = false,
},
input = {},
lazygit = {},
notifier = {},
picker = {
sources = {
explorer = {
auto_close = true,
hidden = true,
ignored = true,
jump = {
close = true,
},
layout = {
cycle = true,
--- Use the default layout or vertical if the window is too narrow
preset = function()
return vim.o.columns >= 120 and "default" or "vertical"
end,
},
},
},
},
toggle = {},
},
keys = {
-- Lazygit
{
"<leader>hh",
function()
Snacks.lazygit()
end,
desc = "Open Lazygit",
},
{
"<leader>hg",
function()
Snacks.lazygit().log()
end,
desc = "Open Lazygit (log view)",
},
{
"<leader>hf",
function()
Snacks.lazygit().log_file()
end,
desc = "Open Lazygit (current file log view)",
},
-- Top Pickers & Explorer
{
"<leader><space>",
function()
Snacks.picker.smart()
end,
desc = "Smart Find Files",
},
{
"<leader>,",
function()
Snacks.picker.buffers()
end,
desc = "Buffers",
},
{
"<leader>/",
function()
Snacks.picker.grep()
end,
desc = "Grep",
},
{
"<leader>\\",
function()
-- Get a list of all directories in the workspace
local workspace_path = vim.fn.getcwd()
local directories = vim.fn.systemlist("find " .. workspace_path .. " -type d")
-- Present the directories to the user for selection
vim.ui.select(directories, {
prompt = "Select a directory:",
format_item = function(item)
return item
end,
}, function(choice)
if choice then
Snacks.picker.grep({ dirs = { choice } })
else
print("No directory selected")
end
end)
end,
desc = "Grep",
},
{
"<leader>:",
function()
Snacks.picker.command_history()
end,
desc = "Command History",
},
{
"<leader>n",
function()
Snacks.picker.notifications()
end,
desc = "Notification History",
},
-- dim
{
"<leader>cj",
function()
Snacks.dim()
end,
desc = "Dim outside scope",
},
{
"<leader>ck",
function()
Snacks.dim.disable()
end,
desc = "Undim outside scope",
},
-- explorer
{
"<leader>ee",
function()
Snacks.explorer.open()
end,
desc = "File explorer toggle",
},
{
"<leader>ef",
function()
Snacks.explorer.reveal()
end,
desc = "File explorer file reveal",
},
-- find
{
"<leader>fb",
function()
Snacks.picker.buffers()
end,
desc = "Buffers",
},
{
"<leader>fc",
function()
Snacks.picker.files({ cwd = vim.fn.stdpath("config") })
end,
desc = "Find Config File",
},
{
"<leader>ff",
function()
Snacks.picker.files({ hidden = true, ignored = true })
end,
desc = "Find Files",
},
{
"<leader>fg",
function()
Snacks.picker.git_files()
end,
desc = "Find Git Files",
},
{
"<leader>fp",
function()
Snacks.picker.projects()
end,
desc = "Projects",
},
{
"<leader>fr",
function()
Snacks.picker.recent({ filter = { cwd = true } })
end,
desc = "Recent",
},
-- git
{
"<leader>gb",
function()
Snacks.picker.git_branches()
end,
desc = "Git Branches",
},
{
"<leader>gl",
function()
Snacks.picker.git_log()
end,
desc = "Git Log",
},
{
"<leader>gL",
function()
Snacks.picker.git_log_line()
end,
desc = "Git Log Line",
},
{
"<leader>gs",
function()
Snacks.picker.git_status()
end,
desc = "Git Status",
},
{
"<leader>gS",
function()
Snacks.picker.git_stash()
end,
desc = "Git Stash",
},
{
"<leader>gd",
function()
Snacks.picker.git_diff()
end,
desc = "Git Diff (Hunks)",
},
{
"<leader>gf",
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>sw",
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>sd",
function()
Snacks.picker.diagnostics()
end,
desc = "Diagnostics",
},
{
"<leader>sD",
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>sj",
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",
},
-- LSP
{
"gd",
function()
Snacks.picker.lsp_definitions({
auto_confirm = false,
})
end,
desc = "Goto Definition",
},
{
"gD",
function()
Snacks.picker.lsp_declarations({
auto_confirm = false,
})
end,
desc = "Goto Declaration",
},
{
"gr",
function()
Snacks.picker.lsp_references({
auto_confirm = false,
})
end,
nowait = true,
desc = "References",
},
{
"gI",
function()
Snacks.picker.lsp_implementations({
auto_confirm = false,
})
end,
desc = "Goto Implementation",
},
{
"gy",
function()
Snacks.picker.lsp_type_definitions({
auto_confirm = false,
})
end,
desc = "Goto T[y]pe Definition",
},
{
"<leader>ss",
function()
Snacks.picker.lsp_symbols()
end,
desc = "LSP Symbols",
},
{
"<leader>sS",
function()
Snacks.picker.lsp_workspace_symbols()
end,
desc = "LSP Workspace Symbols",
},
-- scratch
{
"<leader>.",
function()
Snacks.scratch()
end,
desc = "Toggle Scratch Buffer",
},
{
"<leader>S",
function()
Snacks.scratch.select()
end,
desc = "Select Scratch Buffer",
},
},
init = function()
vim.api.nvim_create_autocmd("User", {
pattern = "VeryLazy",
callback = function()
-- Create some toggle mappings
Snacks.toggle.option("spell", { name = "Spelling" }):map("<leader>us")
Snacks.toggle.option("wrap", { name = "Wrap" }):map("<leader>uw")
Snacks.toggle.option("relativenumber", { name = "Relative Number" }):map("<leader>uL")
Snacks.toggle.diagnostics():map("<leader>ud")
Snacks.toggle.line_number():map("<leader>ul")
Snacks.toggle
.option("conceallevel", { off = 0, on = vim.o.conceallevel > 0 and vim.o.conceallevel or 2 })
:map("<leader>uc")
Snacks.toggle.treesitter():map("<leader>uT")
Snacks.toggle.inlay_hints():map("<leader>uh")
Snacks.toggle.indent():map("<leader>ug")
Snacks.toggle.dim():map("<leader>uD")
end,
})
end,
}