Skip to content

Commit b1b97c3

Browse files
committed
feat: add snacks-explorer fixture configuration
Change-Id: I6c28f07bace2e3236e6cc054a5e56dc49e6dc125 Signed-off-by: Thomas Kosiewski <[email protected]>
1 parent 9abf142 commit b1b97c3

File tree

6 files changed

+265
-0
lines changed

6 files changed

+265
-0
lines changed

fixtures/snacks-explorer/init.lua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
require("config.lazy")
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" },
3+
"mini.icons": { "branch": "main", "commit": "b8f6fa6f5a3fd0c56936252edcd691184e5aac0c" },
4+
"snacks.nvim": { "branch": "main", "commit": "bc0630e43be5699bb94dadc302c0d21615421d93" },
5+
"which-key.nvim": { "branch": "main", "commit": "370ec46f710e058c9c1646273e6b225acf47cbed" }
6+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
-- Bootstrap lazy.nvim
2+
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
3+
if not (vim.uv or vim.loop).fs_stat(lazypath) then
4+
local lazyrepo = "https://github.com/folke/lazy.nvim.git"
5+
local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
6+
if vim.v.shell_error ~= 0 then
7+
vim.api.nvim_echo({
8+
{ "Failed to clone lazy.nvim:\n", "ErrorMsg" },
9+
{ out, "WarningMsg" },
10+
{ "\nPress any key to exit..." },
11+
}, true, {})
12+
vim.fn.getchar()
13+
os.exit(1)
14+
end
15+
end
16+
vim.opt.rtp:prepend(lazypath)
17+
18+
-- Make sure to setup `mapleader` and `maplocalleader` before
19+
-- loading lazy.nvim so that mappings are correct.
20+
-- This is also a good place to setup other settings (vim.opt)
21+
vim.g.mapleader = " "
22+
vim.g.maplocalleader = "\\"
23+
24+
-- Setup lazy.nvim
25+
require("lazy").setup({
26+
spec = {
27+
-- import your plugins
28+
{ import = "plugins" },
29+
},
30+
-- Configure any other settings here. See the documentation for more details.
31+
-- colorscheme that will be used when installing plugins.
32+
install = { colorscheme = { "habamax" } },
33+
-- automatically check for plugin updates
34+
checker = { enabled = true },
35+
})
36+
37+
-- Add keybind for Lazy plugin manager
38+
vim.keymap.set("n", "<leader>l", "<cmd>Lazy<cr>", { desc = "Lazy Plugin Manager" })
39+
40+
-- Terminal keybindings
41+
vim.keymap.set("t", "<Esc><Esc>", "<C-\\><C-n>", { desc = "Exit terminal mode (double esc)" })
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../../../dev-config.lua
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
return {
2+
-- Essential plugins for basic functionality
3+
{
4+
"folke/which-key.nvim",
5+
event = "VeryLazy",
6+
opts = {},
7+
keys = {
8+
{
9+
"<leader>?",
10+
function()
11+
require("which-key").show({ global = false })
12+
end,
13+
desc = "Buffer Local Keymaps (which-key)",
14+
},
15+
},
16+
},
17+
18+
-- Icon support for file explorers
19+
{
20+
"echasnovski/mini.icons",
21+
opts = {},
22+
lazy = true,
23+
specs = {
24+
{ "nvim-tree/nvim-web-devicons", enabled = false, optional = true },
25+
},
26+
init = function()
27+
package.preload["nvim-web-devicons"] = function()
28+
require("mini.icons").mock_nvim_web_devicons()
29+
return package.loaded["nvim-web-devicons"]
30+
end
31+
end,
32+
},
33+
}
Lines changed: 183 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,183 @@
1+
return {
2+
"folke/snacks.nvim",
3+
priority = 1000,
4+
lazy = false,
5+
opts = {
6+
-- Enable the explorer module
7+
explorer = {
8+
enabled = true,
9+
replace_netrw = true, -- Replace netrw with snacks explorer
10+
},
11+
-- Enable other useful modules for testing
12+
bigfile = { enabled = true },
13+
notifier = { enabled = true },
14+
quickfile = { enabled = true },
15+
statuscolumn = { enabled = true },
16+
words = { enabled = true },
17+
},
18+
keys = {
19+
-- Main explorer keybindings
20+
{
21+
"<leader>e",
22+
function()
23+
require("snacks").explorer()
24+
end,
25+
desc = "Explorer",
26+
},
27+
{
28+
"<leader>E",
29+
function()
30+
require("snacks").explorer.open()
31+
end,
32+
desc = "Explorer (open)",
33+
},
34+
{
35+
"<leader>fe",
36+
function()
37+
require("snacks").explorer.reveal()
38+
end,
39+
desc = "Explorer (reveal current file)",
40+
},
41+
42+
-- Alternative keybindings for testing
43+
{
44+
"-",
45+
function()
46+
require("snacks").explorer()
47+
end,
48+
desc = "Open parent directory",
49+
},
50+
{
51+
"<C-n>",
52+
function()
53+
require("snacks").explorer()
54+
end,
55+
desc = "File Explorer",
56+
},
57+
58+
-- Snacks utility keybindings for testing
59+
{
60+
"<leader>un",
61+
function()
62+
require("snacks").notifier.dismiss()
63+
end,
64+
desc = "Dismiss All Notifications",
65+
},
66+
{
67+
"<leader>bd",
68+
function()
69+
require("snacks").bufdelete()
70+
end,
71+
desc = "Delete Buffer",
72+
},
73+
{
74+
"<leader>gg",
75+
function()
76+
require("snacks").lazygit()
77+
end,
78+
desc = "Lazygit",
79+
},
80+
{
81+
"<leader>gb",
82+
function()
83+
require("snacks").git.blame_line()
84+
end,
85+
desc = "Git Blame Line",
86+
},
87+
{
88+
"<leader>gB",
89+
function()
90+
require("snacks").gitbrowse()
91+
end,
92+
desc = "Git Browse",
93+
},
94+
{
95+
"<leader>gf",
96+
function()
97+
require("snacks").lazygit.log_file()
98+
end,
99+
desc = "Lazygit Current File History",
100+
},
101+
{
102+
"<leader>gl",
103+
function()
104+
require("snacks").lazygit.log()
105+
end,
106+
desc = "Lazygit Log (cwd)",
107+
},
108+
{
109+
"<leader>cR",
110+
function()
111+
require("snacks").rename.rename_file()
112+
end,
113+
desc = "Rename File",
114+
},
115+
{
116+
"<c-/>",
117+
function()
118+
require("snacks").terminal()
119+
end,
120+
desc = "Toggle Terminal",
121+
},
122+
{
123+
"<c-_>",
124+
function()
125+
require("snacks").terminal()
126+
end,
127+
desc = "which_key_ignore",
128+
},
129+
},
130+
init = function()
131+
vim.api.nvim_create_autocmd("User", {
132+
pattern = "VeryLazy",
133+
callback = function()
134+
-- Setup some globals for easier testing
135+
_G.Snacks = require("snacks")
136+
_G.lazygit = _G.Snacks.lazygit
137+
_G.explorer = _G.Snacks.explorer
138+
end,
139+
})
140+
end,
141+
config = function(_, opts)
142+
require("snacks").setup(opts)
143+
144+
-- Additional explorer-specific keybindings that activate after setup
145+
vim.api.nvim_create_autocmd("FileType", {
146+
pattern = "snacks_picker_list", -- This is the filetype for snacks explorer
147+
callback = function(event)
148+
local buf = event.buf
149+
-- Custom keybindings specifically for snacks explorer buffers
150+
vim.keymap.set("n", "<C-v>", function()
151+
-- Toggle visual mode for multi-selection (this is what the PR adds support for)
152+
vim.cmd("normal! V")
153+
end, { buffer = buf, desc = "Toggle visual selection" })
154+
155+
vim.keymap.set("n", "v", function()
156+
vim.cmd("normal! v")
157+
end, { buffer = buf, desc = "Visual mode" })
158+
159+
vim.keymap.set("n", "V", function()
160+
vim.cmd("normal! V")
161+
end, { buffer = buf, desc = "Visual line mode" })
162+
163+
-- Additional testing keybindings
164+
vim.keymap.set("n", "?", function()
165+
require("which-key").show({ buffer = buf })
166+
end, { buffer = buf, desc = "Show keybindings" })
167+
end,
168+
})
169+
170+
-- Set up some helpful defaults for testing
171+
vim.opt.number = true
172+
vim.opt.relativenumber = true
173+
vim.opt.signcolumn = "yes"
174+
vim.opt.wrap = false
175+
176+
-- Print helpful message when starting
177+
vim.defer_fn(function()
178+
print("🍿 Snacks Explorer fixture loaded!")
179+
print("Press <leader>e to open explorer, <leader>? for help")
180+
print("Use visual modes (v/V/<C-v>) in explorer for multi-file selection")
181+
end, 500)
182+
end,
183+
}

0 commit comments

Comments
 (0)