Ver Fonte

nixpkgs/neovim: replace gitsigns with mini.diff

Thomas Dy há 1 semana atrás
pai
commit
2dfe4c8e52

+ 1 - 5
.config/nixpkgs/neovim/mappings.lua

@@ -37,10 +37,6 @@ vim.keymap.set('n', ']f', '<C-I>', opts)
 vim.keymap.set('n', '[x', '?^[<lt>=>]\\{7}<CR>', opts)
 vim.keymap.set('n', ']x', '/^[<lt>=>]\\{7}<CR>', opts)
 
--- hunk navigation
-vim.keymap.set('n', '[h', '<cmd>Gitsigns prev_hunk<CR>', opts)
-vim.keymap.set('n', ']h', '<cmd>Gitsigns next_hunk<CR>', opts)
-
 -- window navigation
 vim.keymap.set('n', '[w', '<C-w>W', opts)
 vim.keymap.set('n', ']w', '<C-w>w', opts)
@@ -56,7 +52,7 @@ vim.keymap.set('n', '<Leader>n', require('mini.notify').show_history, opts)
 -- https://github.com/tpope/vim-fugitive/issues/1296
 vim.keymap.set('n', '<Leader>gs', '<cmd>Gedit :<CR>', opts)
 vim.keymap.set('n', '<Leader>gb', '<cmd>Telescope git_branches<CR>', opts)
-vim.keymap.set('n', '<Leader>gd', '<cmd>Gitsigns toggle_deleted<CR>', opts)
+vim.keymap.set('n', '<Leader>gd', function() MiniDiff.toggle_overlay() end, opts)
 
 -- undotree
 vim.keymap.set('n', '<Leader>ut', '<cmd>UndotreeToggle<CR>', opts)

+ 57 - 13
.config/nixpkgs/neovim/plugins.lua

@@ -12,6 +12,32 @@ vim.filetype.add({
   },
 })
 
+-- helpers
+local function resolve_git_path(buf_id)
+  local bufname = vim.api.nvim_buf_get_name(buf_id)
+  if not vim.startswith(bufname, "fugitive://") then
+    return false
+  end
+
+  local parsed = vim.fn.FugitiveParse(bufname)
+  local resolved_path = parsed[1]
+  local repo = parsed[2]
+
+  if resolved_path == "" then
+    return false
+  end
+
+  local parts = vim.split(resolved_path, ':')
+  local commit = parts[1]
+  local path = parts[2]
+
+  return {
+    repo = repo,
+    commit = commit,
+    path = path,
+  }
+end
+
 -- file/buffer/etc picker
 local telescope_actions = require('telescope.actions')
 local action_state = require('telescope.actions.state')
@@ -133,25 +159,18 @@ end
 
 -- custom picker for files within a commit
 _G.commit_files = function(opts)
-  local current_path = vim.api.nvim_buf_get_name(0)
-  local parsed = vim.fn.FugitiveParse(current_path)
-  local resolved_path = parsed[1]
-  local repo = parsed[2]
-
-  if resolved_path == "" then
+  local resolved = resolve_git_path(0)
+  if not resolved then
     vim.print("current file is not a fugitive path")
     return
   end
 
-  local parts = vim.split(resolved_path, ':')
-  local commit = parts[1]
-
   opts = opts or {}
   telescope_pickers.new(opts, {
-    prompt_title = commit,
-    finder = telescope_finders.new_oneshot_job({ "git", "ls-tree", "--name-only", "-r", commit }, {
+    prompt_title = resolved.commit,
+    finder = telescope_finders.new_oneshot_job({ "git", "ls-tree", "--name-only", "-r", resolved.commit }, {
       entry_maker = function(entry)
-        local path = string.format("fugitive://%s//%s/%s", repo, commit, entry)
+        local path = string.format("fugitive://%s//%s/%s", resolved.repo, resolved.commit, entry)
         return {
           path = path,
           value = entry,
@@ -186,7 +205,32 @@ _G.commit_files = function(opts)
 end
 
 -- shows added/removed/changed lines
-require('gitsigns').setup()
+local MiniDiff = require('mini.diff')
+MiniDiff.setup({
+  view = {
+    style = 'sign',
+    signs = {
+      delete = '_',
+    },
+  },
+  source = {
+    MiniDiff.gen_source.git(),
+    -- handle fugitive paths
+    {
+      name = "fugitive",
+      attach = function(buf_id)
+        local resolved = resolve_git_path(buf_id)
+        if not resolved or resolved.path == "" then
+          return false
+        end
+
+        local source = vim.fn.FugitiveFind(string.format("%s~1:%s", resolved.commit, resolved.path))
+        local text = vim.fn['fugitive#readfile'](source)
+        MiniDiff.set_ref_text(buf_id, text)
+      end
+    }
+  }
+})
 
 require('mini.statusline').setup({
   content = {

+ 0 - 4
.config/nixpkgs/neovim/plugins/sources.json

@@ -39,10 +39,6 @@
     "rev": "14ce72476995255fc5cb919da8067f65865e1225",
     "sha256": "1g0bqsgidbn4nm0wdnax6hnlvkmdq7df9lw95ng03w6rgwyz3fdr"
   },
-  "lewis6991/gitsigns.nvim": {
-    "rev": "8b729e489f1475615dc6c9737da917b3bc163605",
-    "sha256": "06ag4vksr64l8yffrsahl86x45c1klyyfzw7b0fzzncp918drrmi"
-  },
   "neovim/nvim-lspconfig": {
     "rev": "562487bc108bf73c2493f9e701b9334b48163216",
     "sha256": "0v13snamlh42icj5yv6bbq52h5npbimyqfyckhzg5pwyyr2whyk2"