git

use git in neovim

  • use lazygit in a float terminal by snack`
  • gitsigns for hightlight hunks etc
  • Tardis travel in git commit history
  • diffview show diffs through commit history
return {
  { -- "lewis6991/gitsigns.nvim",
    "lewis6991/gitsigns.nvim",
    -- enabled = false,
    -- event = { "BufReadPost", "BufNewFile" },
    keys = {
      -- { "<leader>hj", "<cmd>Gitsigns next_hunk<cr>",                                  desc = "nexthunk" },
      -- { "<leader>hk", "<cmd>Gitsigns prev_hunk<cr>",                                  desc = "prevhunk" },
      { "]h", "<cmd>Gitsigns next_hunk<cr>", desc = "nexthunk" },
      { "[h", "<cmd>Gitsigns prev_hunk<cr>", desc = "prevhunk" },
      { "<leader>hD", "<cmd>Gitsigns diffthis<cr>", desc = "gitdiff" },
      { "<leader>hd", "<cmd>Gitsigns toggle_deleted<cr>", desc = "toggle deleted" },
      { "<leader>hu", "<cmd>Gitsigns reset_hunk<cr>", desc = "undohunk" },
      { "<leader>ha", "<cmd>Gitsigns stage_hunk<cr>", desc = "stage hunk" },
      { "<leader>hA", "<cmd>Gitsigns undo_stage_hunk<cr>", desc = "undo stage hunk" },
      {
        "<leader>hh",
        "<cmd>Gitsigns toggle_numhl<cr><cmd>Gitsigns toggle_signs<cr>",
        desc = "toggle gitgutter sign ",
      },
      -- { "<leader>hh", "<cmd>Gitsigns toggle_numhl<cr><cmd>Gitsigns toggle_signs<cr>", desc = "toggle gitgutter sign ", },
      { "<leader>hl", "<cmd>Gitsigns toggle_linehl<cr>", desc = "toggle gitgutter line " },
      { "<leader>hP", "<cmd>Gitsigns preview_hunk<cr>", desc = "preview a hunk" },
      -- { "<leader>hp", "<cmd>Gitsigns preview_hunk_inline<cr>",       desc = "preview a hunk" },
      -- { "<leader>hb", "<cmd>Gitsigns toggle_current_line_blame<cr>",                  desc = "toggle blame inline" },
      { "<leader>gb", "<cmd>Gitsigns blame<cr>", desc = "toggle blame inline" },
      { "<leader>hw", "<cmd>Gitsigns toggle_word_diff<cr>", desc = "toggle word diff" },
      -- { "<leader>hh" , "<cmd>Gitsigns get_hunks<cr>"    , desc = "get hunk list" } ,
    },
    -- dependencies = { "akinsho/git-conflict.nvim" },
    config = function()
      require("gitsigns").setup({
        signcolumn = false, -- toggle with `:gitsigns toggle_signs`
        numhl = false, -- toggle with `:gitsigns toggle_numhl`
        linehl = false, -- toggle with `:gitsigns toggle_linehl`
        word_diff = false, -- toggle with `:gitsigns toggle_word_diff`
        watch_gitdir = {
          interval = 1000,
          follow_files = true,
        },
        attach_to_untracked = true,
        current_line_blame = false, -- toggle with `:gitsigns toggle_current_line_blame`
        current_line_blame_opts = {
          virt_text = true,
          virt_text_pos = "overlay", -- 'eol' | 'overlay' | 'right_align'
          delay = 200,
          ignore_whitespace = true,
        },
        current_line_blame_formatter = "<summary>, <author_time:%y-%m-%d>",
      })
      -- require("scrollbar.handlers.gitsigns").setup()
    end,
  },
  { -- "sindrets/diffview.nvim",
    "sindrets/diffview.nvim",
    keys = {
      { "<leader>DD", "<cmd>DiffviewOpen<cr>", desc = "Diff View" },
      { "<leader>DH", "<cmd>DiffviewFileHistory<cr>", desc = "Diff View File History" },
      { "<leader>DC", "<cmd>DiffviewClose<cr>", desc = "Diff close" },
    },
    cmd = { "DiffviewOpen", "DiffviewFileHistory" },
    config = function()
      local actions = require("diffview.actions")
      require("diffview").setup({
        hooks = {}, -- See ':h diffview-config-hooks'
        keymaps = {
          file_panel = {
            { "n", "<c-u>", actions.scroll_view(-0.25), { desc = "Scroll the view up" } },
            { "n", "<c-d>", actions.scroll_view(0.25), { desc = "Scroll the view down" } },
          },
          file_history_panel = {
            { "n", "<c-u>", actions.scroll_view(-0.25), { desc = "Scroll the view up" } },
            { "n", "<c-d>", actions.scroll_view(0.25), { desc = "Scroll the view down" } },
            { "n", "g?", actions.help("file_history_panel"), { desc = "Open the help panel" } },
          },
          option_panel = {
            { "n", "<tab>", actions.select_entry, { desc = "Change the current option" } },
            { "n", "q", actions.close, { desc = "Close the panel" } },
            { "n", "g?", actions.help("option_panel"), { desc = "Open the help panel" } },
          },
          help_panel = {
            { "n", "q", actions.close, { desc = "Close help menu" } },
            { "n", "<esc>", actions.close, { desc = "Close help menu" } },
          },
        },
      })
    end,
  },
  { -- "fredeeb/tardis.nvim",
    "fredeeb/tardis.nvim",
    cmd = "Tardis",
    dependencies = { "nvim-lua/plenary.nvim" },
    config = true,
  },
}