# Most of these are copied from: https://github.com/Brettm12345/nixos-config/blob/1400c71bce/modules/applications/git/aliases.nix

let
  git = text: ''"!git ${text}"'';
  f = text: ''"!f(){ ${text} };f"'';
in {
  # Unstage all changes
  unstage = "reset HEAD --";

  # Ammend to the last commit
  amend = "commit --amend -C HEAD";

  # List branches sorted by last modified
  b = git
    "for-each-ref --sort='-authordate' --format='%(authordate)%09%(objectname:short)%09%(refname)' refs/heads | sed -e 's-refs/heads/--'";

  # Test merge for conflicts before merging
  mergetest = f ''
    git merge --no-commit --no-ff "$1"; git merge --abort; echo "Merge aborted";'';

  # Get description of current repo
  description = git
    ''config --get "branch.$(git rev-parse --abbrev-ref HEAD).description"'';

  # Show authors
  authors = ''
    "!f() { git log --no-merges --pretty='format:%<(26)%an <%ae>' --author "$*" | sort | uniq# }# f"'';

  a = "add";
  cm = "commit --message";
  caa = "commit --ammend";
  cl = "clone";
  co = "checkout";
  col = "checkout @{-1}";
  cob = "checkout -b";
  st = "stash";
  pop = "stash pop";
  t = "tag";
}