From 972e5f9c68cc433c5fc26adf92cd25b293a3776a Mon Sep 17 00:00:00 2001 From: brustybee Date: Mon, 9 Mar 2026 17:02:03 +0530 Subject: One shot upload --- lua/plugins/git.lua | 98 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 lua/plugins/git.lua (limited to 'lua/plugins/git.lua') diff --git a/lua/plugins/git.lua b/lua/plugins/git.lua new file mode 100644 index 0000000..0e333f8 --- /dev/null +++ b/lua/plugins/git.lua @@ -0,0 +1,98 @@ +return { + { + "neogit", + for_cat = "core.git", + keys = { { "gg", "Neogit", desc = "Open Neogit Ui" } }, + cmd = { "Neogit" }, + after = function() + require("neogit").setup({ + disable_hint = true, + kind = "split_above", + + commit_editor = { + kind = "tab", + show_staged_diff = true, + staged_diff_split_kind = "auto", + spell_check = true, + }, + }) + end, + }, + { + "gitsigns.nvim", + event = { "DeferredUIEnter" }, + for_cat = "core.git", + after = function(_) + require("gitsigns").setup({ + signs = { + add = { text = "+" }, + change = { text = "~" }, + delete = { text = "_" }, + topdelete = { text = "‾" }, + changedelete = { text = "~" }, + }, + + on_attach = function(bufnr) + local gs = package.loaded.gitsigns + + local function map(mode, l, r, opts) + opts = opts or {} + opts.buffer = bufnr + vim.keymap.set(mode, l, r, opts) + end + + -- Navigation + map({ "n", "v" }, "]c", function() + if vim.wo.diff then + return "]c" + end + vim.schedule(function() + gs.next_hunk() + end) + return "" + end, { expr = true, desc = "Jump to next hunk" }) + + map({ "n", "v" }, "[c", function() + if vim.wo.diff then + return "[c" + end + vim.schedule(function() + gs.prev_hunk() + end) + return "" + end, { expr = true, desc = "Jump to previous hunk" }) + + -- Actions + -- visual mode + map("v", "hs", function() + gs.stage_hunk({ vim.fn.line("."), vim.fn.line("v") }) + end, { desc = "stage git hunk" }) + map("v", "hr", function() + gs.reset_hunk({ vim.fn.line("."), vim.fn.line("v") }) + end, { desc = "reset git hunk" }) + -- normal mode + map("n", "gs", gs.stage_hunk, { desc = "git stage hunk" }) + map("n", "gr", gs.reset_hunk, { desc = "git reset hunk" }) + map("n", "gS", gs.stage_buffer, { desc = "git Stage buffer" }) + map("n", "gu", gs.undo_stage_hunk, { desc = "undo stage hunk" }) + map("n", "gR", gs.reset_buffer, { desc = "git Reset buffer" }) + map("n", "gp", gs.preview_hunk, { desc = "preview git hunk" }) + map("n", "gb", function() + gs.blame_line({ full = false }) + end, { desc = "git blame line" }) + -- map('n', 'gd', gs.diffthis, { desc = 'git diff against index' }) + map("n", "gD", function() + gs.diffthis("~") + end, { desc = "git diff against last commit" }) + + -- Toggles + map("n", "gtb", gs.toggle_current_line_blame, { desc = "toggle git blame line" }) + map("n", "gtd", gs.toggle_deleted, { desc = "toggle git show deleted" }) + + -- Text object + map({ "o", "x" }, "ih", ":Gitsigns select_hunk", { desc = "select git hunk" }) + end, + }) + end, + }, +} -- cgit v1.3.1