diff --git a/init.lua b/init.lua index b1ff2b8c..101f678d 100644 --- a/init.lua +++ b/init.lua @@ -208,6 +208,13 @@ vim.keymap.set('n', '', '', { desc = 'Move focus to the right win vim.keymap.set('n', '', '', { desc = 'Move focus to the lower window' }) vim.keymap.set('n', '', '', { desc = 'Move focus to the upper window' }) +vim.opt.autoread = true + +-- refresh files if changed outside +vim.fn.timer_start(2000, function() + vim.cmd 'silent! checktime' +end, { ['repeat'] = -1 }) + -- NOTE: Some terminals have colliding keymaps or are not able to send distinct keycodes -- vim.keymap.set("n", "", "H", { desc = "Move window to the left" }) -- vim.keymap.set("n", "", "L", { desc = "Move window to the right" }) @@ -1186,6 +1193,9 @@ require('lazy').setup({ lazy = false, ---@type snacks.Config opts = { + image = { + enabled = true, + }, bigfile = { enabled = true }, dashboard = { enabled = true }, indent = { enabled = true }, @@ -1206,6 +1216,416 @@ require('lazy').setup({ }, }, keys = { + -- Top Pickers & Explorer + { + '', + function() + Snacks.picker.smart() + end, + desc = 'Smart Find Files', + }, + { + ',', + function() + Snacks.picker.buffers() + end, + desc = 'Buffers', + }, + { + '/', + function() + Snacks.picker.grep() + end, + desc = 'Grep', + }, + { + ':', + function() + Snacks.picker.command_history() + end, + desc = 'Command History', + }, + { + 'n', + function() + Snacks.picker.notifications() + end, + desc = 'Notification History', + }, + { + 'e', + function() + Snacks.explorer() + end, + desc = 'File Explorer', + }, + -- find + { + 'fb', + function() + Snacks.picker.buffers() + end, + desc = 'Buffers', + }, + { + 'fc', + function() + Snacks.picker.files { cwd = vim.fn.stdpath 'config' } + end, + desc = 'Find Config File', + }, + { + 'ff', + function() + Snacks.picker.files() + end, + desc = 'Find Files', + }, + { + 'fg', + function() + Snacks.picker.git_files() + end, + desc = 'Find Git Files', + }, + { + 'fp', + function() + Snacks.picker.projects() + end, + + desc = 'Projects', + }, + { + 'fr', + function() + Snacks.picker.recent() + end, + desc = 'Recent', + }, + -- git + { + 'gb', + function() + Snacks.picker.git_branches() + end, + desc = 'Git Branches', + }, + { + 'gl', + function() + Snacks.picker.git_log() + end, + desc = 'Git Log', + }, + { + 'gL', + function() + Snacks.picker.git_log_line() + end, + desc = 'Git Log Line', + }, + { + 'gs', + function() + Snacks.picker.git_status() + end, + desc = 'Git Status', + }, + { + 'gS', + function() + Snacks.picker.git_stash() + end, + desc = 'Git Stash', + }, + { + 'gd', + function() + Snacks.picker.git_diff() + end, + desc = 'Git Diff (Hunks)', + }, + { + 'gf', + function() + Snacks.picker.git_log_file() + end, + desc = 'Git Log File', + }, + -- gh + { + 'gi', + function() + Snacks.picker.gh_issue() + end, + desc = 'GitHub Issues (open)', + }, + { + 'gI', + function() + Snacks.picker.gh_issue { state = 'all' } + end, + desc = 'GitHub Issues (all)', + }, + { + 'gp', + function() + Snacks.picker.gh_pr() + end, + desc = 'GitHub Pull Requests (open)', + }, + { + 'gP', + function() + Snacks.picker.gh_pr { state = 'all' } + end, + desc = 'GitHub Pull Requests (all)', + }, + -- Grep + { + 'sb', + function() + Snacks.picker.lines() + end, + desc = 'Buffer Lines', + }, + { + 'sB', + function() + Snacks.picker.grep_buffers() + end, + desc = 'Grep Open Buffers', + }, + { + 'sg', + function() + Snacks.picker.grep() + end, + desc = 'Grep', + }, + { + 'sw', + function() + Snacks.picker.grep_word() + end, + desc = 'Visual selection or word', + mode = { 'n', 'x' }, + }, + -- search + { + 's"', + function() + Snacks.picker.registers() + end, + desc = 'Registers', + }, + { + 's/', + function() + Snacks.picker.search_history() + end, + desc = 'Search History', + }, + { + 'sa', + function() + Snacks.picker.autocmds() + end, + desc = 'Autocmds', + }, + { + 'sb', + function() + Snacks.picker.lines() + end, + desc = 'Buffer Lines', + }, + { + 'sc', + function() + Snacks.picker.command_history() + end, + desc = 'Command History', + }, + { + 'sC', + function() + Snacks.picker.commands() + end, + desc = 'Commands', + }, + { + 'sd', + function() + Snacks.picker.diagnostics() + end, + desc = 'Diagnostics', + }, + { + 'sD', + function() + Snacks.picker.diagnostics_buffer() + end, + desc = 'Buffer Diagnostics', + }, + { + 'sh', + function() + Snacks.picker.help() + end, + desc = 'Help Pages', + }, + { + 'sH', + function() + Snacks.picker.highlights() + end, + desc = 'Highlights', + }, + { + 'si', + function() + Snacks.picker.icons() + end, + desc = 'Icons', + }, + { + 'sj', + function() + Snacks.picker.jumps() + end, + desc = 'Jumps', + }, + { + 'sk', + function() + Snacks.picker.keymaps() + end, + desc = 'Keymaps', + }, + { + 'sl', + function() + Snacks.picker.loclist() + end, + desc = 'Location List', + }, + { + 'sm', + function() + Snacks.picker.marks() + end, + desc = 'Marks', + }, + { + 'sM', + function() + Snacks.picker.man() + end, + desc = 'Man Pages', + }, + { + 'sp', + function() + Snacks.picker.lazy() + end, + desc = 'Search for Plugin Spec', + }, + { + 'sq', + function() + Snacks.picker.qflist() + end, + desc = 'Quickfix List', + }, + { + 'sR', + function() + Snacks.picker.resume() + end, + desc = 'Resume', + }, + { + 'su', + function() + Snacks.picker.undo() + end, + desc = 'Undo History', + }, + { + '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', + }, + { + 'gai', + function() + Snacks.picker.lsp_incoming_calls() + end, + desc = 'C[a]lls Incoming', + }, + { + 'gao', + function() + Snacks.picker.lsp_outgoing_calls() + end, + desc = 'C[a]lls Outgoing', + }, + { + 'ss', + function() + Snacks.picker.lsp_symbols() + end, + desc = 'LSP Symbols', + }, + { + 'sS', + function() + Snacks.picker.lsp_workspace_symbols() + end, + desc = 'LSP Workspace Symbols', + }, + -- Other { 'z', function() @@ -1263,20 +1683,6 @@ require('lazy').setup({ 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() @@ -1284,13 +1690,6 @@ require('lazy').setup({ end, desc = 'Lazygit', }, - { - 'gl', - function() - Snacks.lazygit.log() - end, - desc = 'Lazygit Log (cwd)', - }, { 'un', function() @@ -1341,11 +1740,151 @@ require('lazy').setup({ wrap = false, signcolumn = 'yes', statuscolumn = ' ', - conceallevel = 4, + conceallevel = 3, }, } end, }, + -- { + -- '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 = 4, + -- }, + -- } + -- end, + -- }, }, init = function() vim.api.nvim_create_autocmd('User', {