all repos — dotfiles @ a779bb5b6a1eac31c26474c5fafa7ff826bef8d2

linux dotfiles

config/lf/pv

#!/bin/sh
set -euf

draw() {
  jq -nc --argjson x "$x" --argjson y "$y" \
    --argjson width "$width" --argjson height "$height" \
    --arg path "$1" '
    {
      "action": "add",
      "identifier": "preview",
      "x": $x,
      "y": $y,
      "width": $width,
      "height": $height,
      "scaler": "contain",
      "scaling_position_x": 0.5,
      "scaling_position_y": 0.5,
      "path": $path
    }' >"$FIFO_UEBERZUG"
  exit 1
}

hash() {
  printf '%s/.cache/lf/%s' "$HOME" \
    "$(stat --printf '%n\0%i\0%F\0%s\0%W\0%Y' -- "$(readlink -f -- "$1")" | sha256sum | cut -d' ' -f1)"
}

cache() {
  if [ -f "$1" ]; then
    draw "$1"
  fi
}

file="$1"
width="$2"
height="$3"
x="$4"
y="$5"

if ! [ -f "$file" ] && ! [ -h "$file" ]; then
  exit
fi

default_x="1920"
default_y="1080"

ext="$(printf '%s' "$file" | tr '[:upper:]' '[:lower:]')"
ext="${ext##*.}"
case "$ext" in
  7z|a|ace|alz|arc|arj|bz|bz2|cab|cpio|deb|gz|jar|\
  lha|lrz|lz|lzh|lzma|lzo|rar|rpm|rz|t7z|tar|tbz|\
  tbz2|tgz|tlz|txz|tZ|tzo|war|xz|Z|zip)
    als -- "$file"
    exit 0
    ;;
  [1-8])
    COLUMNS="$width" man -- "$file" | col -b
    exit 0
    ;;
  pdf)
    if [ -n "${FIFO_UEBERZUG-}" ]; then
      cache="$(hash "$file")"
      cache "$cache.jpg"
      pdftoppm -f 1 -l 1 \
        -scale-to-x "$default_x" \
        -scale-to-y -1 \
        -singlefile \
        -jpeg \
        -- "$file" "$cache"
      draw "$cache.jpg"
    else
      pdftotext -nopgbrk -q -- "$file" -
      exit 0
    fi
    ;;
  djvu|djv)
    if [ -n "${FIFO_UEBERZUG-}" ]; then
      cache="$(hash "$file").tiff"
      cache "$cache"
      ddjvu -format=tiff -quality=90 -page=1 -size="${default_x}x${default_y}" \
        - "$cache" <"$file"
      draw "$cache"
    else
      djvutxt - <"$file"
      exit 0
    fi
    ;;
  docx|odt|epub)
    pandoc -s -t plain -- "$file"
    exit 0
    ;;
  htm|html|xhtml)
    lynx -dump -- "$file"
    exit 0
    ;;
  svg)
    if [ -n "${FIFO_UEBERZUG-}" ]; then
      cache="$(hash "$file").jpg"
      cache "$cache"
      convert -- "$file" "$cache"
      draw "$cache"
    fi
    ;;
esac

mime="$(file -Lb --mime-type -- "$file")"
case "$mime" in
  text/*)
    source-highlight -q --outlang-def=esc.outlang --style-file=esc.style -i "$file" || cat -- "$file"
    exit 0
    ;;
  image/*)
    if [ -n "${FIFO_UEBERZUG-}" ]; then
      orientation="$(identify -format '%[EXIF:Orientation]\n' -- "$file")"
      if [ -n "$orientation" ] && [ "$orientation" != 1 ]; then
        cache="$(hash "$file").jpg"
        cache "$cache"
        convert -- "$file" -auto-orient "$cache"
        draw "$cache"
      else
        draw "$file"
      fi
    fi
    ;;
  video/*)
    if [ -n "${FIFO_UEBERZUG-}" ]; then
      cache="$(hash "$file").jpg"
      cache "$cache"
      ffmpegthumbnailer -i "$file" -o "$cache" -s 0
      draw "$cache"
    fi
    ;;
esac

header_text="File Type Classification"
header=""
len="$(( (width - (${#header_text} + 2)) / 2 ))"
if [ "$len" -gt 0 ]; then
  for i in $(seq "$len"); do
    header="-$header"
  done
  header="$header $header_text "
  for i in $(seq "$len"); do
    header="$header-"
  done
else
  header="$header_text"
fi
printf '\033[7m%s\033[0m\n' "$header"
file -Lb -- "$file" | fold -s -w "$width"
exit 0