require('gitsigns').setup {
  status_formatter    = nil,
  sign_priority       = 6,
  update_debounce     = 100,
  max_file_length     = 10000,
  signcolumn          = true,
  numhl               = false,
  linehl              = false,
  word_diff           = false,
  attach_to_untracked = false,
  current_line_blame  = false,
  current_line_blame_opts = {
    virt_text     = true,
    virt_text_pos = 'eol', -- 'eol' | 'overlay' | 'right_align'
    delay         = 1000,
  },
  watch_gitdir = {
    interval     = 1000,
    follow_files = true
  },
  current_line_blame_formatter_opts = {
    relative_time = false
  },
  preview_config = {
    -- Options passed to nvim_open_win
    border   = 'single',
    style    = 'minimal',
    relative = 'cursor',
    row      = 0,
    col      = 1
  },
  yadm = {
    enable = false
  },
  signs = {
    add          = { hl = 'GitSignsAdd'   , text = '│', numhl='GitSignsAddNr'   , linehl='GitSignsAddLn'    },
    change       = { hl = 'GitSignsChange', text = '│', numhl='GitSignsChangeNr', linehl='GitSignsChangeLn' },
    delete       = { hl = 'GitSignsDelete', text = '_', numhl='GitSignsDeleteNr', linehl='GitSignsDeleteLn' },
    topdelete    = { hl = 'GitSignsDelete', text = '‾', numhl='GitSignsDeleteNr', linehl='GitSignsDeleteLn' },
    changedelete = { hl = 'GitSignsChange', text = '~', numhl='GitSignsChangeNr', linehl='GitSignsChangeLn' },
  },
  keymaps = {
    noremap          = true,

    ['n ]c']         = { expr = true, "&diff ? ']c' : '<cmd>lua require\"gitsigns.actions\".next_hunk()<CR>'" },
    ['n [c']         = { expr = true, "&diff ? '[c' : '<cmd>lua require\"gitsigns.actions\".prev_hunk()<CR>'" },

    ['n <Leader>hl'] = '<cmd>lua require"gitsigns".setloclist()<CR>',
    ['n <Leader>hp'] = '<cmd>lua require"gitsigns".preview_hunk()<CR>',
    ['n <Leader>hq'] = '<cmd>lua require"gitsigns".setqflist()<CR>',
    ['n <Leader>hQ'] = '<cmd>lua require"gitsigns".setqflist("attached")<CR>',
    ['n <Leader>hr'] = '<cmd>lua require"gitsigns".reset_hunk()<CR>',
    ['v <Leader>hr'] = '<cmd>lua require"gitsigns".reset_hunk({vim.fn.line("."), vim.fn.line("v")})<CR>',
    ['n <Leader>hR'] = '<cmd>lua require"gitsigns".reset_buffer()<CR>',
    ['n <Leader>hs'] = '<cmd>lua require"gitsigns".stage_hunk()<CR>',
    ['v <Leader>hs'] = '<cmd>lua require"gitsigns".stage_hunk({vim.fn.line("."), vim.fn.line("v")})<CR>',
    ['n <Leader>hS'] = '<cmd>lua require"gitsigns".stage_buffer()<CR>',
    ['n <Leader>ht'] = '<cmd>lua require"gitsigns".toggle_signs()<CR>',
    ['n <Leader>hu'] = '<cmd>lua require"gitsigns".undo_stage_hunk()<CR>',
    ['n <Leader>hU'] = '<cmd>lua require"gitsigns".reset_buffer_index()<CR>',
    ['n <Leader>hb'] = '<cmd>lua require"gitsigns".blame_line()<CR>',

    ['o ih']         = ':<C-U>lua require"gitsigns.actions".select_hunk()<CR>',
    ['x ih']         = ':<C-U>lua require"gitsigns.actions".select_hunk()<CR>'
  },
}
