From 112312bbc57e334b6c79c20ef8f7ac2fbf973d5b Mon Sep 17 00:00:00 2001 From: Frank Zechert Date: Sun, 7 Jun 2026 22:29:45 +0200 Subject: [PATCH] add gitsigns plugins --- lua/config/ui.lua | 20 ++++++- lua/plugins/gitsigns.lua | 107 ++++++++++++++++++++++++++++++++++++++ lua/plugins/lualine.lua | 2 +- lua/plugins/telescope.lua | 2 +- lua/plugins/whichkey.lua | 2 + packages.txt | 1 + 6 files changed, 131 insertions(+), 3 deletions(-) create mode 100644 lua/plugins/gitsigns.lua diff --git a/lua/config/ui.lua b/lua/config/ui.lua index af01acd..7c532f5 100644 --- a/lua/config/ui.lua +++ b/lua/config/ui.lua @@ -63,6 +63,24 @@ vim.g.ui = { symbols = { component_separators = { left = "│", right = "│" }, section_separators = { left = "▒", right = "▒" }, - window = "" + window = "", + git = { + 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 = "~" }, + untracked = { text = "┆" }, + }, + }, } } diff --git a/lua/plugins/gitsigns.lua b/lua/plugins/gitsigns.lua new file mode 100644 index 0000000..59de371 --- /dev/null +++ b/lua/plugins/gitsigns.lua @@ -0,0 +1,107 @@ +--[[ + + +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣴⣾⣷⣦⣄⡀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣄⡀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣄⡀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠚⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠗⢀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣄⡉⠓⠦⣌⡙⠻⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⢋⣡⠴⠚⢉⣠⣤⣀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣤⣶⣿⣿⣿⣿⣿⣷⣦⣄⡉⠓⠦⣌⡙⠻⢿⣿⣿⣿⣿⣿⣿⡿⠟⢋⣡⠴⠚⢉⣠⣴⣾⣿⣿⣿⣿⣿⣶⣤ +⠀⠀⠀⠀⠀⠀⠀⠀⠐⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣄⡉⠓⠦⣌⡙⠻⠟⢋⣡⠴⠚⢉⣠⣴⣾⣿⣿⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⠂ +⠀⠀⠀⠀⢀⣠⣴⣆⡈⠻⢿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣄⡉⠃⠘⢉⣠⣴⣾⣿⣿⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⡿⠟⢁⣰⣦⣄⡀ +⠀⠀⠐⠾⣿⣿⣿⣿⣿⣷⣦⣌⡙⠻⢿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣿⣿⣷⣾⣿⣿⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⡿⠟⢋⣡⣴⣾⣿⣿⣿⣿⣿⠷⠂ +⠀⢸⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣌⡙⠻⢿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⡿⠟⢋⣡⣴⣾⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⡇ +⠀⢸⣿⣿⣿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣌⡙⠻⢿⣿⣷⣦⣄⡉⠛⠿⠿⠛⢉⣠⣴⣾⣿⡿⠟⢋⣡⣴⣾⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⣿⣿⣿⡇ +⠀⠀⠉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣌⡙⠻⢿⣿⣷⡆⢰⣾⣿⡿⠟⢋⣡⣴⣾⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⣿⣿⣿⣿⠿⠛⠉ +⠀⠀⠀⠀⠀⠀⠉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣌⡙⠃⠘⢋⣡⣴⣾⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⣿⣿⣿⣿⠿⠛⠉ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣷⣾⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⣿⣿⣿⣿⠿⠛⠉ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⣿⣿⣿⣿⠿⠛⠉ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣄⡉⢉⣠⣴⣾⣿⣿⣿⣿⣿⠿⠛⠉ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⣿⣿⣿⣿⡇⢸⣿⣿⣿⣿⠿⠛⠉ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⡇⢸⠿⠛⠉ + + __ _ _ + / _|___ ___| |_ __ _ ___| | __ + | ||_ /____/ __| __/ _` |/ __| |/ / + | _/ /_____\__ \ || (_| | (__| < + |_|/___| |___/\__\__,_|\___|_|\_\ + + Neovim 0.12 configuration + (c) Frank Zechert 2026 +]] + +return { + { + "lewis6991/gitsigns.nvim", + opts = { + signs = vim.g.ui.symbols.git.signs, + signs_staged = vim.g.ui.symbols.git.signs_staged, + signs_staged_enable = true, + signcolumn = true, + numhl = false, + linehl = false, + word_diff = false, + attach_to_untracked = true, + current_line_blame = false, + current_line_blame_opts = { + virt_text = true, + virt_text_pos = 'eol', + delay = 1000, + ignore_whitespace = false, + virt_text_priority = 100, + use_focus = true, + }, + current_line_blame_formatter = ', - ', + blame_formatter = nil, + sign_priority = 6, + on_attach = function(bufnr) + local gitsigns = require("gitsigns") + + vim.keymap.set("n", "]c", function() + if vim.wo.diff then + vim.cmd.normal({ "]c", bang = true }) + else + gitsigns.nav_hunk("next") + end + end, { buffer = bufnr, desc = "Jump to Next Hunk" }) + vim.keymap.set("n", "[c", function() + if vim.wo.diff then + vim.cmd.normal({ "[c", bang = true }) + else + gitsigns.nav_hunk("prev") + end + end, { buffer = bufnr, desc = "Jump to Previous Hunk" }) + vim.keymap.set("n", "hs", gitsigns.stage_hunk, { buffer = bufnr, desc = "Stage Hunk" }) + vim.keymap.set("n", "hr", gitsigns.reset_hunk, { buffer = bufnr, desc = "Reset Hunk" }) + vim.keymap.set("v", "hs", function() + gitsigns.stage_hunk({vim .fn.line("."), vim.fn.line("v")}) + end, { buffer = bufnr, desc = "Stage Hunk" }) + vim.keymap.set("v", "hr", function() + gitsigns.stage_reset({vim .fn.line("."), vim.fn.line("v")}) + end, { buffer = bufnr, desc = "Reset Hunk" }) + vim.keymap.set("n", "hS", gitsigns.stage_buffer, { buffer = bufnr, desc = "Stage Buffer" }) + vim.keymap.set("n", "hR", gitsigns.stage_buffer, { buffer = bufnr, desc = "Reset Buffer" }) + vim.keymap.set("n", "hp", gitsigns.preview_hunk, { buffer = bufnr, desc = "Preview Hunk" }) + vim.keymap.set("n", "hi", gitsigns.preview_hunk_inline, { buffer = bufnr, desc = "Preview Hunk Inline" }) + vim.keymap.set("n", "hb", function() + gitsigns.blame_line({ full = true }) + end, { buffer = bufnr, desc = "Blame Line" }) + vim.keymap.set("n", "htb", gitsigns.toggle_current_line_blame, { buffer = bufnr, desc = "Toggle Blame Line" }) + vim.keymap.set("n", "hB", function() + require("gitsigns").blame() + end, { buffer = bufnr, desc = "Blame Split Window" }) + vim.keymap.set("n", "hd", gitsigns.diffthis, { buffer = bufnr, desc = "Diff This Against INDEX" }) + vim.keymap.set("n", "hD", function() + gitsigns.diffthis("~") + end, { buffer = bufnr, desc = "Diff This Against HEAD" }) + vim.keymap.set("n", "hq", gitsigns.setqflist, { buffer = bufnr, desc = "Buffer Git Hunks QFList" }) + vim.keymap.set("n", "hQ", function() + gitsigns.setqflist("all") + end, { buffer = bufnr, desc = "Project Git Hunks QFList" }) + vim.keymap.set("n", "htw", gitsigns.toggle_word_diff, { buffer = bufnr, desc = "Toggle Word Diff" }) + vim.keymap.set({"o", "x"}, "ih", gitsigns.select_hunk, { desc = "Select Hunk" }) + end + } + } +} + diff --git a/lua/plugins/lualine.lua b/lua/plugins/lualine.lua index 79d8052..f163573 100644 --- a/lua/plugins/lualine.lua +++ b/lua/plugins/lualine.lua @@ -48,7 +48,7 @@ end local function treesitter_status() local ok, parser = pcall(vim.treesitter.get_parser, 0) if not ok or not parser then - return "" + return "T̅" else return "T" end diff --git a/lua/plugins/telescope.lua b/lua/plugins/telescope.lua index 9a60c4e..dfe548f 100644 --- a/lua/plugins/telescope.lua +++ b/lua/plugins/telescope.lua @@ -125,7 +125,7 @@ return { live_grep_in_project({grep_open_files = true, prompt_title = "Live Grep in Open Files"}) end, { desc = "Live Grep in Open Files" }) vim.keymap.set({"n", "v"}, "fw", builtin.grep_string, { desc = "Find Word" }) - vim.keymap.set("n", "fb", builtin.buffers, { desc = "Find Buffers" }) + vim.keymap.set("n", "", builtin.buffers, { desc = "Find Buffers" }) vim.keymap.set("n", "fr", builtin.oldfiles, { desc = "Find Recent Files" }) vim.keymap.set("n", "fh", builtin.help_tags, { desc = "Find Help" }) vim.keymap.set("n", "fq", builtin.quickfix, { desc = "Quickfix" }) diff --git a/lua/plugins/whichkey.lua b/lua/plugins/whichkey.lua index 821ef02..20e22bb 100644 --- a/lua/plugins/whichkey.lua +++ b/lua/plugins/whichkey.lua @@ -43,6 +43,8 @@ return { { "b", group = "Buffers" }, { "f", group = "Find (Telescope)" }, { "fg", group = "Git (Telescope)" }, + { "h", group = "Git Hunks" }, + { "ht", group = "Toggle" }, }, }, keys = { diff --git a/packages.txt b/packages.txt index 813921a..28d9274 100644 --- a/packages.txt +++ b/packages.txt @@ -3,3 +3,4 @@ tree-sitter-cli fzf ripgrep fd +wl-clipboard