# ╔════════════════════════════════════════════════════════════════════════════╗ 
# ║____________________________________________________________________________║
# ║_____________/\\\\\\\\\\\\__/\\\\\\\\\\\__/\\\\\\\\\\\\\\\__________________║
# ║____________/\\\//////////__\/////\\\///__\///////\\\/////__________________║
# ║____________/\\\_________________\/\\\___________\/\\\______________________║
# ║____________\/\\\____/\\\\\\\_____\/\\\___________\/\\\_____________________║
# ║_____________\/\\\___\/////\\\_____\/\\\___________\/\\\____________________║
# ║______________\/\\\_______\/\\\_____\/\\\___________\/\\\___________________║
# ║_______________\/\\\_______\/\\\_____\/\\\___________\/\\\__________________║
# ║________________\//\\\\\\\\\\\\/___/\\\\\\\\\\\_______\/\\\_________________║
# ║__________________\////////////____\///////////________\///_________________║
# ║____________________________________________________________________________║
# ║      xn--gckvb8fzb.com * github.com/mrusme * marius@xn--gckvb8fzb.com      ║
# ╚════════════════════════════════════════════════════════════════════════════╝

# ╔════════════════════════════════════════════════════════════════════════════╗
# ║ General                                                                    ║
# ╚════════════════════════════════════════════════════════════════════════════╝
[user]
  name = Dominic Reich
  email = dominic@noreply.oe7drt.com
  signingkey = BC9D6AE1A3BE169A

[core]
  fileMode = true
  ignoreCase = false
  symlinks = true
  compression = 9
  excludesFile = ~/.config/git/ignore
  attributesFile = ~/.config/git/attributes
  hooksPath = ~/.config/git/hooks
  pager = delta
  editor = nvim

[format]
  signOff = yes

[gpg]
  program = gpg
  format = openpgp

[init]
  defaultBranch = master

[commit]
  gpgSign = true
  verbose = true

[fetch]
  prune = true
  parallel = 3

[submodule] 
  fetchJobs = 3

[pull]
  rebase = true

[push]
  gpgSign = if-asked
  default = simple
  autoSetupRemote = true
  followTags = yes

[help]
  autoCorrect = prompt

# ╔════════════════════════════════════════════════════════════════════════════╗
# ║ Colors                                                                     ║
# ╚════════════════════════════════════════════════════════════════════════════╝
[color]
  ui = true

[color "branch"]
  current = yellow
  local = blue
  remote = yellow
  upstream = magenta
  plain = cyan

[color "diff"]
  meta = blue
  frag = magenta
  old = red
  new = green
  whitespace = magenta

[color "status"]
  added = cyan
  changed = yellow
  untracked = red

# ╔════════════════════════════════════════════════════════════════════════════╗
# ║ Delta (https://dandavison.github.io/delta/)                                ║
# ╚════════════════════════════════════════════════════════════════════════════╝
[delta]
  navigate = true
  features = style

[delta "style"]
  side-by-side = true
  commit-decoration-style = "blue" box
  dark = true
  file-decoration-style = none
  file-style = cyan
  file-added-label = [+]
  file-copied-label = [=]
  file-modified-label = [~]
  file-removed-label = [-]
  file-renamed-label = [>]
  hunk-header-decoration-style = "#022b45" box ul
  hunk-header-file-style = "blue"
  hunk-header-line-number-style = "yellow"
  hunk-header-style = file line-number syntax
  line-numbers = true
  line-numbers-left-style = "#022b45"
  line-numbers-minus-style = "#80002a"
  line-numbers-plus-style = "#003300"
  line-numbers-right-style = "#022b45"
  line-numbers-zero-style = "#999999"
  minus-emph-style = normal "#80002a"
  minus-style = normal "#330011"
  plus-emph-style = syntax "#003300"
  plus-style = syntax "#001a00"
  whitespace-error-style = reverse red
  syntax-theme = Nord

# ╔════════════════════════════════════════════════════════════════════════════╗
# ║ Merging & Diffing                                                          ║
# ╚════════════════════════════════════════════════════════════════════════════╝
[merge]
  tool = nvimdiff

[mergetool]
  prompt = true

