added snacks

added snacks
This commit is contained in:
Simon Ayoub 2025-05-28 23:34:25 +10:00
parent c09b5622d7
commit 168a1b9cf6

740
init.lua
View file

@ -340,153 +340,548 @@ require('lazy').setup({
-- --
-- Use the `dependencies` key to specify the dependencies of a particular plugin -- Use the `dependencies` key to specify the dependencies of a particular plugin
{ {
"folke/snacks.nvim", 'folke/snacks.nvim',
priority = 1000, priority = 1000,
lazy = false, lazy = false,
---@type snacks.Config ---@type snacks.Config
opts = { opts = {
bigfile = { enabled = true }, bigfile = { enabled = true },
dashboard = { enabled = true }, dashboard = { enabled = true },
explorer = { enabled = true }, explorer = { enabled = true },
indent = { enabled = true }, indent = { enabled = true },
input = { enabled = true }, input = { enabled = true },
notifier = { notifier = {
enabled = true, enabled = true,
timeout = 3000, timeout = 3000,
},
picker = { enabled = true },
quickfile = { enabled = true },
scope = { enabled = true },
scroll = { enabled = true },
statuscolumn = { enabled = true },
words = { enabled = true },
styles = {
notification = {
-- wo = { wrap = true } -- Wrap notifications
},
},
}, },
picker = { enabled = true }, keys = {
quickfile = { enabled = true }, -- Top Pickers & Explorer
scope = { enabled = true }, {
scroll = { enabled = true }, '<leader><space>',
statuscolumn = { enabled = true }, function()
words = { enabled = true }, Snacks.picker.smart()
styles = { end,
notification = { desc = 'Smart Find Files',
-- wo = { wrap = true } -- Wrap notifications },
} {
} '<leader>,',
}, function()
keys = { Snacks.picker.buffers()
-- Top Pickers & Explorer end,
{ "<leader><space>", function() Snacks.picker.smart() end, desc = "Smart Find Files" }, desc = 'Buffers',
{ "<leader>,", function() Snacks.picker.buffers() end, desc = "Buffers" }, },
{ "<leader>/", function() Snacks.picker.grep() end, desc = "Grep" }, {
{ "<leader>:", function() Snacks.picker.command_history() end, desc = "Command History" }, '<leader>/',
{ "<leader>n", function() Snacks.picker.notifications() end, desc = "Notification History" }, function()
{ "<leader>e", function() Snacks.explorer() end, desc = "File Explorer" }, Snacks.picker.grep()
-- find end,
{ "<leader>fb", function() Snacks.picker.buffers() end, desc = "Buffers" }, desc = 'Grep',
{ "<leader>fc", function() Snacks.picker.files({ cwd = vim.fn.stdpath("config") }) end, desc = "Find Config File" }, },
{ "<leader>ff", function() Snacks.picker.files() end, desc = "Find Files" }, {
{ "<leader>fg", function() Snacks.picker.git_files() end, desc = "Find Git Files" }, '<leader>:',
{ "<leader>fp", function() Snacks.picker.projects() end, desc = "Projects" }, function()
{ "<leader>fr", function() Snacks.picker.recent() end, desc = "Recent" }, Snacks.picker.command_history()
-- git end,
{ "<leader>gb", function() Snacks.picker.git_branches() end, desc = "Git Branches" }, desc = 'Command History',
{ "<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>n',
{ "<leader>gS", function() Snacks.picker.git_stash() end, desc = "Git Stash" }, function()
{ "<leader>gd", function() Snacks.picker.git_diff() end, desc = "Git Diff (Hunks)" }, Snacks.picker.notifications()
{ "<leader>gf", function() Snacks.picker.git_log_file() end, desc = "Git Log File" }, end,
-- Grep desc = 'Notification History',
{ "<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>e',
{ "<leader>sw", function() Snacks.picker.grep_word() end, desc = "Visual selection or word", mode = { "n", "x" } }, function()
-- search Snacks.explorer()
{ '<leader>s"', function() Snacks.picker.registers() end, desc = "Registers" }, end,
{ '<leader>s/', function() Snacks.picker.search_history() end, desc = "Search History" }, desc = 'File Explorer',
{ "<leader>sa", function() Snacks.picker.autocmds() end, desc = "Autocmds" }, },
{ "<leader>sb", function() Snacks.picker.lines() end, desc = "Buffer Lines" }, -- find
{ "<leader>sc", function() Snacks.picker.command_history() end, desc = "Command History" }, {
{ "<leader>sC", function() Snacks.picker.commands() end, desc = "Commands" }, '<leader>fb',
{ "<leader>sd", function() Snacks.picker.diagnostics() end, desc = "Diagnostics" }, function()
{ "<leader>sD", function() Snacks.picker.diagnostics_buffer() end, desc = "Buffer Diagnostics" }, Snacks.picker.buffers()
{ "<leader>sh", function() Snacks.picker.help() end, desc = "Help Pages" }, end,
{ "<leader>sH", function() Snacks.picker.highlights() end, desc = "Highlights" }, desc = 'Buffers',
{ "<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>fc',
{ "<leader>sl", function() Snacks.picker.loclist() end, desc = "Location List" }, function()
{ "<leader>sm", function() Snacks.picker.marks() end, desc = "Marks" }, Snacks.picker.files { cwd = vim.fn.stdpath 'config' }
{ "<leader>sM", function() Snacks.picker.man() end, desc = "Man Pages" }, end,
{ "<leader>sp", function() Snacks.picker.lazy() end, desc = "Search for Plugin Spec" }, desc = 'Find Config File',
{ "<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" }, '<leader>ff',
{ "<leader>uC", function() Snacks.picker.colorschemes() end, desc = "Colorschemes" }, function()
-- LSP Snacks.picker.files()
{ "gd", function() Snacks.picker.lsp_definitions() end, desc = "Goto Definition" }, end,
{ "gD", function() Snacks.picker.lsp_declarations() end, desc = "Goto Declaration" }, desc = 'Find Files',
{ "gr", function() Snacks.picker.lsp_references() end, nowait = true, desc = "References" }, },
{ "gI", function() Snacks.picker.lsp_implementations() end, desc = "Goto Implementation" }, {
{ "gy", function() Snacks.picker.lsp_type_definitions() end, desc = "Goto T[y]pe Definition" }, '<leader>fg',
{ "<leader>ss", function() Snacks.picker.lsp_symbols() end, desc = "LSP Symbols" }, function()
{ "<leader>sS", function() Snacks.picker.lsp_workspace_symbols() end, desc = "LSP Workspace Symbols" }, Snacks.picker.git_files()
-- Other end,
{ "<leader>z", function() Snacks.zen() end, desc = "Toggle Zen Mode" }, desc = 'Find Git Files',
{ "<leader>Z", function() Snacks.zen.zoom() end, desc = "Toggle Zoom" }, },
{ "<leader>.", function() Snacks.scratch() end, desc = "Toggle Scratch Buffer" }, {
{ "<leader>S", function() Snacks.scratch.select() end, desc = "Select Scratch Buffer" }, '<leader>fp',
{ "<leader>n", function() Snacks.notifier.show_history() end, desc = "Notification History" }, function()
{ "<leader>bd", function() Snacks.bufdelete() end, desc = "Delete Buffer" }, Snacks.picker.projects()
{ "<leader>cR", function() Snacks.rename.rename_file() end, desc = "Rename File" }, end,
{ "<leader>gB", function() Snacks.gitbrowse() end, desc = "Git Browse", mode = { "n", "v" } }, desc = 'Projects',
{ "<leader>gg", function() Snacks.lazygit() end, desc = "Lazygit" }, },
{ "<leader>un", function() Snacks.notifier.hide() end, desc = "Dismiss All Notifications" }, {
{ "<c-/>", function() Snacks.terminal() end, desc = "Toggle Terminal" }, '<leader>fr',
{ "<c-_>", function() Snacks.terminal() end, desc = "which_key_ignore" }, function()
{ "]]", function() Snacks.words.jump(vim.v.count1) end, desc = "Next Reference", mode = { "n", "t" } }, Snacks.picker.recent()
{ "[[", function() Snacks.words.jump(-vim.v.count1) end, desc = "Prev Reference", mode = { "n", "t" } }, end,
{ desc = 'Recent',
"<leader>N", },
desc = "Neovim News", -- git
function() {
Snacks.win({ '<leader>gb',
file = vim.api.nvim_get_runtime_file("doc/news.txt", false)[1], function()
width = 0.6, Snacks.picker.git_branches()
height = 0.6, end,
wo = { desc = 'Git Branches',
spell = false, },
wrap = false, {
signcolumn = "yes", '<leader>gl',
statuscolumn = " ", function()
conceallevel = 3, Snacks.picker.git_log()
}, end,
}) desc = 'Git Log',
end, },
} {
}, '<leader>gL',
init = function() function()
vim.api.nvim_create_autocmd("User", { Snacks.picker.git_log_line()
pattern = "VeryLazy", end,
callback = function() desc = 'Git Log Line',
-- Setup some globals for debugging (lazy-loaded) },
_G.dd = function(...) {
Snacks.debug.inspect(...) '<leader>gs',
end function()
_G.bt = function() Snacks.picker.git_status()
Snacks.debug.backtrace() end,
end desc = 'Git Status',
vim.print = _G.dd -- Override print to use snacks for `:=` command },
{
'<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',
},
{
'<leader>uC',
function()
Snacks.picker.colorschemes()
end,
desc = 'Colorschemes',
},
-- LSP
{
'gd',
function()
Snacks.picker.lsp_definitions()
end,
desc = 'Goto Definition',
},
{
'gD',
function()
Snacks.picker.lsp_declarations()
end,
desc = 'Goto Declaration',
},
{
'gr',
function()
Snacks.picker.lsp_references()
end,
nowait = true,
desc = 'References',
},
{
'gI',
function()
Snacks.picker.lsp_implementations()
end,
desc = 'Goto Implementation',
},
{
'gy',
function()
Snacks.picker.lsp_type_definitions()
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',
},
-- Other
{
'<leader>z',
function()
Snacks.zen()
end,
desc = 'Toggle Zen Mode',
},
{
'<leader>Z',
function()
Snacks.zen.zoom()
end,
desc = 'Toggle Zoom',
},
{
'<leader>.',
function()
Snacks.scratch()
end,
desc = 'Toggle Scratch Buffer',
},
{
'<leader>S',
function()
Snacks.scratch.select()
end,
desc = 'Select Scratch Buffer',
},
{
'<leader>n',
function()
Snacks.notifier.show_history()
end,
desc = 'Notification History',
},
{
'<leader>bd',
function()
Snacks.bufdelete()
end,
desc = 'Delete Buffer',
},
{
'<leader>cR',
function()
Snacks.rename.rename_file()
end,
desc = 'Rename File',
},
{
'<leader>gB',
function()
Snacks.gitbrowse()
end,
desc = 'Git Browse',
mode = { 'n', 'v' },
},
{
'<leader>gg',
function()
Snacks.lazygit()
end,
desc = 'Lazygit',
},
{
'<leader>un',
function()
Snacks.notifier.hide()
end,
desc = 'Dismiss All Notifications',
},
{
'<c-/>',
function()
Snacks.terminal()
end,
desc = 'Toggle Terminal',
},
{
'<c-_>',
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' },
},
{
'<leader>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 -- Create some toggle mappings
Snacks.toggle.option("spell", { name = "Spelling" }):map("<leader>us") Snacks.toggle.option('spell', { name = 'Spelling' }):map '<leader>us'
Snacks.toggle.option("wrap", { name = "Wrap" }):map("<leader>uw") Snacks.toggle.option('wrap', { name = 'Wrap' }):map '<leader>uw'
Snacks.toggle.option("relativenumber", { name = "Relative Number" }):map("<leader>uL") Snacks.toggle.option('relativenumber', { name = 'Relative Number' }):map '<leader>uL'
Snacks.toggle.diagnostics():map("<leader>ud") Snacks.toggle.diagnostics():map '<leader>ud'
Snacks.toggle.line_number():map("<leader>ul") 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.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.treesitter():map '<leader>uT'
Snacks.toggle.option("background", { off = "light", on = "dark", name = "Dark Background" }):map("<leader>ub") Snacks.toggle.option('background', { off = 'light', on = 'dark', name = 'Dark Background' }):map '<leader>ub'
Snacks.toggle.inlay_hints():map("<leader>uh") Snacks.toggle.inlay_hints():map '<leader>uh'
Snacks.toggle.indent():map("<leader>ug") Snacks.toggle.indent():map '<leader>ug'
Snacks.toggle.dim():map("<leader>uD") Snacks.toggle.dim():map '<leader>uD'
end, end,
}) })
end, end,
}, },
{ -- Fuzzy Finder (files, lsp, etc) { -- Fuzzy Finder (files, lsp, etc)
'nvim-telescope/telescope.nvim', 'nvim-telescope/telescope.nvim',
event = 'VimEnter', event = 'VimEnter',
@ -639,6 +1034,7 @@ require('lazy').setup({
'pyright', 'pyright',
'rust_analyzer', 'rust_analyzer',
'black', 'black',
'gopls',
}, },
}, },
config = true, config = true,
@ -810,9 +1206,54 @@ require('lazy').setup({
-- - settings (table): Override the default settings passed when initializing the server. -- - settings (table): Override the default settings passed when initializing the server.
-- For example, to see the options for `lua_ls`, you could go to: https://luals.github.io/wiki/settings/ -- For example, to see the options for `lua_ls`, you could go to: https://luals.github.io/wiki/settings/
local servers = { local servers = {
clangd = {}, clangd = {
-- gopls = {}, cmd = { 'clangd', '--header-insertion=never' },
pyright = {}, filetypes = { 'c', 'cpp', 'objc', 'objcpp', 'cxx' },
capabilities = {
offsetEncoding = { 'utf-8', 'utf-16' },
},
root_dir = {
-- This is a list of patterns that will be used to find the root directory
-- for the current file. The first pattern that matches will be used.
'.git',
'.clangd',
'.clang-tidy',
'.clang-format',
'.gitignore',
'compile_commands.json',
'compile_flags.txt',
},
},
gopls = {
cmd = { 'gopls' },
filetypes = { 'go', 'gomod', 'gowork', 'gotmpl' },
capabilities = {
offsetEncoding = { 'utf-8', 'utf-16' },
},
root_dir = {
-- This is a list of patterns that will be used to find the root directory
-- for the current file. The first pattern that matches will be used.
'go.mod',
'go.work',
'.git',
},
},
pyright = {
cmd = { 'pyright-langserver', '--stdio' },
filetypes = { 'python' },
capabilities = {
offsetEncoding = { 'utf-8', 'utf-16' },
},
root_dir = {
-- This is a list of patterns that will be used to find the root directory
-- for the current file. The first pattern that matches will be used.
'.git',
'.pyrightconfig.json',
'setup.py',
'setup.cfg',
'pyproject.toml',
},
},
rust_analyzer = {}, rust_analyzer = {},
-- ... etc. See `:help lspconfig-all` for a list of all the pre-configured LSPs -- ... etc. See `:help lspconfig-all` for a list of all the pre-configured LSPs
-- --
@ -1043,6 +1484,9 @@ require('lazy').setup({
-- If you want to see what colorschemes are already installed, you can use `:Telescope colorscheme`. -- If you want to see what colorschemes are already installed, you can use `:Telescope colorscheme`.
'catppuccin/nvim', 'catppuccin/nvim',
name = 'catppuccin', name = 'catppuccin',
opts = {
transparent_background = true,
},
priority = 1000, -- Make sure to load this before all the other start plugins. priority = 1000, -- Make sure to load this before all the other start plugins.
init = function() init = function()
-- Load the colorscheme here. -- Load the colorscheme here.