summaryrefslogtreecommitdiff
path: root/dot-config/nvim/plugin
diff options
context:
space:
mode:
Diffstat (limited to 'dot-config/nvim/plugin')
-rw-r--r--dot-config/nvim/plugin/gitsigns.lua65
1 files changed, 65 insertions, 0 deletions
diff --git a/dot-config/nvim/plugin/gitsigns.lua b/dot-config/nvim/plugin/gitsigns.lua
new file mode 100644
index 0000000..5e5646f
--- /dev/null
+++ b/dot-config/nvim/plugin/gitsigns.lua
@@ -0,0 +1,65 @@
+vim.pack.add({
+ "https://github.com/lewis6991/gitsigns.nvim",
+})
+
+require("gitsigns").setup({
+ -- signs copied from LazyVim
+ 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 = "▎" },
+ },
+})
+
+local gitsigns = require("gitsigns")
+
+-- Suggested keymap
+-- see https://github.com/lewis6991/gitsigns.nvim?tab=readme-ov-file#-keymaps
+
+vim.keymap.set("n", "<leader>hs", gitsigns.stage_hunk)
+vim.keymap.set("n", "<leader>hr", gitsigns.reset_hunk)
+
+vim.keymap.set("v", "<leader>hs", function()
+ gitsigns.stage_hunk({ vim.fn.line("."), vim.fn.line("v") })
+end)
+
+vim.keymap.set("v", "<leader>hr", function()
+ gitsigns.reset_hunk({ vim.fn.line("."), vim.fn.line("v") })
+end)
+
+vim.keymap.set("n", "<leader>hS", gitsigns.stage_buffer)
+vim.keymap.set("n", "<leader>hR", gitsigns.reset_buffer)
+vim.keymap.set("n", "<leader>hp", gitsigns.preview_hunk)
+vim.keymap.set("n", "<leader>hi", gitsigns.preview_hunk_inline)
+
+vim.keymap.set("n", "<leader>hb", function()
+ gitsigns.blame_line({ full = true })
+end)
+
+vim.keymap.set("n", "<leader>hd", gitsigns.diffthis)
+
+vim.keymap.set("n", "<leader>hD", function()
+ gitsigns.diffthis("~")
+end)
+
+vim.keymap.set("n", "<leader>hQ", function()
+ gitsigns.setqflist("all")
+end)
+vim.keymap.set("n", "<leader>hq", gitsigns.setqflist)
+
+-- Toggles
+vim.keymap.set("n", "<leader>tb", gitsigns.toggle_current_line_blame)
+vim.keymap.set("n", "<leader>tw", gitsigns.toggle_word_diff)
+
+-- Text object
+vim.keymap.set({ "o", "x" }, "ih", gitsigns.select_hunk)