From d794974e0cbf9910a64f8203ae2a10f5388fb782 Mon Sep 17 00:00:00 2001 From: ulic-youthlic Date: Sun, 13 Jul 2025 06:04:55 +0800 Subject: [PATCH] pkg(nixvim): Add gitsigns plugin --- pkgs/nixvim/editor.nix | 3 - pkgs/nixvim/editor/gitsigns.nix | 97 +++++++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+), 3 deletions(-) create mode 100644 pkgs/nixvim/editor/gitsigns.nix diff --git a/pkgs/nixvim/editor.nix b/pkgs/nixvim/editor.nix index 2f99757..cbbe016 100644 --- a/pkgs/nixvim/editor.nix +++ b/pkgs/nixvim/editor.nix @@ -6,9 +6,6 @@ # flash = { # enable = true; # }; - # gitsigns = { - # enable = true; - # }; # trouble = { # enable = true; # }; diff --git a/pkgs/nixvim/editor/gitsigns.nix b/pkgs/nixvim/editor/gitsigns.nix new file mode 100644 index 0000000..d4eb3c6 --- /dev/null +++ b/pkgs/nixvim/editor/gitsigns.nix @@ -0,0 +1,97 @@ +{...}: { + youthlic.plugins.gitsigns = { + enable = true; + luaConfig.post = + #lua + '' + _M.on_load("snacks", function() + vim.schedule(function() + Snacks.toggle({ + name = "Git Signs", + get = function() + return require("gitsigns.config").config.signcolumn + end, + set = function(state) + require("gitsigns").toggle_signs(state) + end, + }):map("uG") + end) + end) + ''; + settings = { + current_line_blame = true; + signcolumn = true; + numhl = true; + linehl = false; + 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 = "┃";}; + }; + on_attach = { + __raw = + #lua + '' + function(buffer) + local gs = package.loaded.gitsigns + + local map = function(mode, l, r, desc) + vim.keymap.set(mode, l, r, { + buffer = buffer, + desc = desc, + }) + end + + map("n", "]h", function() + if vim.wo.diff then + vim.cmd.normal({ "]c", bang = true }) + else + gs.nav_hunk("next") + end + end, "Next Hunk") + map("n", "[h", function() + if vim.wo.diff then + vim.cmd.normal({ "[c", bang = true }) + else + gs.nav_hunk("prev") + end + end, "Prev Hunk") + map("n", "]H", function() + gs.nav_hunk("last") + end, "Last Hunk") + map("n", "[H", function() + gs.nav_hunk("first") + end, "First Hunk") + map({ "n", "v" }, "ghs", ":Gitsigns stage_hunk", "Stage Hunk") + map({ "n", "v" }, "ghr", ":Gitsigns reset_hunk", "Reset Hunk") + map("n", "ghS", gs.stage_buffer, "Stage Buffer") + map("n", "ghu", gs.undo_stage_hunk, "Undo Stage Hunk") + map("n", "ghR", gs.reset_buffer, "Reset Buffer") + map("n", "ghp", gs.preview_hunk_inline, "Preview Hunk Inline") + map("n", "ghb", function() + gs.blame_line({ full = true }) + end, "Blame Line") + map("n", "ghB", function() + gs.blame() + end, "Blame Buffer") + map("n", "ghd", gs.diffthis, "Diff This") + map("n", "ghD", function() + gs.diffthis("~") + end, "Diff This ~") + map({ "o", "x" }, "ih", ":Gitsigns select_hunk", "GitSigns Select Hunk") + end + ''; + }; + }; + }; +}