1
0
forked from extern/nix-config
donovanglover-nix-config/modules/joshuto/preview.sh
Donovan Glover 343076f942
meta: Move terminal files to modules
Since all of these files do roughly the same thing (that is, configure
the system in a specific way that a separate file seems necessary), this
should reduce the overall complexity of the project tree.
2023-06-05 11:44:37 -04:00

90 lines
1.9 KiB
Bash
Executable File

#!/usr/bin/env bash
IFS=$'\n'
set -o noclobber -o noglob -o nounset -o pipefail
FILE_PATH=""
PREVIEW_WIDTH=10
PREVIEW_HEIGHT=10
while [ "$#" -gt 0 ]; do
case "$1" in
"--path")
shift
FILE_PATH="$1"
;;
"--preview-width")
shift
PREVIEW_WIDTH="$1"
;;
"--preview-height")
shift
PREVIEW_HEIGHT="$1"
;;
esac
shift
done
realpath=$(realpath "$FILE_PATH")
handle_extension() {
case "${FILE_EXTENSION_LOWER}" in
rar)
unrar lt -p- -- "${FILE_PATH}" && exit 0
exit 1;;
7z)
7z l -p -- "${FILE_PATH}" && exit 0
exit 1;;
pdf)
pdftotext -l 10 -nopgbrk -q -- "${FILE_PATH}" - | \
fmt -w "${PREVIEW_WIDTH}" && exit 0
mutool draw -F txt -i -- "${FILE_PATH}" 1-10 | \
fmt -w "${PREVIEW_WIDTH}" && exit 0
exiftool "${FILE_PATH}" && exit 0
exit 1;;
torrent)
transmission-show -- "${FILE_PATH}" && exit 0
exit 1;;
json)
jq --color-output . "${FILE_PATH}" && exit 0
;;
esac
}
handle_mime() {
local mimetype="${1}"
case "${mimetype}" in
## Text
text/* | */xml)
bat --color=always --paging=never \
--style=plain \
--terminal-width="${PREVIEW_WIDTH}" \
"${FILE_PATH}" && exit 0
cat "${FILE_PATH}" && exit 0
exit 1;;
## Image
image/*)
exit 5;;
## Video and audio
video/* | audio/*)
echo "$realpath"
mediainfo "${FILE_PATH}" && exit 0
exiftool "${FILE_PATH}" && exit 0
exit 1;;
esac
}
FILE_EXTENSION="${FILE_PATH##*.}"
FILE_EXTENSION_LOWER="$(printf "%s" "${FILE_EXTENSION}" | tr '[:upper:]' '[:lower:]')"
handle_extension
MIMETYPE="$( file --dereference --brief --mime-type -- "${FILE_PATH}" )"
handle_mime "${MIMETYPE}"
exit 1