feat: add joshuto config

This commit is contained in:
Fabio Lenherr / DashieTM 2023-02-26 03:21:28 +01:00
parent 782030a5c3
commit 491fa911c9
5 changed files with 244 additions and 0 deletions

View file

@ -22,6 +22,7 @@ alias gm='git commit -m'
alias ga="git add -A" alias ga="git add -A"
alias g+='bear -- g++ -Wextra -Werror -std=c++20' alias g+='bear -- g++ -Wextra -Werror -std=c++20'
alias s="kitty +kitten ssh" alias s="kitty +kitten ssh"
alias zl='z "" '
# pwd based on the value of _ZO_RESOLVE_SYMLINKS. # pwd based on the value of _ZO_RESOLVE_SYMLINKS.
function __zoxide_pwd function __zoxide_pwd

4
joshuto/joshuto.toml Normal file
View file

@ -0,0 +1,4 @@
[preview]
max_preview_size = 50000097152
preview_shown_hook_script = "~/.config/joshuto/on_preview_shown"
preview_removed_hook_script = "~/.config/joshuto/on_preview_removed"

5
joshuto/on_preview_removed.sh Executable file
View file

@ -0,0 +1,5 @@
#!/usr/bin/env bash
kitty +kitten icat \
--transfer-mode=file \
--clear 2>/dev/null

32
joshuto/on_preview_shown Executable file
View file

