_: { den.aspects = { version-control = { homeManager = { config, ... }: { programs = { git = { enable = true; settings.user.name = _.config.meta.${config.home.username}.username; settings.user.email = _.config.meta.${config.home.username}.email; ignores = [ ".direnv/" "result" ]; settings.alias = { ll = "log --stat --abbrev-commit"; co = "checkout"; patch = "format-patch --stdout HEAD~1"; rpatch = "reset --hard HEAD~1"; lgg = "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative"; lol = "log --graph --decorate --pretty=oneline --abbrev-commit"; lola = "log --graph --decorate --pretty=oneline --abbrev-commit --all"; clb = "!/home/user/bin/git-clean-local-branches"; pf = "push --force-with-lease"; rewrite = "rebase - x 'git commit - -amend - C HEAD - -date=\"$(date -R)\" && sleep 1.05'"; # From https://gist.github.com/pksunkara/988716 a = "add --all"; ai = "add -i"; # ----- ap = "apply"; as = "apply --stat"; ac = "apply --check"; # ----- ama = "am --abort"; amr = "am --resolved"; ams = "am --skip"; # ----- b = "branch"; ba = "branch -a"; bd = "branch -d"; bdd = "branch -D"; br = "branch -r"; bc = "rev-parse --abbrev-ref HEAD"; bu = ''!git rev-parse --abbrev-ref --symbolic-full-name "@{u}"''; recent-branches = "branch --sort=-committerdate"; # ----- c = "commit"; ca = "commit -a"; cm = "commit -m"; cam = "commit -am"; cem = "commit --allow-empty -m"; cd = "commit --amend"; cad = "commit -a --amend"; ced = "commit --allow-empty --amend"; # ----- cl = "clone"; cld = "clone --depth 1"; clg = "!sh -c 'git clone git://github.com/$1 $(basename $1)' -"; clgp = "!sh -c 'git clone git@github.com:$(git config --get user.username)/$1 $1' -"; # ----- co-pr = "!sh -c 'git fetch origin refs/pull/$1/head:pull/$1 && git checkout pull/$1' -"; cp = "cherry-pick"; cpa = "cherry-pick --abort"; cpc = "cherry-pick --continue"; # ----- d = "diff"; dp = "diff --patience"; dc = "diff --cached"; dk = "diff --check"; dck = "diff --cached --check"; dt = "difftool"; dct = "difftool --cached"; # ----- f = "fetch"; fo = "fetch origin"; fu = "fetch upstream"; # ----- fp = "format-patch"; # ----- fk = "fsck"; # ----- g = "grep -p"; # ----- l = "log --oneline"; lg = "log --oneline --graph --decorate"; # ----- ls = "ls-files"; lsf = "!git ls-files | grep -i"; # ----- m = "merge"; ma = "merge --abort"; mc = "merge --continue"; ms = "merge --skip"; # ----- o = "checkout"; ob = "checkout -b"; # ----- pr = "prune -v"; # ----- ps = "push"; psf = "push -f"; psu = "push -u"; pst = "push --tags"; # ----- pso = "push origin"; psao = "push --all origin"; psfo = "push -f origin"; psuo = "push -u origin"; # ----- psom = "push origin master"; psaom = "push --all origin master"; psfom = "push -f origin master"; psuom = "push -u origin master"; psoc = "!git push origin $(git bc)"; psaoc = "!git push --all origin $(git bc)"; psfoc = "!git push -f origin $(git bc)"; psuoc = "!git push -u origin $(git bc)"; psdc = "!git push origin :$(git bc)"; # ----- pl = "pull"; pb = "pull --rebase"; # ----- plo = "pull origin"; pbo = "pull --rebase origin"; plom = "pull origin master"; ploc = "!git pull origin $(git bc)"; pbom = "pull --rebase origin master"; pboc = "!git pull --rebase origin $(git bc)"; # ----- plu = "pull upstream"; plum = "pull upstream master"; pluc = "!git pull upstream $(git bc)"; pbum = "pull --rebase upstream master"; pbuc = "!git pull --rebase upstream $(git bc)"; # ----- rb = "rebase"; rba = "rebase --abort"; rbc = "rebase --continue"; rbi = "rebase --interactive"; rbs = "rebase --skip"; # ----- re = "reset"; rh = "reset HEAD"; reh = "reset --hard"; rem = "reset --mixed"; res = "reset --soft"; rehh = "reset --hard HEAD"; remh = "reset --mixed HEAD"; resh = "reset --soft HEAD"; # ----- r = "remote"; ra = "remote add"; rr = "remote rm"; rv = "remote -v"; rn = "remote rename"; rp = "remote prune"; rs = "remote show"; rao = "remote add origin"; rau = "remote add upstream"; rro = "remote remove origin"; rru = "remote remove upstream"; rso = "remote show origin"; rsu = "remote show upstream"; rpo = "remote prune origin"; rpu = "remote prune upstream"; # ----- rmf = "rm -f"; rmrf = "rm -r -f"; # ----- s = "status"; sb = "status -s -b"; # ----- sa = "stash apply"; sc = "stash clear"; sd = "stash drop"; sl = "stash list"; sp = "stash pop"; ss = "stash save"; ssk = "stash save -k"; sw = "stash show"; st = "!git stash list | wc -l 2>/dev/null | grep -oEi '[0-9][0-9]*'"; # ----- t = "tag"; td = "tag -d"; # ----- w = "show"; wp = "show -p"; wr = "show -p --no-color"; # ----- subadd = "!sh -c 'git submodule add git://github.com/$1 $2/$(basename $1)' -"; subup = "submodule update --init --recursive"; subpull = "!git submodule foreach git pull --tags origin master"; # ----- assume = "update-index --assume-unchanged"; unassume = "update-index --no-assume-unchanged"; assumed = "!git ls -v | grep ^h | cut -c 3-"; unassumeall = "!git assumed | xargs git unassume"; assumeall = "!git status -s | awk {'print $2'} | xargs git assume"; # ----- bump = ''!sh -c 'git commit -am "Version bump v$1" && git psuoc && git release $1' -''; release = "!sh -c 'git tag v$1 && git pst' -"; unrelease = "!sh -c 'git tag -d v$1 && git pso :v$1' -"; merged = "!sh -c 'git o master && git plom && git bd $1 && git rpo' -"; aliases = "!git config -l | grep alias | cut -c 7-"; snap = "!git stash save 'snapshot = $(date)' && git stash apply 'stash@{0}'"; bare = "!sh -c 'git symbolic-ref HEAD refs/heads/$1 && git rm --cached -r . && git clean -xfd' -"; whois = ''!sh -c 'git log -i -1 --author="$1" --pretty="format:%an <%ae>"' -''; serve = "daemon --reuseaddr --verbose --base-path=. --export-all ./.git"; # ----- behind = "!git rev-list --left-only --count $(git bu)...HEAD"; ahead = "!git rev-list --right-only --count $(git bu)...HEAD"; # ----- ours = "!f() { git checkout --ours $@ && git add $@; }; f"; theirs = "!f() { git checkout --theirs $@ && git add $@; }; f"; subrepo = "!sh -c 'git filter-branch --prune-empty --subdirectory-filter $1 master' -"; human = "name-rev --name-only --refs=refs/heads/*"; }; settings = { branch = { autosetuprebase = "always"; }; color = { ui = "auto"; }; core = { autocrlf = "input"; editor = "micro"; safecrlf = "warn"; excludesfile = "~/.gitignore_global"; }; diff = { mnemonicprefix = true; }; include = { path = "~/.gitconfig.local"; }; init = { defaultBranch = "main"; }; merge = { conflictstyle = "diff3"; commit = "no"; ff = "no"; tool = "splice"; }; push = { autoSetupRemote = true; default = "current"; }; pull = { default = "matching"; autoSetupRemote = true; rebase = true; useForceIfIncludes = true; }; rebase = { autostash = true; autosquash = true; instructionFormat = "(%an <%ae>) %s"; updateRefs = true; }; rerere = { enabled = true; }; sequence = { editor = "code --wait"; }; signing = { signByDefault = true; inherit (_.config.meta.${config.home.username}.key); }; commit = { gpgsign = true; }; }; }; }; }; }; }; }