[core]
	autocrlf = input
	editor = nvim
	pager = diffr --colors refine-added:none:background:0x33,0x66,0x33:bold --colors added:none:background:0x33,0x44,0x33 --colors refine-removed:none:background:0x66,0x33,0x33:bold --colors removed:none:background:0x44,0x33,0x33 | less --RAW-CONTROL-CHARS --quit-on-intr
[interactive]
	diffFilter = diffr --colors refine-added:none:background:0x33,0x66,0x33:bold --colors added:none:background:0x33,0x44,0x33 --colors refine-removed:none:background:0x66,0x33,0x33:bold --colors removed:none:background:0x44,0x33,0x33
[submodule]
	recurse = true
[rerere]
	enabled = true
# Accelerate packing by automatically determining thread count
[pack]
	threads = 0

[pull]
	ff = only
[checkout]
	defaultRemote = origin

[diff]
	tool = nvim
	submodule = log
[merge]
	tool = nvim
[mergetool "nvim"]
	cmd = nvim -f -c \"Gdiffsplit!\" \"$MERGED\"
	prompt = false
[difftool "nvim"]
	cmd = "nvim -d \"$LOCAL\" \"$REMOTE\""

# Automatically push to branch with matching name
[push]
	default = current
[status]
	showStash = true
# Disable pagination for branch commmand by default
[pager]
	branch = false
[grep]
	lineNumber = true
[log]
	date=local

[color "status"]
	added = green
	changed = yellow
	untracked = magenta

[user]
	email = 27jf@pm.me
	name = xeruf

[mailmap]
	file = /home/janek/.config/yadm/.mailmap

[http]
	lowSpeedLimit = 1000
	lowSpeedTime = 3

[url "ssh://github.com/"]
	pushInsteadOf = https://github.com/

[filter "lfs"]
	clean = git-lfs clean -- %f
	smudge = git-lfs smudge -- %f
	process = git-lfs filter-process
	required = true

[alias]
	# GET INFO
	s = !git stl && git stb
	st = stb .
	stb = status --short --branch
	stv = --paginate status -v
	stvv = --paginate status -vv

	r = remote -v
	b = branch -vv
	ba = b -a
	main = !cat $(git rev-parse --git-dir)/refs/remotes/origin/HEAD | cut -d'/' -f4

	sw = switch
	sc = switch -c
	sm = !git switch $(git main)

	ref = reflog show --pretty=tformat:'%C(auto)%h%d %s %Cgreen(%cd) %Cblue<%an>%Creset'
	rev = rev-parse --short
	head = rev-parse --short HEAD
	root = rev-parse --show-toplevel
	dir = rev-parse --git-dir
	curbranch = symbolic-ref --short HEAD
	upstream = !git rev-parse --abbrev-ref --symbolic-full-name @{upstream} || git rev-parse --abbrev-ref --symbolic-full-name @{push} || echo origin/$(git curbranch)
	#dir = !git root | sed 's/$/\\/.git/' | grep --color=never "/" # grep ensures a proper exit status on fail

	lg = log --pretty=tformat:'%C(auto)%h%d %s %Cgreen(%cd) %Cblue<%an>%Creset' --date=human --graph
	lo = log --pretty=tformat:'%C(auto)%h%d %s %Cgreen(%cd) %Cblue<%an>%Creset' --date=human --no-merges
	lp = log -p --date=local
	ln = !git --no-pager lo "-$(a=$(git rev-list --count HEAD...@{u} 2>/dev/null); test ${a:-0} -gt 4 && expr $a + 3 || echo 7)" --graph HEAD @{u} 2>/dev/null || git --no-pager lo -7
	my = lo --author [Jj]anek
	standup = my --since yesterday --all
	co-authors = !git log | grep -i Co-Authored | awk '!a[$0]++'
	when = git for-each-ref --sort=committerdate --format='%(refname:short) * %(authorname) * %(committerdate:relative)' refs/remotes/ # List all branches with their last updates

	d = diff
	dw = diff --color-words
	dc = diff --color-words="[^[:space:]]|([[:alnum:]]|UTF_8_GUARD)+"

	# MODIFY

	# Local Changes
	a = add -u
	aa = add -u .
	ap = add -p
	c = commit -v
	cme = commit -v --edit --message

	cp = cherry-pick
	rb = rebase
	rbi = rebase --interactive
	rbc = rebase --continue
	rbm = !git rb $(git main)

	sta = stash
	stl = !git --no-pager stash list --pretty=tformat:'%gd%h - %s (%cr)'
	sts = stash show -v
	stp = stash pop
	std = !git stash drop && git stl

	rh = reset HEAD~
	rs = reset --keep
	ru = reset --keep @{upstream}
	unstage = restore --staged --

	format-head = !git stash && git-clang-format HEAD~ && git commit -a --amend --no-edit && git stash pop

	# Update from remote
	f = fetch
	fa = fetch --all
	fs = !git fetch && git st
	lu = !git pull upstream ${1:-$(git curbranch)}

	rg = rmgonebranches
	su = submodule update --init --recursive
	gcr = !git gc && git repack -a -d

	# Change remote
	ruu = !git fetch upstream && git reset --keep upstream/${1:-$(git curbranch)} && git push --no-verify --force-with-lease
	luu = !git pull upstream ${1:-(git curbranch)} && git push --no-verify
	pf = push --force-with-lease
	cap = !git commit --all --amend --no-edit && git push --force-with-lease

[includeIf "gitdir:yadm/repo.git"]
	path = "~/.config/yadm/gitconfig"

[includeIf "gitdir:~/data/.git"]
	path = "config-data"