This commit is contained in:
2026-04-30 15:21:55 +02:00
parent 5a2927372b
commit f9c961bf4f
@@ -0,0 +1,50 @@
# inspired by https://oppi.li/posts/jjj/
# using what i made for
# - https://git.pvv.ntnu.no/pederbs/just-nixpkgs
# - https://git.pvv.ntnu.no/pederbs/config/src/commit/5a2927372b180d7bfcf67f93151f3756bc4f26df/users/pbsds/home/profiles/headless/fzf.nix
# TODO: use gum/fzf to make a menu with various modes
# * [ ] mode with git log --oneline --all
# * [ ] mode with branches/tags
# * [ ] mode with commit from a specific branch/tag
# * [ ] mode with commit ranges (aaa..bbb)
# * [ ] mode with multiple commits in single command
# * [ ] mode with multiple commits across multiple command like https://arch1t3cht.org/blog/jjjj/
if command -v git >/dev/null \
&& command -v fzf >/dev/null \
&& command -v cut >/dev/null \
&& command -v head >/dev/null
then
fgit() {
local -a git_color=()
if [[ -t 2 ]]; then
git_color+=( --color=always )
fi
local -a fzf_args=(
--height=15
# --multi
--reverse
--bind 'home:first'
--bind 'end:last'
--cycle
--ansi
--prompt "git $* "
--preview 'git show "$(cut -d" " -f1 <<< {} )" '"${git_color[*]}"' --stat | head -n$FZF_PREVIEW_LINES'
--preview-window follow
)
local commit_id="$( git log --oneline "${git_color[@]}" | fzf "${fzf_args[@]}" | cut -d" " -f1 )"
if [[ -n "$commit_id" ]]; then
# recreate 'set -x' to avoid a subshell
>&2 echo "+$(printf " %q" git "$@" "$commit_id")"
git "$@" "$commit_id"
fi
}
fi