dotfiles/bin/rice-preview
Sarthak 7f41cf7a82 replace the old dotfiles with the sakura line rice
The bare $HOME repo is gone. This is now the rice: install.sh, rice-*
scripts in bin/, configs in home/ linked into $HOME, theme templates, st
and the particle wallpaper. Clone to ~/rice and run install.sh.
2026-09-14 19:44:44 +05:30

42 lines
1.4 KiB
Bash
Executable file

#!/usr/bin/env bash
# rice-preview <file> - show a file in the terminal. Pictures and video frames
# are drawn as real images (kitty's protocol in kitty, sixel in st), folders as
# a tree, and everything else through bat. Used by `ff` (fzf) and `img`.
set -uo pipefail
file="${1:?usage: rice-preview <file>}"
[[ -e $file ]] || exit 0
cols="${FZF_PREVIEW_COLUMNS:-$(tput cols)}"
lines="${FZF_PREVIEW_LINES:-$(( $(tput lines) - 2 ))}"
cache="${XDG_CACHE_HOME:-$HOME/.cache}/rice/preview"
picture() {
if [[ -n ${KITTY_WINDOW_ID:-} ]]; then
kitty +kitten icat --clear --transfer-mode=memory --stdin=no --place="${cols}x${lines}@0x0" -- "$1"
elif [[ $TERM == st* ]]; then
chafa --format sixel --size "${cols}x${lines}" -- "$1"
else
chafa --format symbols --size "${cols}x${lines}" -- "$1"
fi
}
if [[ -d $file ]]; then
eza --tree --level=2 --icons=always --color=always -- "$file" 2>/dev/null || ls -la -- "$file"
exit 0
fi
case "$(file -b --mime-type -- "$file")" in
image/*)
picture "$file"
;;
video/*)
mkdir -p "$cache"
frame="$cache/$(printf '%s:%s' "$(realpath -- "$file")" "$(stat -c %Y -- "$file")" | sha1sum | cut -c1-16).jpg"
[[ -s $frame ]] || ffmpeg -loglevel error -y -ss 3 -i "$file" -frames:v 1 -vf scale=640:-1 "$frame" 2>/dev/null
[[ -s $frame ]] && picture "$frame"
;;
*)
bat --style=numbers --color=always --line-range :300 -- "$file" 2>/dev/null || head -n 300 -- "$file"
;;
esac