507 lines
8.3 KiB
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,
|
|
}
|