This commit is contained in:
sankalp committed 2025-06-02 15:43:05 +05:45
1 parent 2c6982ecdd
commit b6e0e9f63c
35 files changed
+1155 -1236

No files matched your search

+7
View File
@@ -0,0 +1,7 @@
local exercism = require('exercism')
exercism.setup({
exercism_workspace = '~/Projects/2KAbhishek/exercism',
add_default_keybindings = true,
default_language = 'elixir',
})
-63
View File
@@ -1,63 +0,0 @@
local gitsigns = require('gitsigns')
local icons = require('lib.icons')
gitsigns.setup({
signs = {
add = { text = icons.ui.SeparatorLight },
change = { text = icons.ui.SeparatorLight },
delete = { text = icons.ui.SeparatorLight },
topdelete = { text = icons.ui.Topline },
changedelete = { text = icons.ui.SeparatorLight },
untracked = { text = icons.ui.SeparatorDashed },
},
signcolumn = true,
numhl = false,
linehl = false,
word_diff = false,
watch_gitdir = { interval = 1000, follow_files = true },
attach_to_untracked = true,
current_line_blame = false,
current_line_blame_opts = {
virt_text = true,
virt_text_pos = 'eol',
delay = 0,
ignore_whitespace = false,
},
current_line_blame_formatter = '<author>, <author_time:%Y-%m-%d> - <summary>',
sign_priority = 6,
update_debounce = 100,
status_formatter = nil,
max_file_length = 40000,
preview_config = { border = 'rounded', style = 'minimal', relative = 'cursor', row = 0, col = 1 },
on_attach = function(bufnr)
local gs = package.loaded.gitsigns
local function map(mode, l, r, opts)
opts = opts or {}
opts.buffer = bufnr
vim.keymap.set(mode, l, r, opts)
end
map('n', ']e', function()
if vim.wo.diff then
return ']e'
end
vim.schedule(function()
gs.next_hunk()
end)
return '<Ignore>'
end, { expr = true, desc = 'Next Change' })
map('n', '[e', function()
if vim.wo.diff then
return '[e'
end
vim.schedule(function()
gs.prev_hunk()
end)
return '<Ignore>'
end, { expr = true, desc = 'Prev Change' })
map({ 'o', 'x' }, 'ih', ':<C-U>Gitsigns select_hunk<cr>')
end,
})
-37
View File
@@ -1,37 +0,0 @@
local markit = require('markit')
local icons = require('lib.icons')
markit.setup({
default_mappings = true,
builtin_marks = { '.', '<', '>', '^' },
cyclic = true,
force_write_shada = false,
sign_priority = { lower = 10, upper = 15, builtin = 8, bookmark = 20 },
excluded_filetypes = {},
excluded_buftypes = { 'nofile' },
-- supports up to 10 bookmark groups
bookmark_1 = {
sign = icons.ui.Flag,
virt_text = 'flag',
annotate = false,
},
bookmark_2 = {
sign = icons.ui.Eye,
virt_text = 'watch',
annotate = false,
},
bookmark_3 = {
sign = icons.ui.Star,
virt_text = 'star',
annotate = false,
},
bookmark_4 = {
sign = icons.ui.Bug,
virt_text = 'bug',
annotate = false,
},
mappings = {
set = 'M',
toggle_mark = 'm',
},
})
-107
View File
@@ -1,107 +0,0 @@
local nvim_tree = require('nvim-tree')
local Snacks = require('snacks')
local icons = require('lib.icons')
local function on_attach(bufnr)
local api = require('nvim-tree.api')
local function opts(desc)
return {
desc = 'nvim-tree: ' .. desc,
buffer = bufnr,
noremap = true,
silent = true,
nowait = true,
}
end
api.config.mappings.default_on_attach(bufnr)
vim.keymap.set('n', 'Y', api.fs.copy.filename, opts('Copy Name'))
vim.keymap.set('n', 'y', api.fs.copy.relative_path, opts('Copy Relative Path'))
vim.keymap.set('n', 'l', api.node.open.edit, opts('Open'))
vim.keymap.set('n', '<CR>', api.node.open.edit, opts('Open'))
vim.keymap.set('n', 'h', api.node.navigate.parent_close, opts('Close Directory'))
vim.keymap.set('n', 'v', api.node.open.vertical, opts('Open: Vertical Split'))
vim.keymap.set('n', 'o', api.node.open.horizontal, opts('Open: Horizontal Split'))
end
local prev = { new_name = '', old_name = '' } -- Prevents duplicate events
vim.api.nvim_create_autocmd('User', {
pattern = 'NvimTreeSetup',
callback = function()
local events = require('nvim-tree.api').events
events.subscribe(events.Event.NodeRenamed, function(data)
if prev.new_name ~= data.new_name or prev.old_name ~= data.old_name then
data = data
Snacks.rename.on_rename_file(data.old_name, data.new_name)
end
end)
end,
})
nvim_tree.setup({
on_attach = on_attach,
hijack_directories = { enable = true },
update_cwd = true,
filters = {},
renderer = {
add_trailing = false,
group_empty = false,
highlight_git = false,
highlight_opened_files = 'none',
root_folder_modifier = ':t',
indent_markers = {
enable = false,
icons = { corner = icons.ui.Corner, edge = icons.ui.Edge, none = icons.ui.Edge },
},
icons = {
webdev_colors = true,
git_placement = 'before',
padding = ' ',
symlink_arrow = icons.ui.Arrow,
show = { file = true, folder = true, folder_arrow = true, git = true },
glyphs = {
default = icons.documents.File,
symlink = icons.documents.SymLink,
folder = {
arrow_open = icons.ui.ArrowOpen,
arrow_closed = icons.ui.ArrowClosed,
default = icons.documents.Folder,
open = icons.documents.OpenFolder,
empty = icons.documents.FolderEmpty,
empty_open = icons.documents.OpenFolderEmpty,
symlink = icons.documents.SymlinkFolder,
symlink_open = icons.documents.SymlinkFolder,
},
git = {
unstaged = icons.git.Mod,
staged = icons.git.Add,
unmerged = icons.git.Diff,
renamed = icons.git.Rename,
untracked = icons.git.Untrack,
deleted = icons.git.Remove,
ignored = icons.git.Ignore,
},
},
},
},
diagnostics = {
enable = true,
icons = {
hint = icons.diagnostics.Hint,
info = icons.diagnostics.Information,
warning = icons.diagnostics.Warning,
error = icons.diagnostics.Error,
},
},
update_focused_file = { enable = true, update_cwd = true, ignore_list = {} },
git = { enable = true, ignore = true, timeout = 500 },
view = {
width = 50,
side = 'left',
adaptive_size = true,
number = true,
relativenumber = true,
},
})
+18
View File
@@ -0,0 +1,18 @@
local octohub = require('octohub')
octohub.setup({
per_user_dir = true,
projects_dir = '~/Projects/',
contribution_icons = { '', '', '', '', '', '', '' },
sort_repos_by = '',
repo_type = '',
max_contributions = 50,
top_lang_count = 5,
event_count = 5,
window_width = 90,
window_height = 60,
show_recent_activity = true,
show_contributions = true,
show_repo_stats = true,
add_default_keybindings = true,
})
+27
View File
@@ -0,0 +1,27 @@
local sniprun = require('sniprun')
local sniprun_api = require('sniprun.api')
sniprun.setup({
display = { 'Api' },
show_no_output = { 'Classic', 'TempFloatingWindow' },
display_options = {
terminal_width = 45,
notification_timeout = 5,
},
inline_messages = 0,
borders = 'single',
})
local api_listener = function(d)
if d.status == 'ok' then
vim.notify('Output: \n' .. d.message, vim.log.levels.INFO)
elseif d.status == 'error' then
vim.notify('Error: \n' .. d.message, vim.log.levels.ERROR)
else
vim.notify('Sniprun: ' .. d.message, vim.log.levels.INFO)
end
end
sniprun_api.register_listener(api_listener)
-92
View File
@@ -1,92 +0,0 @@
local M = {}
M.flash = function(prompt_bufnr)
require('flash').jump({
pattern = '^',
label = { after = { 0, 0 } },
search = {
mode = 'search',
exclude = {
function(win)
return vim.bo[vim.api.nvim_win_get_buf(win)].filetype ~= 'TelescopeResults'
end,
},
},
action = function(match)
local picker = require('telescope.actions.state').get_current_picker(prompt_bufnr)
picker:set_selection(match.pos[1] - 1)
end,
})
end
-- Select multiple files with tab and open them together
M.multi_open = function(prompt_bufnr)
local picker = require('telescope.actions.state').get_current_picker(prompt_bufnr)
local multi = picker:get_multi_selection()
if not vim.tbl_isempty(multi) then
require('telescope.actions').close(prompt_bufnr)
for _, j in pairs(multi) do
if j.path ~= nil then
if j.lnum ~= nil then
vim.cmd(string.format('%s +%s %s', 'edit', j.lnum, j.path))
else
vim.cmd(string.format('%s %s', 'edit', j.path))
end
end
end
else
require('telescope.actions').select_default(prompt_bufnr)
end
end
-- Do glob search by adding 2 spaces before the pattern during live_grep
M.multi_grep = function(opts)
local conf = require('telescope.config').values
local finders = require('telescope.finders')
local make_entry = require('telescope.make_entry')
local pickers = require('telescope.pickers')
opts = opts or {}
opts.cwd = opts.cwd and vim.fn.expand(opts.cwd) or vim.loop.cwd()
opts.pattern = opts.pattern or '%s'
local custom_grep = finders.new_async_job({
command_generator = function(prompt)
if not prompt or prompt == '' then
return nil
end
local prompt_split = vim.split(prompt, ' ')
local args = { 'rg' }
if prompt_split[1] then
table.insert(args, '-e')
table.insert(args, prompt_split[1])
end
if prompt_split[2] then
table.insert(args, '-g')
local pattern = prompt_split[2]
table.insert(args, string.format(opts.pattern, pattern))
end
return vim.tbl_flatten({
args,
{ '--color=never', '--no-heading', '--with-filename', '--line-number', '--column', '--smart-case' },
})
end,
entry_maker = make_entry.gen_from_vimgrep(opts),
cwd = opts.cwd,
})
pickers
.new(opts, {
debounce = 100,
prompt_title = 'Multi Grep',
finder = custom_grep,
previewer = conf.grep_previewer(opts),
sorter = require('telescope.sorters').empty(),
})
:find()
end
return M
-146
View File
@@ -1,146 +0,0 @@
local telescope = require('telescope')
local actions = require('telescope.actions')
local icons = require('lib.icons')
local flash = require('plugins.tools.telescope-custom').flash
local multi_open = require('plugins.tools.telescope-custom').multi_open
telescope.setup({
defaults = {
layout_config = {
height = 0.8,
width = 0.9,
prompt_position = 'top',
bottom_pane = {
height = 0.5,
preview_width = 0.6,
preview_cutoff = 120,
},
center = {
height = 0.4,
preview_cutoff = 40,
},
cursor = {
preview_cutoff = 40,
preview_width = 0.6,
},
horizontal = {
preview_width = 0.6,
preview_cutoff = 120,
},
vertical = {
preview_cutoff = 40,
},
},
prompt_prefix = icons.ui.Telescope .. icons.ui.ChevronRight,
selection_caret = icons.ui.Play,
multi_icon = icons.ui.Check,
path_display = { 'smart' },
-- path_display = { filename_first = { reverse_directories = false } },
sorting_strategy = 'ascending',
mappings = {
i = {
['<esc>'] = actions.close,
['<C-n>'] = actions.cycle_history_next,
['<C-p>'] = actions.cycle_history_prev,
['<C-j>'] = actions.move_selection_next,
['<C-k>'] = actions.move_selection_previous,
['<C-c>'] = actions.close,
['<Down>'] = actions.move_selection_next,
['<Up>'] = actions.move_selection_previous,
['<CR>'] = multi_open,
['<C-x>'] = actions.select_horizontal,
['<C-CR>'] = actions.select_vertical,
['<S-CR>'] = actions.select_horizontal,
['<C-v>'] = actions.select_vertical,
['<C-t>'] = actions.select_tab,
['<C-s>'] = flash,
['<C-u>'] = actions.preview_scrolling_up,
['<C-d>'] = actions.preview_scrolling_down,
['<PageUp>'] = actions.results_scrolling_up,
['<PageDown>'] = actions.results_scrolling_down,
['<Tab>'] = actions.toggle_selection + actions.move_selection_worse,
['<S-Tab>'] = actions.toggle_selection + actions.move_selection_better,
['<C-q>'] = actions.send_to_qflist + actions.open_qflist,
['<M-q>'] = actions.send_selected_to_qflist + actions.open_qflist,
['<C-l>'] = actions.complete_tag,
},
n = {
['q'] = actions.close,
['<esc>'] = actions.close,
['<CR>'] = multi_open,
['<C-x>'] = actions.select_horizontal,
['<C-v>'] = actions.select_vertical,
['<C-t>'] = actions.select_tab,
['s'] = flash,
['<Tab>'] = actions.toggle_selection + actions.move_selection_worse,
['<S-Tab>'] = actions.toggle_selection + actions.move_selection_better,
['<C-q>'] = actions.send_to_qflist + actions.open_qflist,
['<M-q>'] = actions.send_selected_to_qflist + actions.open_qflist,
['j'] = actions.move_selection_next,
['k'] = actions.move_selection_previous,
['H'] = actions.move_to_top,
['M'] = actions.move_to_middle,
['L'] = actions.move_to_bottom,
['<Down>'] = actions.move_selection_next,
['<Up>'] = actions.move_selection_previous,
['gg'] = actions.move_to_top,
['G'] = actions.move_to_bottom,
['<C-u>'] = actions.preview_scrolling_up,
['<C-d>'] = actions.preview_scrolling_down,
['<PageUp>'] = actions.results_scrolling_up,
['<PageDown>'] = actions.results_scrolling_down,
['?'] = actions.which_key,
},
},
},
extensions = {
fzf = {
fuzzy = true,
override_generic_sorter = true,
override_file_sorter = true,
case_mode = 'smart_case',
},
undo = {
use_delta = true,
use_custom_command = nil,
side_by_side = true,
vim_diff_opts = {
ctxlen = vim.o.scrolloff * 2,
},
entry_format = 'state #$ID, $STAT, $TIME',
-- time_format = '%d %b %H:%M',
saved_only = false,
layout_strategy = 'vertical',
layout_config = {
preview_height = 0.7,
},
mappings = {
i = {
['<S-cr>'] = require('telescope-undo.actions').yank_additions,
['<C-cr>'] = require('telescope-undo.actions').yank_deletions,
['<cr>'] = require('telescope-undo.actions').restore,
},
},
},
},
})
telescope.load_extension('fzf')
telescope.load_extension('undo')
telescope.load_extension('markit')
telescope.load_extension('refactoring')
-578
View File
@@ -1,578 +0,0 @@
local which_key = require('which-key')
local icons = require('lib.icons')
local Snacks = require('snacks')
local util = require('lib.util')
local setup = {
preset = 'helix',
plugins = {
marks = true,
registers = true,
spelling = {
enabled = true,
suggestions = 30,
},
presets = {
operators = true,
motions = true,
text_objects = true,
windows = true,
nav = true,
z = true,
g = true,
},
},
icons = {
breadcrumb = icons.ui.ArrowOpen,
separator = icons.ui.Arrow,
group = '',
keys = {
Space = icons.ui.Rocket,
},
rules = false, -- enable auto icon rules
},
show_help = false,
show_keys = true,
triggers = {
{ '<auto>', mode = 'nixsotc' },
{ '<leader>', mode = { 'n', 'v' } },
},
}
local normal_mappings = {
mode = 'n',
{ '<leader><space>', ':lua Snacks.picker.smart()<cr>', desc = 'Smart Find Files' },
{ '<leader>,', ':lua Snacks.picker.buffers()<cr>', desc = 'Buffers' },
{ '<leader>/', ':lua Snacks.picker.search_history()<cr>', desc = 'Search History' },
{ '<leader>:', ':lua Snacks.picker.command_history()<cr>', desc = 'Command History' },
{ '<leader>x', ':x<cr>', desc = ' Save and Quit' },
{ '<leader>c', group = ' Code' },
{ '<leader>cF', ':retab<cr>', desc = 'Fix Tabs' },
{ '<leader>cP', ':CccConvert<cr>', desc = 'Convert Color' },
{ '<leader>cR', ':ReloadConfig<cr>', desc = 'Reload Configs' },
{ '<leader>cc', ':CccHighlighterToggle<cr>', desc = 'Highlight Colors' },
{ '<leader>cd', ':RootDir<cr>', desc = 'Root Directory' },
{ '<leader>ce', ':%SnipRun<cr>', desc = 'Execute File' },
{ '<leader>cf', ':lua vim.lsp.buf.format({async = true})<cr>', desc = 'Format File' },
{ '<leader>cl', '::g/^\\s*$/d<cr>', desc = 'Clean Empty Lines' },
{ '<leader>cm', ':MarkdownPreviewToggle<cr>', desc = 'Markdown Preview' },
{ '<leader>co', ':Dashboard<cr>', desc = 'Dashboard' },
{ '<leader>cp', ':CccPick<cr>', desc = 'Pick Color' },
{ '<leader>cs', ':source %<cr>', desc = 'Source File' },
{ '<leader>C', group = ' Comment' },
{ '<leader>Cb', '<cmd>CBccbox<CR>', desc = 'Comment Box' },
{ '<leader>Ct', '<cmd>CBllline<CR>', desc = 'Tiled line' },
{ '<leader>Cl', '<cmd>CBline<CR>', desc = 'Line' },
{ '<leader>Cm', '<cmd>CBllbox14<CR>', desc = 'Marked' },
{ '<leader>Cc', '<cmd>CBcatalog<CR>', desc = 'Catalog' },
{ '<leader>Cd', '<cmd>CBd<CR>', desc = 'Delete Comment Style' },
{ '<leader>e', group = ' Edit' },
{ '<leader>ea', ':b#<cr>', desc = 'Alternate File' },
{ '<leader>ec', group = 'Edit Configs' },
{ '<leader>ecc', ':lua Snacks.picker.files({ cwd = vim.fn.stdpath("config") })<cr>', desc = 'Neovim Configs' },
{ '<leader>ecg', ':e ~/.gitconfig<cr>', desc = 'Git Config' },
{ '<leader>eck', ':e ~/dotfiles/kitty/kitty.conf<cr>', desc = 'Kitty Config' },
{ '<leader>ecn', ':e $MYVIMRC<cr>', desc = 'Neovim Init' },
{ '<leader>ecp', ':e ~/dotfiles/nvim/lua/plugins/list.lua<cr>', desc = 'Plugin List' },
{ '<leader>ect', ':e ~/dotfiles/tmux/tmux.conf<cr>', desc = 'Tmux Config' },
{ '<leader>ecv', ':e ~/.vimrc<cr>', desc = 'Vim Config' },
{ '<leader>ecz', ':e $ZDOTDIR/.zshrc<cr>', desc = 'Zsh Config' },
{ '<leader>ecZ', ':e $ZDOTDIR/prompt/init.zsh<cr>', desc = 'Zsh Prompt Config' },
{ '<leader>ee', ':lua MiniFiles.open()<cr>', desc = 'Explore Tree' },
{ '<leader>eE', ':lua Snacks.explorer()<cr>', desc = 'File Explorer' },
{ '<leader>ef', 'gf', desc = 'File Under Cursor' },
{ '<leader>em', ':e README.md<cr>', desc = 'Readme' },
{ '<leader>en', ':enew<cr>', desc = 'New File' },
{ '<leader>f', group = ' Find' },
{ '<leader>fa', ':lua Snacks.picker.files()<cr>', desc = 'Find Files' },
{ '<leader>fb', ':lua Snacks.picker.buffers()<cr>', desc = 'Buffers' },
{ '<leader>fc', ':lua Snacks.picker.git_log_file()<cr>', desc = 'File Commits' },
{ '<leader>fd', ':lua Snacks.picker.projects()<cr>', desc = 'Project Dirs' },
{ '<leader>ff', ':lua Snacks.picker.git_files()<cr>', desc = 'Find Git Files' },
{ '<leader>fg', ':lua Snacks.picker.grep()<cr>', desc = 'Grep' },
{ '<leader>fl', ':lua Snacks.picker.loclist()<cr>', desc = 'Location List' },
{ '<leader>fm', ':lua Snacks.picker.git_status()<cr>', desc = 'Modified Files' },
{ '<leader>fo', ':lua Snacks.picker.grep_buffers()<cr>', desc = 'Grep Open Buffers' },
{ '<leader>fp', ':lua Snacks.picker.resume()<cr>', desc = 'Previous Picker' },
{ '<leader>fq', ':lua Snacks.picker.qflist()<cr>', desc = 'Quickfix List' },
{ '<leader>fr', ':lua Snacks.picker.recent()<cr>', desc = 'Recent' },
{ '<leader>fs', ':lua Snacks.picker.lines()<cr>', desc = 'Buffer Lines' },
{ '<leader>ft', ':lua Snacks.picker.pickers()<cr>', desc = 'All Pickers' },
{ '<leader>fu', ':lua Snacks.picker.undo()<cr>', desc = 'Undo History' },
{ '<leader>fw', ':lua Snacks.picker.grep_word()<cr>', desc = 'Word Grep' },
{ '<leader>fz', ':lua Snacks.picker.zoxide()<cr>', desc = 'Zoxide' },
{ '<leader>g', group = ' Git' },
{ '<leader>gA', ':Gitsigns stage_buffer<cr>', desc = 'Stage Buffer' },
{ '<leader>gC', ':CoAuthor<cr>', desc = 'Co-Authors' },
{ '<leader>gP', ':Git push<cr>', desc = 'Push' },
{ '<leader>gR', ':Gitsigns reset_buffer<cr>', desc = 'Reset Buffer' },
{ '<leader>ga', ':Gitsigns stage_hunk<cr>', desc = 'Stage Hunk' },
{ '<leader>gb', ":lua require('gitsigns').blame_line({full = true})<cr>", desc = 'Blame' },
{ '<leader>gB', ":lua require('snacks').git.blame_line()<cr>", desc = 'Detailed Blame' },
{ '<leader>gd', ':Gitsigns diffthis HEAD<cr>', desc = 'Git Diff' },
{ '<leader>gF', ':Git<cr>', desc = 'Fugitive Panel' },
{ '<leader>gg', ':lua require("snacks").lazygit()<cr>', desc = 'Lazygit' },
{ '<leader>gi', ':Gitsigns preview_hunk<cr>', desc = 'Hunk Info' },
{ '<leader>gj', ':Gitsigns next_hunk<cr>', desc = 'Next Hunk' },
{ '<leader>gk', ':Gitsigns prev_hunk<cr>', desc = 'Prev Hunk' },
{ '<leader>gl', ':lua Snacks.picker.git_log_line()<cr>', desc = 'Git Log Line' },
{ '<leader>gL', ':lua Snacks.picker.git_log()<cr>', desc = 'Git Log' },
{ '<leader>go', group = 'Octohub' },
{ '<leader>gp', ':Git pull<cr>', desc = 'Pull' },
{ '<leader>gr', ':Gitsigns reset_hunk<cr>', desc = 'Reset Hunk' },
{ '<leader>gs', ':lua Snacks.picker.git_branches()<cr>', desc = 'Git Branches' },
{ '<leader>gS', ':lua Snacks.picker.git_stash()<cr>', desc = 'Git Stash' },
{ '<leader>gt', group = 'Toggle' },
{ '<leader>gtb', ':Gitsigns toggle_current_line_blame<cr>', desc = 'Blame' },
{ '<leader>gtd', ':Gitsigns toggle_deleted<cr>', desc = 'Deleted' },
{ '<leader>gtl', ':Gitsigns toggle_linehl<cr>', desc = 'Line HL' },
{ '<leader>gtn', ':Gitsigns toggle_numhl<cr>', desc = 'Number HL' },
{ '<leader>gts', ':Gitsigns toggle_signs<cr>', desc = 'Signs' },
{ '<leader>gtw', ':Gitsigns toggle_word_diff<cr>', desc = 'Word Diff' },
{ '<leader>gu', ':Gitsigns undo_stage_hunk<cr>', desc = 'Undo Stage Hunk' },
{ '<leader>gv', ':Gitsigns select_hunk<cr>', desc = 'Select Hunk' },
{ '<leader>gw', ':lua require("snacks").gitbrowse()<cr>', desc = 'Git Browse' },
{ '<leader>i', group = ' Insert' },
{ '<leader>id', ":put =strftime('## %a, %d %b, %Y, %r')<cr>", desc = 'Date' },
{ '<leader>if', ":put =expand('%:t')<cr>", desc = 'File Name' },
{ '<leader>ii', ':lua Snacks.picker.icons()<cr>', desc = 'Icons' },
{ '<leader>in', ':Nerdy<cr>', desc = 'Nerd Glyphs' },
{ '<leader>ip', ':put %<cr>', desc = 'Relative Path' },
{ '<leader>iP', ':put %:p<cr>', desc = 'Absolute Path' },
{ '<leader>ir', ':lua Snacks.picker.registers()<cr>', desc = 'Registers' },
{ '<leader>it', ":put =strftime('## %r')<cr>", desc = 'Time' },
{ '<leader>iv', ':lua Snacks.picker.cliphist()<cr>', desc = 'Clipboard' },
{ '<leader>j', group = ' Jump' },
{ '<leader>jc', '*', desc = 'Word' },
{ '<leader>jd', ':FlashDiagnostics<cr>', desc = 'Diagnostics' },
{ '<leader>jf', ':lua Snacks.picker.jumps()<cr>', desc = 'Jumps' },
{ '<leader>jh', '<C-o>', desc = 'Backward' },
{ '<leader>jj', ":lua require('flash').remote()<cr>", desc = 'Remote' },
{ '<leader>jk', ":lua require('flash').treesitter()<cr>", desc = 'Treesitter' },
{ '<leader>jl', '<C-i>', desc = 'Forward' },
{ '<leader>jp', ":lua require('flash').jump({continue = true})<cr>", desc = 'Previous Jump' },
{ '<leader>js', ":lua require('flash').jump()<cr>", desc = 'Search' },
{ '<leader>jt', ":lua require('flash').treesitter_search()<cr>", desc = 'Remote Treesitter' },
{
'<leader>jn',
":lua require('flash').jump({search = { forward = true, wrap = false, multi_window = false },})<cr>",
desc = 'Search Forward',
},
{
'<leader>jN',
":lua require('flash').jump({search = { forward = false, wrap = false, multi_window = false },})<cr>",
desc = 'Search Backward',
},
{
'<leader>jw',
':lua require("flash").jump({ pattern = vim.fn.expand("<cword>")})<cr>',
desc = 'Current Word',
},
{ '<leader>l', group = ' LSP' },
{ '<leader>la', ':Lspsaga code_action<cr>', desc = 'Code Action' },
{ '<leader>ld', ':Lspsaga goto_definition<cr>', desc = 'Goto Definition' },
{ '<leader>lD', ':Lspsaga peek_definition<cr>', desc = 'Peek Definition' },
{ '<leader>lf', ':Lspsaga finder<cr>', desc = 'Finder' },
{ '<leader>lF', ':lua Snacks.picker.lsp_references()<cr>', desc = 'References' },
{ '<leader>lh', ':Lspsaga hover_doc<cr>', desc = 'Hover' },
{ '<leader>li', ':lua Snacks.picker.lsp_implementations()<cr>', desc = 'Goto Implementation' },
{ '<leader>lI', ':LspInfo<cr>', desc = 'LSP Info' },
{ '<leader>lj', ':Lspsaga diagnostic_jump_next<cr>', desc = 'Next Diagnostic' },
{ '<leader>ll', ':lua Snacks.picker.diagnostics_buffer()<cr>', desc = 'Buffer Diagnostics' },
{ '<leader>lL', ':lua Snacks.picker.diagnostics()<cr>', desc = 'Diagnostics' },
{ '<leader>lk', ':Lspsaga diagnostic_jump_prev<cr>', desc = 'Prev Diagnostic' },
{ '<leader>lo', ':Lspsaga outline<cr>', desc = 'Outline' },
{ '<leader>lp', ':lua Snacks.picker.lsp_declarations()<cr>', desc = 'Goto Definition' },
{ '<leader>lq', ':LspStop<cr>', desc = 'Stop LSP' },
{ '<leader>lQ', ':LspRestart<cr>', desc = 'Restart LSP' },
{ '<leader>lr', ':Lspsaga rename<cr>', desc = 'Rename' },
{ '<leader>lR', ':Lspsaga project_replace<cr>', desc = 'Replace' },
{ '<leader>ls', ':lua Snacks.picker.lsp_symbols()<cr>', desc = 'Symbols' },
{ '<leader>lS', ':lua Snacks.picker.lsp_workspace_symbols()<cr>', desc = 'Workspace Symbols' },
{ '<leader>lt', ':Lspsaga goto_type_definition<cr>', desc = 'Goto Type Definition' },
{ '<leader>lT', ':Lspsaga peek_type_definition<cr>', desc = 'Peek Type Definition' },
{ '<leader>m', group = ' Marks' },
{
'<leader>mb',
":lua require('telescope').extensions.markit.bookmarks_list_all()<cr>",
desc = 'Bookmarks',
},
{
'<leader>mB',
":lua require('telescope').extensions.markit.bookmarks_list_all({project_only = true})<cr>",
desc = 'Bookmarks In Project',
},
{ '<leader>md', ":lua require('markit').delete_line()<cr>", desc = 'Delete Marks In Line' },
{ '<leader>mD', ":lua require('markit').delete_buf()<cr>", desc = 'Delete Marks In Buffer' },
{ '<leader>mg', group = 'Group Bookmarks' },
{ '<leader>mG', group = 'Group Bookmarks In Project' },
{ '<leader>mh', ":lua require('markit').prev_bookmark()<cr>", desc = 'Previous Bookmark' },
{ '<leader>mj', ":lua require('markit').next()<cr>", desc = 'Next' },
{ '<leader>mk', ":lua require('markit').prev()<cr>", desc = 'Previous' },
{ '<leader>ml', ":lua require('markit').next_bookmark()<cr>", desc = 'Next Bookmark' },
-- { '<leader>mm', ':Telescope markit<cr>', desc = 'All Marks' },
{ '<leader>mm', ':lua Snacks.picker.marks()<cr>', desc = 'Marks' },
{ '<leader>mn', group = 'Next Bookmark In Group' },
{ '<leader>mp', group = 'Previous Bookmark In Group' },
{ '<leader>mP', ":lua require('markit').preview()<cr>", desc = 'Preview' },
{ '<leader>ms', ":lua require('markit').set_next()<cr>", desc = 'Set Next' },
{ '<leader>mt', ":lua require('markit').toggle()<cr>", desc = 'Toggle' },
{ '<leader>mx', ":lua require('markit').delete_bookmark()<cr>", desc = 'Delete Bookmark' },
{ '<leader>o', group = ' Options' },
{ '<leader>oa', ':lua Snacks.picker.autocmds()<cr>', desc = 'Autocmds' },
{ '<leader>oc', ':lua Snacks.picker.command_history()<cr>', desc = 'Command History' },
{ '<leader>od', ':lua Snacks.picker.help()<cr>', desc = 'Docs' },
{ '<leader>og', ':lua Snacks.picker.commands()<cr>', desc = 'Commands' },
{ '<leader>oh', ':lua Snacks.picker.highlights()<cr>', desc = 'Highlights' },
{ '<leader>oi', 'vim.show_pos', desc = 'Inspect Position' },
{ '<leader>ok', ':lua Snacks.picker.keymaps()<cr>', desc = 'Keymaps' },
{ '<leader>om', ':lua Snacks.picker.man()<cr>', desc = 'Man Pages' },
{ '<leader>on', ':lua Snacks.picker.notifications()<cr>', desc = 'Notification History' },
{ '<leader>or', ':set relativenumber!<cr>', desc = 'Relative Numbers' },
{ '<leader>os', ':lua Snacks.picker.search_history()<cr>', desc = 'Search History' },
{ '<leader>ot', ':lua Snacks.picker.colorschemes()<cr>', desc = 'Colorschemes' },
{ '<leader>p', group = ' Packages' },
{ '<leader>pc', ':Lazy check<cr>', desc = 'Check' },
{ '<leader>pd', ':Lazy debug<cr>', desc = 'Debug' },
{ '<leader>pe', ':lua require("snacks").profiler.scratch()<cr>', desc = 'Profiler Scratch' },
{ '<leader>pf', ':lua require("snacks").profiler.pick()<cr>', desc = 'Profiler Pick' },
{ '<leader>pi', ':Lazy install<cr>', desc = 'Install' },
{ '<leader>pl', ':Lazy log<cr>', desc = 'Log' },
{ '<leader>pm', ':Mason<cr>', desc = 'Mason' },
{ '<leader>pp', ':Lazy<cr>', desc = 'Plugins' },
{ '<leader>pP', ':Lazy profile<cr>', desc = 'Profile' },
{ '<leader>pr', ':Lazy restore<cr>', desc = 'Restore' },
{ '<leader>ps', ':Lazy sync<cr>', desc = 'Sync' },
{ '<leader>pt', ':lua require("snacks").profiler.toggle()<cr>', desc = 'Profiler Toggle' },
{ '<leader>pu', ':Lazy update<cr>', desc = 'Update' },
{ '<leader>px', ':Lazy clean<cr>', desc = 'Clean' },
{ '<leader>pS', ':lua Snacks.picker.lazy()<cr>', desc = 'Search for Plugin Spec' },
{ '<leader>q', group = ' Quit' },
{ '<leader>qa', ':qall<cr>', desc = 'Quit All' },
{ '<leader>qb', ':bw<cr>', desc = 'Close Buffer' },
{ '<leader>qd', ':lua require("snacks").bufdelete()<cr>', desc = 'Delete Buffer' },
{ '<leader>qf', ':qall!<cr>', desc = 'Force Quit' },
{ '<leader>qo', ':%bdelete|b#|bdelete#<cr>', desc = 'Close Others' },
{ '<leader>qq', ':q<cr>', desc = 'Quit' },
{ '<leader>qs', '<C-w>c', desc = 'Close Split' },
{ '<leader>qw', ':wq<cr>', desc = 'Write and Quit' },
{ '<leader>r', group = ' Refactor' },
{ '<leader>rb', ":lua require('spectre').open_file_search()<cr>", desc = 'Replace Buffer' },
{ '<leader>re', ":lua require('refactoring').refactor('Extract Block')<cr>", desc = 'Extract Block' },
{ '<leader>ri', ":lua require('refactoring').refactor('Inline Variable')<cr>", desc = 'Inline Variable' },
{ '<leader>rs', ':%s/\\<<C-r><C-w>\\>/<C-r><C-w>/gI<Left><Left><Left>', desc = 'Replace Word' },
{ '<leader>rS', ":lua require('spectre').open()<cr>", desc = 'Replace' },
{ '<leader>rt', ':lua Snacks.picker.treesitter()<cr>', desc = 'Treesitter Find' },
{ '<leader>rv', ":lua require('refactoring').refactor('Extract Variable')<cr>", desc = 'Extract Variable' },
{ '<leader>rw', ":lua require('spectre').open_visual({select_word=true})<cr>", desc = 'Replace Word' },
{ '<leader>rd', '', desc = 'Go To Definition' }, -- treesitter navigation
{ '<leader>rh', '', desc = 'List Definition Head' },
{ '<leader>rj', '', desc = 'Next Usage' },
{ '<leader>rk', '', desc = 'Previous Usage' },
{ '<leader>rl', '', desc = 'List Definition' },
{ '<leader>rn', '', desc = 'Swap Next' },
{ '<leader>rp', '', desc = 'Swap Previous' },
{ '<leader>rr', '', desc = 'Smart Rename' },
{
'<leader>rf',
":lua require('refactoring').refactor('Extract Block To File')<cr>",
desc = 'Extract To File',
},
{ '<leader>s', group = ' Split' },
{ '<leader>s+', ':resize +10<cr>', desc = 'Increase window height' },
{ '<leader>s-', ':vertical resize -20<cr>', desc = 'Decrease window width' },
{ '<leader>s/', '<C-w>s', desc = 'Split Below' },
{ '<leader>s=', ':vertical resize +20<cr>', desc = 'Increase window width' },
{ '<leader>sH', ':vertical resize -10<cr>', desc = 'Decrease window width' },
{ '<leader>sJ', ':resize -5<cr>', desc = 'Decrease window height' },
{ '<leader>sK', ':resize +5<cr>', desc = 'Increase window height' },
{ '<leader>sL', ':vertical resize +10<cr>', desc = 'Increase window width' },
{ '<leader>s\\', '<C-w>v', desc = 'Split Right' },
{ '<leader>s_', ':resize -10<cr>', desc = 'Decrease window height' },
{ '<leader>s`', '<C-w>p', desc = 'Previous Window' },
{ '<leader>sa', ':split<cr>', desc = 'Horizontal Split' },
{ '<leader>sc', ':tabclose<cr>', desc = 'Close Tab' },
{ '<leader>sf', ':tabfirst<cr>', desc = 'First Tab' },
{ '<leader>sh', '<C-w>h', desc = 'Move Left' },
{ '<leader>sj', '<C-w>j', desc = 'Move Down' },
{ '<leader>sk', '<C-w>k', desc = 'Move Up' },
{ '<leader>sl', '<C-w>l', desc = 'Move Right' },
{ '<leader>sp', ':NavigatorPrevious<cr>', desc = 'Previous Pane' },
{ '<leader>sq', '<C-w>c', desc = 'Close Split' },
{ '<leader>ss', ':vsplit<cr>', desc = 'Vertical Split' },
{ '<leader>t', group = ' Terminal' },
{ '<leader>t1', '<cmd>1ToggleTerm<cr>', desc = 'Toggle Terminal' },
{ '<leader>t2', '<cmd>2ToggleTerm<cr>', desc = 'Toggle Terminal' },
{ '<leader>th', '<cmd>Sterm<cr>', desc = 'Horizontal Terminal' },
{ '<leader>tv', '<cmd>Vterm<cr>', desc = 'Vertical Terminal' },
{ '<leader>tc', '<Cmd>close<CR>', desc = 'Hide Terminal' },
{ '<leader>w', group = ' Writing' },
{ '<leader>wc', ':set spell!<cr>', desc = 'Spellcheck' },
{ '<leader>wd', ':lua require("snacks").dim.enable()<cr>', desc = 'Dim On' },
{ '<leader>wD', ':lua require("snacks").dim.disable()<cr>', desc = 'Dim Off' },
{ '<leader>wf', ":lua require'utils'.sudo_write()<cr>", desc = 'Force Write' },
{ '<leader>wj', ']s', desc = 'Next Misspell' },
{ '<leader>wk', '[s', desc = 'Prev Misspell' },
{ '<leader>wn', ':WriteNoFormat<cr>', desc = 'Write Without Formatting' },
{ '<leader>ws', ':lua Snacks.picker.spelling()<cr>', desc = 'Spell Suggestions' },
{ '<leader>wq', ':wq<cr>', desc = 'Write and Quit' },
{ '<leader>ww', ':w<cr>', desc = 'Write' },
{ '<leader>wz', ':lua require("snacks").zen.zen()<cr>', desc = 'Zen' },
{ '<leader>wZ', ':lua require("snacks").zen.zoom()<cr>', desc = 'Zoom' },
{ '<leader>y', group = ' Yank' },
{ '<leader>yL', ':CopyAbsolutePathWithLine<cr>', desc = 'Absolute Path with Line' },
{ '<leader>yP', ':CopyAbsolutePath<cr>', desc = 'Absolute Path' },
{ '<leader>ya', ':%y+<cr>', desc = 'Copy Whole File' },
{ '<leader>yf', ':CopyFileName<cr>', desc = 'File Name' },
{ '<leader>yg', ':lua require"gitlinker".get_buf_range_url()<cr>', desc = 'Copy Git URL' },
{ '<leader>yl', ':CopyRelativePathWithLine<cr>', desc = 'Relative Path with Line' },
{ '<leader>yp', ':CopyRelativePath<cr>', desc = 'Relative Path' },
}
-- Numerical mappings
for i = 1, 9 do
table.insert(normal_mappings, {
string.format('<leader>n%d', i),
string.format('<cmd>Tdo %d<cr>', i),
desc = string.format('Todo %d Days In Future', i),
})
table.insert(normal_mappings, {
string.format('<leader>np%d', i),
string.format('<cmd>Tdo -%d<cr>', i),
desc = string.format('Todo %d Days From Past', i),
})
table.insert(normal_mappings, {
string.format('<leader>f%d', i),
string.format('<cmd>LualineBuffersJump%d<cr>', i),
desc = string.format('File %d', i),
})
table.insert(normal_mappings, {
string.format('<leader>m%d', i),
string.format('<cmd>lua require("markit").toggle_bookmark%d()<cr>', i),
desc = string.format('Toggle Group %d Bookmark', i),
})
table.insert(normal_mappings, {
string.format('<leader>mp%d', i),
string.format('<cmd>lua require("markit").prev_bookmark%d()<cr>', i),
desc = string.format('Previous Group %d Bookmarks', i),
})
table.insert(normal_mappings, {
string.format('<leader>mn%d', i),
string.format('<cmd>lua require("markit").next_bookmark%d()<cr>', i),
desc = string.format('Next Group %d Bookmarks', i),
})
table.insert(normal_mappings, {
string.format('<leader>mg%d', i),
string.format('<cmd>lua require("telescope").extensions.markit.bookmarks_list_all({group = %d})<cr>', i),
desc = string.format('Group %d Bookmarks', i),
})
table.insert(normal_mappings, {
string.format('<leader>mG%d', i),
string.format(
'<cmd>lua require("telescope").extensions.markit.bookmarks_list_all({group = %d, project_only = true})<cr>',
i
),
desc = string.format('Group %d Bookmarks In Project', i),
})
end
local visual_mappings = {
mode = 'v',
{ '<leader>c', group = ' Code' },
{ '<leader>ce', "<esc><cmd>'<,'>SnipRun<cr>", desc = 'Execute Selection' },
{ '<leader>cS', ':sort!<cr>', desc = 'Sort Desc' },
{ '<leader>ci', ':sort i<cr>', desc = 'Sort Case Insensitive' },
{ '<leader>cs', ':sort<cr>', desc = 'Sort Asc' },
{ '<leader>cu', ':!uniq<cr>', desc = 'Unique' },
{ '<leader>cx', ':lua<cr>', desc = 'Execute Lua' },
{ '<leader>C', group = ' Comment' },
{ '<leader>Cb', '<cmd>CBccbox<CR>', desc = 'Comment Box' },
{ '<leader>Ct', '<cmd>CBllline<CR>', desc = 'Tiled line' },
{ '<leader>Cl', '<cmd>CBline<CR>', desc = 'Line' },
{ '<leader>Cm', '<cmd>CBllbox14<CR>', desc = 'Marked' },
{ '<leader>Cc', '<cmd>CBcatalog<CR>', desc = 'Catalog' },
{ '<leader>Cd', '<cmd>CBd<CR>', desc = 'Delete Comment Style' },
{ '<leader>g', group = ' Git' },
{ '<leader>ga', ":'<,'>Gitsigns stage_hunk<cr>", desc = 'Stage Hunk' },
{ '<leader>gr', ":'<,'>Gitsigns reset_hunk<cr>", desc = 'Reset Hunk' },
{ '<leader>gu', ":'<,'>Gitsigns undo_stage_hunk<cr>", desc = 'Undo Stage Hunk' },
{ '<leader>j', group = ' Jump' },
{
'<leader>jN',
":lua require('flash').jump({search = { forward = false, wrap = false, multi_window = false },})<cr>",
desc = 'Search Backward',
},
{ '<leader>jd', ':FlashDiagnostics<cr>', desc = 'Diagnostics' },
{ '<leader>jj', ":lua require('flash').remote()<cr>", desc = 'Remote' },
{ '<leader>jk', ":lua require('flash').treesitter()<cr>", desc = 'Treesitter' },
{
'<leader>jn',
":lua require('flash').jump({search = { forward = true, wrap = false, multi_window = false },})<cr>",
desc = 'Search Forward',
},
{ '<leader>jp', ":lua require('flash').jump({continue = true})<cr>", desc = 'Previous Jump' },
{ '<leader>js', ":lua require('flash').jump()<cr>", desc = 'Search' },
{ '<leader>jt', ":lua require('flash').treesitter_search()<cr>", desc = 'Remote Treesitter' },
{
'<leader>jw',
':lua require("flash").jump({ pattern = vim.fn.expand("<cword>")})<cr>',
desc = 'Current Word',
},
{ '<leader>l', group = ' LSP' },
{ '<leader>la', desc = '<cmd><C-U>Lspsaga range_code_action<CR>' },
{ '<leader>p', group = ' ScreenShot' },
{ '<leader>py', '<cmd>CodeSnap<cr>', mode = 'x', desc = 'Save selected code snapshot into clipboard' },
{ '<leader>ps', '<cmd>CodeSnapSave<cr>', mode = 'x', desc = 'Save selected code snapshot in ~/Pictures' },
{
'<leader>ph',
'<cmd>CodeSnapHighlight<cr>',
mode = 'x',
desc = 'Highlight and snapshot selected code into clipboard',
},
{ '<leader>pi', '<cmd>CodeSnapASCII<cr>', mode = 'x', desc = 'Save ASCII code snapshot into clipboard' },
{ '<leader>r', group = ' Refactor' },
{
'<leader>re',
"<esc>:lua require('refactoring').refactor('Extract Function')<cr>",
desc = 'Extract Function',
},
{
'<leader>rf',
"<esc>:lua require('refactoring').refactor('Extract Function To File')<cr>",
desc = 'Extract To File',
},
{ '<leader>ri', "<esc>:lua require('refactoring').refactor('Inline Variable')<cr>", desc = 'Inline Variable' },
{
'<leader>rv',
"<esc>:lua require('refactoring').refactor('Extract Variable')<cr>",
desc = 'Extract Variable',
},
{ '<leader>y', group = ' Yank' },
{ '<leader>yg', '<cmd>lua require"gitlinker".get_buf_range_url("v")<cr>', desc = 'Copy Git URL' },
}
local no_leader_mappings = {
mode = 'n',
{ '<C-Down>', '<cmd>resize -10<cr>', desc = 'Decrease window height' },
{ '<C-Left>', '<cmd>vertical resize -10<cr>', desc = 'Decrease window width' },
{ '<C-Right>', '<cmd>vertical resize +10<cr>', desc = 'Increase window width' },
{ '<C-Up>', '<cmd>resize +10<cr>', desc = 'Increase window height' },
{ '<C-f>', '<cmd>Telescope find_files<cr>', desc = 'Find Files' },
{ '<C-g>', '<cmd>Fterm lazygit<cr>', desc = 'Lazygit' },
{ '<C-h>', '<C-w>h', desc = 'Move Left' },
{ '<C-j>', '<C-w>j', desc = 'Move Down' },
{ '<C-k>', '<C-w>k', desc = 'Move Up' },
{ '<C-l>', '<C-w>l', desc = 'Move Right' },
{ '<C-\\>', '<C-w>p', desc = 'Previous Pane' },
{ '<S-tab>', '<cmd>bprevious<cr>', desc = 'Previous Buffer' },
{ '<tab>', '<cmd>bnext<cr>', desc = 'Next Buffer' },
{ '<S-h>', '<cmd>bprevious<cr>', desc = 'Previous Buffer' },
{ '<S-l>', '<cmd>bnext<cr>', desc = 'Next Buffer' },
{ 'K', '<cmd>Lspsaga hover_doc<cr>', desc = 'LSP Hover' },
{ 'Q', '<cmd>qall!<cr>', desc = 'Force Quit!' },
{ 'U', '<cmd>redo<cr>', desc = 'Redo' },
{ '[', group = ' Previous' },
{ '[g', '<cmd>Gitsigns prev_hunk<cr>', desc = 'Git Hunk' },
{ '[o', group = 'Textobjects' },
{ ']', group = ' Next' },
{ ']g', '<cmd>Gitsigns next_hunk<cr>', desc = 'Git Hunk' },
{ ']o', group = 'Textobjects' },
}
local tmux_mappings = {
{ '<C-h>', ':NavigatorLeft<cr>', desc = 'Move Left' },
{ '<C-j>', ':NavigatorDown<cr>', desc = 'Move Down' },
{ '<C-k>', ':NavigatorUp<cr>', desc = 'Move Up' },
{ '<C-l>', ':NavigatorRight<cr>', desc = 'Move Right' },
{ '<C-\\>', ':NavigatorPrevious<cr>', desc = 'Previous Pane' },
}
if vim.fn.exists('$TMUX') == 1 then
vim.tbl_extend('force', no_leader_mappings, tmux_mappings)
end
if util.get_user_config('enable_test_runner', false) then
local test_runner_bindings = {
{ '<leader>u', group = ' Test' },
{ '<leader>uc', ':lua require("neotest").run.run()<cr>', desc = 'Run Current Test' },
{ '<leader>uf', ':lua require("neotest").run.run(vim.fn.expand("%"))<cr>', desc = 'Run Test File' },
{ '<leader>uo', ':Neotest output-panel<cr>', desc = 'Test Output' },
{ '<leader>us', ':Neotest summary<cr>', desc = 'Test Summary' },
}
vim.tbl_extend('force', normal_mappings, test_runner_bindings)
end
if util.get_user_config('enable_db_explorer', false) then
local db_explorer_bindings = {
{ '<leader>d', group = ' Database' },
{ '<leader>dS', ':lua require("dbee").store("json", "buffer", { extra_arg = 0 })<cr>', desc = 'To JSON' },
{ '<leader>db', ':DBToggle<cr>', desc = 'DB Explorer' },
{ '<leader>dj', ':lua require("dbee").next()<cr>', desc = 'DB Next' },
{ '<leader>dk', ':lua require("dbee").prev()<cr>', desc = 'DB Prev' },
{ '<leader>ds', ':lua require("dbee").store("csv", "buffer", { extra_arg = 0 })<cr>', desc = 'To CSV' },
{ '<leader>dt', ':lua require("dbee").store("table", "buffer", { extra_arg = 0 })<cr>', desc = 'To Table' },
}
vim.tbl_extend('force', normal_mappings, db_explorer_bindings)
end
if util.get_user_config('enable_debugger', false) then
local debugger_bindings = {
{ '<leader>b', group = ' Debug' },
{ '<leader>bO', ':DapStepOut<cr>', desc = 'Out' },
{ '<leader>bR', ':DapRestartFrame<cr>', desc = 'Restart Frame' },
{ '<leader>bb', ':DapToggleBreakpoint<cr>', desc = 'Breakpoint' },
{ '<leader>bc', ':DapContinue<cr>', desc = 'Continue' },
{ '<leader>bi', ':DapStepInto<cr>', desc = 'Into' },
{ '<leader>bl', ":lua require'dap'.run_last()<cr>", desc = 'Last' },
{ '<leader>bo', ':DapStepOver<cr>', desc = 'Over' },
{ '<leader>br', ':DapToggleRepl<cr>', desc = 'Repl' },
{ '<leader>bt', ':DapUIToggle<cr>', desc = 'Debugger' },
{ '<leader>bx', ':DapTerminate<cr>', desc = 'Exit' },
}
vim.tbl_extend('force', normal_mappings, debugger_bindings)
end
local user_keybindings = require('lib.util').get_user_config('user_keybindings', {})
which_key.setup(setup)
which_key.add(normal_mappings)
which_key.add(visual_mappings)
which_key.add(no_leader_mappings)
which_key.add(user_keybindings)