[mergetool "nvimdiff"]
  cmd = nvim -d "$LOCAL" "$REMOTE" "$MERGED" -c 'wincmd w' -c 'wincmd J'

[interactive]
  diffFilter = delta --color-only

[difftool]
  prompt = false

[diff]
  tool = nvimdiff

# ╔════════════════════════════════════════════════════════════════════════════╗
# ║ GitHub                                                                     ║
# ╚════════════════════════════════════════════════════════════════════════════╝
[url "ssh://git@github.com/"]
  insteadOf = https://github.com/

# ╔════════════════════════════════════════════════════════════════════════════╗
# ║ GitLab                                                                     ║
# ╚════════════════════════════════════════════════════════════════════════════╝
#[url "ssh://git@gitlab.com/"]
#  insteadOf = https://gitlab.com/

# ╔════════════════════════════════════════════════════════════════════════════╗
# ║ Codeberg                                                                   ║
# ╚════════════════════════════════════════════════════════════════════════════╝
[url "ssh://git@codeberg.org/"]
  insteadOf = https://codeberg.org/

# ╔════════════════════════════════════════════════════════════════════════════╗
# ║ sr.ht                                                                      ║
# ╚════════════════════════════════════════════════════════════════════════════╝
[url "ssh://git@git.sr.ht/"]
  insteadOf = https://git.sr.ht/

# ╔════════════════════════════════════════════════════════════════════════════╗
# ║ sendemail                                                                  ║
# ╚════════════════════════════════════════════════════════════════════════════╝
#[sendemail]
#  annotate = yes
#  smtpserver = 127.0.0.1
#  smtpuser = marius@xn--gckvb8fzb.com
#  smtpencryption = tls
#  smtpserverport = 1025
#  smtpsslcertpath =
#
#[credential "smtp://marius%40xn--gckvb8fzb.com@127.0.0.1%3a1025"]
#  helper = !pass smtp/marius@xn--gckvb8fzb.com

# ╔════════════════════════════════════════════════════════════════════════════╗
# ║ rerere                                                                     ║
# ╚════════════════════════════════════════════════════════════════════════════╝
[rerere]
  enabled = true

# ╔════════════════════════════════════════════════════════════════════════════╗
# ║ Git Flow                                                                   ║
# ╚════════════════════════════════════════════════════════════════════════════╝
[gitflow "branch"]
  master = master
  develop = develop

[gitflow "prefix"]
  feature = feature/
  release = release/
  hotfix = hotfix/
  bugfix = bugfix/
  support = support/
  versiontag = v

# ╔════════════════════════════════════════════════════════════════════════════╗
# ║ go.mod replace                                                             ║
# ╚════════════════════════════════════════════════════════════════════════════╝
[filter "gomodreplace"]
  clean = rg -U -v 'replace ((?s)\\(.*\\)|.*)'

# ╔════════════════════════════════════════════════════════════════════════════╗
# ║ LFS                                                                        ║
# ╚════════════════════════════════════════════════════════════════════════════╝
[filter "lfs"]
  clean = git-lfs clean -- %f
  smudge = git-lfs smudge -- %f
  process = git-lfs filter-process
  required = true

