marleyos/modules/home/programs/git/aliases.nix

174 lines
6.1 KiB
Nix

{
lib,
config,
...
}:
let
inherit (lib) mkIf;
cfg = config.marleyos.programs.git;
in
{
config = mkIf cfg.enable {
# █████╗ ██╗ ██╗ █████╗ ███████╗███████╗███████╗
# ██╔══██╗██║ ██║██╔══██╗██╔════╝██╔════╝██╔════╝
# ███████║██║ ██║███████║███████╗█████╗ ███████╗
# ██╔══██║██║ ██║██╔══██║╚════██║██╔══╝ ╚════██║
# ██║ ██║███████╗██║██║ ██║███████║███████╗███████║
# ╚═╝ ╚═╝╚══════╝╚═╝╚═╝ ╚═╝╚══════╝╚══════╝╚══════╝
programs.git.aliases =
let
fish_fns = config.programs.fish.functions;
in
{
### Staging ###
a = "add";
aa = "add --all";
# Interactively stage parts of a file.
apa = "add --patch";
da = "diff";
das = "diff --staged";
daw = "diff --word-diff"; # Show diff by word.
dasw = "diff --staged --word-diff";
d = "!f() { git diff \"$@\" ':(exclude)package-lock.json' ':(exclude)*.lock'; }; f";
ds = "!f() { git diff --staged \"$@\" ':(exclude)package-lock.json' ':(exclude)*.lock'; }; f";
dw = "!f() { git diff --word-diff \"$@\" ':(exclude)package-lock.json' ':(exclude)*.lock'; }; f";
dsw = "!f() { git diff --staged --word-diff \"$@\" ':(exclude)package-lock.json' ':(exclude)*.lock'; }; f";
st = "status --short --branch";
stu = "status --short --branch --untracked-files";
stl = "status";
### Committing ###
c = "commit";
ce = "commit --amend";
cen = "commit --amend --no-edit --no-verify";
ca = "!git add --alll && git commit";
cae = "!git add --all && git commit --amend";
caen = "!git add --all && git commit --amend --no-edit --no-verify";
cfu = "commit --fixup";
rev = "revert";
### Working Dir & Index Manipulation ###
co = "checkout";
rt = "reset";
rts = "reset --soft"; # undo commits & stage their changes
rs = "restore --worktree"; # revert local changes
rst = "restore --staged"; # unstage things
rsa = "restore --worktree --staged";
rss = "restore --worktree --source"; # specify a commit to revert to
rsts = "restore --staged --source";
rsas = "restore --worktree --staged --source";
rmc = "rm --cached"; # leave worktree copy alone
sta = "stash push";
stam = "stash push --message";
staa = "stash push --include-untracted";
staam = "stash push --include-untracted --message";
stap = "stash pop";
stal = "stash list";
stas = "stash show --text";
cl = "clean -force"; # remove untracked & unignored files
cldr = "clean --dry-run";
### Branches ###
b = "branch";
cb = "checkout -b";
cm = lib.mkIf (fish_fns ? git_main_branch) "!git checkout $(git_main_branch)";
cd = lib.mkIf (fish_fns ? git_develop_branch) "!git checkout $(git_develop_branch)";
m = "merge";
mtl = "mergetool --no-prompt";
ma = "merge --abort";
cp = "cherry-pick";
cpa = "cherry-pick --abort";
cpc = "cherry-pick --continue";
cpq = "cherry-pick --quit";
### Remotes ###
p = "push";
pv = "push --verbose";
pdr = "push --dry-run";
pf = "push --force-with-lease --force-if-includes";
pfv = "push --verbose --force-with-lease --force-if-includes";
pff = "push --force";
pffv = "push --verbose --force";
f = "fetch";
fa = "fetch --all --prune";
pl = "pull";
plr = "pull --rebase";
sub = "submodule";
subu = "submodule update --init --recursive";
r = "remote";
rv = "remote --verbose";
ra = "remote add";
rrm = "remote remove";
rmv = "remote rename";
rset = "remote set-url";
rup = "remote update";
### Logs ###
# Current branch.
l = "log --pretty=lc --graph";
lo = "log --pretty=lo --graph --date=human";
ls = "log --pretty=lo --graph --date=human --simplify-by-decoration";
lf = "log --pretty=lf --graph";
ld = "log --pretty=lf --graph --cc --stat";
lp = "log --pretty=lf --graph --cc --patch";
lr = "log -5 --pretty=lc --graph";
lro = "log -5 --pretty=lo --graph --date=human";
lrs = "log -5 --pretty=lo --graph --date=human --simplify-by-decoration";
lrf = "log -5 --pretty=lf --graph";
lrd = "log -5 --pretty=lf --graph --cc --stat";
lrp = "log -5 --pretty=lf --graph --cc --patch";
# All branches on all remotes.
la = "log --pretty=lc --graph --all";
lao = "log --pretty=lo --graph --all --date=human";
las = "log --pretty=lo --graph --all --date=human --simplify-by-decoration";
laf = "log --pretty=lf --graph --all";
lad = "log --pretty=lf --graph --all --cc --stat";
lap = "log --pretty=lf --graph --all --cc --patch";
lar = "log -5 --pretty=lc --graph --all";
laro = "log -5 --pretty=lo --graph --all --date=human";
lars = "log -5 --pretty=lo --graph --all --date=human --simplify-by-decoration";
larf = "log -5 --pretty=lf --graph --all";
lard = "log -5 --pretty=lf --graph --all --cc --stat";
larp = "log -5 --pretty=lf --graph --all --cc --patch";
### Shortcuts ###
nevermind = "!git reset --hard head && git clean -df";
open = lib.mkIf (config.programs.fish.enable && (fish_fns ? git_open)) "!fish -c git_open";
chash = "!git log --oneline | gum filter --height 10 | cut -d' ' -f1 | cb &>/dev/null";
};
};
}