176 lines
6.1 KiB
Nix
176 lines
6.1 KiB
Nix
|
{
|
||
|
lib,
|
||
|
config,
|
||
|
namespace,
|
||
|
...
|
||
|
}:
|
||
|
let
|
||
|
inherit (lib) mkIf;
|
||
|
|
||
|
cfg = config.${namespace}.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";
|
||
|
};
|
||
|
};
|
||
|
}
|