diff options
| author | 2026-04-17 10:53:20 +0100 | |
|---|---|---|
| committer | 2026-04-17 10:53:20 +0100 | |
| commit | e01f1d6f5d42fac643facecd9ca2d240d53453bd (patch) | |
| tree | 6684173cbd992e4c0b5fa2002b9a6082f866ca51 /home/.config/nvim/lua/plugins/git.lua | |
| parent | dd2bc0a81d7ca6de60a509d8ff1a669e13785f01 (diff) | |
| download | dotfiles-e01f1d6f5d42fac643facecd9ca2d240d53453bd.tar.gz dotfiles-e01f1d6f5d42fac643facecd9ca2d240d53453bd.tar.bz2 dotfiles-e01f1d6f5d42fac643facecd9ca2d240d53453bd.zip | |
feat: migrate from lazy.nvim to vim.pack
Replace lazy.nvim plugin manager with Neovim 0.12's native vim.pack API.
All plugin config files rewritten from lazy.nvim spec tables to imperative
require/setup format with explicit vim.keymap.set() calls.
Key changes:
- vim.pack.add() with ~53 plugins in init.lua
- blink.cmp/pairs/download pinned to version tags (vim.version.range)
- PackChanged autocmd for markdown-preview build hook
- Ordered requires: colorscheme → ui → treesitter → completion → lsp → rest
- Plugin setup guards (gitsigns, which-key, blink.cmp) handle deferred
plugin/ file loading correctly
Net reduction: ~438 lines across 13 files.
Diffstat (limited to 'home/.config/nvim/lua/plugins/git.lua')
| -rw-r--r-- | home/.config/nvim/lua/plugins/git.lua | 272 |
1 files changed, 118 insertions, 154 deletions
diff --git a/home/.config/nvim/lua/plugins/git.lua b/home/.config/nvim/lua/plugins/git.lua index 9e920e2..b052c33 100644 --- a/home/.config/nvim/lua/plugins/git.lua +++ b/home/.config/nvim/lua/plugins/git.lua @@ -1,159 +1,123 @@ -return { - { - "akinsho/git-conflict.nvim", - event = "BufRead", - opts = { - disable_diagnostics = true, - default_mappings = { - next = "]x", - prev = "[x", - }, - }, +require("git-conflict").setup({ + disable_diagnostics = true, + default_mappings = { + next = "]x", + prev = "[x", }, - { - "NeogitOrg/neogit", - dependencies = { - "nvim-lua/plenary.nvim", - }, - keys = { - { - "<leader>go", - function() - require("neogit").open() - end, - desc = "neo[G]it [O]pen", - }, - }, - cmd = "Neogit", - opts = { - disable_commit_confirmation = true, - kind = "split", - console_timeout = 5000, - auto_show_console = false, - }, - }, - { - "ruifm/gitlinker.nvim", - keys = { - { - "<leader>gy", - function() - require("gitlinker").get_buf_range_url("n") - end, - }, - { - "<leader>gy", - function() - require("gitlinker").get_buf_range_url("v") - end, - mode = "v", - }, - }, - dependencies = { - "nvim-lua/plenary.nvim", - }, - opts = { - callbacks = { - ["git.sommerfeld.dev"] = function(url_data) - local url = require("gitlinker.hosts").get_base_https_url(url_data) - url = url .. "/tree/" .. url_data.file .. "?id=" .. url_data.rev - if url_data.lstart then - url = url .. "#n" .. url_data.lstart - end - return url - end, - }, - }, +}) + +require("neogit").setup({ + disable_commit_confirmation = true, + kind = "split", + console_timeout = 5000, + auto_show_console = false, +}) + +vim.keymap.set("n", "<leader>go", function() + require("neogit").open() +end, { desc = "neo[G]it [O]pen" }) + +require("gitlinker").setup({ + callbacks = { + ["git.sommerfeld.dev"] = function(url_data) + local url = require("gitlinker.hosts").get_base_https_url(url_data) + url = url .. "/tree/" .. url_data.file .. "?id=" .. url_data.rev + if url_data.lstart then + url = url .. "#n" .. url_data.lstart + end + return url + end, }, - { - "lewis6991/gitsigns.nvim", - event = "BufRead", - opts = { - signs = { - change = { show_count = true }, - delete = { show_count = true }, - topdelete = { show_count = true }, - changedelete = { show_count = true }, - }, - numhl = true, - on_attach = function(bufnr) - local gs = require("gitsigns") - local function map(mode, l, r, desc) - vim.keymap.set(mode, l, r, { buffer = bufnr, desc = desc }) - end - local function nmap(l, r, desc) - map("n", l, r, desc) - end - local function vmap(l, r, desc) - map("v", l, r, desc) - end - -- Navigation - nmap("]c", function() - if vim.wo.diff then - vim.cmd.normal({ "]c", bang = true }) - else - gs.nav_hunk("next") - end - end, "Jump to next git [c]hange") +}) - nmap("[c", function() - if vim.wo.diff then - vim.cmd.normal({ "[c", bang = true }) - else - gs.nav_hunk("prev") - end - end, "Jump to previous git [c]hange") +vim.keymap.set("n", "<leader>gy", function() + require("gitlinker").get_buf_range_url("n") +end) +vim.keymap.set("v", "<leader>gy", function() + require("gitlinker").get_buf_range_url("v") +end) - -- Actions - nmap("<leader>hs", gs.stage_hunk, "git [s]tage hunk") - nmap("<leader>hr", gs.reset_hunk, "git [r]eset hunk") - vmap("<leader>hs", function() - gs.stage_hunk({ vim.fn.line("."), vim.fn.line("v") }) - end, "git [s]tage hunk") - vmap("<leader>hr", function() - gs.reset_hunk({ vim.fn.line("."), vim.fn.line("v") }) - end, "git [r]eset hunk") - nmap("<leader>hS", gs.stage_buffer, "git [S]tage buffer") - nmap("<leader>hR", gs.reset_buffer, "git [R]eset buffer") - nmap("<leader>hp", gs.preview_hunk, "git [p]review hunk") - nmap("<leader>hb", function() - gs.blame_line({ full = true }) - end, "git [b]lame line") - nmap( - "<leader>tb", - gs.toggle_current_line_blame, - "[T]oggle git show [b]lame line" - ) - nmap("<leader>hd", gs.diffthis, "git [d]iff against index") - nmap("<leader>hD", function() - gs.diffthis("~") - end, "git [D]iff against last commit") - nmap("<leader>hc", gs.change_base, "git [C]hange base to index") - nmap("<leader>hC", function() - gs.change_base("~") - end, "git [C]hange base to HEAD") - nmap( - "<leader>tgd", - gs.preview_hunk_inline, - "[T]oggle [G]it show [D]eleted" - ) - nmap("<leader>tgw", gs.toggle_word_diff, "[T]oggle [G]it [W]ord diff") - nmap( - "<leader>tgl", - gs.toggle_linehl, - "[T]oggle [G]it [L]ine highlighting" - ) - -- Text object - map( - { "o", "x" }, - "ih", - ":<C-U>Gitsigns select_hunk<CR>", - "git [H]unk text object" - ) - end, - }, - dependencies = { - "nvim-lua/plenary.nvim", - }, +require("gitsigns").setup({ + signs = { + change = { show_count = true }, + delete = { show_count = true }, + topdelete = { show_count = true }, + changedelete = { show_count = true }, }, -} + numhl = true, + on_attach = function(bufnr) + local gs = require("gitsigns") + local function map(mode, l, r, desc) + vim.keymap.set(mode, l, r, { buffer = bufnr, desc = desc }) + end + local function nmap(l, r, desc) + map("n", l, r, desc) + end + local function vmap(l, r, desc) + map("v", l, r, desc) + end + -- Navigation + nmap("]c", function() + if vim.wo.diff then + vim.cmd.normal({ "]c", bang = true }) + else + gs.nav_hunk("next") + end + end, "Jump to next git [c]hange") + + nmap("[c", function() + if vim.wo.diff then + vim.cmd.normal({ "[c", bang = true }) + else + gs.nav_hunk("prev") + end + end, "Jump to previous git [c]hange") + + -- Actions + nmap("<leader>hs", gs.stage_hunk, "git [s]tage hunk") + nmap("<leader>hr", gs.reset_hunk, "git [r]eset hunk") + vmap("<leader>hs", function() + gs.stage_hunk({ vim.fn.line("."), vim.fn.line("v") }) + end, "git [s]tage hunk") + vmap("<leader>hr", function() + gs.reset_hunk({ vim.fn.line("."), vim.fn.line("v") }) + end, "git [r]eset hunk") + nmap("<leader>hS", gs.stage_buffer, "git [S]tage buffer") + nmap("<leader>hR", gs.reset_buffer, "git [R]eset buffer") + nmap("<leader>hp", gs.preview_hunk, "git [p]review hunk") + nmap("<leader>hb", function() + gs.blame_line({ full = true }) + end, "git [b]lame line") + nmap( + "<leader>tb", + gs.toggle_current_line_blame, + "[T]oggle git show [b]lame line" + ) + nmap("<leader>hd", gs.diffthis, "git [d]iff against index") + nmap("<leader>hD", function() + gs.diffthis("~") + end, "git [D]iff against last commit") + nmap("<leader>hc", gs.change_base, "git [C]hange base to index") + nmap("<leader>hC", function() + gs.change_base("~") + end, "git [C]hange base to HEAD") + nmap( + "<leader>tgd", + gs.preview_hunk_inline, + "[T]oggle [G]it show [D]eleted" + ) + nmap("<leader>tgw", gs.toggle_word_diff, "[T]oggle [G]it [W]ord diff") + nmap( + "<leader>tgl", + gs.toggle_linehl, + "[T]oggle [G]it [L]ine highlighting" + ) + -- Text object + map( + { "o", "x" }, + "ih", + ":<C-U>Gitsigns select_hunk<CR>", + "git [H]unk text object" + ) + end, +}) |