@ -0,0 +1,32 @@
#!/usr/bin/env bash
FILE_PATH="$1" # Full path of the previewed file
PREVIEW_X_COORD="$2" # x coordinate of upper left cell of preview area
PREVIEW_Y_COORD="$3" # y coordinate of upper left cell of preview area
PREVIEW_WIDTH="$4" # Width of the preview pane (number of fitting characters)
PREVIEW_HEIGHT="$5" # Height of the preview pane (number of fitting characters)
TMP_FILE="$HOME/.cache/joshuto/thumbcache.png"
mimetype=$(file --mime-type -Lb "$FILE_PATH")
function image {
kitty +kitten icat \
--transfer-mode=file \
--clear 2>/dev/null
kitty +kitten icat \
--transfer-mode=file \
--place "${PREVIEW_WIDTH}x${PREVIEW_HEIGHT}@${PREVIEW_X_COORD}x${PREVIEW_Y_COORD}" \
"$1" 2>/dev/null
}
case "$mimetype" in
image/*)
image "${FILE_PATH}"
;;
*)
kitty +kitten icat \
--transfer-mode=file \
--clear 2>/dev/null
;;
esac

202
joshuto/preview.sh Executable file
View file

@ -0,0 +1,202 @@
#!/usr/bin/env bash
# ranger supports enhanced previews. If the option "use_preview_script"
# is set to True and this file exists, this script will be called and its
# output is displayed in ranger. ANSI color codes are supported.
# NOTES: This script is considered a configuration file. If you upgrade
# ranger, it will be left untouched. (You must update it yourself.)
# Also, ranger disables STDIN here, so interactive scripts won't work properly
# Meanings of exit codes:
# code | meaning | action of ranger
# -----+------------+-------------------------------------------
# 0 | success | success. display stdout as preview
# 1 | no preview | failure. display no preview at all
# 2 | plain text | display the plain content of the file
# 3 | fix width | success. Don't reload when width changes
# 4 | fix height | success. Don't reload when height changes
# 5 | fix both | success. Don't ever reload
# 6 | image | success. display the image $cached points to as an image preview
# 7 | image | success. display the file directly as an image
# Meaningful aliases for arguments:
path="$1" # Full path of the selected file
width="$2" # Width of the preview pane (number of fitting characters)
height="$3" # Height of the preview pane (number of fitting characters)
cached="$4" # Path that should be used to cache image previews
preview_images="$5" # "True" if image previews are enabled, "False" otherwise.
x_coord=0
y_coord=0
cache_path=""
while [ "$#" -gt 0 ]; do
case "$1" in
"--path")
shift
path="$1"
;;
"--preview-width")
shift
width="$1"
;;
"--preview-height")
shift
height="$1"
;;
"--x-coord")
shift
x_coord="$1"
;;
"--y-coord")
shift
y_coord="$1"
;;
"--preview-images")
shift
preview_images="$1"
;;
"--image-cache")
shift
cache_path="$1"
;;
esac
shift
done
maxln=200 # Stop after $maxln lines. Can be used like ls | head -n $maxln
# Find out something about the file:
mimetype=$(file --mime-type -Lb "$path")
extension=$(/bin/echo "${path##*.}" | awk '{print tolower($0)}')
realpath=$(realpath "$path")
# Functions:
# runs a command and saves its output into $output. Useful if you need
# the return value AND want to use the output in a pipe
try() { output=$(eval '"$@"'); }
# writes the output of the previously used "try" command
dump() { /bin/echo "$output"; }
# a common post-processing function used after most commands
trim() { head -n "$maxln"; }
# wraps highlight to treat exit code 141 (killed by SIGPIPE) as success
safepipe() { "$@"; test $? = 0 -o $? = 141; }
tmsu_tag_list() {
taglist=`tmsu tags -n never -1 "$path"`
result=$?
if [ $result -eq 0 ]; then
if [ -z "$taglist" ]; then
echo "No Tags"
else
taglist=`echo "$taglist" | sed 's/^/ • /'`
echo "Tags:"
echo "$taglist"
fi
fi
}
# case "$mimetype" in
# image/* | video/* | audio/*)
# image_output="Tags:\n `tmsu tags -n never -1 "$path" | sed 's/^/ • /'`"
# echo -e "$image_output"
# esac
# Image previews, if enabled in ranger.
if [ "$preview_images" = "True" ]; then
case "$mimetype" in
# Image previews for SVG files, disabled by default.
###image/svg+xml)
### convert "$path" "$cached" && exit 6 || exit 1;;
# Image previews for image files. w3mimgdisplay will be called for all
# image files (unless overriden as above), but might fail for
# unsupported types.
image/*)
exit 7;;
# Image preview for video, disabled by default.:
###video/*)
### ffmpegthumbnailer -i "$path" -o "$cached" -s 0 && exit 6 || exit 1;;
esac
fi
case "$extension" in
# Archive extensions:
a|ace|alz|arc|arj|bz|bz2|cab|cpio|deb|gz|jar|lha|lz|lzh|lzma|lzo|\
rpm|rz|t7z|tar|tbz|tbz2|tgz|tlz|txz|tZ|tzo|war|xpi|xz|Z|zip)
try als "$path" && { dump | trim; exit 0; }
try acat "$path" && { dump | trim; exit 3; }
try bsdtar -lf "$path" && { dump | trim; exit 0; }
exit 1;;
rar)
# avoid password prompt by providing empty password
try unrar -p- lt "$path" && { dump | trim; exit 0; } || exit 1;;
7z)
# avoid password prompt by providing empty password
try 7z -p l "$path" && { dump | trim; exit 0; } || exit 1;;
# PDF documents:
pdf)
try pdftotext -l 10 -nopgbrk -q "$path" - && \
{ dump | trim | fmt -s -w $width; exit 0; } || exit 1;;
# BitTorrent Files
torrent)
try transmission-show "$path" && { dump | trim; exit 5; } || exit 1;;
# ODT Files
odt|ods|odp|sxw)
try odt2txt "$path" && { dump | trim; exit 5; } || exit 1;;
# HTML Pages:
htm|html|xhtml)
try w3m -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; }
try lynx -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; }
try elinks -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; }
;; # fall back to highlight/cat if the text browsers fail
esac
case "$mimetype" in
# Syntax highlight for text files:
text/* | */xml | */json)
if [ "$(tput colors)" -ge 256 ]; then
pygmentize_format=terminal256
highlight_format=xterm256
else
pygmentize_format=terminal
highlight_format=ansi
fi
#try safepipe highlight --out-format=${highlight_format} "$path" && { dump | trim; exit 5; }
#try safepipe pygmentize -f ${pygmentize_format} "$path" && { dump | trim; exit 5; }
try safepipe bat -pp --color always "$path" && { dump | trim; exit 5; }
cat "$path"
exit 2;;
image/png | image/jpeg | image/gif)
dimension="Size `exiftool "$path" | grep '^Image Size' | awk '{print $4}'`"
tags=$(tmsu_tag_list)
echo "$realpath"
echo "$dimension"
echo "$tags"
meta_file="$(get_preview_meta_file $path)"
let y_offset=`printf "${tags}" | sed -n '=' | wc -l`+3
echo "y-offset $y_offset" > "$meta_file"
exit 4
;;
image/*)
tags=$(tmsu_tag_list)
echo "$tags"
echo "$realpath"
exit 4
#img2txt --gamma=0.6 --width="$width" "$path" && exit 4 || exit 1
;;
# Display information about media files:
video/* | audio/*)
tags=$(tmsu_tag_list)
echo "$tags"
echo "$realpath"
exiftool "$path" && exit 5
# Use sed to remove spaces so the output fits into the narrow window
try mediainfo "$path" && { dump | trim | sed 's/ \+:/: /;'; exit 5; } || exit 1;;
esac
exit 1