#!/usr/bin/env sh # # Advanced nsxiv url opening script. # # Can open remote urls of individual images, galleries, and local files at the same time. # Uses gallery-dl for remote gallery opening - so if gallery-dl can open it, so can nsxiv. # # Usage: simply add multiple urls/paths as arguments. # nsxiv-rifle "https://linkto.my/image.png" my/local/relative-path.jpg /home/absolute.gif cache_dir="$(mktemp -d)" die() { [ -n "$1" ] && printf '%s\n' "$*" >&2 exit 1 } cleanup() { rm -f -- "$cache_dir"/* } from_local() { fpath="$(realpath -e "$1")" ln -s "$fpath" "$cache_dir" } # invokes single image downloading or gallery downloading depending on content type from_remote() { link="$(dereference "$1")" if curl -sLI "$link" | grep -i '^Content-Type:' | grep -q image; then get_single_image "$link" else get_gallery "$link" fi } get_gallery() { command -v gallery-dl 1>/dev/null 2>&1 || return gallery-dl -q -D "$cache_dir" "$1" } get_single_image() { pwd="$PWD" cd "$cache_dir" && curl -sSLO "$1" cd "$pwd" || exit 1 } # unaliases urls which will not be downloaded correctly otherwise dereference() { # teddit if echo "$1" | grep -qe "https\?://w\?w\?w\?\.\?teddit\.net.\+"; then echo "$1" | sed -e 's|^.*pics/w:null_\(.\+\)$|https://i.redd.it/\1|' else echo "$1" fi } ### main ### command -v nsxiv 1>/dev/null 2>&1 || die "Requires nsxiv installed" [ -z "$1" ] && nsxiv trap cleanup EXIT [ -d "$cache_dir" ] || mkdir -p -- "$cache_dir" || die im_number=1 while [ -n "$1" ]; do case "$1" in *://*.*) from_remote "$1" ;; *) from_local "$1" ;; esac im_number=$((im_number + 1)) shift done [ "$(find -L "$cache_dir" -type f -print | wc -l)" -ne 0 ] && nsxiv -p "$cache_dir"