return {
  -- git commands
  {
    'tpope/vim-fugitive',
    config = function ()
      local keymap = require("utils")

      keymap.nnoremap("<leader>G", ":G<CR>")
      keymap.nnoremap("<leader>gl", ":Gclog<CR>")
    end
  },

  -- Pretty quickfix
  {
    "folke/trouble.nvim",
    dependencies = { "nvim-tree/nvim-web-devicons", "folke/todo-comments.nvim" },
    layz = true,
    opts = {
      focus = true,
    },
    cmd = "Trouble",
    -- keys = {
    --   { "<leader>xw", "<cmd>Trouble diagnostics toggle<CR>", desc = "Open trouble workspace diagnostics" },
    --   {
    --     "<leader>xd",
    --     "<cmd>Trouble diagnostics toggle filter.buf=0<CR>",
    --     desc = "Open trouble document diagnostics",
    --   },
    --   { "<leader>xq", "<cmd>Trouble quickfix toggle<CR>", desc = "Open trouble quickfix list" },
    --   { "<leader>xl", "<cmd>Trouble loclist toggle<CR>", desc = "Open trouble location list" },
    --   { "<leader>xt", "<cmd>Trouble todo toggle<CR>", desc = "Open todos in trouble" },
    -- },
  },

  -- Gitsigns
  {
    'lewis6991/gitsigns.nvim',
    layz = true,
    dependencies = {'nvim-lua/plenary.nvim'},
    event = { "BufReadPre", "BufNewFile" },
    opts = {on_attach = function(bufnr)
      -- local vim = require("vim")
      local gs = package.loaded.gitsigns

      local function map(mode, l, r, opts)
        opts = opts or {}
        opts['buffer'] = bufnr
        vim.keymap.set(mode, l, r, opts)
      end

      -- Navigation
      map('n', ']c', "&diff ? ']c' : '<cmd>Gitsigns next_hunk<CR>'", {expr=true})
      map('n', '[c', "&diff ? '[c' : '<cmd>Gitsigns prev_hunk<CR>'", {expr=true})

      -- Actions
      map({'n', 'v'}, '<leader>hs', ':Gitsigns stage_hunk<CR>')
      map({'n', 'v'}, '<leader>hr', ':Gitsigns reset_hunk<CR>')
      map('n', '<leader>hS', gs.stage_buffer)
      map('n', '<leader>hu', gs.undo_stage_hunk)
      map('n', '<leader>hR', gs.reset_buffer)
      map('n', '<leader>hp', gs.preview_hunk)
      map('n', '<leader>hb', function() gs.blame_line{full=true} end)
      map('n', '<leader>tb', gs.toggle_current_line_blame)
      map('n', '<leader>hd', gs.diffthis)
      map('n', '<leader>hD', function() gs.diffthis('~') end)
      map('n', '<leader>td', gs.toggle_deleted)

      -- Text object
      map({'o', 'x'}, 'ih', ':<C-U>Gitsigns select_hunk<CR>')
    end
    }
  },
}