# ╔════════════════════════════════════════════════════════════════════════════╗
# ║ Aliases                                                                    ║
# ╚════════════════════════════════════════════════════════════════════════════╝
[alias]
  a = "add"
  aa = "add --all"
  ce = "git commit --allow-empty"
  am = "am"
  ama = "am --abort"
  amc = "am --continue"
  ams = "am --skip"
  amscp = "am --show-current-patch"
  ap = "apply"
  apa = "add --patch"
  apt = "apply --3way"
  au = "add --update"
  av = "add --verbose"
  b = "branch"
  bD = "branch -D"
  ba = "branch -a"
  bd = "branch -d"
  bl = "blame -b -w"
  bnm = "branch --no-merged"
  br = "branch --remote"
  bs = "bisect"
  bsb = "bisect bad"
  bsg = "bisect good"
  bsr = "bisect reset"
  bss = "bisect start"
  c = "commit -v"
  ca = "commit -v -a"
  cam = "commit -a -m"
  cas = "commit -a -s"
  casm = "commit -a -s -m"
  cb = "checkout -b"
  cf = "config --list"
  cl = "clone --recurse-submodules"
  clnid = "clean -id"
  cmsg = "commit -m"
  cn = "commit -v --no-edit"
  co = "checkout"
  cor = "checkout --recurse-submodules"
  count = "shortlog -sn"
  cp = "cherry-pick"
  cpa = "cherry-pick --abort"
  cpc = "cherry-pick --continue"
  cs = "commit -S"
  csm = "commit -s -m"
  css = "commit -S -s"
  cssm = "commit -S -s -m"
  d = "diff"
  dca = "diff --cached"
  dcw = "diff --cached --word-diff"
  ds = "diff --staged"
  dt = "diff-tree --no-commit-id --name-only -r"
  dup = "diff @{upstream}"
  dw = "diff --word-diff"
  f = "fetch"
  fa = "fetch --all --prune --jobs=10"
  fg = "ls-files | grep"
  fl = "flow"
  flf = "flow feature"
  flff = "flow feature finish"
  flfp = "flow feature publish"
  flfpll = "flow feature pull"
  flfs = "flow feature start"
  flh = "flow hotfix"
  flhf = "flow hotfix finish"
  flhp = "flow hotfix publish"
  flhs = "flow hotfix start"
  fli = "flow init"
  flr = "flow release"
  flrf = "flow release finish"
  flrp = "flow release publish"
  flrs = "flow release start"
  fo = "fetch origin"
  hh = "help"
  ign = "update-index --assume-unchanged"
  ignd = "ls-files -v | grep "^[[:lower:]]""
  l = "pull"
  lg = "log --stat"
  lgg = "log --graph"
  lgga = "log --graph --decorate --all"
  lgm = "log --graph --max-count=10"
  lgp = "log --stat -p"
  lo = "log --oneline --decorate"
  logg = "log --oneline --decorate --graph"
  loga = "log --oneline --decorate --graph --all"
  m = "merge"
  ma = "merge --abort"
  mtl = "mergetool --no-prompt"
  mtlvim = "mergetool --no-prompt --tool=nvimdiff"
  p = "push"
  pd = "push --dry-run"
  pf = "push --force-with-lease"
  poat = "push origin --all && git push origin --tags"
  pr = "pull --rebase"
  pristine = "reset --hard && git clean -dffx"
  pu = "push upstream"
  pv = "push -v"
  r = "remote"
  ra = "remote add"
  rb = "rebase"
  rba = "rebase --abort"
  rbc = "rebase --continue"
  rbi = "rebase -i"
  rbo = "rebase --onto"
  rbs = "rebase --skip"
  rep = "grep --color=auto --exclude-dir={.bzr,CVS,.git,.hg,.svn,.idea,.tox}"
  rev = "revert"
  rh = "reset"
  rhh = "reset --hard"
  rmc = "rm --cached"
  rmv = "remote rename"
  rrm = "remote remove"
  rs = "restore"
  rset = "remote set-url"
  rss = "restore --source"
  rst = "restore --staged"
  ru = "reset --"
  rup = "remote update"
  rv = "remote -v"
  sb = "status -sb"
  sd = "svn dcommit"
  sh = "show"
  si = "submodule init"
  sps = "show --pretty=short --show-signature"
  sr = "svn rebase"
  ss = "status -s"
  st = "status"
  sta = "stash push"
  staa = "stash apply"
  stall = "stash --all"
  stc = "stash clear"
  std = "stash drop"
  stl = "stash list"
  stp = "stash pop"
  sts = "stash show --text"
  su = "submodule update"
  sw = "switch"
  swc = "switch -c"
  ts = "tag -s"
  tv = "tag | sort -V"
  unign = "update-index --no-assume-unchanged"
  up = "pull --rebase"
  upa = "pull --rebase --autostash"
  upav = "pull --rebase --autostash -v"
  upv = "pull --rebase -v"
  wch = "whatchanged -p --abbrev-commit --pretty=medium"
  wt = "worktree"
  wta = "worktree add"
  wtls = "worktree list"
  wtmv = "worktree move"
  wtrm = "worktree remove"