diff options
| author | Akshay Nair <phenax5@gmail.com> | 2025-08-10 17:10:24 +0530 |
|---|---|---|
| committer | Akshay Nair <phenax5@gmail.com> | 2025-08-10 17:10:36 +0530 |
| commit | 770f298be647deb4fd87031b8089e4c4b0e43133 (patch) | |
| tree | 858a059217604cc368406f29f135cc0ccb8d0d9b /scripts/bin | |
| parent | 973492cbbb1172f6db80ae51e52f53bf34c625ae (diff) | |
| download | nixos-config-770f298be647deb4fd87031b8089e4c4b0e43133.tar.gz nixos-config-770f298be647deb4fd87031b8089e4c4b0e43133.zip | |
Script changes for system
Diffstat (limited to 'scripts/bin')
| -rwxr-xr-x | scripts/bin/gg | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/scripts/bin/gg b/scripts/bin/gg new file mode 100755 index 0000000..5fb7c67 --- /dev/null +++ b/scripts/bin/gg @@ -0,0 +1,98 @@ +#!/usr/bin/env sh + +set -eu -o pipefail; + +gg_file="$(git rev-parse --git-path _hooked_branch_list)"; + +current_branch() { git branch --show-current; } + +confirm() { + echo -n "You sure? (y/n) "; + read response; + [ "$response" = "y" ]; +} + +branchlist() { cat "$gg_file" | sed '/^$/d' 2>/dev/null; } + +add() { + echo "$1" >> "$gg_file"; + sort -u "$gg_file" -o "$gg_file"; +} + +remove_branch() { + local new_branchlist=$(branchlist | grep -v "$1"); + echo "Removing $1..."; + if (confirm); then + echo "$new_branchlist" > "$gg_file"; + fi +} + +prompt_branchlist() { + branchlist | grep -v "$(current_branch)" | fzf; +} + +cmd_list() { branchlist; } + +cmd_add() { + if [ "$#" == 0 ]; then + add "$(current_branch)"; + elif [ "$1" == "-s" ]; then + local branch=$(git branch --format '%(refname:short)' | fzf); + [ -z "$branch" ] && echo "<noop>" && exit 0; + add "$branch"; + elif [ "$1" == "-" ]; then + while read b; do add "$b"; done + elif [ -n "$1" ]; then + add "$1"; + fi +} + +cmd_remove() { + if [ "$#" == 0 ]; then + local branch=$(branchlist | fzf); + [ -z "$branch" ] && echo "<noop>" && exit 0; + remove_branch "$branch"; + elif [ "$1" == "-" ]; then + while read b; do remove_branch "$b"; done + elif [ -n "$1" ]; then + remove_branch "$1"; + fi +} + +cmd_checkout() { + local branch=$(prompt_branchlist); + [ -z "$branch" ] && echo "<noop>" && exit 0; + git checkout "$branch"; +} + +cmd_clear() { + echo "Clearing branch list"; + if (confirm); then + echo -n "" > "$gg_file"; + fi +} + +cmd_rebase() { + local branch=$(prompt_branchlist); + [ -z "$branch" ] && echo "<noop>" && exit 0; + echo "Rebase $(current_branch) with base $branch"; + if (confirm); then + git rebase "$branch"; + fi +} + +cmd="$1"; shift 1; + +case "$cmd" in + l|ls|ll|list) cmd_list ;; + a|add) cmd_add "$@" ;; + c|co|checkout) cmd_checkout ;; + rb|rebase) cmd_rebase ;; + rm|remove) cmd_remove "$@" ;; + clear) cmd_clear ;; + *) + echo "Invalid command: $cmd" + echo "Use: (ls)list | (a)add | (rm)remove | (co)checkout | (re)rebase | clear" + ;; +esac + |
