From 0c4a2ab0e674d9cc49410e72c05cf31542fb49b1 Mon Sep 17 00:00:00 2001 From: Pierre-Marie Charavel Date: Sat, 4 Apr 2026 09:43:55 -0400 Subject: [PATCH] nvim --- .config/nvim/init.lua | 17 +- .config/nvim/lua/plugins/blink.lua | 52 +- .config/nvim/lua/plugins/conform.lua | 142 ++-- .config/nvim/lua/plugins/git.lua | 942 +++++++-------------- .config/nvim/lua/plugins/init.lua | 11 - .config/nvim/lua/plugins/log-highlight.lua | 4 +- .config/nvim/lua/plugins/lualine.lua | 112 ++- .config/nvim/lua/plugins/markdown.lua | 14 +- .config/nvim/lua/plugins/neotree.lua | 18 +- .config/nvim/lua/plugins/telescope.lua | 31 +- .config/nvim/lua/plugins/theme.lua | 11 +- .config/nvim/lua/plugins/treesitter.lua | 221 ++--- .config/nvim/lua/plugins/whichkey.lua | 194 +++-- .config/nvim/nvim-pack-lock.json | 80 -- 14 files changed, 662 insertions(+), 1187 deletions(-) delete mode 100644 .config/nvim/lua/plugins/init.lua delete mode 100644 .config/nvim/nvim-pack-lock.json diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua index d0a5154..a712baf 100644 --- a/.config/nvim/init.lua +++ b/.config/nvim/init.lua @@ -2,4 +2,19 @@ vim.g.mapleader = " " vim.g.maplocalleader = " " require("config") -require("plugins") + +-- Bootstrap 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", + "https://github.com/folke/lazy.nvim.git", + "--branch=stable", + lazypath, + }) +end +vim.opt.rtp:prepend(lazypath) + +require("lazy").setup("plugins", { + change_detection = { notify = false }, +}) diff --git a/.config/nvim/lua/plugins/blink.lua b/.config/nvim/lua/plugins/blink.lua index 4541db3..72cee23 100644 --- a/.config/nvim/lua/plugins/blink.lua +++ b/.config/nvim/lua/plugins/blink.lua @@ -1,31 +1,21 @@ -vim.pack.add({ - { - src = "https://github.com/saghen/blink.cmp", - version = vim.version.range("^1"), - }, -}) - --- Lazy load on first insert mode entry (may not necessary) -local group = vim.api.nvim_create_augroup("BlinkCmpLazyLoad", { clear = true }) - -vim.api.nvim_create_autocmd("InsertEnter", { - pattern = "*", - group = group, - once = true, - callback = function() - require("blink.cmp").setup({ - keymap = { preset = "super-tab" }, - appearance = { - nerd_font_variant = "mono", - use_nvim_cmp_as_default = true, - }, - completion = { - documentation = { auto_show = false }, - }, - sources = { - default = { "lsp", "path", "snippets", "buffer" }, - }, - fuzzy = { implementation = "prefer_rust_with_warning" }, - }) - end, -}) +return { + "saghen/blink.cmp", + version = "^1", + event = "InsertEnter", -- Lazy's native equivalent of the manual InsertEnter augroup + config = function() + require("blink.cmp").setup({ + keymap = { preset = "super-tab" }, + appearance = { + nerd_font_variant = "mono", + use_nvim_cmp_as_default = true, + }, + completion = { + documentation = { auto_show = false }, + }, + sources = { + default = { "lsp", "path", "snippets", "buffer" }, + }, + fuzzy = { implementation = "prefer_rust_with_warning" }, + }) + end, +} diff --git a/.config/nvim/lua/plugins/conform.lua b/.config/nvim/lua/plugins/conform.lua index bb310ae..066224c 100644 --- a/.config/nvim/lua/plugins/conform.lua +++ b/.config/nvim/lua/plugins/conform.lua @@ -1,79 +1,67 @@ -vim.pack.add({ "https://github.com/stevearc/conform.nvim" }) +return { + "stevearc/conform.nvim", + config = function() + require("conform").setup({ + formatters_by_ft = { + lua = { "stylua" }, + go = { "goimports", "gofmt" }, + python = { "ruff_format", "black", stop_after_first = true }, + json = { "biome", "prettier", stop_after_first = true }, + markdown = { "prettier" }, + javascript = { "biome", "prettier", stop_after_first = true }, + typescript = { "biome", "prettier", stop_after_first = true }, + javascriptreact = { "biome", "prettier", stop_after_first = true }, + typescriptreact = { "biome", "prettier", stop_after_first = true }, + css = { "prettier" }, + html = { "prettier" }, + toml = { "taplo" }, + }, + formatters = { + biome = { require_cwd = true }, + }, + default_format_opts = { + lsp_format = "fallback", + }, + }) -require("conform").setup({ - formatters_by_ft = { - lua = { "stylua" }, - go = { "goimports", "gofmt" }, - python = { "ruff_format", "black", stop_after_first = true }, - json = { "biome", "prettier", stop_after_first = true }, - markdown = { "prettier" }, - javascript = { "biome", "prettier", stop_after_first = true }, - typescript = { "biome", "prettier", stop_after_first = true }, - javascriptreact = { "biome", "prettier", stop_after_first = true }, - typescriptreact = { "biome", "prettier", stop_after_first = true }, - css = { "prettier" }, - html = { "prettier" }, - toml = { "taplo" }, - }, - formatters = { - biome = { require_cwd = true }, - }, - default_format_opts = { - lsp_format = "fallback", - }, - --[[ format_on_save = function(bufnr) - local ignore_filetypes = { "sql", "yaml", "yml" } - if vim.tbl_contains(ignore_filetypes, vim.bo[bufnr].filetype) then - return - end - if vim.g.disable_autoformat or vim.b[bufnr].disable_autoformat then - return - end - local bufname = vim.api.nvim_buf_get_name(bufnr) - if bufname:match("/node_modules/") then - return - end - return { timeout_ms = 500, lsp_format = "fallback" } + vim.api.nvim_create_user_command("FormatDisable", function(opts) + if opts.bang then + vim.b.disable_autoformat = true + else + vim.g.disable_autoformat = true + end + vim.notify("Autoformat disabled" .. (opts.bang and " (buffer)" or " (global)"), vim.log.levels.WARN) + end, { desc = "Disable autoformat-on-save", bang = true }) + + vim.api.nvim_create_user_command("FormatEnable", function() + vim.b.disable_autoformat = false + vim.g.disable_autoformat = false + vim.notify("Autoformat enabled", vim.log.levels.INFO) + end, { desc = "Re-enable autoformat-on-save" }) + + local auto_format = true + + vim.keymap.set("n", "uf", function() + auto_format = not auto_format + if auto_format then + vim.cmd("FormatEnable") + else + vim.cmd("FormatDisable") + end + end, { desc = "Toggle Autoformat" }) + + vim.keymap.set({ "n", "v" }, "cn", "ConformInfo", { desc = "Conform Info" }) + + vim.keymap.set({ "n", "v" }, "cf", function() + require("conform").format({ async = true }, function(err, did_edit) + if not err and did_edit then + vim.notify("Code formatted", vim.log.levels.INFO, { title = "Conform" }) + end + end) + end, { desc = "Format buffer" }) + + vim.keymap.set({ "n", "v" }, "cF", function() + require("conform").format({ formatters = { "injected" }, timeout_ms = 3000 }) + end, { desc = "Format Injected Langs" }) end, -]] -}) - -vim.api.nvim_create_user_command("FormatDisable", function(opts) - if opts.bang then - vim.b.disable_autoformat = true - else - vim.g.disable_autoformat = true - end - vim.notify("Autoformat disabled" .. (opts.bang and " (buffer)" or " (global)"), vim.log.levels.WARN) -end, { desc = "Disable autoformat-on-save", bang = true }) - -vim.api.nvim_create_user_command("FormatEnable", function() - vim.b.disable_autoformat = false - vim.g.disable_autoformat = false - vim.notify("Autoformat enabled", vim.log.levels.INFO) -end, { desc = "Re-enable autoformat-on-save" }) - -local auto_format = true - -vim.keymap.set("n", "uf", function() - auto_format = not auto_format - if auto_format then - vim.cmd("FormatEnable") - else - vim.cmd("FormatDisable") - end -end, { desc = "Toggle Autoformat" }) - -vim.keymap.set({ "n", "v" }, "cn", "ConformInfo", { desc = "Conform Info" }) - -vim.keymap.set({ "n", "v" }, "cf", function() - require("conform").format({ async = true }, function(err, did_edit) - if not err and did_edit then - vim.notify("Code formatted", vim.log.levels.INFO, { title = "Conform" }) - end - end) -end, { desc = "Format buffer" }) - -vim.keymap.set({ "n", "v" }, "cF", function() - require("conform").format({ formatters = { "injected" }, timeout_ms = 3000 }) -end, { desc = "Format Injected Langs" }) +} diff --git a/.config/nvim/lua/plugins/git.lua b/.config/nvim/lua/plugins/git.lua index 49aa8a2..9e6a9e2 100644 --- a/.config/nvim/lua/plugins/git.lua +++ b/.config/nvim/lua/plugins/git.lua @@ -1,665 +1,289 @@ -vim.pack.add({ - "https://github.com/lewis6991/gitsigns.nvim", - "https://github.com/sindrets/diffview.nvim", -}) +return { + { + "lewis6991/gitsigns.nvim", + config = function() + require("gitsigns").setup({ + signs = { + add = { text = "┃" }, + change = { text = "┃" }, + delete = { text = "_" }, + topdelete = { text = "‾" }, + changedelete = { text = "~" }, + untracked = { text = "┆" }, + }, + signs_staged = { + add = { text = "┃" }, + change = { text = "┃" }, + delete = { text = "_" }, + topdelete = { text = "‾" }, + changedelete = { text = "~" }, + untracked = { text = "┆" }, + }, + signs_staged_enable = true, + signcolumn = true, + numhl = false, + linehl = false, + word_diff = false, + watch_gitdir = { follow_files = true }, + auto_attach = true, + attach_to_untracked = false, + current_line_blame = false, + current_line_blame_opts = { + virt_text = true, + virt_text_pos = "eol", + delay = 1000, + ignore_whitespace = false, + virt_text_priority = 100, + use_focus = true, + }, + current_line_blame_formatter = ", - ", + sign_priority = 6, + update_debounce = 100, + status_formatter = nil, + max_file_length = 40000, + preview_config = { + style = "minimal", + relative = "cursor", + row = 0, + col = 1, + }, + on_attach = function(bufnr) + local gitsigns = require("gitsigns") -require("gitsigns").setup({ - signs = { - add = { text = "┃" }, - change = { text = "┃" }, - delete = { text = "_" }, - topdelete = { text = "‾" }, - changedelete = { text = "~" }, - untracked = { text = "┆" }, - }, - signs_staged = { - add = { text = "┃" }, - change = { text = "┃" }, - delete = { text = "_" }, - topdelete = { text = "‾" }, - changedelete = { text = "~" }, - untracked = { text = "┆" }, - }, - signs_staged_enable = true, - signcolumn = true, -- Toggle with `:Gitsigns toggle_signs` - numhl = false, -- Toggle with `:Gitsigns toggle_numhl` - linehl = false, -- Toggle with `:Gitsigns toggle_linehl` - word_diff = false, -- Toggle with `:Gitsigns toggle_word_diff` - watch_gitdir = { - follow_files = true, - }, - auto_attach = true, - attach_to_untracked = false, - current_line_blame = false, -- Toggle with `:Gitsigns toggle_current_line_blame` - current_line_blame_opts = { - virt_text = true, - virt_text_pos = "eol", -- 'eol' | 'overlay' | 'right_align' - delay = 1000, - ignore_whitespace = false, - virt_text_priority = 100, - use_focus = true, - }, - current_line_blame_formatter = ", - ", - sign_priority = 6, - update_debounce = 100, - status_formatter = nil, -- Use default - max_file_length = 40000, -- Disable if file is longer than this (in lines) - preview_config = { - -- Options passed to nvim_open_win - style = "minimal", - relative = "cursor", - row = 0, - col = 1, - }, - on_attach = function(bufnr) - local gitsigns = require("gitsigns") + local function map(mode, l, r, opts) + opts = opts or {} + opts.buffer = bufnr + vim.keymap.set(mode, l, r, opts) + end - local function map(mode, l, r, opts) - opts = opts or {} - opts.buffer = bufnr - vim.keymap.set(mode, l, r, opts) - end + -- Navigation + map("n", "]c", function() + if vim.wo.diff then vim.cmd.normal({ "]c", bang = true }) + else gitsigns.nav_hunk("next") end + end) + map("n", "[c", function() + if vim.wo.diff then vim.cmd.normal({ "[c", bang = true }) + else gitsigns.nav_hunk("prev") end + end) - -- Navigation - map("n", "]c", function() - if vim.wo.diff then - vim.cmd.normal({ "]c", bang = true }) - else - gitsigns.nav_hunk("next") - end - end) + -- Actions + map("n", "hs", gitsigns.stage_hunk) + map("n", "hr", gitsigns.reset_hunk) + map("v", "hs", function() gitsigns.stage_hunk({ vim.fn.line("."), vim.fn.line("v") }) end) + map("v", "hr", function() gitsigns.reset_hunk({ vim.fn.line("."), vim.fn.line("v") }) end) + map("n", "hS", gitsigns.stage_buffer) + map("n", "hR", gitsigns.reset_buffer) + map("n", "hp", gitsigns.preview_hunk) + map("n", "hi", gitsigns.preview_hunk_inline) + map("n", "hb", function() gitsigns.blame_line({ full = true }) end) + map("n", "hd", gitsigns.diffthis) + map("n", "hD", function() gitsigns.diffthis("~") end) + map("n", "hQ", function() gitsigns.setqflist("all") end) + map("n", "hq", gitsigns.setqflist) - map("n", "[c", function() - if vim.wo.diff then - vim.cmd.normal({ "[c", bang = true }) - else - gitsigns.nav_hunk("prev") - end - end) + -- Toggles + map("n", "tb", gitsigns.toggle_current_line_blame) + map("n", "tw", gitsigns.toggle_word_diff) - -- Actions - map("n", "hs", gitsigns.stage_hunk) - map("n", "hr", gitsigns.reset_hunk) + -- Text object + map({ "o", "x" }, "ih", gitsigns.select_hunk) + end, + }) + end, + }, + { + "sindrets/diffview.nvim", + dependencies = { "nvim-lua/plenary.nvim" }, + config = function() + local actions = require("diffview.actions") - map("v", "hs", function() - gitsigns.stage_hunk({ vim.fn.line("."), vim.fn.line("v") }) - end) - - map("v", "hr", function() - gitsigns.reset_hunk({ vim.fn.line("."), vim.fn.line("v") }) - end) - - map("n", "hS", gitsigns.stage_buffer) - map("n", "hR", gitsigns.reset_buffer) - map("n", "hp", gitsigns.preview_hunk) - map("n", "hi", gitsigns.preview_hunk_inline) - - map("n", "hb", function() - gitsigns.blame_line({ full = true }) - end) - - map("n", "hd", gitsigns.diffthis) - - map("n", "hD", function() - gitsigns.diffthis("~") - end) - - map("n", "hQ", function() - gitsigns.setqflist("all") - end) - map("n", "hq", gitsigns.setqflist) - - -- Toggles - map("n", "tb", gitsigns.toggle_current_line_blame) - map("n", "tw", gitsigns.toggle_word_diff) - - -- Text object - map({ "o", "x" }, "ih", gitsigns.select_hunk) - end, -}) - --- Lua -local actions = require("diffview.actions") - -require("diffview").setup({ - diff_binaries = false, -- Show diffs for binaries - enhanced_diff_hl = false, -- See |diffview-config-enhanced_diff_hl| - git_cmd = { "git" }, -- The git executable followed by default args. - hg_cmd = { "hg" }, -- The hg executable followed by default args. - use_icons = true, -- Requires nvim-web-devicons - show_help_hints = true, -- Show hints for how to open the help panel - watch_index = true, -- Update views and index buffers when the git index changes. - icons = { -- Only applies when use_icons is true. - folder_closed = "", - folder_open = "", - }, - signs = { - fold_closed = "", - fold_open = "", - done = "✓", - }, - view = { - -- Configure the layout and behavior of different types of views. - -- Available layouts: - -- 'diff1_plain' - -- |'diff2_horizontal' - -- |'diff2_vertical' - -- |'diff3_horizontal' - -- |'diff3_vertical' - -- |'diff3_mixed' - -- |'diff4_mixed' - -- For more info, see |diffview-config-view.x.layout|. - default = { - -- Config for changed files, and staged files in diff views. - layout = "diff2_horizontal", - disable_diagnostics = false, -- Temporarily disable diagnostics for diff buffers while in the view. - winbar_info = false, -- See |diffview-config-view.x.winbar_info| - }, - merge_tool = { - -- Config for conflicted files in diff views during a merge or rebase. - layout = "diff3_horizontal", - disable_diagnostics = true, -- Temporarily disable diagnostics for diff buffers while in the view. - winbar_info = true, -- See |diffview-config-view.x.winbar_info| - }, - file_history = { - -- Config for changed files in file history views. - layout = "diff2_horizontal", - disable_diagnostics = false, -- Temporarily disable diagnostics for diff buffers while in the view. - winbar_info = false, -- See |diffview-config-view.x.winbar_info| - }, - }, - file_panel = { - listing_style = "tree", -- One of 'list' or 'tree' - tree_options = { -- Only applies when listing_style is 'tree' - flatten_dirs = true, -- Flatten dirs that only contain one single dir - folder_statuses = "only_folded", -- One of 'never', 'only_folded' or 'always'. - }, - win_config = { -- See |diffview-config-win_config| - position = "left", - width = 35, - win_opts = {}, - }, - }, - file_history_panel = { - log_options = { -- See |diffview-config-log_options| - git = { - single_file = { - diff_merges = "combined", - }, - multi_file = { - diff_merges = "first-parent", - }, - }, - hg = { - single_file = {}, - multi_file = {}, - }, - }, - win_config = { -- See |diffview-config-win_config| - position = "bottom", - height = 16, - win_opts = {}, - }, - }, - commit_log_panel = { - win_config = {}, -- See |diffview-config-win_config| - }, - default_args = { -- Default args prepended to the arg-list for the listed commands - DiffviewOpen = {}, - DiffviewFileHistory = {}, - }, - hooks = {}, -- See |diffview-config-hooks| - keymaps = { - disable_defaults = false, -- Disable the default keymaps - view = { - -- The `view` bindings are active in the diff buffers, only when the current - -- tabpage is a Diffview. - { - "n", - "", - actions.select_next_entry, - { desc = "Open the diff for the next file" }, - }, - { - "n", - "", - actions.select_prev_entry, - { desc = "Open the diff for the previous file" }, - }, - { - "n", - "[F", - actions.select_first_entry, - { desc = "Open the diff for the first file" }, - }, - { - "n", - "]F", - actions.select_last_entry, - { desc = "Open the diff for the last file" }, - }, - { - "n", - "gf", - actions.goto_file_edit, - { desc = "Open the file in the previous tabpage" }, - }, - { "n", "", actions.goto_file_split, { desc = "Open the file in a new split" } }, - { "n", "gf", actions.goto_file_tab, { desc = "Open the file in a new tabpage" } }, - { "n", "e", actions.focus_files, { desc = "Bring focus to the file panel" } }, - { "n", "b", actions.toggle_files, { desc = "Toggle the file panel." } }, - { - "n", - "g", - actions.cycle_layout, - { desc = "Cycle through available layouts." }, - }, - { - "n", - "[x", - actions.prev_conflict, - { desc = "In the merge-tool: jump to the previous conflict" }, - }, - { - "n", - "]x", - actions.next_conflict, - { desc = "In the merge-tool: jump to the next conflict" }, - }, - { - "n", - "co", - actions.conflict_choose("ours"), - { desc = "Choose the OURS version of a conflict" }, - }, - { - "n", - "ct", - actions.conflict_choose("theirs"), - { desc = "Choose the THEIRS version of a conflict" }, - }, - { - "n", - "cb", - actions.conflict_choose("base"), - { desc = "Choose the BASE version of a conflict" }, - }, - { - "n", - "ca", - actions.conflict_choose("all"), - { desc = "Choose all the versions of a conflict" }, - }, - { "n", "dx", actions.conflict_choose("none"), { desc = "Delete the conflict region" } }, - { - "n", - "cO", - actions.conflict_choose_all("ours"), - { desc = "Choose the OURS version of a conflict for the whole file" }, - }, - { - "n", - "cT", - actions.conflict_choose_all("theirs"), - { desc = "Choose the THEIRS version of a conflict for the whole file" }, - }, - { - "n", - "cB", - actions.conflict_choose_all("base"), - { desc = "Choose the BASE version of a conflict for the whole file" }, - }, - { - "n", - "cA", - actions.conflict_choose_all("all"), - { desc = "Choose all the versions of a conflict for the whole file" }, - }, - { - "n", - "dX", - actions.conflict_choose_all("none"), - { desc = "Delete the conflict region for the whole file" }, - }, - }, - diff1 = { - -- Mappings in single window diff layouts - { "n", "g?", actions.help({ "view", "diff1" }), { desc = "Open the help panel" } }, - }, - diff2 = { - -- Mappings in 2-way diff layouts - { "n", "g?", actions.help({ "view", "diff2" }), { desc = "Open the help panel" } }, - }, - diff3 = { - -- Mappings in 3-way diff layouts - { - { "n", "x" }, - "2do", - actions.diffget("ours"), - { desc = "Obtain the diff hunk from the OURS version of the file" }, - }, - { - { "n", "x" }, - "3do", - actions.diffget("theirs"), - { desc = "Obtain the diff hunk from the THEIRS version of the file" }, - }, - { "n", "g?", actions.help({ "view", "diff3" }), { desc = "Open the help panel" } }, - }, - diff4 = { - -- Mappings in 4-way diff layouts - { - { "n", "x" }, - "1do", - actions.diffget("base"), - { desc = "Obtain the diff hunk from the BASE version of the file" }, - }, - { - { "n", "x" }, - "2do", - actions.diffget("ours"), - { desc = "Obtain the diff hunk from the OURS version of the file" }, - }, - { - { "n", "x" }, - "3do", - actions.diffget("theirs"), - { desc = "Obtain the diff hunk from the THEIRS version of the file" }, - }, - { "n", "g?", actions.help({ "view", "diff4" }), { desc = "Open the help panel" } }, - }, - file_panel = { - { - "n", - "j", - actions.next_entry, - { desc = "Bring the cursor to the next file entry" }, - }, - { - "n", - "", - actions.next_entry, - { desc = "Bring the cursor to the next file entry" }, - }, - { - "n", - "k", - actions.prev_entry, - { desc = "Bring the cursor to the previous file entry" }, - }, - { - "n", - "", - actions.prev_entry, - { desc = "Bring the cursor to the previous file entry" }, - }, - { - "n", - "", - actions.select_entry, - { desc = "Open the diff for the selected entry" }, - }, - { - "n", - "o", - actions.select_entry, - { desc = "Open the diff for the selected entry" }, - }, - { - "n", - "l", - actions.select_entry, - { desc = "Open the diff for the selected entry" }, - }, - { - "n", - "<2-LeftMouse>", - actions.select_entry, - { desc = "Open the diff for the selected entry" }, - }, - { - "n", - "-", - actions.toggle_stage_entry, - { desc = "Stage / unstage the selected entry" }, - }, - { - "n", - "s", - actions.toggle_stage_entry, - { desc = "Stage / unstage the selected entry" }, - }, - { "n", "S", actions.stage_all, { desc = "Stage all entries" } }, - { "n", "U", actions.unstage_all, { desc = "Unstage all entries" } }, - { - "n", - "X", - actions.restore_entry, - { desc = "Restore entry to the state on the left side" }, - }, - { "n", "L", actions.open_commit_log, { desc = "Open the commit log panel" } }, - { "n", "zo", actions.open_fold, { desc = "Expand fold" } }, - { "n", "h", actions.close_fold, { desc = "Collapse fold" } }, - { "n", "zc", actions.close_fold, { desc = "Collapse fold" } }, - { "n", "za", actions.toggle_fold, { desc = "Toggle fold" } }, - { "n", "zR", actions.open_all_folds, { desc = "Expand all folds" } }, - { "n", "zM", actions.close_all_folds, { desc = "Collapse all folds" } }, - { "n", "", actions.scroll_view(-0.25), { desc = "Scroll the view up" } }, - { "n", "", actions.scroll_view(0.25), { desc = "Scroll the view down" } }, - { - "n", - "", - actions.select_next_entry, - { desc = "Open the diff for the next file" }, - }, - { - "n", - "", - actions.select_prev_entry, - { desc = "Open the diff for the previous file" }, - }, - { - "n", - "[F", - actions.select_first_entry, - { desc = "Open the diff for the first file" }, - }, - { - "n", - "]F", - actions.select_last_entry, - { desc = "Open the diff for the last file" }, - }, - { - "n", - "gf", - actions.goto_file_edit, - { desc = "Open the file in the previous tabpage" }, - }, - { - "n", - "", - actions.goto_file_split, - { desc = "Open the file in a new split" }, - }, - { - "n", - "gf", - actions.goto_file_tab, - { desc = "Open the file in a new tabpage" }, - }, - { - "n", - "i", - actions.listing_style, - { desc = "Toggle between 'list' and 'tree' views" }, - }, - { - "n", - "f", - actions.toggle_flatten_dirs, - { desc = "Flatten empty subdirectories in tree listing style" }, - }, - { - "n", - "R", - actions.refresh_files, - { desc = "Update stats and entries in the file list" }, - }, - { - "n", - "e", - actions.focus_files, - { desc = "Bring focus to the file panel" }, - }, - { "n", "b", actions.toggle_files, { desc = "Toggle the file panel" } }, - { "n", "g", actions.cycle_layout, { desc = "Cycle available layouts" } }, - { "n", "[x", actions.prev_conflict, { desc = "Go to the previous conflict" } }, - { "n", "]x", actions.next_conflict, { desc = "Go to the next conflict" } }, - { "n", "g?", actions.help("file_panel"), { desc = "Open the help panel" } }, - { - "n", - "cO", - actions.conflict_choose_all("ours"), - { desc = "Choose the OURS version of a conflict for the whole file" }, - }, - { - "n", - "cT", - actions.conflict_choose_all("theirs"), - { desc = "Choose the THEIRS version of a conflict for the whole file" }, - }, - { - "n", - "cB", - actions.conflict_choose_all("base"), - { desc = "Choose the BASE version of a conflict for the whole file" }, - }, - { - "n", - "cA", - actions.conflict_choose_all("all"), - { desc = "Choose all the versions of a conflict for the whole file" }, - }, - { - "n", - "dX", - actions.conflict_choose_all("none"), - { desc = "Delete the conflict region for the whole file" }, - }, - }, - file_history_panel = { - { "n", "g!", actions.options, { desc = "Open the option panel" } }, - { - "n", - "", - actions.open_in_diffview, - { desc = "Open the entry under the cursor in a diffview" }, - }, - { - "n", - "y", - actions.copy_hash, - { desc = "Copy the commit hash of the entry under the cursor" }, - }, - { "n", "L", actions.open_commit_log, { desc = "Show commit details" } }, - { - "n", - "X", - actions.restore_entry, - { desc = "Restore file to the state from the selected entry" }, - }, - { "n", "zo", actions.open_fold, { desc = "Expand fold" } }, - { "n", "zc", actions.close_fold, { desc = "Collapse fold" } }, - { "n", "h", actions.close_fold, { desc = "Collapse fold" } }, - { "n", "za", actions.toggle_fold, { desc = "Toggle fold" } }, - { "n", "zR", actions.open_all_folds, { desc = "Expand all folds" } }, - { "n", "zM", actions.close_all_folds, { desc = "Collapse all folds" } }, - { - "n", - "j", - actions.next_entry, - { desc = "Bring the cursor to the next file entry" }, - }, - { - "n", - "", - actions.next_entry, - { desc = "Bring the cursor to the next file entry" }, - }, - { - "n", - "k", - actions.prev_entry, - { desc = "Bring the cursor to the previous file entry" }, - }, - { - "n", - "", - actions.prev_entry, - { desc = "Bring the cursor to the previous file entry" }, - }, - { - "n", - "", - actions.select_entry, - { desc = "Open the diff for the selected entry" }, - }, - { - "n", - "o", - actions.select_entry, - { desc = "Open the diff for the selected entry" }, - }, - { - "n", - "l", - actions.select_entry, - { desc = "Open the diff for the selected entry" }, - }, - { - "n", - "<2-LeftMouse>", - actions.select_entry, - { desc = "Open the diff for the selected entry" }, - }, - { "n", "", actions.scroll_view(-0.25), { desc = "Scroll the view up" } }, - { "n", "", actions.scroll_view(0.25), { desc = "Scroll the view down" } }, - { "n", "", actions.select_next_entry, { desc = "Open the diff for the next file" } }, - { - "n", - "", - actions.select_prev_entry, - { desc = "Open the diff for the previous file" }, - }, - { - "n", - "[F", - actions.select_first_entry, - { desc = "Open the diff for the first file" }, - }, - { "n", "]F", actions.select_last_entry, { desc = "Open the diff for the last file" } }, - { - "n", - "gf", - actions.goto_file_edit, - { desc = "Open the file in the previous tabpage" }, - }, - { "n", "", actions.goto_file_split, { desc = "Open the file in a new split" } }, - { "n", "gf", actions.goto_file_tab, { desc = "Open the file in a new tabpage" } }, - { "n", "e", actions.focus_files, { desc = "Bring focus to the file panel" } }, - { "n", "b", actions.toggle_files, { desc = "Toggle the file panel" } }, - { "n", "g", actions.cycle_layout, { desc = "Cycle available layouts" } }, - { "n", "g?", actions.help("file_history_panel"), { desc = "Open the help panel" } }, - }, - option_panel = { - { "n", "", actions.select_entry, { desc = "Change the current option" } }, - { "n", "q", actions.close, { desc = "Close the panel" } }, - { "n", "g?", actions.help("option_panel"), { desc = "Open the help panel" } }, - }, - help_panel = { - { "n", "q", actions.close, { desc = "Close help menu" } }, - { "n", "", actions.close, { desc = "Close help menu" } }, - }, - }, -}) + require("diffview").setup({ + diff_binaries = false, + enhanced_diff_hl = false, + git_cmd = { "git" }, + hg_cmd = { "hg" }, + use_icons = true, + show_help_hints = true, + watch_index = true, + icons = { + folder_closed = "", + folder_open = "", + }, + signs = { + fold_closed = "", + fold_open = "", + done = "✓", + }, + view = { + default = { + layout = "diff2_horizontal", + disable_diagnostics = false, + winbar_info = false, + }, + merge_tool = { + layout = "diff3_horizontal", + disable_diagnostics = true, + winbar_info = true, + }, + file_history = { + layout = "diff2_horizontal", + disable_diagnostics = false, + winbar_info = false, + }, + }, + file_panel = { + listing_style = "tree", + tree_options = { + flatten_dirs = true, + folder_statuses = "only_folded", + }, + win_config = { + position = "left", + width = 35, + win_opts = {}, + }, + }, + file_history_panel = { + log_options = { + git = { + single_file = { diff_merges = "combined" }, + multi_file = { diff_merges = "first-parent" }, + }, + hg = { + single_file = {}, + multi_file = {}, + }, + }, + win_config = { + position = "bottom", + height = 16, + win_opts = {}, + }, + }, + commit_log_panel = { + win_config = {}, + }, + default_args = { + DiffviewOpen = {}, + DiffviewFileHistory = {}, + }, + hooks = {}, + keymaps = { + disable_defaults = false, + view = { + { "n", "", actions.select_next_entry, { desc = "Open the diff for the next file" } }, + { "n", "", actions.select_prev_entry, { desc = "Open the diff for the previous file" } }, + { "n", "[F", actions.select_first_entry, { desc = "Open the diff for the first file" } }, + { "n", "]F", actions.select_last_entry, { desc = "Open the diff for the last file" } }, + { "n", "gf", actions.goto_file_edit, { desc = "Open the file in the previous tabpage" } }, + { "n", "", actions.goto_file_split, { desc = "Open the file in a new split" } }, + { "n", "gf", actions.goto_file_tab, { desc = "Open the file in a new tabpage" } }, + { "n", "e", actions.focus_files, { desc = "Bring focus to the file panel" } }, + { "n", "b", actions.toggle_files, { desc = "Toggle the file panel." } }, + { "n", "g", actions.cycle_layout, { desc = "Cycle through available layouts." } }, + { "n", "[x", actions.prev_conflict, { desc = "In the merge-tool: jump to the previous conflict" } }, + { "n", "]x", actions.next_conflict, { desc = "In the merge-tool: jump to the next conflict" } }, + { "n", "co", actions.conflict_choose("ours"), { desc = "Choose the OURS version of a conflict" } }, + { "n", "ct", actions.conflict_choose("theirs"), { desc = "Choose the THEIRS version of a conflict" } }, + { "n", "cb", actions.conflict_choose("base"), { desc = "Choose the BASE version of a conflict" } }, + { "n", "ca", actions.conflict_choose("all"), { desc = "Choose all the versions of a conflict" } }, + { "n", "dX", actions.conflict_choose("none"), { desc = "Delete the conflict region" } }, + { "n", "cO", actions.conflict_choose_all("ours"), { desc = "Choose OURS for the whole file" } }, + { "n", "cT", actions.conflict_choose_all("theirs"), { desc = "Choose THEIRS for the whole file" } }, + { "n", "cB", actions.conflict_choose_all("base"), { desc = "Choose BASE for the whole file" } }, + { "n", "cA", actions.conflict_choose_all("all"), { desc = "Choose all versions for the whole file" } }, + { "n", "g?", actions.help("view"), { desc = "Open the help panel" } }, + }, + file_panel = { + { "n", "j", actions.next_entry, { desc = "Bring the cursor to the next file entry" } }, + { "n", "", actions.next_entry, { desc = "Bring the cursor to the next file entry" } }, + { "n", "k", actions.prev_entry, { desc = "Bring the cursor to the previous file entry" } }, + { "n", "", actions.prev_entry, { desc = "Bring the cursor to the previous file entry" } }, + { "n", "", actions.select_entry, { desc = "Open the diff for the selected entry" } }, + { "n", "o", actions.select_entry, { desc = "Open the diff for the selected entry" } }, + { "n", "l", actions.select_entry, { desc = "Open the diff for the selected entry" } }, + { "n", "<2-LeftMouse>", actions.select_entry, { desc = "Open the diff for the selected entry" } }, + { "n", "-", actions.toggle_stage_entry, { desc = "Stage / unstage the selected entry" } }, + { "n", "s", actions.toggle_stage_entry, { desc = "Stage / unstage the selected entry" } }, + { "n", "S", actions.stage_all, { desc = "Stage all entries" } }, + { "n", "U", actions.unstage_all, { desc = "Unstage all entries" } }, + { "n", "X", actions.restore_entry, { desc = "Restore entry to the state on the left side" } }, + { "n", "L", actions.open_commit_log, { desc = "Open the commit log panel" } }, + { "n", "zo", actions.open_fold, { desc = "Expand fold" } }, + { "n", "h", actions.close_fold, { desc = "Collapse fold" } }, + { "n", "zc", actions.close_fold, { desc = "Collapse fold" } }, + { "n", "za", actions.toggle_fold, { desc = "Toggle fold" } }, + { "n", "zR", actions.open_all_folds, { desc = "Expand all folds" } }, + { "n", "zM", actions.close_all_folds, { desc = "Collapse all folds" } }, + { "n", "", actions.scroll_view(-0.25), { desc = "Scroll the view up" } }, + { "n", "", actions.scroll_view(0.25), { desc = "Scroll the view down" } }, + { "n", "", actions.select_next_entry, { desc = "Open the diff for the next file" } }, + { "n", "", actions.select_prev_entry, { desc = "Open the diff for the previous file" } }, + { "n", "[F", actions.select_first_entry, { desc = "Open the diff for the first file" } }, + { "n", "]F", actions.select_last_entry, { desc = "Open the diff for the last file" } }, + { "n", "gf", actions.goto_file_edit, { desc = "Open the file in the previous tabpage" } }, + { "n", "", actions.goto_file_split, { desc = "Open the file in a new split" } }, + { "n", "gf", actions.goto_file_tab, { desc = "Open the file in a new tabpage" } }, + { "n", "i", actions.listing_style, { desc = "Toggle between 'list' and 'tree' views" } }, + { "n", "f", actions.toggle_flatten_dirs, { desc = "Flatten empty subdirectories in tree listing style" } }, + { "n", "R", actions.refresh_files, { desc = "Update stats and entries in the file list" } }, + { "n", "e", actions.focus_files, { desc = "Bring focus to the file panel" } }, + { "n", "b", actions.toggle_files, { desc = "Toggle the file panel" } }, + { "n", "g", actions.cycle_layout, { desc = "Cycle available layouts" } }, + { "n", "[x", actions.prev_conflict, { desc = "Go to the previous conflict" } }, + { "n", "]x", actions.next_conflict, { desc = "Go to the next conflict" } }, + { "n", "g?", actions.help("file_panel"), { desc = "Open the help panel" } }, + { "n", "cO", actions.conflict_choose_all("ours"), { desc = "Choose OURS for the whole file" } }, + { "n", "cT", actions.conflict_choose_all("theirs"), { desc = "Choose THEIRS for the whole file" } }, + { "n", "cB", actions.conflict_choose_all("base"), { desc = "Choose BASE for the whole file" } }, + { "n", "cA", actions.conflict_choose_all("all"), { desc = "Choose all versions for the whole file" } }, + { "n", "dX", actions.conflict_choose_all("none"), { desc = "Delete the conflict region for the whole file" } }, + }, + file_history_panel = { + { "n", "g!", actions.options, { desc = "Open the option panel" } }, + { "n", "", actions.open_in_diffview, { desc = "Open the entry under the cursor in a diffview" } }, + { "n", "y", actions.copy_hash, { desc = "Copy the commit hash of the entry under the cursor" } }, + { "n", "L", actions.open_commit_log, { desc = "Show commit details" } }, + { "n", "X", actions.restore_entry, { desc = "Restore file to the state from the selected entry" } }, + { "n", "zo", actions.open_fold, { desc = "Expand fold" } }, + { "n", "zc", actions.close_fold, { desc = "Collapse fold" } }, + { "n", "h", actions.close_fold, { desc = "Collapse fold" } }, + { "n", "za", actions.toggle_fold, { desc = "Toggle fold" } }, + { "n", "zR", actions.open_all_folds, { desc = "Expand all folds" } }, + { "n", "zM", actions.close_all_folds, { desc = "Collapse all folds" } }, + { "n", "j", actions.next_entry, { desc = "Bring the cursor to the next file entry" } }, + { "n", "", actions.next_entry, { desc = "Bring the cursor to the next file entry" } }, + { "n", "k", actions.prev_entry, { desc = "Bring the cursor to the previous file entry" } }, + { "n", "", actions.prev_entry, { desc = "Bring the cursor to the previous file entry" } }, + { "n", "", actions.select_entry, { desc = "Open the diff for the selected entry" } }, + { "n", "o", actions.select_entry, { desc = "Open the diff for the selected entry" } }, + { "n", "l", actions.select_entry, { desc = "Open the diff for the selected entry" } }, + { "n", "<2-LeftMouse>", actions.select_entry, { desc = "Open the diff for the selected entry" } }, + { "n", "", actions.scroll_view(-0.25), { desc = "Scroll the view up" } }, + { "n", "", actions.scroll_view(0.25), { desc = "Scroll the view down" } }, + { "n", "", actions.select_next_entry, { desc = "Open the diff for the next file" } }, + { "n", "", actions.select_prev_entry, { desc = "Open the diff for the previous file" } }, + { "n", "[F", actions.select_first_entry, { desc = "Open the diff for the first file" } }, + { "n", "]F", actions.select_last_entry, { desc = "Open the diff for the last file" } }, + { "n", "gf", actions.goto_file_edit, { desc = "Open the file in the previous tabpage" } }, + { "n", "", actions.goto_file_split, { desc = "Open the file in a new split" } }, + { "n", "gf", actions.goto_file_tab, { desc = "Open the file in a new tabpage" } }, + { "n", "e", actions.focus_files, { desc = "Bring focus to the file panel" } }, + { "n", "b", actions.toggle_files, { desc = "Toggle the file panel" } }, + { "n", "g", actions.cycle_layout, { desc = "Cycle available layouts" } }, + { "n", "g?", actions.help("file_history_panel"), { desc = "Open the help panel" } }, + }, + option_panel = { + { "n", "", actions.select_entry, { desc = "Change the current option" } }, + { "n", "q", actions.close, { desc = "Close the panel" } }, + { "n", "g?", actions.help("option_panel"), { desc = "Open the help panel" } }, + }, + help_panel = { + { "n", "q", actions.close, { desc = "Close help menu" } }, + { "n", "", actions.close, { desc = "Close help menu" } }, + }, + }, + }) + end, + }, +} diff --git a/.config/nvim/lua/plugins/init.lua b/.config/nvim/lua/plugins/init.lua deleted file mode 100644 index 56b1601..0000000 --- a/.config/nvim/lua/plugins/init.lua +++ /dev/null @@ -1,11 +0,0 @@ -require("plugins.log-highlight") -require("plugins.whichkey") -require("plugins.treesitter") -require("plugins.neotree") -require("plugins.telescope") -require("plugins.blink") -require("plugins.conform") -require("plugins.git") -require("plugins.markdown") -require("plugins.theme") -require("plugins.lualine") diff --git a/.config/nvim/lua/plugins/log-highlight.lua b/.config/nvim/lua/plugins/log-highlight.lua index 4209b4e..5ca8dc2 100644 --- a/.config/nvim/lua/plugins/log-highlight.lua +++ b/.config/nvim/lua/plugins/log-highlight.lua @@ -1 +1,3 @@ -vim.pack.add({ "https://github.com/fei6409/log-highlight.nvim" }) +return { + "fei6409/log-highlight.nvim", +} diff --git a/.config/nvim/lua/plugins/lualine.lua b/.config/nvim/lua/plugins/lualine.lua index 3d468b9..5a8cca1 100644 --- a/.config/nvim/lua/plugins/lualine.lua +++ b/.config/nvim/lua/plugins/lualine.lua @@ -1,59 +1,53 @@ -vim.pack.add({ - "https://github.com/nvim-lualine/lualine.nvim", - "https://github.com/nvim-tree/nvim-web-devicons", -}) - -require("lualine").setup({ - options = { - icons_enabled = true, - theme = "auto", - component_separators = { left = "", right = "" }, - section_separators = { left = "", right = "" }, - disabled_filetypes = { - statusline = {}, - winbar = {}, - }, - ignore_focus = {}, - always_divide_middle = true, - always_show_tabline = true, - globalstatus = false, - refresh = { - statusline = 1000, - tabline = 1000, - winbar = 1000, - refresh_time = 16, -- ~60fps - events = { - "WinEnter", - "BufEnter", - "BufWritePost", - "SessionLoadPost", - "FileChangedShellPost", - "VimResized", - "Filetype", - "CursorMoved", - "CursorMovedI", - "ModeChanged", - }, - }, - }, - sections = { - lualine_a = { "mode" }, - lualine_b = { "branch", "diff", "diagnostics" }, - lualine_c = { "filename" }, - lualine_x = { "encoding", "fileformat", "filetype" }, - lualine_y = { "progress" }, - lualine_z = { "location" }, - }, - inactive_sections = { - lualine_a = {}, - lualine_b = {}, - lualine_c = { "filename" }, - lualine_x = { "location" }, - lualine_y = {}, - lualine_z = {}, - }, - tabline = {}, - winbar = {}, - inactive_winbar = {}, - extensions = {}, -}) +return { + "nvim-lualine/lualine.nvim", + dependencies = { "nvim-tree/nvim-web-devicons" }, + config = function() + require("lualine").setup({ + options = { + icons_enabled = true, + theme = "auto", + component_separators = { left = "", right = "" }, + section_separators = { left = "", right = "" }, + disabled_filetypes = { + statusline = {}, + winbar = {}, + }, + ignore_focus = {}, + always_divide_middle = true, + always_show_tabline = true, + globalstatus = false, + refresh = { + statusline = 1000, + tabline = 1000, + winbar = 1000, + refresh_time = 16, + events = { + "WinEnter", "BufEnter", "BufWritePost", "SessionLoadPost", + "FileChangedShellPost", "VimResized", "Filetype", + "CursorMoved", "CursorMovedI", "ModeChanged", + }, + }, + }, + sections = { + lualine_a = { "mode" }, + lualine_b = { "branch", "diff", "diagnostics" }, + lualine_c = { "filename" }, + lualine_x = { "encoding", "fileformat", "filetype" }, + lualine_y = { "progress" }, + lualine_z = { "location" }, + }, + inactive_sections = { + lualine_a = {}, + lualine_b = {}, + lualine_c = { "filename" }, + lualine_x = { "location" }, + lualine_y = {}, + lualine_z = {}, + }, + tabline = {}, + winbar = {}, + inactive_winbar = {}, + extensions = {}, + }) + end, +} diff --git a/.config/nvim/lua/plugins/markdown.lua b/.config/nvim/lua/plugins/markdown.lua index 4b00655..01af41d 100644 --- a/.config/nvim/lua/plugins/markdown.lua +++ b/.config/nvim/lua/plugins/markdown.lua @@ -1,7 +1,7 @@ -vim.pack.add({ - 'https://github.com/nvim-treesitter/nvim-treesitter', - -- 'https://github.com/nvim-mini/mini.nvim', -- if you use the mini.nvim suite - -- 'https://github.com/nvim-mini/mini.icons', -- if you use standalone mini plugins - -- 'https://github.com/nvim-tree/nvim-web-devicons', -- if you prefer nvim-web-devicons - 'https://github.com/MeanderingProgrammer/render-markdown.nvim', -}) +return { + "MeanderingProgrammer/render-markdown.nvim", + dependencies = { + "nvim-treesitter/nvim-treesitter", + "nvim-tree/nvim-web-devicons", + }, +} diff --git a/.config/nvim/lua/plugins/neotree.lua b/.config/nvim/lua/plugins/neotree.lua index e0330be..233e913 100644 --- a/.config/nvim/lua/plugins/neotree.lua +++ b/.config/nvim/lua/plugins/neotree.lua @@ -1,11 +1,9 @@ -vim.pack.add({ - { - src = 'https://github.com/nvim-neo-tree/neo-tree.nvim', - version = vim.version.range('3') +return { + "nvim-neo-tree/neo-tree.nvim", + version = "3.*", + dependencies = { + "nvim-lua/plenary.nvim", + "MunifTanjim/nui.nvim", + "nvim-tree/nvim-web-devicons", }, - -- dependencies - "https://github.com/nvim-lua/plenary.nvim", - "https://github.com/MunifTanjim/nui.nvim", - -- optional, but recommended - "https://github.com/nvim-tree/nvim-web-devicons", -}) +} diff --git a/.config/nvim/lua/plugins/telescope.lua b/.config/nvim/lua/plugins/telescope.lua index b35514a..7420176 100644 --- a/.config/nvim/lua/plugins/telescope.lua +++ b/.config/nvim/lua/plugins/telescope.lua @@ -1,13 +1,18 @@ -vim.pack.add({"https://github.com/nvim-telescope/telescope.nvim", -"https://github.com/nvim-lua/plenary.nvim", -"https://github.com/BurntSushi/ripgrep", -"https://github.com/nvim-telescope/telescope-fzf-native.nvim", -"https://github.com/sharkdp/fd", -"https://github.com/nvim-tree/nvim-web-devicons"} -) - -local builtin = require('telescope.builtin') -vim.keymap.set('n', 'ff', builtin.find_files, { desc = 'Telescope find files' }) -vim.keymap.set('n', 'fg', builtin.live_grep, { desc = 'Telescope live grep' }) -vim.keymap.set('n', 'fb', builtin.buffers, { desc = 'Telescope buffers' }) -vim.keymap.set('n', 'fh', builtin.help_tags, { desc = 'Telescope help tags' }) +return { + "nvim-telescope/telescope.nvim", + dependencies = { + "nvim-lua/plenary.nvim", + "nvim-tree/nvim-web-devicons", + { + "nvim-telescope/telescope-fzf-native.nvim", + build = "make", + }, + }, + config = function() + local builtin = require("telescope.builtin") + vim.keymap.set("n", "ff", builtin.find_files, { desc = "Telescope find files" }) + vim.keymap.set("n", "fg", builtin.live_grep, { desc = "Telescope live grep" }) + vim.keymap.set("n", "fb", builtin.buffers, { desc = "Telescope buffers" }) + vim.keymap.set("n", "fh", builtin.help_tags, { desc = "Telescope help tags" }) + end, +} diff --git a/.config/nvim/lua/plugins/theme.lua b/.config/nvim/lua/plugins/theme.lua index 45c7d33..9e94983 100644 --- a/.config/nvim/lua/plugins/theme.lua +++ b/.config/nvim/lua/plugins/theme.lua @@ -1,3 +1,8 @@ -vim.pack.add({"https://github.com/catppuccin/nvim"}) - -vim.cmd("colorscheme catppuccin") +return { + "catppuccin/nvim", + name = "catppuccin", + priority = 1000, -- Load before other plugins so colorscheme is set first + config = function() + vim.cmd("colorscheme catppuccin") + end, +} diff --git a/.config/nvim/lua/plugins/treesitter.lua b/.config/nvim/lua/plugins/treesitter.lua index 53e9ff0..dac2d33 100644 --- a/.config/nvim/lua/plugins/treesitter.lua +++ b/.config/nvim/lua/plugins/treesitter.lua @@ -1,144 +1,91 @@ -vim.pack.add({ +return { { - src = "https://github.com/nvim-treesitter/nvim-treesitter", - version = "main", + "nvim-treesitter/nvim-treesitter", + branch = "main", + build = ":TSUpdate", + config = function() + require("nvim-treesitter").setup({}) + require("nvim-treesitter").install({ + "bash", "blade", "c", "comment", "css", "diff", "dockerfile", + "fish", "gitcommit", "gitignore", "go", "gomod", "gosum", "gowork", + "html", "ini", "javascript", "jsdoc", "json", "lua", "luadoc", + "luap", "make", "markdown", "markdown_inline", "nginx", "nix", + "proto", "python", "query", "regex", "rust", "scss", "sql", + "terraform", "toml", "tsx", "typescript", "vim", "vimdoc", + "xml", "yaml", "zig", + }) + + vim.wo.foldexpr = "v:lua.vim.treesitter.foldexpr()" + vim.bo.indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()" + + vim.api.nvim_create_autocmd("FileType", { + pattern = { "*" }, + callback = function() + local filetype = vim.bo.filetype + if filetype and filetype ~= "" then + pcall(vim.treesitter.start) + end + end, + }) + end, }, { - src = "https://github.com/nvim-treesitter/nvim-treesitter-textobjects", - version = "main", - }, -}) + "nvim-treesitter/nvim-treesitter-textobjects", + branch = "main", + dependencies = { "nvim-treesitter/nvim-treesitter" }, + config = function() + require("nvim-treesitter-textobjects").setup({ + select = { + enable = true, + lookahead = true, + selection_modes = { + ["@parameter.outer"] = "v", + ["@function.outer"] = "V", + ["@class.outer"] = "", + }, + include_surrounding_whitespace = false, + }, + move = { + enable = true, + set_jumps = true, + }, + }) -require("nvim-treesitter").setup({}) -require("nvim-treesitter").install({ - "bash", - "blade", - "c", - "comment", - "css", - "diff", - "dockerfile", - "fish", - "gitcommit", - "gitignore", - "go", - "gomod", - "gosum", - "gowork", - "html", - "ini", - "javascript", - "jsdoc", - "json", - "lua", - "luadoc", - "luap", - "make", - "markdown", - "markdown_inline", - "nginx", - "nix", - "proto", - "python", - "query", - "regex", - "rust", - "scss", - "sql", - "terraform", - "toml", - "tsx", - "typescript", - "vim", - "vimdoc", - "xml", - "yaml", - "zig", -}) - -require("nvim-treesitter-textobjects").setup({ - select = { - enable = true, - lookahead = true, - selection_modes = { - ["@parameter.outer"] = "v", -- charwise - ["@function.outer"] = "V", -- linewise - ["@class.outer"] = "", -- blockwise - }, - include_surrounding_whitespace = false, - }, - move = { - enable = true, - set_jumps = true, - }, -}) - --- SELECT keymaps -local sel = require("nvim-treesitter-textobjects.select") -for _, map in ipairs({ - { { "x", "o" }, "af", "@function.outer" }, - { { "x", "o" }, "if", "@function.inner" }, - { { "x", "o" }, "ac", "@class.outer" }, - { { "x", "o" }, "ic", "@class.inner" }, - { { "x", "o" }, "aa", "@parameter.outer" }, - { { "x", "o" }, "ia", "@parameter.inner" }, - { { "x", "o" }, "ad", "@comment.outer" }, - { { "x", "o" }, "as", "@statement.outer" }, -}) do -vim.keymap.set(map[1], map[2], function() - sel.select_textobject(map[3], "textobjects") -end, { desc = "Select " .. map[3] }) -end - --- MOVE keymaps -local mv = require("nvim-treesitter-textobjects.move") -for _, map in ipairs({ - { { "n", "x", "o" }, "]m", mv.goto_next_start, "@function.outer" }, - { { "n", "x", "o" }, "[m", mv.goto_previous_start, "@function.outer" }, - { { "n", "x", "o" }, "]]", mv.goto_next_start, "@class.outer" }, - { { "n", "x", "o" }, "[[", mv.goto_previous_start, "@class.outer" }, - { { "n", "x", "o" }, "]M", mv.goto_next_end, "@function.outer" }, - { { "n", "x", "o" }, "[M", mv.goto_previous_end, "@function.outer" }, - { { "n", "x", "o" }, "]o", mv.goto_next_start, { "@loop.inner", "@loop.outer" } }, - { { "n", "x", "o" }, "[o", mv.goto_previous_start, { "@loop.inner", "@loop.outer" } }, -}) do -local modes, lhs, fn, query = map[1], map[2], map[3], map[4] --- build a human-readable desc -local qstr = (type(query) == "table") and table.concat(query, ",") or query -vim.keymap.set(modes, lhs, function() - fn(query, "textobjects") -end, { desc = "Move to " .. qstr }) -end - -vim.api.nvim_create_autocmd("PackChanged", { - desc = "Handle nvim-treesitter updates", - group = vim.api.nvim_create_augroup("nvim-treesitter-pack-changed-update-handler", { clear = true }), - callback = function(event) - if event.data.kind == "update" then - local ok = pcall(vim.cmd, "TSUpdate") - if ok then - vim.notify("TSUpdate completed successfully!", vim.log.levels.INFO) - else - vim.notify("TSUpdate command not available yet, skipping", vim.log.levels.WARN) + -- SELECT keymaps + local sel = require("nvim-treesitter-textobjects.select") + for _, map in ipairs({ + { { "x", "o" }, "af", "@function.outer" }, + { { "x", "o" }, "if", "@function.inner" }, + { { "x", "o" }, "ac", "@class.outer" }, + { { "x", "o" }, "ic", "@class.inner" }, + { { "x", "o" }, "aa", "@parameter.outer" }, + { { "x", "o" }, "ia", "@parameter.inner" }, + { { "x", "o" }, "ad", "@comment.outer" }, + { { "x", "o" }, "as", "@statement.outer" }, + }) do + vim.keymap.set(map[1], map[2], function() + sel.select_textobject(map[3], "textobjects") + end, { desc = "Select " .. map[3] }) end - end - end, -}) -vim.wo.foldexpr = "v:lua.vim.treesitter.foldexpr()" -vim.bo.indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()" - -vim.api.nvim_create_autocmd("FileType", { - pattern = { "*" }, - callback = function() - local filetype = vim.bo.filetype - if filetype and filetype ~= "" then - local success = pcall(function() - vim.treesitter.start() - end) - if not success then - return + -- MOVE keymaps + local mv = require("nvim-treesitter-textobjects.move") + for _, map in ipairs({ + { { "n", "x", "o" }, "]m", mv.goto_next_start, "@function.outer" }, + { { "n", "x", "o" }, "[m", mv.goto_previous_start, "@function.outer" }, + { { "n", "x", "o" }, "]]", mv.goto_next_start, "@class.outer" }, + { { "n", "x", "o" }, "[[", mv.goto_previous_start, "@class.outer" }, + { { "n", "x", "o" }, "]M", mv.goto_next_end, "@function.outer" }, + { { "n", "x", "o" }, "[M", mv.goto_previous_end, "@function.outer" }, + { { "n", "x", "o" }, "]o", mv.goto_next_start, { "@loop.inner", "@loop.outer" } }, + { { "n", "x", "o" }, "[o", mv.goto_previous_start, { "@loop.inner", "@loop.outer" } }, + }) do + local modes, lhs, fn, query = map[1], map[2], map[3], map[4] + local qstr = (type(query) == "table") and table.concat(query, ",") or query + vim.keymap.set(modes, lhs, function() + fn(query, "textobjects") + end, { desc = "Move to " .. qstr }) end - end - end, -}) + end, + }, +} diff --git a/.config/nvim/lua/plugins/whichkey.lua b/.config/nvim/lua/plugins/whichkey.lua index 9f2397f..ed0d037 100644 --- a/.config/nvim/lua/plugins/whichkey.lua +++ b/.config/nvim/lua/plugins/whichkey.lua @@ -1,98 +1,96 @@ -vim.pack.add({ - "https://github.com/folke/which-key.nvim", -}) - -local wk = require("which-key") -wk.setup({ - preset = "helix", -}) -wk.add({ - { "", group = "tabs" }, - { "c", group = "code" }, - { "d", group = "debug" }, - { "D", group = "Diffview", icon = { icon = "", color = "orange" } }, - { "p", group = "Yanky", icon = { icon = "󰃮 ", color = "yellow" } }, - { "dp", group = "profiler" }, - { "f", group = "file/find" }, - { "g", group = "git" }, - { "gh", group = "hunks" }, - { "q", group = "quit/session" }, - { "s", group = "search" }, - { "u", group = "ui", icon = { icon = "󰙵 ", color = "cyan" } }, - { "x", group = "diagnostics/quickfix", icon = { icon = "󱖫 ", color = "green" } }, - { "[", group = "prev" }, - { "]", group = "next" }, - { "g", group = "goto" }, - { "gs", group = "surround" }, - { "z", group = "fold" }, - { - "b", - group = "buffer", - expand = function() - return require("which-key.extras").expand.buf() - end, - }, - { - "w", - group = "windows", - proxy = "", - expand = function() - return require("which-key.extras").expand.win() - end, - }, - -- better descriptions - { "gx", desc = "Open with system app" }, - { - "fC", - group = "Copy Path", - { - "fCf", - function() - vim.fn.setreg("+", vim.fn.expand("%:p")) -- Copy full file path to clipboard - vim.notify("Copied full file path: " .. vim.fn.expand("%:p")) - end, - desc = "Copy full file path", - }, - { - "fCn", - function() - vim.fn.setreg("+", vim.fn.expand("%:t")) -- Copy file name to clipboard - vim.notify("Copied file name: " .. vim.fn.expand("%:t")) - end, - desc = "Copy file name", - }, - { - "fCr", - function() - local cwd = vim.fn.getcwd() -- Current working directory - local full_path = vim.fn.expand("%:p") -- Full file path - local rel_path = full_path:sub(#cwd + 2) -- Remove cwd prefix and leading slash - vim.fn.setreg("+", rel_path) -- Copy relative file path to clipboard - vim.notify("Copied relative file path: " .. rel_path) - end, - desc = "Copy relative file path", - }, - { - "?", - function() - require("which-key").show({ global = false }) - end, - desc = "Buffer Keymaps (which-key)", - }, - { - "", - function() - require("which-key").show({ keys = "", loop = true }) - end, - desc = "Window Hydra Mode (which-key)", - }, - }, - { - -- Nested mappings are allowed and can be added in any order - -- Most attributes can be inherited or overridden on any level - -- There's no limit to the depth of nesting - mode = { "n", "v" }, -- NORMAL and VISUAL mode - { "q", "q", desc = "Quit" }, -- no need to specify mode since it's inherited - { "w", "w", desc = "Write" }, - }, -}) +return { + "folke/which-key.nvim", + event = "VeryLazy", + config = function() + local wk = require("which-key") + wk.setup({ + preset = "helix", + }) + wk.add({ + { "", group = "tabs" }, + { "c", group = "code" }, + { "d", group = "debug" }, + { "D", group = "Diffview", icon = { icon = "", color = "orange" } }, + { "p", group = "Yanky", icon = { icon = "󰃮 ", color = "yellow" } }, + { "dp", group = "profiler" }, + { "f", group = "file/find" }, + { "g", group = "git" }, + { "gh", group = "hunks" }, + { "q", group = "quit/session" }, + { "s", group = "search" }, + { "u", group = "ui", icon = { icon = "󰙵 ", color = "cyan" } }, + { "x", group = "diagnostics/quickfix", icon = { icon = "󱖫 ", color = "green" } }, + { "[", group = "prev" }, + { "]", group = "next" }, + { "g", group = "goto" }, + { "gs", group = "surround" }, + { "z", group = "fold" }, + { + "b", + group = "buffer", + expand = function() + return require("which-key.extras").expand.buf() + end, + }, + { + "w", + group = "windows", + proxy = "", + expand = function() + return require("which-key.extras").expand.win() + end, + }, + { "gx", desc = "Open with system app" }, + { + "fC", + group = "Copy Path", + { + "fCf", + function() + vim.fn.setreg("+", vim.fn.expand("%:p")) + vim.notify("Copied full file path: " .. vim.fn.expand("%:p")) + end, + desc = "Copy full file path", + }, + { + "fCn", + function() + vim.fn.setreg("+", vim.fn.expand("%:t")) + vim.notify("Copied file name: " .. vim.fn.expand("%:t")) + end, + desc = "Copy file name", + }, + { + "fCr", + function() + local cwd = vim.fn.getcwd() + local full_path = vim.fn.expand("%:p") + local rel_path = full_path:sub(#cwd + 2) + vim.fn.setreg("+", rel_path) + vim.notify("Copied relative file path: " .. rel_path) + end, + desc = "Copy relative file path", + }, + { + "?", + function() + require("which-key").show({ global = false }) + end, + desc = "Buffer Keymaps (which-key)", + }, + { + "", + function() + require("which-key").show({ keys = "", loop = true }) + end, + desc = "Window Hydra Mode (which-key)", + }, + }, + { + mode = { "n", "v" }, + { "q", "q", desc = "Quit" }, + { "w", "w", desc = "Write" }, + }, + }) + end, +} diff --git a/.config/nvim/nvim-pack-lock.json b/.config/nvim/nvim-pack-lock.json deleted file mode 100644 index 43fafbc..0000000 --- a/.config/nvim/nvim-pack-lock.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "plugins": { - "blink.cmp": { - "rev": "b19413d", - "src": "https://github.com/saghen/blink.cmp", - "version": "1.0.0 - 2.0.0" - }, - "conform.nvim": { - "rev": "8314f4c", - "src": "https://github.com/stevearc/conform.nvim" - }, - "diffview.nvim": { - "rev": "4516612", - "src": "https://github.com/sindrets/diffview.nvim" - }, - "fd": { - "rev": "5f95a78", - "src": "https://github.com/sharkdp/fd" - }, - "gitsigns.nvim": { - "rev": "dfac404", - "src": "https://github.com/lewis6991/gitsigns.nvim" - }, - "log-highlight.nvim": { - "rev": "ca88628f6dd3b9bb46f9a7401669e24cf7de47a4", - "src": "https://github.com/fei6409/log-highlight.nvim" - }, - "lualine.nvim": { - "rev": "47f91c4", - "src": "https://github.com/nvim-lualine/lualine.nvim" - }, - "neo-tree.nvim": { - "rev": "f3df514", - "src": "https://github.com/nvim-neo-tree/neo-tree.nvim", - "version": "3.0.0 - 4.0.0" - }, - "nui.nvim": { - "rev": "de74099", - "src": "https://github.com/MunifTanjim/nui.nvim" - }, - "nvim": { - "rev": "6efc53e", - "src": "https://github.com/catppuccin/nvim" - }, - "nvim-treesitter": { - "rev": "b033ab33", - "src": "https://github.com/nvim-treesitter/nvim-treesitter", - "version": "'main'" - }, - "nvim-treesitter-textobjects": { - "rev": "28a3494", - "src": "https://github.com/nvim-treesitter/nvim-treesitter-textobjects", - "version": "'main'" - }, - "nvim-web-devicons": { - "rev": "6788013", - "src": "https://github.com/nvim-tree/nvim-web-devicons" - }, - "plenary.nvim": { - "rev": "b9fd522", - "src": "https://github.com/nvim-lua/plenary.nvim" - }, - "ripgrep": { - "rev": "0a88ccc", - "src": "https://github.com/BurntSushi/ripgrep" - }, - "telescope-fzf-native.nvim": { - "rev": "6fea601", - "src": "https://github.com/nvim-telescope/telescope-fzf-native.nvim" - }, - "telescope.nvim": { - "rev": "3333a52", - "src": "https://github.com/nvim-telescope/telescope.nvim" - }, - "which-key.nvim": { - "rev": "3aab214", - "src": "https://github.com/folke/which-key.nvim" - } - } -} \ No newline at end of file