feat: add fzf functions to interact with git worktrees

These have to be functions sadly because `cd` doesn't work otherwise.
This just means there is more reason to have subcommand aliases on a shell level. :)

Heavily based on nerdypeppers stuff[https://peppe.rs/posts/curing_a_case_of_git-UX/].
This commit is contained in:
buffet 2024-05-18 15:52:38 +02:00
parent a74ea2571a
commit 180152ba4a

View file

@ -42,6 +42,54 @@ in {
'';
initExtra = ''
gwa() {
[[ "$1" ]] || {
echo "required branch name argument" >&2
return 1
}
local repo="''${PWD##*/}"
local uuid="$(< /proc/sys/kernel/random/uuid)"
local basepath="$HOME/worktrees"
local path="$basepath/$repo-$uuid"
mkdir -p "$basepath"
git worktree add "$path" -b "$1" && cd "$path"
}
gwd() {
local res="$(
set -o pipefail
git worktree list | \
${pkgs.fzf}/bin/fzf --preview 'git log --color --decorate --oneline' \
--preview-window=up \
--cycle \
--query "$1" |\
cut -d' ' -f1
)"
[[ $? -eq 0 ]] && echo "$res" && git worktree remove "$res"
}
gwg() {
local res="$(
set -o pipefail
local trees="$(git worktree list | ${pkgs.fzf}/bin/fzf --filter "$1" --no-sort)"
if [[ "$(wc -l <<<"$trees")" -eq 1 ]]; then
printf '%s\n' "$trees"
else
printf '%s\n' "$trees" | \
${pkgs.fzf}/bin/fzf --preview='git log --color --decorate --oneline' \
--preview-window=up \
--cycle \
--query "$1"
fi | cut -d' ' -f1
)"
[[ $? -eq 0 ]] && echo "$res" && cd "$res"
}
__prompt() {
local status="$?"
local row