#!/bin/sh set -C -f IFS="$(printf '%b_' '\n')" IFS="${IFS%_}" PREVIEW_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/lf" PREVIEW_WIDTH=600 # px chafafunc() { chafa -f sixel -O 0 --polite on -c full --color-space din99d -w 9 -t 0.8 --size "$1"x } # Prevent recursive thumbnails (if the file ends in .six) [ "${1##*.}" = "six" ] && cat "$1" && exit 1 case "$(file --dereference --brief --mime-type -- "$1")" in text/html) lynx -width="$4" -display_charset=utf-8 -dump "$1" ;; text/troff) man ./ "$1" | col -b ;; text/* | */xml | application/json | application/x-ndjson) bat --terminal-width "$(($4 - 2))" -f "$1" ;; audio/* | application/octet-stream) mediainfo "$1" || exit 1 ;; font/* | application/vnd.ms-opentype) PREVIEW_TEXT="ABCDEFGHIJKLMNOPQRSTUBWXYZ\n""\ abcdefghijklmnopqrstuvwxyz\n""\ 1234567890\n""\ !@#$\%(){}[]-+=_\`~" convert -size "1920x1080" xc:'#ffffff' \ -gravity center -pointsize 76 \ -font "$1" \ -fill '#000000' \ -annotate +0+0 "$PREVIEW_TEXT" \ -flatten jpeg:- | chafafunc $2 ;; image/vnd.djvu) djvused "$1" -e 'select 1; save-page-with /dev/stdout' | convert djvu:- jpeg:- | chafafunc $2 ;; image/webp) dwebp "$1" -tiff -o - | chafafunc $2 ;; image/heic) convert "$1" jpeg:- | chafafunc $2 ;; image/*) cat "$1" | chafafunc $2 ;; */pdf) pdftocairo -singlefile -scale-to-x $PREVIEW_WIDTH -scale-to-y -1 -jpeg "$1" - | chafafunc $2 ;; video/*) ffmpegthumbnailer -i "$1" -s 0 -c jpeg -f -o - | chafafunc $2 ;; application/*zip) atool --list -- "$1" ;; *spreadsheetml.sheet) xlsx2csv -s 1 "$1" | bat --terminal-width "$(($4 - 2))" -l 'csv' ;; *opendocument*) odt2txt "$1" ;; application/pgp-encrypted) gpg -d -- "$1" ;; esac exit 1