Files
dotfiles/config/shell/.config/zsh/conf.d/60-fetch.zsh
T
2026-07-26 23:36:02 +02:00

78 lines
2.9 KiB
Bash

# Detect logo capability.
_uy_fetch_probe() {
if (( $+commands[kgp-query] )) && kgp-query 2>/dev/null; then
uy_fetch_logo_type=kitty
elif (( $+commands[sixel-query] )) && sixel-query 2>/dev/null; then
uy_fetch_logo_type=sixel
elif (( $+commands[kgp-query] )) || (( $+commands[sixel-query] )); then
uy_fetch_logo_type=logo
else
uy_fetch_logo_type=auto
fi
}
if [[ -z "$uy_fetch_logo_type" ]]; then
if [[ -t 0 ]] && (( $+commands[kgp-query] || $+commands[sixel-query] )); then
_uy_fetch_cache_dir="${XDG_CACHE_HOME:-$HOME/.cache}/zsh/logo-type"
# Terminal identity, sanitised down to a single path component
_uy_fetch_cache_file="$_uy_fetch_cache_dir/${${TERM:-none}//[^A-Za-z0-9._-]/_}@${${TERM_PROGRAM:-none}//[^A-Za-z0-9._-]/_}"
[[ -s "$_uy_fetch_cache_file" ]] && uy_fetch_logo_type="$(<"$_uy_fetch_cache_file")"
# Covers both a cache miss and a cache file holding anything unexpected
if [[ "$uy_fetch_logo_type" != (kitty|sixel|logo|symbols|auto) ]]; then
_uy_fetch_probe
[[ -d "$_uy_fetch_cache_dir" ]] || mkdir -p "$_uy_fetch_cache_dir"
print -r -- "$uy_fetch_logo_type" >| "$_uy_fetch_cache_file"
fi
unset _uy_fetch_cache_dir _uy_fetch_cache_file
else
_uy_fetch_probe
fi
fi
unfunction _uy_fetch_probe
: ${uy_fetch_color:="38;2;137;180;250"}
# Build fastfetch args (arrays to handle paths with spaces safely)
case "$uy_fetch_logo_type" in
symbols)
uy_fetch_args=(--logo-type raw --logo-width 42 --logo "$HOME/.config/fastfetch/logo_ros/42x.symbols" --color "$uy_fetch_color")
uy_fetch_args_brief=(--logo-type raw --logo-width 28 --logo "$HOME/.config/fastfetch/logo_ros/28x.symbols" --color "$uy_fetch_color")
;;
logo)
uy_fetch_args=(--logo-type builtin)
uy_fetch_args_brief=(--logo-type small)
;;
sixel)
uy_fetch_args=(--logo-type raw --logo-width 42 --logo "$HOME/.config/fastfetch/logo_ros/42x.sixel" --color "$uy_fetch_color")
uy_fetch_args_brief=(--logo-type raw --logo-width 28 --logo "$HOME/.config/fastfetch/logo_ros/28x.sixel" --color "$uy_fetch_color")
;;
*) # kitty, auto, etc.
uy_fetch_args=(--logo-type "$uy_fetch_logo_type" --logo-width 42 --logo "$HOME/.config/fastfetch/logo_ros/ros.png" --color "$uy_fetch_color")
uy_fetch_args_brief=(--logo-type "$uy_fetch_logo_type" --logo-width 28 --logo "$HOME/.config/fastfetch/logo_ros/ros.png" --color "$uy_fetch_color")
;;
esac
# Functions
if (( $+commands[fastfetch] )); then
ff() { fastfetch -c "$HOME/.config/fastfetch/config.jsonc" "${uy_fetch_args[@]}" "$@"; }
if [[ -f "$HOME/.config/fastfetch/brief.jsonc" ]]; then
ffb() { fastfetch -c "$HOME/.config/fastfetch/brief.jsonc" "${uy_fetch_args_brief[@]}" "$@"; }
else
ffb() { ff "$@"; }
fi
fi
# Auto-fetch on startup
if [[ -z "$uy_no_fetch" ]] && (( $+functions[ffb] )); then
ffb
fi