From 724dabb7be543a3f87a00d5543f7675000b57fe1 Mon Sep 17 00:00:00 2001
From: pr0c3550r <pr0c550r@pr0c3550r.de>
Date: Sat, 25 Feb 2023 17:07:16 +0100
Subject: [PATCH] added Gitsigns functionality

---
 nvim/.config/nvim/lua/plugin/gitsigns.lua | 51 +++++++++++++++++++++++
 1 file changed, 51 insertions(+)
 create mode 100644 nvim/.config/nvim/lua/plugin/gitsigns.lua

diff --git a/nvim/.config/nvim/lua/plugin/gitsigns.lua b/nvim/.config/nvim/lua/plugin/gitsigns.lua
new file mode 100644
index 0000000..87f5426
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugin/gitsigns.lua
@@ -0,0 +1,51 @@
+return {
+    {
+        'lewis6991/gitsigns.nvim',
+        event = "VeryLazy",
+        config = function ()
+            require('gitsigns').setup({
+                preview_config = {
+                    border = 'rounded',
+                },
+                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', ']c', function()
+                        if vim.wo.diff then return ']c' end
+                        vim.schedule(function() gs.next_hunk() end)
+                        return '<Ignore>'
+                    end, {expr=true})
+
+                    map('n', '[c', function()
+                        if vim.wo.diff then return '[c' end
+                        vim.schedule(function() gs.prev_hunk() end)
+                        return '<Ignore>'
+                    end, {expr=true})
+
+                    -- Actions
+                    map({'n', 'v'}, '<leader>hs', ':Gitsigns stage_hunk<CR>')
+                    map({'n', 'v'}, '<leader>hr', ':Gitsigns reset_hunk<CR>')
+                    map('n', '<leader>hS', gs.stage_buffer)
+                    map('n', '<leader>hu', gs.undo_stage_hunk)
+                    map('n', '<leader>hR', gs.reset_buffer)
+                    map('n', '<leader>hp', gs.preview_hunk)
+                    map('n', '<leader>hb', function() gs.blame_line{full=true} end)
+                    map('n', '<leader>tb', gs.toggle_current_line_blame)
+                    map('n', '<leader>hd', gs.diffthis)
+                    map('n', '<leader>hD', function() gs.diffthis('~') end)
+                    map('n', '<leader>td', gs.toggle_deleted)
+
+                    -- Text object
+                    map({'o', 'x'}, 'ih', ':<C-U>Gitsigns select_hunk<CR>')
+                end
+            })
+        end,
+    }
+}