diff --git a/lua/lib/icons.lua b/lua/lib/icons.lua index 6936191..d2f2d15 100644 --- a/lua/lib/icons.lua +++ b/lua/lib/icons.lua @@ -165,4 +165,3 @@ return { Windows = ' ', }, } - diff --git a/lua/lib/prompts.lua b/lua/lib/prompts.lua new file mode 100644 index 0000000..725557f --- /dev/null +++ b/lua/lib/prompts.lua @@ -0,0 +1,21 @@ +local prompts = { + docs = 'Generate comprehensive documentation for this code including parameters, return values, and usage examples.', + explain = 'Explain this code in detail, including its purpose, logic flow, and any algorithms used.', + fix = 'Identify and fix any bugs, errors, or code smells in this code.', + commit = 'Create a descriptive commit message following conventional commits format for these changes.', + optimize = 'Optimize this code for better performance, readability, and maintainability.', + review = 'Review this code for best practices, potential issues, and suggest improvements.', + tests = 'Write comprehensive unit tests covering all edge cases for this code.', +} + +---Returns a function that inserts the named prompt at cursor position +---@param prompt_name string Name of the prompt to insert +---@return function Function to execute in a keybinding +prompts.add_prompt = function(prompt_name) + local prompt_text = prompts[prompt_name] + return function() + vim.cmd("put ='" .. prompt_text:gsub("'", "''") .. "'") + end +end + +return prompts diff --git a/lua/lib/util.lua b/lua/lib/util.lua index e47cb81..1687021 100644 --- a/lua/lib/util.lua +++ b/lua/lib/util.lua @@ -62,20 +62,4 @@ util.is_present = function(bin) return vim.fn.executable(bin) == 1 end -util.telescope_select = function(options, options_desc, select_prompt) - require('telescope.pickers') - .new({}, { - prompt_title = select_prompt, - results_title = options_desc, - finder = require('telescope.finders').new_table({ - results = options, - entry_maker = require('telescope.make_entry').gen_from_file(), - }), - sorter = require('telescope.sorters').get_fzy_sorter(), - previewer = require('telescope.previewers').vim_buffer_cat.new({}), - }) - :find() -end - return util - diff --git a/lua/plugins/ai/avante.lua b/lua/plugins/ai/avante.lua new file mode 100644 index 0000000..7b66ad4 --- /dev/null +++ b/lua/plugins/ai/avante.lua @@ -0,0 +1,167 @@ +local avante = require('avante') + +local model_names = { + 'claude-3.5-sonnet', + 'claude-3.7-sonnet', + 'claude-3.7-sonnet-thought', + 'gemini-2.0-flash-001', + 'gemini-2.5-pro', + 'gpt-4.1', + 'gpt-4o-2024-11-20', + 'o1', + 'o3-mini', + 'o4-mini', +} + +avante.setup({ + mode = 'agentic', + provider = 'copilot-claude-3.5-sonnet', + -- cursor_applying_provider = 'copilot-o3-mini', + -- auto_suggestions_provider = 'copilot-claude-3.7-sonnet', + copilot = { + endpoint = 'https://api.githubcopilot.com', + allow_insecure = false, + timeout = 10 * 60 * 1000, + temperature = 0, + max_completion_tokens = 1000000, + reasoning_effort = 'high', + }, + + vendors = (function() + local vendors_table = {} + for _, model_name in ipairs(model_names) do + local vendor_key = 'copilot-' .. model_name + vendors_table[vendor_key] = { + __inherited_from = 'copilot', + model = model_name, + display_name = vendor_key, + } + end + return vendors_table + end)(), + + behaviour = { + auto_suggestions = false, + auto_set_highlight_group = true, + auto_set_keymaps = true, + auto_apply_diff_after_generation = false, + support_paste_from_clipboard = false, + minimize_diff = true, -- Whether to remove unchanged lines when applying a code block + enable_token_counting = true, + }, + hints = { enabled = false }, + mappings = { + ---@class AvanteConflictMappings + diff = { + ours = 'co', + theirs = 'ct', + all_theirs = 'ca', + both = 'cb', + cursor = 'cc', + next = ']x', + prev = '[x', + }, + suggestion = { + accept = '', + next = '', + prev = '', + dismiss = '', + }, + jump = { + next = ']]', + prev = '[[', + }, + submit = { + normal = '', + insert = '', + }, + cancel = { + normal = { '', '', 'q' }, + insert = { '' }, + }, + ask = 'aa', + edit = 'ae', + refresh = 'ar', + focus = 'af', + stop = 'as', + select_model = 'aM', + select_history = 'ah', + files = { + add_current = 'ac', + add_all_buffers = 'ab', + }, + toggle = { + default = 'at', + debug = 'ad', + hint = 'aH', + suggestion = 'aS', + repomap = 'aR', + }, + sidebar = { + apply_all = 'A', + apply_cursor = 'a', + retry_user_request = 'r', + edit_user_request = 'e', + switch_windows = '', + reverse_switch_windows = '', + remove_file = 'd', + add_file = 'a', + close = { 'q' }, + close_from_input = nil, -- e.g., { normal = "", insert = "" } + }, + }, + windows = { + ---@type "right" | "left" | "top" | "bottom" + position = 'right', + wrap = true, + width = 40, + sidebar_header = { + enabled = true, + align = 'center', + rounded = true, + }, + input = { + prefix = '> ', + height = 32, + }, + edit = { + border = 'rounded', + start_insert = true, + }, + ask = { + floating = false, + start_insert = true, + border = 'rounded', + ---@type "ours" | "theirs" + focus_on_apply = 'ours', + }, + }, + highlights = { + diff = { + current = 'DiffText', + incoming = 'DiffAdd', + }, + }, + --- @class AvanteConflictUserConfig + diff = { + autojump = true, + ---@type string | fun(): any + list_opener = 'copen', + override_timeoutlen = 500, + }, + suggestion = { + debounce = 600, + throttle = 600, + }, + system_prompt = function() + local hub = require('mcphub').get_hub_instance() + return hub:get_active_servers_prompt() + end, + custom_tools = function() + return { + require('mcphub.extensions.avante').mcp_tool(), + } + end, + disabled_tools = {}, + slash_commands = {}, +}) diff --git a/lua/plugins/ai/copilot.lua b/lua/plugins/ai/copilot.lua new file mode 100644 index 0000000..31ad413 --- /dev/null +++ b/lua/plugins/ai/copilot.lua @@ -0,0 +1,45 @@ +local copilot = require('copilot') + +copilot.setup({ + panel = { + enabled = true, + auto_refresh = false, + keymap = { + jump_prev = '[[', + jump_next = ']]', + accept = '', + refresh = 'gr', + open = '', + }, + layout = { + position = 'bottom', + ratio = 0.4, + }, + }, + suggestion = { + enabled = true, + auto_trigger = false, + debounce = 75, + keymap = { + accept = '', + accept_word = false, + accept_line = false, + next = '', + prev = '', + dismiss = '', + }, + }, + filetypes = { + yaml = true, + markdown = true, + help = true, + gitcommit = true, + gitrebase = true, + hgcommit = true, + svn = true, + cvs = true, + ['.'] = true, + }, + copilot_node_command = 'node', -- Node.js version must be > 16.x + server_opts_overrides = {}, +}) diff --git a/lua/plugins/ai/mcphub.lua b/lua/plugins/ai/mcphub.lua new file mode 100644 index 0000000..828f242 --- /dev/null +++ b/lua/plugins/ai/mcphub.lua @@ -0,0 +1,40 @@ +local mcphub = require('mcphub') + +mcphub.setup({ + port = 37373, + config = vim.fn.expand('~/.config/mcphub/servers.json'), + native_servers = {}, + + auto_approve = false, + auto_toggle_mcp_servers = true, + extensions = { + avante = { + make_slash_commands = true, + }, + }, + + ui = { + window = { + width = 0.8, + height = 0.8, + relative = 'editor', + zindex = 50, + border = 'rounded', + }, + wo = {}, + }, + + on_ready = function(hub) end, + on_error = function(err) end, + + use_bundled_binary = false, + + -- server_url = nil, -- defaults to `http://localhost:port` + shutdown_delay = 600000, -- 10 minutes + log = { + level = vim.log.levels.INFO, + to_file = true, + file_path = vim.fn.stdpath('state') .. '/mcphub.log', + prefix = 'MCPHub', + }, +}) diff --git a/lua/plugins/lang/ai.lua b/lua/plugins/editor/ai.lua similarity index 100% rename from lua/plugins/lang/ai.lua rename to lua/plugins/editor/ai.lua diff --git a/lua/plugins/lang/bracketed.lua b/lua/plugins/editor/bracketed.lua similarity index 100% rename from lua/plugins/lang/bracketed.lua rename to lua/plugins/editor/bracketed.lua diff --git a/lua/plugins/lang/pairs.lua b/lua/plugins/editor/pairs.lua similarity index 100% rename from lua/plugins/lang/pairs.lua rename to lua/plugins/editor/pairs.lua diff --git a/lua/plugins/editor/spider.lua b/lua/plugins/editor/spider.lua new file mode 100644 index 0000000..77a12b0 --- /dev/null +++ b/lua/plugins/editor/spider.lua @@ -0,0 +1,10 @@ +local spider = require('spider') + +spider.setup({ + skipInsignificantPunctuation = true, +}) + +vim.keymap.set({ 'n', 'o', 'x' }, 'w', "lua require('spider').motion('w')", { desc = 'Spider-w' }) +vim.keymap.set({ 'n', 'o', 'x' }, 'e', "lua require('spider').motion('e')", { desc = 'Spider-e' }) +vim.keymap.set({ 'n', 'o', 'x' }, 'b', "lua require('spider').motion('b')", { desc = 'Spider-b' }) +vim.keymap.set({ 'n', 'o', 'x' }, 'ge', "lua require('spider').motion('ge')", { desc = 'Spider-ge' }) diff --git a/lua/plugins/lang/surround.lua b/lua/plugins/editor/surround.lua similarity index 100% rename from lua/plugins/lang/surround.lua rename to lua/plugins/editor/surround.lua diff --git a/lua/plugins/lang/textobjects.lua b/lua/plugins/editor/textobjects.lua similarity index 94% rename from lua/plugins/lang/textobjects.lua rename to lua/plugins/editor/textobjects.lua index 040e149..d7e565d 100644 --- a/lua/plugins/lang/textobjects.lua +++ b/lua/plugins/editor/textobjects.lua @@ -52,13 +52,13 @@ local textobjects = { enable = true, swap_next = { ['rna'] = '@parameter.inner', -- swap object property with next - ['rn:'] = '@property.outer', -- swap parameters/argument with next - ['rnm'] = '@function.outer', -- swap function with next + ['rn:'] = '@property.outer', -- swap parameters/argument with next + ['rnm'] = '@function.outer', -- swap function with next }, swap_previous = { ['rpa'] = '@parameter.inner', -- swap parameters/argument with prev - ['rp:'] = '@property.outer', -- swap object property with prev - ['rpm'] = '@function.outer', -- swap function with previous + ['rp:'] = '@property.outer', -- swap object property with prev + ['rpm'] = '@function.outer', -- swap function with previous }, }, move = { @@ -114,4 +114,3 @@ vim.keymap.set({ 'n', 'x', 'o' }, 't', ts_repeat_move.builtin_t) vim.keymap.set({ 'n', 'x', 'o' }, 'T', ts_repeat_move.builtin_T) return textobjects - diff --git a/lua/plugins/lang/treesitter.lua b/lua/plugins/editor/treesitter.lua similarity index 95% rename from lua/plugins/lang/treesitter.lua rename to lua/plugins/editor/treesitter.lua index 28e3984..a22ad24 100644 --- a/lua/plugins/lang/treesitter.lua +++ b/lua/plugins/editor/treesitter.lua @@ -1,5 +1,5 @@ local treesitter = require('nvim-treesitter.configs') -local textobjects = require('plugins.lang.textobjects') +local textobjects = require('plugins.editor.textobjects') local auto_install = require('lib.util').get_user_config('auto_install', true) local installed_parsers = {} @@ -16,6 +16,10 @@ treesitter.setup({ textobjects = textobjects, matchup = { enable = true }, indent = { enable = true }, + autotag = { + enable = true, + }, + highlight = { enable = true, @@ -79,4 +83,3 @@ treesitter.setup({ }, }, }) - diff --git a/lua/plugins/lang/autopairs.lua b/lua/plugins/lang/autopairs.lua deleted file mode 100644 index 79e9671..0000000 --- a/lua/plugins/lang/autopairs.lua +++ /dev/null @@ -1,22 +0,0 @@ -local npairs = require('nvim-autopairs') - -npairs.setup({ - check_ts = true, - ts_config = { - lua = { 'string', 'source' }, - javascript = { 'string', 'template_string' }, - java = false, - }, - disable_filetype = { 'TelescopePrompt', 'spectre_panel' }, - fast_wrap = { - map = '', - chars = { '{', '[', '(', '"', "'" }, - pattern = string.gsub([[ [%'%"%)%>%]%)%}%,] ]], '%s+', ''), - offset = 0, - end_key = '$', - keys = 'qwertyuiopzxcvbnmasdfghjkl', - check_comma = true, - highlight = 'PmenuSel', - highlight_grey = 'LineNr', - }, -}) diff --git a/lua/plugins/lang/blink.lua b/lua/plugins/lang/blink.lua index 12975b9..b89e134 100644 --- a/lua/plugins/lang/blink.lua +++ b/lua/plugins/lang/blink.lua @@ -10,8 +10,14 @@ blink.setup({ [''] = { 'show', 'hide' }, [''] = { 'show_documentation', 'hide_documentation' }, }, + snippets = { preset = 'luasnip' }, completion = { - list = { selection = { preselect = false, auto_insert = true } }, + list = { + selection = { + auto_insert = true, + preselect = true, + }, + }, menu = { border = 'rounded' }, documentation = { window = { border = 'rounded' } }, }, @@ -24,8 +30,28 @@ blink.setup({ kind_icons = icons.kind, }, sources = { - default = { 'lazydev', 'lsp', 'path', 'snippets', 'buffer' }, + default = { 'avante', 'lazydev', 'lsp', 'path', 'snippets', 'buffer', 'copilot' }, providers = { + avante = { + module = 'blink-cmp-avante', + name = 'Avante', + opts = {}, + }, + copilot = { + name = 'copilot', + module = 'blink-cmp-copilot', + score_offset = 90, + async = true, + transform_items = function(_, items) + local CompletionItemKind = require('blink.cmp.types').CompletionItemKind + local kind_idx = #CompletionItemKind + 1 + CompletionItemKind[kind_idx] = 'Copilot' + for _, item in ipairs(items) do + item.kind = kind_idx + end + return items + end, + }, lazydev = { name = 'LazyDev', module = 'lazydev.integrations.blink', diff --git a/lua/plugins/lang/lspconfig.lua b/lua/plugins/lang/lspconfig.lua index cd865af..ed12414 100644 --- a/lua/plugins/lang/lspconfig.lua +++ b/lua/plugins/lang/lspconfig.lua @@ -7,40 +7,49 @@ if auto_install then installed_servers = require('plugins.list').lsp_servers end +local capabilities = require('blink.cmp').get_lsp_capabilities() local default_setup = function(server) - lspconfig[server].setup({ - capabilities = require('blink.cmp').get_lsp_capabilities(), - }) -end - -local signs = { Error = icons.Error, Warn = icons.Warning, Hint = icons.Hint, Info = icons.Information } -for type, icon in pairs(signs) do - local hl = 'DiagnosticSign' .. type - vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = '' }) + if server == 'tailwindcss' then + lspconfig[server].setup({ + capabilities = capabilities, + filetypes = { + 'html', 'css', 'scss', 'javascript', 'javascriptreact', + 'typescript', 'typescriptreact', 'vue', 'svelte' + }, + init_options = { + userLanguages = { + ['javascript'] = 'javascript', + ['javascriptreact'] = 'javascript', + ['typescript'] = 'typescript', + ['typescriptreact'] = 'typescript', + }, + }, + }) + else + lspconfig[server].setup({ + capabilities = capabilities, + }) + end end require('mason-lspconfig').setup({ ensure_installed = installed_servers, - handlers = { - default_setup, - lua_ls = function() - lspconfig.lua_ls.setup({ - settings = { - Lua = { - runtime = { version = 'LuaJIT' }, - diagnostics = { globals = { 'vim' } }, - workspace = { library = { vim.env.VIMRUNTIME } }, - format = { - enable = true, - defaultConfig = { - align_continuous_assign_statement = false, - align_continuous_rect_table_field = false, - align_array_table = false, - }, - }, - }, - }, - }) - end, + handlers = { default_setup }, +}) + +local signs = { Error = icons.Error, Warn = icons.Warning, Hint = icons.Hint, Info = icons.Information } +vim.diagnostic.config({ + underline = true, + update_in_insert = true, + severity_sort = true, + virtual_text = true, + float = true, + signs = { + text = { + [vim.diagnostic.severity.ERROR] = signs.Error, + [vim.diagnostic.severity.WARN] = signs.Warn, + [vim.diagnostic.severity.INFO] = signs.Info, + [vim.diagnostic.severity.HINT] = signs.Hint, + }, }, }) diff --git a/lua/plugins/lang/null-ls.lua b/lua/plugins/lang/null-ls.lua index fabcd84..299da74 100644 --- a/lua/plugins/lang/null-ls.lua +++ b/lua/plugins/lang/null-ls.lua @@ -14,7 +14,6 @@ null_ls.setup({ diagnostics_format = '#{c} #{m} (#{s})', sources = { action.proselint, -- markdown actions - action.refactoring, -- action.ts_node_action, -- treesitter node actions, buggy, causes repeated notifications comp.spell, -- spell completion comp.tags, -- tags completion @@ -31,8 +30,6 @@ null_ls.setup({ diag.write_good, -- english writing style format.mix, -- elixir formatter format.prettier, -- js, md, css, etc formatter - format.prettierd, - format.djlint, -- django, jinja formatter -- format.rubocop, -- ruby formatter format.shfmt, -- shell formatter format.stylua, -- lua formatter diff --git a/lua/plugins/lang/refactoring.lua b/lua/plugins/lang/refactoring.lua deleted file mode 100644 index 26b4a20..0000000 --- a/lua/plugins/lang/refactoring.lua +++ /dev/null @@ -1,25 +0,0 @@ -local refactoring = require('refactoring') - -refactoring.setup({ - prompt_func_return_type = { - go = false, - java = false, - cpp = false, - c = false, - h = false, - hpp = false, - cxx = false, - }, - prompt_func_param_type = { - go = false, - java = false, - - cpp = false, - c = false, - h = false, - hpp = false, - cxx = false, - }, - printf_statements = {}, - print_var_statements = {}, -}) diff --git a/lua/plugins/lang/spider.lua b/lua/plugins/lang/spider.lua deleted file mode 100644 index 108eb09..0000000 --- a/lua/plugins/lang/spider.lua +++ /dev/null @@ -1,10 +0,0 @@ -local spider = require('spider') - -spider.setup({ - skipInsignificantPunctuation = true, -}) - -vim.keymap.set({ 'n', 'o', 'x' }, 'w', ":lua require('spider').motion('w')", { desc = 'Spider-w' }) -vim.keymap.set({ 'n', 'o', 'x' }, 'e', ":lua require('spider').motion('e')", { desc = 'Spider-e' }) -vim.keymap.set({ 'n', 'o', 'x' }, 'b', ":lua require('spider').motion('b')", { desc = 'Spider-b' }) -vim.keymap.set({ 'n', 'o', 'x' }, 'ge', ":lua require('spider').motion('ge')", { desc = 'Spider-ge' }) diff --git a/lua/plugins/lazy.lua b/lua/plugins/lazy.lua index cfd4752..29538c8 100644 --- a/lua/plugins/lazy.lua +++ b/lua/plugins/lazy.lua @@ -1,109 +1,109 @@ -local lazypath = vim.fn.stdpath('data') .. '/lazy/lazy.nvim' +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" if not vim.loop.fs_stat(lazypath) then - vim.fn.system({ - 'git', - 'clone', - '--filter=blob:none', - '--single-branch', - 'https://github.com/folke/lazy.nvim.git', - lazypath, - }) + vim.fn.system({ + "git", + "clone", + "--filter=blob:none", + "--single-branch", + "https://github.com/folke/lazy.nvim.git", + lazypath, + }) end vim.opt.runtimepath:prepend(lazypath) -local status_ok, lazy = pcall(require, 'lazy') +local status_ok, lazy = pcall(require, "lazy") if not status_ok then - return + return end -local icons = require('lib.icons') -local plugins = require('plugins.list').plugins +local icons = require("lib.icons") +local plugins = require("plugins.list").plugins lazy.setup({ - root = vim.fn.stdpath('data') .. '/lazy', - defaults = { lazy = true }, - spec = plugins, - lockfile = vim.fn.stdpath('config') .. '/lua/plugins/lock.json', - concurrency = 8, - dev = { path = '~/Projects/2KAbhishek/', patterns = {"2kabhishek"}, fallback = true }, - install = { missing = true, colorscheme = { 'onedark' } }, + root = vim.fn.stdpath("data") .. "/lazy", + defaults = { lazy = true }, + spec = plugins, + lockfile = vim.fn.stdpath("config") .. "/lua/plugins/lock.json", + concurrency = 8, + dev = { path = "~/Projects/Github", patterns = { "Projects" }, fallback = true }, + install = { missing = true, colorscheme = { "onedark" } }, - git = { - log = { '--since=3 days ago' }, - timeout = 120, - url_format = 'https://github.com/%s.git', - filter = true, - }, + git = { + log = { "--since=3 days ago" }, + timeout = 120, + url_format = "https://github.com/%s.git", + filter = true, + }, - ui = { - size = { width = 0.9, height = 0.8 }, - wrap = true, - border = 'rounded', - icons = { - cmd = icons.ui.Terminal, - config = icons.ui.Gear, - event = icons.ui.Electric, - ft = icons.documents.File, - init = icons.ui.Rocket, - import = icons.documents.Import, - keys = icons.ui.Keyboard, - lazy = icons.ui.Sleep, - loaded = icons.ui.CircleSmall, - not_loaded = icons.ui.CircleSmallEmpty, - plugin = icons.ui.Package, - runtime = icons.ui.Neovim, - source = icons.ui.Code, - start = icons.ui.Play, - task = icons.ui.Check, - list = { - icons.ui.CircleSmall, - icons.ui.Arrow, - icons.ui.Star, - icons.ui.Minus, - }, - }, - browser = nil, - throttle = 20, - custom_keys = { - ['l'] = function(plugin) - require('lazy.util').float_term({ 'lazygit', 'log' }, { - cwd = plugin.dir, - }) - end, + ui = { + size = { width = 0.9, height = 0.8 }, + wrap = true, + border = "rounded", + icons = { + cmd = icons.ui.Terminal, + config = icons.ui.Gear, + event = icons.ui.Electric, + ft = icons.documents.File, + init = icons.ui.Rocket, + import = icons.documents.Import, + keys = icons.ui.Keyboard, + lazy = icons.ui.Sleep, + loaded = icons.ui.CircleSmall, + not_loaded = icons.ui.CircleSmallEmpty, + plugin = icons.ui.Package, + runtime = icons.ui.Neovim, + source = icons.ui.Code, + start = icons.ui.Play, + task = icons.ui.Check, + list = { + icons.ui.CircleSmall, + icons.ui.Arrow, + icons.ui.Star, + icons.ui.Minus, + }, + }, + browser = nil, + throttle = 20, + custom_keys = { + ["l"] = function(plugin) + require("lazy.util").float_term({ "lazygit", "log" }, { + cwd = plugin.dir, + }) + end, - ['t'] = function(plugin) - require('lazy.util').float_term(nil, { - cwd = plugin.dir, - }) - end, - }, - }, + ["t"] = function(plugin) + require("lazy.util").float_term(nil, { + cwd = plugin.dir, + }) + end, + }, + }, - diff = { cmd = 'git' }, - checker = { enabled = false, concurrency = nil, notify = true, frequency = 3600 }, - change_detection = { enabled = true, notify = true }, - performance = { - cache = { enabled = true }, - reset_packpath = true, - rtp = { - reset = true, - paths = {}, - disabled_plugins = { - 'gzip', - 'tarPlugin', - 'zipPlugin', - 'tohtml', - -- 'tutor', - -- 'matchit', - -- 'matchparen', - -- 'netrwPlugin', - }, - }, - }, - readme = { - root = vim.fn.stdpath('state') .. '/lazy/readme', - files = { 'README.md', 'lua/**/README.md' }, - skip_if_doc_exists = true, - }, - state = vim.fn.stdpath('state') .. '/lazy/state.json', + diff = { cmd = "git" }, + checker = { enabled = false, concurrency = nil, notify = true, frequency = 3600 }, + change_detection = { enabled = true, notify = true }, + performance = { + cache = { enabled = true }, + reset_packpath = true, + rtp = { + reset = true, + paths = {}, + disabled_plugins = { + "gzip", + "tarPlugin", + "zipPlugin", + "tohtml", + -- 'tutor', + -- 'matchit', + -- 'matchparen', + -- 'netrwPlugin', + }, + }, + }, + readme = { + root = vim.fn.stdpath("state") .. "/lazy/readme", + files = { "README.md", "lua/**/README.md" }, + skip_if_doc_exists = true, + }, + state = vim.fn.stdpath("state") .. "/lazy/state.json", }) diff --git a/lua/plugins/list.lua b/lua/plugins/list.lua index a1e0ce2..bf7ca1d 100644 --- a/lua/plugins/list.lua +++ b/lua/plugins/list.lua @@ -1,451 +1,563 @@ -local util = require('lib.util') +local util = require("lib.util") local function load_config(package) - return function() - require('plugins.' .. package) - end + return function() + require("plugins." .. package) + end end local plugins = { - -- UI - { - 'navarasu/onedark.nvim', - config = load_config('ui.onedark'), - lazy = false, - priority = 1000, - }, - { 'nvim-tree/nvim-web-devicons' }, - { - 'folke/snacks.nvim', - priority = 1000, - lazy = false, - config = load_config('ui.snacks'), - }, - { - 'nvim-lualine/lualine.nvim', - config = load_config('ui.lualine'), - event = { 'BufReadPost', 'BufNewFile' }, - }, - { - 'stevearc/dressing.nvim', - config = load_config('ui.dressing'), - event = { 'BufReadPost', 'BufNewFile' }, - }, + -- UI + { + "navarasu/onedark.nvim", + config = load_config("ui.onedark"), + lazy = false, + priority = 1000, + }, + { "nvim-tree/nvim-web-devicons" }, + { + "folke/snacks.nvim", + priority = 1000, + lazy = false, + config = load_config("ui.snacks"), + }, + { + "nvim-lualine/lualine.nvim", + config = load_config("ui.lualine"), + event = { "BufReadPost", "BufNewFile" }, + }, + { + "folke/which-key.nvim", + config = load_config("ui.which-key"), + event = "VeryLazy", + }, + { + "lewis6991/gitsigns.nvim", + config = load_config("ui.gitsigns"), + cmd = "Gitsigns", + event = { "BufReadPost", "BufNewFile" }, + }, + { + "2kabhishek/markit.nvim", + config = load_config("ui.markit"), + event = { "BufReadPost", "BufNewFile" }, + }, - -- Language - { - 'michaelb/sniprun', - build = 'bash ./install.sh', - config = load_config('lang.sniprun'), - cmd = 'SnipRun', - }, - { - 'ThePrimeagen/refactoring.nvim', - config = load_config('lang.refactoring'), - }, - { - 'echasnovski/mini.surround', - version = '*', - config = load_config('lang.surround'), - event = { 'BufReadPost', 'BufNewFile' }, - }, - { - 'echasnovski/mini.ai', - version = '*', - config = load_config('lang.ai'), - event = { 'BufReadPost', 'BufNewFile' }, - }, - { - 'echasnovski/mini.bracketed', - config = load_config('lang.bracketed'), - event = { 'BufReadPost', 'BufNewFile' }, - }, - { - 'echasnovski/mini.pairs', - config = load_config('lang.pairs'), - event = 'InsertEnter', - }, - { - 'chrisgrieser/nvim-spider', - config = load_config('lang.spider'), - event = { 'BufReadPost', 'BufNewFile' }, - }, + -- Editor + { + "nvim-treesitter/nvim-treesitter", + build = ":TSUpdate", + dependencies = { + "nvim-treesitter/nvim-treesitter-refactor", + "nvim-treesitter/nvim-treesitter-textobjects", + "RRethy/nvim-treesitter-textsubjects", + }, + config = load_config("editor.treesitter"), + event = { "BufReadPost", "BufNewFile" }, + }, + { + "windwp/nvim-ts-autotag", + event = "InsertEnter", + }, + { + "echasnovski/mini.bracketed", + config = load_config("editor.bracketed"), + event = { "BufReadPost", "BufNewFile" }, + }, + { + "echasnovski/mini.pairs", + config = load_config("editor.pairs"), + event = "InsertEnter", + }, + { + "echasnovski/mini.surround", + version = "*", + config = load_config("editor.surround"), + event = { "BufReadPost", "BufNewFile" }, + }, + { + "echasnovski/mini.ai", + version = "*", + config = load_config("editor.ai"), + event = { "BufReadPost", "BufNewFile" }, + }, + { + "chrisgrieser/nvim-spider", + config = load_config("editor.spider"), + event = { "BufReadPost", "BufNewFile" }, + }, + -- Language + { + "neovim/nvim-lspconfig", + dependencies = { "williamboman/mason-lspconfig.nvim" }, + config = load_config("lang.lspconfig"), + event = { "BufReadPre", "BufNewFile" }, + }, + { + "folke/lazydev.nvim", + ft = "lua", + }, + { + "nvimdev/lspsaga.nvim", + config = load_config("lang.lspsaga"), + event = "LspAttach", + }, + { + "williamboman/mason.nvim", + config = load_config("lang.mason"), + cmd = "Mason", + }, + { + "nvimtools/none-ls.nvim", + dependencies = { "jay-babu/mason-null-ls.nvim" }, + config = load_config("lang.null-ls"), + event = { "BufReadPost", "BufNewFile" }, + }, + { + "saghen/blink.cmp", + dependencies = { + "rafamadriz/friendly-snippets", + "Kaiser-Yang/blink-cmp-avante", + "L3MON4D3/LuaSnip", + version = "v2.*", + }, + version = "*", + config = load_config("lang.blink"), + opts_extend = { "sources.default" }, + event = { "InsertEnter" }, + }, + { + "mg979/vim-visual-multi", + branch = "master", -- Required to avoid loading the legacy branch + event = { "BufReadPost", "BufNewFile" }, -- Load earlier when buffer is ready + init = function() + vim.g.VM_leader = "\\" + vim.g.VM_maps = { + ["Find Under"] = "", -- Changed to match VSCode + ["Find Subword Under"] = "", -- Changed to match VSCode + ["Select All"] = "", + ["Add Cursor Down"] = "", -- More intuitive than + ["Add Cursor Up"] = "", -- More intuitive than + ["Select Cursor Down"] = "", + ["Select Cursor Up"] = "", + } + -- Keep default mappings for better functionality + vim.g.VM_default_mappings = 1 + end, + }, - -- Tresitter - { - 'nvim-treesitter/nvim-treesitter', - build = ':TSUpdate', - dependencies = { - 'nvim-treesitter/nvim-treesitter-refactor', - 'nvim-treesitter/nvim-treesitter-textobjects', - 'RRethy/nvim-treesitter-textsubjects', - }, - config = load_config('lang.treesitter'), - event = { 'BufReadPost', 'BufNewFile' }, - }, - -- LSP - { - 'neovim/nvim-lspconfig', - dependencies = { 'williamboman/mason-lspconfig.nvim' }, - config = load_config('lang.lspconfig'), - event = { 'BufReadPre', 'BufNewFile' }, - }, - { - 'folke/lazydev.nvim', - ft = 'lua', - }, - { - 'nvimdev/lspsaga.nvim', - config = load_config('lang.lspsaga'), - event = 'LspAttach', - }, - { - 'williamboman/mason.nvim', - config = load_config('lang.mason'), - cmd = 'Mason', - }, - { - 'nvimtools/none-ls.nvim', - dependencies = { 'jay-babu/mason-null-ls.nvim' }, - config = load_config('lang.null-ls'), - event = { 'BufReadPost', 'BufNewFile' }, - }, + -- AI + { + "zbirenbaum/copilot.lua", + dependencies = { "giuxtaposition/blink-cmp-copilot" }, + config = load_config("ai.copilot"), + event = "InsertEnter", + }, + { + "yetone/avante.nvim", + version = false, + config = load_config("ai.avante"), + event = { "BufReadPost", "BufNewFile" }, + build = "make", + -- build = "powershell -ExecutionPolicy Bypass -File Build.ps1 -BuildFromSource false" -- for windows + dependencies = { + "MunifTanjim/nui.nvim", + "nvim-lua/plenary.nvim", + "ravitemer/mcphub.nvim", + }, + }, + { + "ravitemer/mcphub.nvim", + dependencies = { "nvim-lua/plenary.nvim" }, + cmd = "MCPHub", + build = "npm install -g mcp-hub@latest", -- use this if you want to use the global mcp-hub + -- build = 'bundled_build.lua', + config = load_config("ai.mcphub"), + }, + -- { + -- 'L3MON4D3/LuaSnip', + -- dependencies = { 'rafamadriz/friendly-snippets' }, + -- config = function() + -- -- Lazy load VSCode-style snippets (including JSON) + -- require("luasnip.loaders.from_vscode").lazy_load({ + -- paths = { + -- vim.fn.stdpath('config') .. '/snippets', -- your custom snippets folder + -- }, + -- }) + -- end + -- }, - -- Completion - { - 'saghen/blink.cmp', - dependencies = { 'rafamadriz/friendly-snippets' }, - version = '*', - config = load_config('lang.blink'), - opts_extend = { 'sources.default' }, - event = { 'InsertEnter' }, - }, - { - 'Exafunction/codeium.vim', - event = 'InsertEnter', - config = function() - vim.keymap.set('i', '', function() - return vim.fn['codeium#Accept']() - end, { expr = true, silent = true }) - vim.keymap.set('i', '', function() - return vim.fn['codeium#CycleCompletions'](1) - end, { expr = true, silent = true }) - vim.keymap.set('i', '', function() - return vim.fn['codium#CycleCompletions'](-1) - end, { expr = true, silent = true }) - vim.keymap.set('i', '', function() - return vim.fn['codeium#Clear']() - end, { expr = true, silent = true }) - vim.keymap.set('n', 'cI', 'CodeiumToggle', { desc = 'Toggle IA (Codeium)' }) - end, - }, + -- Tools + { + "echasnovski/mini.files", + version = "*", + config = load_config("tools.files"), + event = { "BufReadPost", "BufNewFile" }, + keys = { + { + "ee", + function() + require("mini.files").open(util.get_file_path(), true) + end, + desc = "Explorer", + }, + }, + }, + { + "michaelb/sniprun", + build = "bash ./install.sh", + config = load_config("tools.sniprun"), + cmd = "SnipRun", + }, + { + "windwp/nvim-spectre", + config = load_config("tools.spectre"), + cmd = "Spectre", + }, + { + "folke/flash.nvim", + config = load_config("tools.flash"), + keys = { + { + "s", + mode = { "n", "x", "o" }, + function() + require("flash").jump() + end, + desc = "Flash", + }, + { + "S", + mode = { "n", "x", "o" }, + function() + require("flash").treesitter() + end, + desc = "Flash Treesitter", + }, + }, + }, + { + "numToStr/Navigator.nvim", + config = load_config("tools.navigator"), + event = "VeryLazy", + }, + { + "iamcco/markdown-preview.nvim", + build = function() + vim.fn["mkdp#util#install"]() + end, + ft = "markdown", + cmd = { "MarkdownPreviewToggle", "MarkdownPreview" }, + }, + { + "uga-rosa/ccc.nvim", + config = load_config("tools.ccc"), + cmd = { "CccHighlighterToggle", "CccConvert", "CccPick" }, + }, + { + "ruifm/gitlinker.nvim", + config = load_config("tools.gitlinker"), + keys = "yg", + }, + { + "tpope/vim-fugitive", + cmd = "Git", + }, + { - -- Tools - { - 'echasnovski/mini.files', - version = '*', - config = load_config('tools.files'), - event = { 'BufReadPost', 'BufNewFile' }, - keys = { - { - 'ee', - function() - require('mini.files').open(util.get_file_path(), true) - end, - desc = 'Explorer', - }, - }, - }, - { - 'windwp/nvim-spectre', - config = load_config('tools.spectre'), - cmd = 'Spectre', - }, - { - 'folke/flash.nvim', - config = load_config('tools.flash'), - keys = { - { - 's', - mode = { 'n', 'x', 'o' }, - function() - require('flash').jump() - end, - desc = 'Flash', - }, - { - 'S', - mode = { 'n', 'x', 'o' }, - function() - require('flash').treesitter() - end, - desc = 'Flash Treesitter', - }, - }, - }, - { - 'numToStr/Navigator.nvim', - config = load_config('tools.navigator'), - event = function() - if vim.fn.exists('$TMUX') == 1 then - return 'VeryLazy' - end - end, - }, - { - 'folke/which-key.nvim', - config = load_config('tools.which-key'), - event = 'VeryLazy', - }, - { - 'iamcco/markdown-preview.nvim', - build = 'cd app && yarn install', - init = function() - vim.g.mkdp_filetypes = { 'markdown' } - end, - ft = 'markdown', - cmd = { 'MarkdownPreviewToggle', 'MarkdownPreview' }, - }, - { - 'uga-rosa/ccc.nvim', - config = load_config('tools.ccc'), - cmd = { 'CccHighlighterToggle', 'CccConvert', 'CccPick' }, - }, - { - '2kabhishek/termim.nvim', - cmd = { 'Fterm', 'FTerm', 'Sterm', 'STerm', 'Vterm', 'VTerm' }, - }, - { - 'm4xshen/hardtime.nvim', - dependencies = { 'MunifTanjim/nui.nvim', 'nvim-lua/plenary.nvim' }, - cmd = 'Hardtime', - enabled = util.get_user_config('enable_trainer', false), - }, - { - 'kndndrj/nvim-dbee', - dependencies = { 'MunifTanjim/nui.nvim' }, - build = function() - -- "curl", "wget", "bitsadmin", "go" - require('dbee').install('curl') - end, - config = load_config('tools.dbee'), - cmd = 'DBToggle', - enabled = util.get_user_config('enable_db_explorer', false), - }, - { - 'mfussenegger/nvim-dap', - dependencies = { 'rcarriga/nvim-dap-ui' }, - config = load_config('tools.dap'), - cmd = { 'DapUIToggle', 'DapToggleRepl', 'DapToggleBreakpoint' }, - enabled = util.get_user_config('enable_debugger', false), - }, - { - 'nvim-neotest/neotest', - dependencies = { - 'nvim-neotest/nvim-nio', - 'olimorris/neotest-rspec', - 'nvim-neotest/neotest-jest', - 'nvim-neotest/neotest-python', - }, - config = load_config('tools.neotest'), - cmd = 'Neotest', - enabled = util.get_user_config('enable_test_runner', false), - }, - { - 'LudoPinelli/comment-box.nvim', - event = 'BufReadPre', - opts = { - box_width = 70, - }, - }, - { - 'mistricky/codesnap.nvim', - lazy = true, - build = 'make', - opts = { - save_path = '~/Pictures/screenshots/code', - has_breadcrumbs = false, - show_workspace = false, - bg_theme = 'default', - watermark = 'S4NKALP', - code_font_family = 'Iosevka NF', - code_font_size = 12, - }, - cmd = { 'CodeSnap', 'CodeSnapSave', 'CodeSnapHighlight', 'CodeSnapASCII' }, - }, - { - 'wakatime/vim-wakatime', - event = { 'VimEnter' }, - lazy = false, - }, - { + "akinsho/toggleterm.nvim", + cmd = { "ToggleTerm" }, + version = "v2.*", + config = load_config("tools.toggleterm"), + }, + { + "mistricky/codesnap.nvim", + lazy = true, + build = "make", + opts = { + save_path = "~/Pictures/code-screenshots/", + has_breadcrumbs = false, + show_workspace = false, + bg_theme = "default", + watermark = "S4NKALP", + code_font_family = "Iosevka NF", + code_font_size = 12, + }, + cmd = { "CodeSnap", "CodeSnapSave", "CodeSnapHighlight", "CodeSnapASCII" }, + }, + { + "cvigilv/esqueleto.nvim", + event = "VeryLazy", + opts = { + directories = { + vim.fn.stdpath("config") .. "/templates", + }, + patterns = { + -- File + "README", + "LICENSE", + -- Filetype + "sh", + "markdown", + "python", + "lua", + "html", + "vue", + }, + }, + }, + { + "LudoPinelli/comment-box.nvim", + event = "BufReadPre", + opts = { + box_width = 70, + }, + }, + { + "mistricky/codesnap.nvim", + lazy = true, + build = "make", + opts = { + save_path = "~/Pictures/screenshots/code", + has_breadcrumbs = false, + show_workspace = false, + bg_theme = "default", + watermark = "S4NKALP", + code_font_family = "Iosevka NF", + code_font_size = 12, + }, + cmd = { "CodeSnap", "CodeSnapSave", "CodeSnapHighlight", "CodeSnapASCII" }, + }, - 'akinsho/toggleterm.nvim', - cmd = { 'ToggleTerm' }, - version = 'v2.*', - config = load_config('tools.toggleterm'), - }, - { - 'cvigilv/esqueleto.nvim', - event = 'VeryLazy', - opts = { - directories = { - vim.fn.stdpath('config') .. '/templates', - }, - patterns = { - -- File - 'README', - 'LICENSE', - -- Filetype - 'sh', - 'markdown', - 'python', - 'lua', - 'html', - 'vue', - }, - }, - }, - { - 'creativenull/dotfyle-metadata.nvim', - cmd = { 'DotfyleGenerate', 'DotfyleOpen' }, - }, + -- 2kabhishek + { + "2kabhishek/pickme.nvim", + cmd = "PickMe", + event = "VeryLazy", + dependencies = { + "folke/snacks.nvim", + -- 'nvim-telescope/telescope.nvim', + -- 'ibhagwan/fzf-lua', + }, + opts = { + picker_provider = "snacks", + }, + }, + { + "2kabhishek/termim.nvim", + cmd = { "Fterm", "FTerm", "Sterm", "STerm", "Vterm", "VTerm" }, + }, + { + "2kabhishek/octohub.nvim", + cmd = { + "OctoRepos", + "OctoReposByCreated", + "OctoReposByForks", + "OctoReposByIssues", + "OctoReposByLanguages", + "OctoReposByNames", + "OctoReposByPushed", + "OctoReposBySize", + "OctoReposByStars", + "OctoReposByUpdated", + "OctoReposTypeArchived", + "OctoReposTypeForked", + "OctoReposTypePrivate", + "OctoReposTypeStarred", + "OctoReposTypeTemplate", + "OctoRepo", + "OctoStats", + "OctoActivityStats", + "OctoContributionStats", + "OctoRepoStats", + "OctoProfile", + "OctoRepoWeb", + }, + keys = { + "goa", + "goA", + "gob", + "goc", + "gof", + "goF", + "gog", + "goi", + "gol", + "goo", + "gop", + "goP", + "gor", + "gos", + "goS", + "got", + "goT", + "gou", + "goU", + "gow", + }, + dependencies = { + "2kabhishek/utils.nvim", + }, + config = load_config("tools.octohub"), + }, - { - 'zapling/mason-lock.nvim', - cmd = { 'MasonLock', 'MasonLockRestore' }, - config = function() - require('mason-lock').setup({ - lockfile_path = vim.fn.stdpath('config') .. '/lua/plugins/mason-lock.json', - }) - end, - }, - - -- Telescope - { - 'nvim-telescope/telescope.nvim', - branch = '0.1.x', - dependencies = { - 'nvim-lua/plenary.nvim', - { - 'nvim-telescope/telescope-fzf-native.nvim', - build = 'make', - }, - 'debugloop/telescope-undo.nvim', - }, - config = load_config('tools.telescope'), - cmd = 'Telescope', - }, - { - -- 'chentoast/marks.nvim', - '2kabhishek/markit.nvim', - config = load_config('tools.markit'), - event = { 'BufReadPost', 'BufNewFile' }, - }, - { - '2kabhishek/nerdy.nvim', - dependencies = { 'stevearc/dressing.nvim' }, - cmd = 'Nerdy', - }, - - -- Git - { - 'ruifm/gitlinker.nvim', - config = load_config('tools.gitlinker'), - keys = 'yg', - }, - { - 'lewis6991/gitsigns.nvim', - config = load_config('tools.gitsigns'), - cmd = 'Gitsigns', - event = { 'BufReadPost', 'BufNewFile' }, - }, - { - 'tpope/vim-fugitive', - cmd = 'Git', - }, + -- Optional + { + "sphamba/smear-cursor.nvim", + event = "VeryLazy", + cond = vim.g.neovide == nil, + opts = { + stiffness = 0.5, + trailing_stiffness = 0.49, + }, + enabled = util.get_user_config("enable_smear_cursor", false), + }, + { + "nvzone/showkeys", + cmd = "ShowkeysToggle", + opts = { + timeout = 1, + maxkeys = 10, + -- more opts + }, + }, + { + "wakatime/vim-wakatime", + event = { "VimEnter" }, + lazy = false, + enabled = util.get_user_config("enable_wakatime", false), + }, + { + "JohnnyJumper/neotypist.nvim", + opts = { + notify_interval = 60 * 100, -- one minute + high = 80, + low = 20, + show_virt_text = true, + notify = true, + update_time = 300, + virt_text = function(wpm) + return ("🚀 WPM: %.0f"):format(wpm) + end, + virt_text_pos = "right_align", + }, + }, + { + "m4xshen/hardtime.nvim", + dependencies = { "MunifTanjim/nui.nvim", "nvim-lua/plenary.nvim" }, + cmd = "Hardtime", + enabled = util.get_user_config("enable_trainer", false), + }, + { + "kndndrj/nvim-dbee", + dependencies = { "MunifTanjim/nui.nvim" }, + build = function() + -- "curl", "wget", "bitsadmin", "go" + require("dbee").install("curl") + end, + config = load_config("tools.dbee"), + cmd = "DBToggle", + enabled = util.get_user_config("enable_db_explorer", false), + }, + { + "mfussenegger/nvim-dap", + dependencies = { "rcarriga/nvim-dap-ui" }, + config = load_config("tools.dap"), + cmd = { "DapUIToggle", "DapToggleRepl", "DapToggleBreakpoint" }, + enabled = util.get_user_config("enable_debugger", false), + }, + { + "nvim-neotest/neotest", + dependencies = { + "nvim-neotest/nvim-nio", + "olimorris/neotest-rspec", + "nvim-neotest/neotest-jest", + "nvim-neotest/neotest-python", + }, + config = load_config("tools.neotest"), + cmd = "Neotest", + enabled = util.get_user_config("enable_test_runner", false), + }, } local treesitter_parsers = { - 'bash', - 'css', - 'c', - 'dart', - 'elixir', - 'gitcommit', - 'go', - 'html', - 'java', - 'javascript', - 'json', - 'lua', - 'markdown', - 'markdown_inline', -- markdown code blocks - 'python', - 'ruby', - 'rust', - 'scss', - 'typescript', - 'vim', - 'vimdoc', - 'yaml', + "bash", + "css", + "dart", + "elixir", + "gitcommit", + "go", + "html", + "java", + "javascript", + "json", + "lua", + "markdown", + "markdown_inline", -- markdown code blocks + "python", + "ruby", + "rust", + "typescript", + "vim", + "vimdoc", + "yaml", } local null_ls_sources = { - 'shellcheck', -- bash lint + "shellcheck", } local lsp_servers = { - 'bashls', - 'jsonls', - 'lua_ls', - 'typos_lsp', -- check typos - 'vimls', - 'tailwindcss', + "bashls", + "jsonls", + "typos_lsp", + "vimls", + "lua_ls", + "tailwindcss", -- Add Tailwind CSS LSP } -if util.is_present('npm') then - table.insert(lsp_servers, 'eslint') - table.insert(lsp_servers, 'ts_ls') +if util.is_present("npm") then + table.insert(lsp_servers, "eslint") + table.insert(lsp_servers, "ts_ls") end -if util.is_present('gem') then - table.insert(lsp_servers, 'solargraph') - table.insert(lsp_servers, 'rubocop') +if util.is_present("gem") then + table.insert(lsp_servers, "solargraph") + table.insert(lsp_servers, "rubocop") end -if util.is_present('go') then - table.insert(lsp_servers, 'gopls') +if util.is_present("go") then + table.insert(lsp_servers, "gopls") end -if util.is_present('dart') then - table.insert(lsp_servers, 'dartls') +if util.is_present("dart") then + table.insert(lsp_servers, "dartls") end -if util.is_present('java') then - table.insert(lsp_servers, 'jdtls') +if util.is_present("java") then + table.insert(lsp_servers, "jdtls") end -if util.is_present('pip') then - table.insert(lsp_servers, 'ruff') - table.insert(lsp_servers, 'pyright') +if util.is_present("pip") then + table.insert(lsp_servers, "ruff") + table.insert(lsp_servers, "pylsp") end -if util.is_present('mix') then - table.insert(lsp_servers, 'elixirls') +if util.is_present("mix") then + table.insert(lsp_servers, "elixirls") end -if util.is_present('cargo') then - table.insert(lsp_servers, 'rust_analyzer') +if util.is_present("cargo") then + table.insert(lsp_servers, "rust_analyzer") end -vim.tbl_extend('force', plugins, util.get_user_config('user_plugins', {})) -vim.tbl_extend('force', lsp_servers, util.get_user_config('user_lsp_servers', {})) -vim.tbl_extend('force', null_ls_sources, util.get_user_config('user_null_ls_sources', {})) -vim.tbl_extend('force', treesitter_parsers, util.get_user_config('user_tresitter_parsers', {})) +plugins = vim.tbl_extend("force", plugins, util.get_user_config("user_plugins", {})) +lsp_servers = vim.tbl_extend("force", lsp_servers, util.get_user_config("user_lsp_servers", {})) +null_ls_sources = vim.tbl_extend("force", null_ls_sources, util.get_user_config("user_null_ls_sources", {})) +treesitter_parsers = vim.tbl_extend("force", treesitter_parsers, util.get_user_config("user_tresitter_parsers", {})) return { - plugins = plugins, - lsp_servers = lsp_servers, - null_ls_sources = null_ls_sources, - ts_parsers = treesitter_parsers, + plugins = plugins, + lsp_servers = lsp_servers, + null_ls_sources = null_ls_sources, + ts_parsers = treesitter_parsers, } diff --git a/lua/plugins/lock.json b/lua/plugins/lock.json index dee5290..33b090f 100644 --- a/lua/plugins/lock.json +++ b/lua/plugins/lock.json @@ -1,56 +1,63 @@ { + "LuaSnip": { "branch": "master", "commit": "faf3c94a44508cec1b961406d36cc65113ff3b98" }, "Navigator.nvim": { "branch": "master", "commit": "91d86506ac2a039504d5205d32a1d4bc7aa57072" }, - "blink.cmp": { "branch": "main", "commit": "dcda20d3aa345025699a920c45b0a0603551f41d" }, - "ccc.nvim": { "branch": "main", "commit": "b57cbaf8db3ac43c56c9e2c7f3812944638260ed" }, - "codeium.vim": { "branch": "main", "commit": "000de972de76f357c03da14f4f8dd9a969d4fe8c" }, - "codesnap.nvim": { "branch": "main", "commit": "6400480aa6cc366cbd931146c429aaa64680dab9" }, + "avante.nvim": { "branch": "main", "commit": "1c4e0621995480c7c8644751908fd9ac9cd59e90" }, + "blink-cmp-avante": { "branch": "master", "commit": "ddefb8de3cb1286ab39e0ccec0f32a45d03391f2" }, + "blink-cmp-copilot": { "branch": "main", "commit": "439cff78780c033aa23cf061d7315314b347e3c1" }, + "blink.cmp": { "branch": "main", "commit": "022521a8910a5543b0251b21c9e1a1e989745796" }, + "ccc.nvim": { "branch": "main", "commit": "9d1a256e006decc574789dfc7d628ca11644d4c2" }, + "codesnap.nvim": { "branch": "main", "commit": "be6d6b9a3b5e6999edbda76b16dace03d9bfcd3d" }, "comment-box.nvim": { "branch": "main", "commit": "06bb771690bc9df0763d14769b779062d8f12bc5" }, - "dotfyle-metadata.nvim": { "branch": "main", "commit": "2062776aa67cf5252f8c9bf3325f9b068205ae9a" }, - "dressing.nvim": { "branch": "master", "commit": "2d7c2db2507fa3c4956142ee607431ddb2828639" }, - "esqueleto.nvim": { "branch": "main", "commit": "490a02145412fb2cbb8d00b59e806070ed3cbdea" }, + "copilot.lua": { "branch": "master", "commit": "5f726c8e6bbcd7461ee0b870d4e6c8a973b55b64" }, + "esqueleto.nvim": { "branch": "main", "commit": "d495d8aecf6d8cc87b8f9b82276cd88393ce014b" }, "flash.nvim": { "branch": "main", "commit": "3c942666f115e2811e959eabbdd361a025db8b63" }, - "friendly-snippets": { "branch": "main", "commit": "efff286dd74c22f731cdec26a70b46e5b203c619" }, + "friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" }, "gitlinker.nvim": { "branch": "master", "commit": "cc59f732f3d043b626c8702cb725c82e54d35c25" }, - "gitsigns.nvim": { "branch": "main", "commit": "011dc6718bcebdf92a5336bb0da79189c3afe621" }, + "gitsigns.nvim": { "branch": "main", "commit": "8bdaccdb897945a3c99c1ad8df94db0ddf5c8790" }, "hardtime.nvim": { "branch": "main", "commit": "5d9adcbe2f12741de79e435c8b85dca69a3b22e4" }, "lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" }, "lazydev.nvim": { "branch": "main", "commit": "2367a6c0a01eb9edb0464731cc0fb61ed9ab9d2c" }, - "lspsaga.nvim": { "branch": "main", "commit": "6063935cf68de9aa6dd79f8e1caf5df0a9385de3" }, - "lualine.nvim": { "branch": "master", "commit": "070cd91da2770df7d27d5c49241a8f4697350c6e" }, + "lspsaga.nvim": { "branch": "main", "commit": "920b1253e1a26732e53fac78412f6da7f674671d" }, + "lualine.nvim": { "branch": "master", "commit": "0c6cca9f2c63dadeb9225c45bc92bb95a151d4af" }, "markdown-preview.nvim": { "branch": "master", "commit": "a923f5fc5ba36a3b17e289dc35dc17f66d0548ee" }, "markit.nvim": { "branch": "main", "commit": "9b031afab214aa6e6467f275f55640989f438925" }, - "mason-lock.nvim": { "branch": "main", "commit": "86614f76c3442fba1c5c8d79aa1efcb3ad69de1c" }, - "mason-lspconfig.nvim": { "branch": "main", "commit": "1a31f824b9cd5bc6f342fc29e9a53b60d74af245" }, + "mason-lspconfig.nvim": { "branch": "main", "commit": "60eaff7a470b8e78ddff09d847d17a011f560759" }, "mason-null-ls.nvim": { "branch": "main", "commit": "de19726de7260c68d94691afb057fa73d3cc53e7" }, - "mason.nvim": { "branch": "main", "commit": "fc98833b6da5de5a9c5b1446ac541577059555be" }, - "mini.ai": { "branch": "main", "commit": "ebb04799794a7f94628153991e6334c3304961b8" }, - "mini.bracketed": { "branch": "main", "commit": "0ec65567ffde0ad4d94d794d55f3b627203b496a" }, - "mini.files": { "branch": "main", "commit": "01001e0cfc1e79f581d055ae3f70fbac96a2f378" }, - "mini.pairs": { "branch": "main", "commit": "1a3e73649c0eaef2f6c48ce1e761c6f0a7c11918" }, - "mini.surround": { "branch": "main", "commit": "aa5e245829dd12d8ff0c96ef11da28681d6049aa" }, + "mason.nvim": { "branch": "main", "commit": "8024d64e1330b86044fed4c8494ef3dcd483a67c" }, + "mcphub.nvim": { "branch": "main", "commit": "ac5c366b9572ece2782d4765f14d69574e715415" }, + "mini.ai": { "branch": "main", "commit": "e139eb1101beb0250fea322f8c07a42f0f175688" }, + "mini.bracketed": { "branch": "main", "commit": "079b8375e40ebf3f8af319ad835263ff390c3965" }, + "mini.files": { "branch": "main", "commit": "49c855977e9f4821d1ed8179ed44fe098b93ea2a" }, + "mini.pairs": { "branch": "main", "commit": "69864a2efb36c030877421634487fd90db1e4298" }, + "mini.surround": { "branch": "main", "commit": "5aab42fcdcf31fa010f012771eda5631c077840a" }, "neotest": { "branch": "master", "commit": "d66cf4e05a116957f0d3a7755a24291c7d1e1f72" }, - "nerdy.nvim": { "branch": "main", "commit": "14bdcd13265dfc80e6ca6cee0598c5880729e24f" }, - "none-ls.nvim": { "branch": "main", "commit": "a117163db44c256d53c3be8717f3e1a2a28e6299" }, + "neotypist.nvim": { "branch": "master", "commit": "23570aedca4bb4d92967ac82e053cf4d4903abe9" }, + "none-ls.nvim": { "branch": "main", "commit": "db2a48b79cfcdab8baa5d3f37f21c78b6705c62e" }, + "nui.nvim": { "branch": "main", "commit": "7cd18e73cfbd70e1546931b7268b3eebaeff9391" }, "nvim-dap": { "branch": "master", "commit": "99807078c5089ed30e0547aa4b52c5867933f426" }, - "nvim-lspconfig": { "branch": "master", "commit": "8a1529e46eef5efc86c34c8d9bdd313abc2ecba0" }, - "nvim-spectre": { "branch": "master", "commit": "ddd7383e856a7c939cb4f5143278fe041bbb8cb9" }, - "nvim-spider": { "branch": "main", "commit": "9b9a1cf88a10790de69d3b0562d7d612f23561d5" }, - "nvim-treesitter": { "branch": "master", "commit": "548ed98f8a0af738d095ef1be5961f41061ed743" }, + "nvim-dbee": { "branch": "master", "commit": "9656fc59841291e9dbd2f3b50b1cb4c77d9fea79" }, + "nvim-lspconfig": { "branch": "master", "commit": "4315a9686f4d21a521d89a693e02947d1e119f5d" }, + "nvim-spectre": { "branch": "master", "commit": "72f56f7585903cd7bf92c665351aa585e150af0f" }, + "nvim-spider": { "branch": "main", "commit": "99df646eab60df0b948dd2532ef5f5512707a9a4" }, + "nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" }, "nvim-treesitter-refactor": { "branch": "master", "commit": "d8b74fa87afc6a1e97b18da23e762efb032dc270" }, - "nvim-treesitter-textobjects": { "branch": "master", "commit": "143856b1cee509a190cc8c17ddb0638002171235" }, + "nvim-treesitter-textobjects": { "branch": "master", "commit": "0f051e9813a36481f48ca1f833897210dbcfffde" }, "nvim-treesitter-textsubjects": { "branch": "master", "commit": "abcbb0e537c9c24800b03b9ca33bee5806604629" }, - "nvim-web-devicons": { "branch": "master", "commit": "ab4cfee554e501f497bce0856788d43cf2eb93d7" }, - "onedark.nvim": { "branch": "master", "commit": "67a74c275d1116d575ab25485d1bfa6b2a9c38a6" }, + "nvim-ts-autotag": { "branch": "main", "commit": "a1d526af391f6aebb25a8795cbc05351ed3620b5" }, + "nvim-web-devicons": { "branch": "master", "commit": "1fb58cca9aebbc4fd32b086cb413548ce132c127" }, + "octohub.nvim": { "branch": "main", "commit": "f09627325ab550ca4ff640d4589cf88b8342e63e" }, + "onedark.nvim": { "branch": "master", "commit": "11de4da47f3e69cb70c3ae9816bd8af166cbe121" }, + "pickme.nvim": { "branch": "main", "commit": "70e8c040a6c01b34a6a7e05aff6ebb241211fc6d" }, "plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" }, - "refactoring.nvim": { "branch": "master", "commit": "36bd14ddd7ebf0546c15e6088e8bc93f8a98787d" }, + "showkeys": { "branch": "main", "commit": "cb0a50296f11f1e585acffba8c253b9e8afc1f84" }, + "smear-cursor.nvim": { "branch": "main", "commit": "162703638203060b1d3412e73429d232bbd2627e" }, "snacks.nvim": { "branch": "main", "commit": "bc0630e43be5699bb94dadc302c0d21615421d93" }, - "sniprun": { "branch": "master", "commit": "151ada2c984aee1feb45c7e3c2abb19f597ecbd0" }, - "telescope-fzf-native.nvim": { "branch": "main", "commit": "1f08ed60cafc8f6168b72b80be2b2ea149813e55" }, - "telescope-undo.nvim": { "branch": "main", "commit": "928d0c2dc9606e01e2cc547196f48d2eaecf58e5" }, - "telescope.nvim": { "branch": "0.1.x", "commit": "a0bbec21143c7bc5f8bb02e0005fa0b982edc026" }, + "sniprun": { "branch": "master", "commit": "a90c65846c3c18efc3f799d8b6dc26af9d4a69ed" }, "termim.nvim": { "branch": "main", "commit": "6bb3f8fb5a3c64ca614d7c4782d4965863c41675" }, "toggleterm.nvim": { "branch": "main", "commit": "50ea089fc548917cc3cc16b46a8211833b9e3c7c" }, + "utils.nvim": { "branch": "main", "commit": "0e545d194b8eab9870da8e3cdc728fbcfa6a5a19" }, "vim-fugitive": { "branch": "master", "commit": "4a745ea72fa93bb15dd077109afbb3d1809383f2" }, - "vim-wakatime": { "branch": "master", "commit": "e46d7c4f98ee0f40782008dd60cb2a79c377fb1d" }, + "vim-visual-multi": { "branch": "master", "commit": "a6975e7c1ee157615bbc80fc25e4392f71c344d4" }, + "vim-wakatime": { "branch": "master", "commit": "f39c4a201ae350aaba713b59d4a4fdd88e0811aa" }, "which-key.nvim": { "branch": "main", "commit": "370ec46f710e058c9c1646273e6b225acf47cbed" } } diff --git a/lua/plugins/mason-lock.json b/lua/plugins/mason-lock.json deleted file mode 100644 index cd14c19..0000000 --- a/lua/plugins/mason-lock.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "actionlint": "v1.7.5", - "bash-language-server": "5.4.3", - "clang-format": "19.1.6", - "clangd": "19.1.2", - "css-lsp": "4.10.0", - "curlylint": "0.13.1", - "django-template-lsp": "0.9.5", - "djlint": "1.36.4", - "eslint-lsp": "4.10.0", - "golangci-lint": "v1.63.4", - "gopls": "v0.17.1", - "hadolint": "v2.12.0", - "html-lsp": "4.10.0", - "jdtls": "v1.43.0", - "json-lsp": "4.10.0", - "lua-language-server": "3.13.5", - "prettier": "3.4.2", - "prettierd": "0.26.0", - "proselint": "0.14.0", - "pyright": "1.1.391", - "rubocop": "1.69.2", - "ruff": "0.8.6", - "rust-analyzer": "2024-12-30", - "selene": "0.27.1", - "shellcheck": "v0.10.0", - "shfmt": "v3.10.0", - "solargraph": "0.50.0", - "stylua": "v2.0.2", - "tailwindcss-language-server": "0.0.27", - "trivy": "v0.58.1", - "typescript-language-server": "4.3.3", - "typos-lsp": "v0.1.33", - "vim-language-server": "2.3.1", - "vint": "0.3.21", - "write-good": "1.0.8" -} diff --git a/lua/plugins/tools/exercism.lua b/lua/plugins/tools/exercism.lua new file mode 100644 index 0000000..0b77676 --- /dev/null +++ b/lua/plugins/tools/exercism.lua @@ -0,0 +1,7 @@ +local exercism = require('exercism') + +exercism.setup({ + exercism_workspace = '~/Projects/2KAbhishek/exercism', + add_default_keybindings = true, + default_language = 'elixir', +}) diff --git a/lua/plugins/tools/nvim-tree.lua b/lua/plugins/tools/nvim-tree.lua deleted file mode 100644 index 37c086e..0000000 --- a/lua/plugins/tools/nvim-tree.lua +++ /dev/null @@ -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', '', 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, - }, -}) diff --git a/lua/plugins/tools/octohub.lua b/lua/plugins/tools/octohub.lua new file mode 100644 index 0000000..0d2a26c --- /dev/null +++ b/lua/plugins/tools/octohub.lua @@ -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, +}) diff --git a/lua/plugins/lang/sniprun.lua b/lua/plugins/tools/sniprun.lua similarity index 100% rename from lua/plugins/lang/sniprun.lua rename to lua/plugins/tools/sniprun.lua diff --git a/lua/plugins/tools/telescope-custom.lua b/lua/plugins/tools/telescope-custom.lua deleted file mode 100644 index a934052..0000000 --- a/lua/plugins/tools/telescope-custom.lua +++ /dev/null @@ -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 diff --git a/lua/plugins/tools/telescope.lua b/lua/plugins/tools/telescope.lua deleted file mode 100644 index 9c9042a..0000000 --- a/lua/plugins/tools/telescope.lua +++ /dev/null @@ -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 = { - [''] = actions.close, - [''] = actions.cycle_history_next, - [''] = actions.cycle_history_prev, - - [''] = actions.move_selection_next, - [''] = actions.move_selection_previous, - - [''] = actions.close, - - [''] = actions.move_selection_next, - [''] = actions.move_selection_previous, - - [''] = multi_open, - [''] = actions.select_horizontal, - [''] = actions.select_vertical, - [''] = actions.select_horizontal, - [''] = actions.select_vertical, - [''] = actions.select_tab, - [''] = flash, - - [''] = actions.preview_scrolling_up, - [''] = actions.preview_scrolling_down, - - [''] = actions.results_scrolling_up, - [''] = actions.results_scrolling_down, - - [''] = actions.toggle_selection + actions.move_selection_worse, - [''] = actions.toggle_selection + actions.move_selection_better, - [''] = actions.send_to_qflist + actions.open_qflist, - [''] = actions.send_selected_to_qflist + actions.open_qflist, - [''] = actions.complete_tag, - }, - - n = { - ['q'] = actions.close, - [''] = actions.close, - [''] = multi_open, - [''] = actions.select_horizontal, - [''] = actions.select_vertical, - [''] = actions.select_tab, - ['s'] = flash, - - [''] = actions.toggle_selection + actions.move_selection_worse, - [''] = actions.toggle_selection + actions.move_selection_better, - [''] = actions.send_to_qflist + actions.open_qflist, - [''] = 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, - - [''] = actions.move_selection_next, - [''] = actions.move_selection_previous, - ['gg'] = actions.move_to_top, - ['G'] = actions.move_to_bottom, - - [''] = actions.preview_scrolling_up, - [''] = actions.preview_scrolling_down, - - [''] = actions.results_scrolling_up, - [''] = 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 = { - [''] = require('telescope-undo.actions').yank_additions, - [''] = require('telescope-undo.actions').yank_deletions, - [''] = require('telescope-undo.actions').restore, - }, - }, - }, - }, -}) - -telescope.load_extension('fzf') -telescope.load_extension('undo') -telescope.load_extension('markit') -telescope.load_extension('refactoring') diff --git a/lua/plugins/ui/dressing.lua b/lua/plugins/ui/dressing.lua deleted file mode 100644 index e6f2ef0..0000000 --- a/lua/plugins/ui/dressing.lua +++ /dev/null @@ -1,27 +0,0 @@ -local dressing = require('dressing') - -dressing.setup({ - win_options = { - winblend = 10, - winhighlight = 'Normal:DressingInputNormalFloat,NormalFloat:DressingInputNormalFloat,FloatBorder:DressingInputFloatBorder', - }, - input = { - enabled = true, - default_prompt = 'Input:', - prompt_align = 'left', - insert_only = true, - start_in_insert = true, - border = 'rounded', - relative = 'cursor', - prefer_width = 40, - width = nil, - max_width = { 140, 0.9 }, - min_width = { 20, 0.2 }, - get_config = nil, - }, - select = { - enabled = true, - backend = { 'telescope', 'fzf_lua', 'fzf', 'nui', 'builtin' }, - trim_prompt = true, - }, -}) diff --git a/lua/plugins/tools/gitsigns.lua b/lua/plugins/ui/gitsigns.lua similarity index 100% rename from lua/plugins/tools/gitsigns.lua rename to lua/plugins/ui/gitsigns.lua diff --git a/lua/plugins/ui/lualine.lua b/lua/plugins/ui/lualine.lua index 20f8209..843950c 100644 --- a/lua/plugins/ui/lualine.lua +++ b/lua/plugins/ui/lualine.lua @@ -2,7 +2,7 @@ local lualine = require('lualine') local icons = require('lib.icons') local colors = { - bg = '#202328', + bg = '#000000', fg = '#bbc2cf', yellow = '#ECBE7B', cyan = '#008080', @@ -57,6 +57,7 @@ local conditions = { return gitdir and #gitdir > 0 and #gitdir < #filepath end, } + local searchcount = { 'searchcount', color = { fg = colors.fg, gui = 'bold' } } local selectioncount = { 'selectioncount', color = { fg = colors.fg, gui = 'bold' } } local progress = { 'progress', color = { fg = colors.fg, gui = 'bold' } } @@ -75,11 +76,16 @@ local buffers = { mode = 2, cond = conditions.buffer_not_scratch, filetype_names = { + NvimTree = icons.documents.OpenFolder .. 'Files', TelescopePrompt = icons.ui.Telescope .. 'Telescope', + Avante = icons.ui.Copilot .. 'Avante', + AvanteInput = icons.ui.Pencil .. 'Avante', + AvanteSelectedFiles = icons.documents.File .. 'Avante', dashboard = icons.ui.Dashboard .. 'Dashboard', lazy = icons.ui.Sleep .. 'Lazy', mason = icons.ui.Package .. 'Mason', - NvimTree = icons.documents.OpenFolder .. 'Files', + minifiles = icons.documents.OpenFolder .. 'Files', + snacks_picker_input = icons.ui.Telescope .. 'Picker', spectre_panel = icons.ui.Search .. 'Spectre', }, use_mode_colors = true, @@ -125,13 +131,13 @@ local diagnostics = { local lsp = { function() local msg = 'No LSP' - local buf_ft = vim.api.nvim_buf_get_option(0, 'filetype') - local clients = vim.lsp.get_active_clients() + local buf_ft = vim.api.nvim_get_option_value('filetype', { buf = 0 }) + local clients = vim.lsp.get_clients() if next(clients) == nil then return msg end for _, client in ipairs(clients) do - local filetypes = client.config.filetypes + local filetypes = client.config and client.config.filetypes or nil if filetypes and vim.fn.index(filetypes, buf_ft) ~= -1 then return client.name end @@ -149,16 +155,6 @@ local encoding = { color = { fg = colors.green, gui = 'bold' }, } -local separator = { - function() - return icons.ui.Separator - end, - color = function() - return { fg = mode_color[vim.fn.mode()] } - end, - padding = { left = 0, right = 0 }, -} - local function mode(icon) icon = icon or icons.ui.Neovim return { @@ -172,11 +168,14 @@ local function mode(icon) } end +local custom_onedark = require('lualine.themes.onedark') +custom_onedark.normal.c.bg = colors.bg + lualine.setup({ options = { component_separators = '', -- section_separators = '', - theme = 'onedark', + theme = custom_onedark, disabled_filetypes = { 'dashboard', }, @@ -193,8 +192,8 @@ lualine.setup({ sections = { lualine_a = {}, lualine_b = {}, - lualine_c = { separator, mode(icons.ui.Heart), 'location', progress, filename }, - lualine_x = { diagnostics, lsp, filetype, filesize, fileformat, encoding, separator }, + lualine_c = { mode(icons.ui.Heart), 'location', progress, filename }, + lualine_x = { diagnostics, lsp, filetype, filesize, fileformat, encoding }, lualine_y = {}, lualine_z = {}, }, diff --git a/lua/plugins/tools/markit.lua b/lua/plugins/ui/markit.lua similarity index 100% rename from lua/plugins/tools/markit.lua rename to lua/plugins/ui/markit.lua diff --git a/lua/plugins/ui/snacks.lua b/lua/plugins/ui/snacks.lua index 7423bf0..3374854 100644 --- a/lua/plugins/ui/snacks.lua +++ b/lua/plugins/ui/snacks.lua @@ -180,6 +180,7 @@ Snacks.setup({ git_status = { layout = files_layout() }, help = { layout = { preset = 'ivy_split' } }, man = { layout = { preset = 'ivy_split' } }, + notifications = { layout = palette_layout() }, projects = { layout = files_layout(0.8) }, recent = { layout = files_layout() }, search_history = { layout = palette_layout() }, @@ -273,7 +274,7 @@ Snacks.setup({ lua = { keys = { ['source'] = { - '', + 'cr', function(self) local name = 'scratch.' .. vim.fn.fnamemodify(vim.api.nvim_buf_get_name(self.buf), ':e') Snacks.debug.run({ buf = self.buf, name = name }) @@ -281,14 +282,6 @@ Snacks.setup({ desc = 'Source buffer', mode = { 'n', 'x' }, }, - ['execute'] = { - 'e', - function(_) - vim.cmd('%SnipRun') - end, - desc = 'Execute buffer', - mode = { 'n', 'x' }, - }, }, }, }, diff --git a/lua/plugins/tools/which-key.lua b/lua/plugins/ui/which-key.lua similarity index 70% rename from lua/plugins/tools/which-key.lua rename to lua/plugins/ui/which-key.lua index e039155..30d0d11 100644 --- a/lua/plugins/tools/which-key.lua +++ b/lua/plugins/ui/which-key.lua @@ -1,10 +1,10 @@ local which_key = require('which-key') local icons = require('lib.icons') -local Snacks = require('snacks') local util = require('lib.util') +local prompts = require('lib.prompts') local setup = { - preset = 'helix', + preset = 'modern', plugins = { marks = true, registers = true, @@ -31,22 +31,49 @@ local setup = { }, rules = false, -- enable auto icon rules }, + win = { + no_overlap = true, + border = 'rounded', + width = 0.8, + height = { min = 5, max = 25 }, + padding = { 1, 2 }, + title = true, + title_pos = 'center', + zindex = 1000, + wo = { + winblend = 10, + }, + }, + layout = { + width = { min = 20 }, + spacing = 6, + align = 'center', + }, show_help = false, show_keys = true, triggers = { - { '', mode = 'nixsotc' }, + { '', mode = 'nvisoct' }, { '', mode = { 'n', 'v' } }, }, } local normal_mappings = { mode = 'n', - { '', ':lua Snacks.picker.smart()', desc = 'Smart Find Files' }, - { ',', ':lua Snacks.picker.buffers()', desc = 'Buffers' }, - { '/', ':lua Snacks.picker.search_history()', desc = 'Search History' }, - { ':', ':lua Snacks.picker.command_history()', desc = 'Command History' }, { 'x', ':x', desc = ' Save and Quit' }, + { 'a', group = ' AI' }, + { 'aC', ':AvanteClear', desc = 'avante: clear' }, + { 'am', ':MCPHub', desc = 'MCPHub' }, + { 'an', ':AvanteChatNew', desc = 'avante: new' }, + { 'ap', group = 'Insert Prompt' }, + { 'apd', prompts.add_prompt('docs'), desc = 'Docs' }, + { 'ape', prompts.add_prompt('explain'), desc = 'Explain' }, + { 'apf', prompts.add_prompt('fix'), desc = 'Fix' }, + { 'apg', prompts.add_prompt('commit'), desc = 'Commit' }, + { 'apo', prompts.add_prompt('optimize'), desc = 'Optimize' }, + { 'apr', prompts.add_prompt('review'), desc = 'Review' }, + { 'apt', prompts.add_prompt('tests'), desc = 'Tests' }, + { 'c', group = ' Code' }, { 'cF', ':retab', desc = 'Fix Tabs' }, { 'cP', ':CccConvert', desc = 'Convert Color' }, @@ -72,39 +99,19 @@ local normal_mappings = { { 'e', group = ' Edit' }, { 'ea', ':b#', desc = 'Alternate File' }, { 'ec', group = 'Edit Configs' }, - { 'ecc', ':lua Snacks.picker.files({ cwd = vim.fn.stdpath("config") })', desc = 'Neovim Configs' }, { 'ecg', ':e ~/.gitconfig', desc = 'Git Config' }, - { 'eck', ':e ~/dotfiles/kitty/kitty.conf', desc = 'Kitty Config' }, + { 'eck', ':e ~/.config/kitty/kitty.conf', desc = 'Kitty Config' }, { 'ecn', ':e $MYVIMRC', desc = 'Neovim Init' }, - { 'ecp', ':e ~/dotfiles/nvim/lua/plugins/list.lua', desc = 'Plugin List' }, - { 'ect', ':e ~/dotfiles/tmux/tmux.conf', desc = 'Tmux Config' }, - { 'ecv', ':e ~/.vimrc', desc = 'Vim Config' }, - { 'ecz', ':e $ZDOTDIR/.zshrc', desc = 'Zsh Config' }, - { 'ecZ', ':e $ZDOTDIR/prompt/init.zsh', desc = 'Zsh Prompt Config' }, - { 'ee', ':lua MiniFiles.open()', desc = 'Explore Tree' }, + { 'ecp', ':e ~/.config/nvim/lua/plugins/list.lua', desc = 'Plugin List' }, + { 'ect', ':e ~/.config/tmux/tmux.conf', desc = 'Tmux Config' }, { 'eE', ':lua Snacks.explorer()', desc = 'File Explorer' }, + { 'et', ':lua MiniFiles.open()', desc = 'Explore Tree' }, { 'ef', 'gf', desc = 'File Under Cursor' }, { 'em', ':e README.md', desc = 'Readme' }, { 'en', ':enew', desc = 'New File' }, { 'f', group = ' Find' }, - { 'fa', ':lua Snacks.picker.files()', desc = 'Find Files' }, - { 'fb', ':lua Snacks.picker.buffers()', desc = 'Buffers' }, - { 'fc', ':lua Snacks.picker.git_log_file()', desc = 'File Commits' }, - { 'fd', ':lua Snacks.picker.projects()', desc = 'Project Dirs' }, - { 'ff', ':lua Snacks.picker.git_files()', desc = 'Find Git Files' }, - { 'fg', ':lua Snacks.picker.grep()', desc = 'Grep' }, - { 'fl', ':lua Snacks.picker.loclist()', desc = 'Location List' }, - { 'fm', ':lua Snacks.picker.git_status()', desc = 'Modified Files' }, - { 'fo', ':lua Snacks.picker.grep_buffers()', desc = 'Grep Open Buffers' }, - { 'fp', ':lua Snacks.picker.resume()', desc = 'Previous Picker' }, - { 'fq', ':lua Snacks.picker.qflist()', desc = 'Quickfix List' }, - { 'fr', ':lua Snacks.picker.recent()', desc = 'Recent' }, - { 'fs', ':lua Snacks.picker.lines()', desc = 'Buffer Lines' }, - { 'ft', ':lua Snacks.picker.pickers()', desc = 'All Pickers' }, - { 'fu', ':lua Snacks.picker.undo()', desc = 'Undo History' }, - { 'fw', ':lua Snacks.picker.grep_word()', desc = 'Word Grep' }, - { 'fz', ':lua Snacks.picker.zoxide()', desc = 'Zoxide' }, + { 'fx', ':%bd|e#|bd#', desc = 'Close except current' }, { 'g', group = ' Git' }, { 'gA', ':Gitsigns stage_buffer', desc = 'Stage Buffer' }, @@ -113,6 +120,7 @@ local normal_mappings = { { 'gR', ':Gitsigns reset_buffer', desc = 'Reset Buffer' }, { 'ga', ':Gitsigns stage_hunk', desc = 'Stage Hunk' }, { 'gb', ":lua require('gitsigns').blame_line({full = true})", desc = 'Blame' }, + { 'gc', ':Git commit', desc = 'Commit Staged' }, { 'gB', ":lua require('snacks').git.blame_line()", desc = 'Detailed Blame' }, { 'gd', ':Gitsigns diffthis HEAD', desc = 'Git Diff' }, { 'gF', ':Git', desc = 'Fugitive Panel' }, @@ -120,13 +128,9 @@ local normal_mappings = { { 'gi', ':Gitsigns preview_hunk', desc = 'Hunk Info' }, { 'gj', ':Gitsigns next_hunk', desc = 'Next Hunk' }, { 'gk', ':Gitsigns prev_hunk', desc = 'Prev Hunk' }, - { 'gl', ':lua Snacks.picker.git_log_line()', desc = 'Git Log Line' }, - { 'gL', ':lua Snacks.picker.git_log()', desc = 'Git Log' }, { 'go', group = 'Octohub' }, { 'gp', ':Git pull', desc = 'Pull' }, { 'gr', ':Gitsigns reset_hunk', desc = 'Reset Hunk' }, - { 'gs', ':lua Snacks.picker.git_branches()', desc = 'Git Branches' }, - { 'gS', ':lua Snacks.picker.git_stash()', desc = 'Git Stash' }, { 'gt', group = 'Toggle' }, { 'gtb', ':Gitsigns toggle_current_line_blame', desc = 'Blame' }, { 'gtd', ':Gitsigns toggle_deleted', desc = 'Deleted' }, @@ -141,18 +145,14 @@ local normal_mappings = { { 'i', group = ' Insert' }, { 'id', ":put =strftime('## %a, %d %b, %Y, %r')", desc = 'Date' }, { 'if', ":put =expand('%:t')", desc = 'File Name' }, - { 'ii', ':lua Snacks.picker.icons()', desc = 'Icons' }, { 'in', ':Nerdy', desc = 'Nerd Glyphs' }, { 'ip', ':put %', desc = 'Relative Path' }, { 'iP', ':put %:p', desc = 'Absolute Path' }, - { 'ir', ':lua Snacks.picker.registers()', desc = 'Registers' }, { 'it', ":put =strftime('## %r')", desc = 'Time' }, - { 'iv', ':lua Snacks.picker.cliphist()', desc = 'Clipboard' }, { 'j', group = ' Jump' }, { 'jc', '*', desc = 'Word' }, { 'jd', ':FlashDiagnostics', desc = 'Diagnostics' }, - { 'jf', ':lua Snacks.picker.jumps()', desc = 'Jumps' }, { 'jh', '', desc = 'Backward' }, { 'jj', ":lua require('flash').remote()", desc = 'Remote' }, { 'jk', ":lua require('flash').treesitter()", desc = 'Treesitter' }, @@ -179,24 +179,17 @@ local normal_mappings = { { 'l', group = ' LSP' }, { 'la', ':Lspsaga code_action', desc = 'Code Action' }, { 'ld', ':Lspsaga goto_definition', desc = 'Goto Definition' }, - { 'lD', ':Lspsaga peek_definition', desc = 'Peek Definition' }, { 'lf', ':Lspsaga finder', desc = 'Finder' }, - { 'lF', ':lua Snacks.picker.lsp_references()', desc = 'References' }, { 'lh', ':Lspsaga hover_doc', desc = 'Hover' }, - { 'li', ':lua Snacks.picker.lsp_implementations()', desc = 'Goto Implementation' }, { 'lI', ':LspInfo', desc = 'LSP Info' }, { 'lj', ':Lspsaga diagnostic_jump_next', desc = 'Next Diagnostic' }, - { 'll', ':lua Snacks.picker.diagnostics_buffer()', desc = 'Buffer Diagnostics' }, - { 'lL', ':lua Snacks.picker.diagnostics()', desc = 'Diagnostics' }, { 'lk', ':Lspsaga diagnostic_jump_prev', desc = 'Prev Diagnostic' }, { 'lo', ':Lspsaga outline', desc = 'Outline' }, - { 'lp', ':lua Snacks.picker.lsp_declarations()', desc = 'Goto Definition' }, + { 'lp', ':Lspsaga peek_definition', desc = 'Peek Definition' }, { 'lq', ':LspStop', desc = 'Stop LSP' }, { 'lQ', ':LspRestart', desc = 'Restart LSP' }, { 'lr', ':Lspsaga rename', desc = 'Rename' }, { 'lR', ':Lspsaga project_replace', desc = 'Replace' }, - { 'ls', ':lua Snacks.picker.lsp_symbols()', desc = 'Symbols' }, - { 'lS', ':lua Snacks.picker.lsp_workspace_symbols()', desc = 'Workspace Symbols' }, { 'lt', ':Lspsaga goto_type_definition', desc = 'Goto Type Definition' }, { 'lT', ':Lspsaga peek_type_definition', desc = 'Peek Type Definition' }, @@ -219,8 +212,6 @@ local normal_mappings = { { 'mj', ":lua require('markit').next()", desc = 'Next' }, { 'mk', ":lua require('markit').prev()", desc = 'Previous' }, { 'ml', ":lua require('markit').next_bookmark()", desc = 'Next Bookmark' }, - -- { 'mm', ':Telescope markit', desc = 'All Marks' }, - { 'mm', ':lua Snacks.picker.marks()', desc = 'Marks' }, { 'mn', group = 'Next Bookmark In Group' }, { 'mp', group = 'Previous Bookmark In Group' }, { 'mP', ":lua require('markit').preview()", desc = 'Preview' }, @@ -228,19 +219,11 @@ local normal_mappings = { { 'mt', ":lua require('markit').toggle()", desc = 'Toggle' }, { 'mx', ":lua require('markit').delete_bookmark()", desc = 'Delete Bookmark' }, + { 'o', group = ' Options' }, - { 'oa', ':lua Snacks.picker.autocmds()', desc = 'Autocmds' }, - { 'oc', ':lua Snacks.picker.command_history()', desc = 'Command History' }, - { 'od', ':lua Snacks.picker.help()', desc = 'Docs' }, - { 'og', ':lua Snacks.picker.commands()', desc = 'Commands' }, - { 'oh', ':lua Snacks.picker.highlights()', desc = 'Highlights' }, { 'oi', 'vim.show_pos', desc = 'Inspect Position' }, - { 'ok', ':lua Snacks.picker.keymaps()', desc = 'Keymaps' }, - { 'om', ':lua Snacks.picker.man()', desc = 'Man Pages' }, - { 'on', ':lua Snacks.picker.notifications()', desc = 'Notification History' }, + { 'oN', ':lua Snacks.notifier.show_history()', desc = 'Notification History' }, { 'or', ':set relativenumber!', desc = 'Relative Numbers' }, - { 'os', ':lua Snacks.picker.search_history()', desc = 'Search History' }, - { 'ot', ':lua Snacks.picker.colorschemes()', desc = 'Colorschemes' }, { 'p', group = ' Packages' }, { 'pc', ':Lazy check', desc = 'Check' }, @@ -257,7 +240,6 @@ local normal_mappings = { { 'pt', ':lua require("snacks").profiler.toggle()', desc = 'Profiler Toggle' }, { 'pu', ':Lazy update', desc = 'Update' }, { 'px', ':Lazy clean', desc = 'Clean' }, - { 'pS', ':lua Snacks.picker.lazy()', desc = 'Search for Plugin Spec' }, { 'q', group = ' Quit' }, { 'qa', ':qall', desc = 'Quit All' }, @@ -270,14 +252,8 @@ local normal_mappings = { { 'qw', ':wq', desc = 'Write and Quit' }, { 'r', group = ' Refactor' }, + { 'ra', ":lua require('spectre').open()", desc = 'Replace All' }, { 'rb', ":lua require('spectre').open_file_search()", desc = 'Replace Buffer' }, - { 're', ":lua require('refactoring').refactor('Extract Block')", desc = 'Extract Block' }, - { 'ri', ":lua require('refactoring').refactor('Inline Variable')", desc = 'Inline Variable' }, - { 'rs', ':%s/\\<\\>//gI', desc = 'Replace Word' }, - { 'rS', ":lua require('spectre').open()", desc = 'Replace' }, - { 'rt', ':lua Snacks.picker.treesitter()', desc = 'Treesitter Find' }, - { 'rv', ":lua require('refactoring').refactor('Extract Variable')", desc = 'Extract Variable' }, - { 'rw', ":lua require('spectre').open_visual({select_word=true})", desc = 'Replace Word' }, { 'rd', '', desc = 'Go To Definition' }, -- treesitter navigation { 'rh', '', desc = 'List Definition Head' }, { 'rj', '', desc = 'Next Usage' }, @@ -286,11 +262,8 @@ local normal_mappings = { { 'rn', '', desc = 'Swap Next' }, { 'rp', '', desc = 'Swap Previous' }, { 'rr', '', desc = 'Smart Rename' }, - { - 'rf', - ":lua require('refactoring').refactor('Extract Block To File')", - desc = 'Extract To File', - }, + { 'rs', ':%s/\\<\\>//gI', desc = 'Replace Word Buffer' }, + { 'rw', ":lua require('spectre').open_visual({select_word=true})", desc = 'Replace Word Everywhere' }, { 's', group = ' Split' }, { 's+', ':resize +10', desc = 'Increase window height' }, @@ -330,7 +303,6 @@ local normal_mappings = { { 'wj', ']s', desc = 'Next Misspell' }, { 'wk', '[s', desc = 'Prev Misspell' }, { 'wn', ':WriteNoFormat', desc = 'Write Without Formatting' }, - { 'ws', ':lua Snacks.picker.spelling()', desc = 'Spell Suggestions' }, { 'wq', ':wq', desc = 'Write and Quit' }, { 'ww', ':w', desc = 'Write' }, { 'wz', ':lua require("snacks").zen.zen()', desc = 'Zen' }, @@ -347,54 +319,53 @@ local normal_mappings = { } -- Numerical mappings - for i = 1, 9 do table.insert(normal_mappings, { string.format('n%d', i), - string.format('Tdo %d', i), + string.format(':Tdo %d', i), desc = string.format('Todo %d Days In Future', i), }) table.insert(normal_mappings, { string.format('np%d', i), - string.format('Tdo -%d', i), + string.format(':Tdo -%d', i), desc = string.format('Todo %d Days From Past', i), }) table.insert(normal_mappings, { string.format('f%d', i), - string.format('LualineBuffersJump%d', i), + string.format(':LualineBuffersJump%d', i), desc = string.format('File %d', i), }) table.insert(normal_mappings, { string.format('m%d', i), - string.format('lua require("markit").toggle_bookmark%d()', i), + string.format(':lua require("markit").toggle_bookmark%d()', i), desc = string.format('Toggle Group %d Bookmark', i), }) table.insert(normal_mappings, { string.format('mp%d', i), - string.format('lua require("markit").prev_bookmark%d()', i), + string.format(':lua require("markit").prev_bookmark%d()', i), desc = string.format('Previous Group %d Bookmarks', i), }) table.insert(normal_mappings, { string.format('mn%d', i), - string.format('lua require("markit").next_bookmark%d()', i), + string.format(':lua require("markit").next_bookmark%d()', i), desc = string.format('Next Group %d Bookmarks', i), }) table.insert(normal_mappings, { string.format('mg%d', i), - string.format('lua require("telescope").extensions.markit.bookmarks_list_all({group = %d})', i), + string.format(':lua require("telescope").extensions.markit.bookmarks_list_all({group = %d})', i), desc = string.format('Group %d Bookmarks', i), }) table.insert(normal_mappings, { string.format('mG%d', i), string.format( - 'lua require("telescope").extensions.markit.bookmarks_list_all({group = %d, project_only = true})', + ':lua require("telescope").extensions.markit.bookmarks_list_all({group = %d, project_only = true})', i ), desc = string.format('Group %d Bookmarks In Project', i), @@ -403,9 +374,10 @@ end local visual_mappings = { mode = 'v', + { 'a', group = ' AI' }, { 'c', group = ' Code' }, - { 'ce', "'<,'>SnipRun", desc = 'Execute Selection' }, + { 'ce', ":'<,'>SnipRun", desc = 'Execute Selection' }, { 'cS', ':sort!', desc = 'Sort Desc' }, { 'ci', ':sort i', desc = 'Sort Case Insensitive' }, { 'cs', ':sort', desc = 'Sort Asc' }, @@ -449,7 +421,7 @@ local visual_mappings = { }, { 'l', group = ' LSP' }, - { 'la', desc = 'Lspsaga range_code_action' }, + { 'la', ':Lspsaga range_code_action', desc = 'Code Action' }, { 'p', group = ' ScreenShot' }, { 'py', 'CodeSnap', mode = 'x', desc = 'Save selected code snapshot into clipboard' }, @@ -462,85 +434,66 @@ local visual_mappings = { }, { 'pi', 'CodeSnapASCII', mode = 'x', desc = 'Save ASCII code snapshot into clipboard' }, - { 'r', group = ' Refactor' }, - { - 're', - ":lua require('refactoring').refactor('Extract Function')", - desc = 'Extract Function', - }, - { - 'rf', - ":lua require('refactoring').refactor('Extract Function To File')", - desc = 'Extract To File', - }, - { 'ri', ":lua require('refactoring').refactor('Inline Variable')", desc = 'Inline Variable' }, - { - 'rv', - ":lua require('refactoring').refactor('Extract Variable')", - desc = 'Extract Variable', - }, + { 'y', group = ' Yank' }, - { 'yg', 'lua require"gitlinker".get_buf_range_url("v")', desc = 'Copy Git URL' }, + { 'yg', ':lua require"gitlinker".get_buf_range_url("v")', desc = 'Copy Git URL' }, } local no_leader_mappings = { mode = 'n', - { '', 'resize -10', desc = 'Decrease window height' }, - { '', 'vertical resize -10', desc = 'Decrease window width' }, - { '', 'vertical resize +10', desc = 'Increase window width' }, - { '', 'resize +10', desc = 'Increase window height' }, - { '', 'Telescope find_files', desc = 'Find Files' }, - { '', 'Fterm lazygit', desc = 'Lazygit' }, + { '', ':resize -10', desc = 'Decrease window height' }, + { '', ':vertical resize -10', desc = 'Decrease window width' }, + { '', ':vertical resize +10', desc = 'Increase window width' }, + { '', ':resize +10', desc = 'Increase window height' }, + { '', ':Fterm lazygit', desc = 'Lazygit' }, - { '', 'h', desc = 'Move Left' }, - { '', 'j', desc = 'Move Down' }, - { '', 'k', desc = 'Move Up' }, - { '', 'l', desc = 'Move Right' }, - { '', 'p', desc = 'Previous Pane' }, - { '', 'bprevious', desc = 'Previous Buffer' }, - { '', 'bnext', desc = 'Next Buffer' }, - { '', 'bprevious', desc = 'Previous Buffer' }, - { '', 'bnext', desc = 'Next Buffer' }, - - { 'K', 'Lspsaga hover_doc', desc = 'LSP Hover' }, - { 'Q', 'qall!', desc = 'Force Quit!' }, - { 'U', 'redo', desc = 'Redo' }, - - { '[', group = ' Previous' }, - { '[g', 'Gitsigns prev_hunk', desc = 'Git Hunk' }, - { '[o', group = 'Textobjects' }, - - { ']', group = ' Next' }, - { ']g', 'Gitsigns next_hunk', desc = 'Git Hunk' }, - { ']o', group = 'Textobjects' }, -} - -local tmux_mappings = { { '', ':NavigatorLeft', desc = 'Move Left' }, { '', ':NavigatorDown', desc = 'Move Down' }, { '', ':NavigatorUp', desc = 'Move Up' }, { '', ':NavigatorRight', desc = 'Move Right' }, { '', ':NavigatorPrevious', desc = 'Previous Pane' }, + + { '', ':bprevious', desc = 'Previous Buffer' }, + { '', ':bnext', desc = 'Next Buffer' }, + { '', ':bprevious', desc = 'Previous Buffer' }, + { '', ':bnext', desc = 'Next Buffer' }, + + { 'K', ':Lspsaga hover_doc', desc = 'LSP Hover' }, + { 'Q', ':qall!', desc = 'Force Quit!' }, + { 'U', ':redo', desc = 'Redo' }, + + { '[', group = ' Previous' }, + { '[g', ':Gitsigns prev_hunk', desc = 'Git Hunk' }, + { '[o', group = 'Textobjects' }, + + { ']', group = ' Next' }, + { ']g', ':Gitsigns next_hunk', desc = 'Git Hunk' }, + { ']o', group = 'Textobjects' }, + + { 'gd', ':Lspsaga goto_definition', desc = 'Goto Definition' }, } -if vim.fn.exists('$TMUX') == 1 then - vim.tbl_extend('force', no_leader_mappings, tmux_mappings) -end +which_key.setup(setup) +which_key.add(normal_mappings) +which_key.add(visual_mappings) +which_key.add(no_leader_mappings) if util.get_user_config('enable_test_runner', false) then local test_runner_bindings = { + mode = 'n', { 'u', group = ' Test' }, { 'uc', ':lua require("neotest").run.run()', desc = 'Run Current Test' }, { 'uf', ':lua require("neotest").run.run(vim.fn.expand("%"))', desc = 'Run Test File' }, { 'uo', ':Neotest output-panel', desc = 'Test Output' }, { 'us', ':Neotest summary', desc = 'Test Summary' }, } - vim.tbl_extend('force', normal_mappings, test_runner_bindings) + which_key.add(test_runner_bindings) end if util.get_user_config('enable_db_explorer', false) then local db_explorer_bindings = { + mode = 'n', { 'd', group = ' Database' }, { 'dS', ':lua require("dbee").store("json", "buffer", { extra_arg = 0 })', desc = 'To JSON' }, { 'db', ':DBToggle', desc = 'DB Explorer' }, @@ -549,11 +502,12 @@ if util.get_user_config('enable_db_explorer', false) then { 'ds', ':lua require("dbee").store("csv", "buffer", { extra_arg = 0 })', desc = 'To CSV' }, { 'dt', ':lua require("dbee").store("table", "buffer", { extra_arg = 0 })', desc = 'To Table' }, } - vim.tbl_extend('force', normal_mappings, db_explorer_bindings) + which_key.add(db_explorer_bindings) end if util.get_user_config('enable_debugger', false) then local debugger_bindings = { + mode = 'n', { 'b', group = ' Debug' }, { 'bO', ':DapStepOut', desc = 'Out' }, { 'bR', ':DapRestartFrame', desc = 'Restart Frame' }, @@ -566,13 +520,8 @@ if util.get_user_config('enable_debugger', false) then { 'bt', ':DapUIToggle', desc = 'Debugger' }, { 'bx', ':DapTerminate', desc = 'Exit' }, } - vim.tbl_extend('force', normal_mappings, debugger_bindings) + which_key.add(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)