From d00bf2cb2d5087164fa509a4f20a2be62a519044 Mon Sep 17 00:00:00 2001 From: sommerfeld Date: Tue, 21 Apr 2026 01:23:18 +0100 Subject: refactor: restructure to chezmoi source state Rename home/ contents to chezmoi naming conventions: - dot_ prefix for dotfiles and dot-dirs - private_dot_ for .gnupg and .ssh directories - private_ for 0600 files (nym.pub) - executable_ for scripts in .local/bin and display-toggle.sh - symlink_ for mimeapps.list symlink --- dot_config/nvim/lua/plugins/git.lua | 123 ++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 dot_config/nvim/lua/plugins/git.lua (limited to 'dot_config/nvim/lua/plugins/git.lua') diff --git a/dot_config/nvim/lua/plugins/git.lua b/dot_config/nvim/lua/plugins/git.lua new file mode 100644 index 0000000..b052c33 --- /dev/null +++ b/dot_config/nvim/lua/plugins/git.lua @@ -0,0 +1,123 @@ +require("git-conflict").setup({ + disable_diagnostics = true, + default_mappings = { + next = "]x", + prev = "[x", + }, +}) + +require("neogit").setup({ + disable_commit_confirmation = true, + kind = "split", + console_timeout = 5000, + auto_show_console = false, +}) + +vim.keymap.set("n", "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, + }, +}) + +vim.keymap.set("n", "gy", function() + require("gitlinker").get_buf_range_url("n") +end) +vim.keymap.set("v", "gy", function() + require("gitlinker").get_buf_range_url("v") +end) + +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("hs", gs.stage_hunk, "git [s]tage hunk") + nmap("hr", gs.reset_hunk, "git [r]eset hunk") + vmap("hs", function() + gs.stage_hunk({ vim.fn.line("."), vim.fn.line("v") }) + end, "git [s]tage hunk") + vmap("hr", function() + gs.reset_hunk({ vim.fn.line("."), vim.fn.line("v") }) + end, "git [r]eset hunk") + nmap("hS", gs.stage_buffer, "git [S]tage buffer") + nmap("hR", gs.reset_buffer, "git [R]eset buffer") + nmap("hp", gs.preview_hunk, "git [p]review hunk") + nmap("hb", function() + gs.blame_line({ full = true }) + end, "git [b]lame line") + nmap( + "tb", + gs.toggle_current_line_blame, + "[T]oggle git show [b]lame line" + ) + nmap("hd", gs.diffthis, "git [d]iff against index") + nmap("hD", function() + gs.diffthis("~") + end, "git [D]iff against last commit") + nmap("hc", gs.change_base, "git [C]hange base to index") + nmap("hC", function() + gs.change_base("~") + end, "git [C]hange base to HEAD") + nmap( + "tgd", + gs.preview_hunk_inline, + "[T]oggle [G]it show [D]eleted" + ) + nmap("tgw", gs.toggle_word_diff, "[T]oggle [G]it [W]ord diff") + nmap( + "tgl", + gs.toggle_linehl, + "[T]oggle [G]it [L]ine highlighting" + ) + -- Text object + map( + { "o", "x" }, + "ih", + ":Gitsigns select_hunk", + "git [H]unk text object" + ) + end, +}) -- cgit v1.2.3-70-g09d2