summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Mora Unie Youer <[email protected]>2025-03-29 16:47:56 +0300
committerLibravatar Mora Unie Youer <[email protected]>2025-03-29 16:47:56 +0300
commitd1e7d5687c112d73a7d04e6a94744b80583a4399 (patch)
tree6a920547fbbfc9b37212700e36c11b483a94f102
parentfeat: add `mini-diff` (diff)
downloadneovim-configuration-d1e7d5687c112d73a7d04e6a94744b80583a4399.tar.gz
neovim-configuration-d1e7d5687c112d73a7d04e6a94744b80583a4399.tar.bz2
neovim-configuration-d1e7d5687c112d73a7d04e6a94744b80583a4399.tar.lz
neovim-configuration-d1e7d5687c112d73a7d04e6a94744b80583a4399.tar.xz
neovim-configuration-d1e7d5687c112d73a7d04e6a94744b80583a4399.tar.zst
neovim-configuration-d1e7d5687c112d73a7d04e6a94744b80583a4399.zip
feat: use `gitsigns.nvim` instead of `mini.diff`
Diffstat (limited to '')
-rw-r--r--flake.nix2
-rw-r--r--lua/config/plugins/git.lua50
-rw-r--r--lua/config/plugins/mini.lua11
3 files changed, 58 insertions, 5 deletions
diff --git a/flake.nix b/flake.nix
index 2ddc528..1698895 100644
--- a/flake.nix
+++ b/flake.nix
@@ -147,6 +147,8 @@
mini = [ mini-ai mini-align mini-diff mini-move mini-pairs mini-surround ];
+ git = [ gitsigns-nvim ];
+
ui = [
noice-nvim
todo-comments-nvim
diff --git a/lua/config/plugins/git.lua b/lua/config/plugins/git.lua
new file mode 100644
index 0000000..027aa83
--- /dev/null
+++ b/lua/config/plugins/git.lua
@@ -0,0 +1,50 @@
+return {
+ {
+ -- NOTE: we could use mini.diff, but it doesn't show staged hunks
+ "gitsigns.nvim",
+ event = "DeferredUIEnter",
+ after = function(_)
+ local gs = require("gitsigns")
+
+ gs.setup({
+ on_attach = function(bufnr)
+
+ local function map(mode, l, r, desc, opts)
+ opts = opts or {}
+ opts.desc = desc
+ opts.buffer = bufnr
+ vim.keymap.set(mode, l, r, opts)
+ end
+
+ 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()
+ if vim.wo.diff then
+ vim.cmd.normal({"]c", bang = true})
+ else
+ gs.nav_hunk("next")
+ end
+ end, "Next hunk")
+
+ map("n", "]H", function() gs.nav_hunk("first") end, "First hunk")
+ map("n", "]H", function() gs.nav_hunk("last") end, "Last hunk")
+
+ map("n", "<leader>ghs", gs.stage_hunk, "Stage hunk")
+ map("n", "<leader>ghr", gs.reset_hunk, "Reset hunk")
+ map("n", "<leader>ghS", gs.stage_buffer, "Stage buffer")
+ map("n", "<leader>ghR", gs.reset_buffer, "Reset buffer")
+ map("n", "<leader>ghu", gs.undo_stage_hunk, "Undo stage hunk")
+
+ -- NOTE: if using <Cmd> here, we don't get full hunk in selection
+ map({ "o", "x" }, "ih", ":<C-U>Gitsigns select_hunk<CR>", "Hunk")
+ end
+ })
+ end
+ }
+}
diff --git a/lua/config/plugins/mini.lua b/lua/config/plugins/mini.lua
index e842fa3..65e3f6e 100644
--- a/lua/config/plugins/mini.lua
+++ b/lua/config/plugins/mini.lua
@@ -15,17 +15,18 @@ return {
},
{
"mini.diff",
+ enabled = false, -- NOTE: using gitsigns.nvim due to more features
event = "DeferredUIEnter",
keys = {
- { "<leader>ht", function() require("mini.diff").toggle() end, mode = { "n" }, desc = "Toggle hunk processing" },
- { "<leader>ho", function() require("mini.diff").toggle_overlay() end, mode = { "n" }, desc = "Toggle hunk overlay" },
+ { "<leader>ght", function() require("mini.diff").toggle() end, mode = { "n" }, desc = "Toggle hunk processing" },
+ { "<leader>gho", function() require("mini.diff").toggle_overlay() end, mode = { "n" }, desc = "Toggle hunk overlay" },
},
after = function (_)
require("mini.diff").setup({
mappings = {
- apply = "<leader>ha",
- reset = "<leader>hr",
- textobject = "<leader>ha",
+ apply = "<leader>ghs",
+ reset = "<leader>ghr",
+ textobject = "<leader>ghs",
goto_first = "[H",
goto_prev = "[h",
goto_next = "]h",