{ 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"; }; }; }