#!/bin/sh # lh: the Link Handler # takes one path or URL as its argument, launches the appropriate program for this. # if $1 isn't provided, spawn $BROWSER and exit. this allows lh to be used as a pseudo-browser. [ -z "$1" ] && exec "$BROWSER" #from pure-sh-bible split() { set -f old_ifs=$IFS IFS=$2 set -- $1 printf '%s\n' "$@" IFS=$old_ifs set +f } case "$1" in gemini://*|gopher://*) $TERMINAL -e bombadillo "$1" ;; *mkv|*webm|*mp4) mpv "$1" >/dev/null 2>&1 & ;; *youtube.com/watch*|*youtube.com/playlist*|*youtu.be*|*hooktube.com*|*bitchute.com*|*twitch.tv/videos/*|*twitch.tv/*/v/*) mpv --ytdl "$1" >/dev/null 2>&1 & ;; *twitch.tv/*) STREAMQUAL="$(split "$(streamlink "$1"|grep 'Available streams')" ", "|\ grep -E "[0-9]"|\ dmenu -p "choose stream quality for $1")" streamlink -p mpv $1 $STREAMQUAL >/dev/null 2>&1 & ;; *png|*jpg|*jpe|*jpeg|*gif) IMGPATH="/tmp/$(echo "$1"|sed "s/.*\\///")" curl -sL "$1" >"$IMGPATH"&&sxiv -a "$IMGPATH">/dev/null 2>&1 & ;; *mp3|*m4a|*flac|*aiff|*opus|*ogg|*mp3?source*) mpv "$1" >/dev/null 2>&1 & ;; *epub|*pdf|*djvu) BOOKPATH="/tmp/$(echo "$1"|sed "s/.*\\///")" if [ -n "$READER" ]; then curl -sL "$1" >"$BOOKPATH"&&$READER "$BOOKPATH">/dev/null 2>&1 & else curl -sL "$1" >"$BOOKPATH" & fi ;; *) if [ -f "$1" ]; then $TERMINAL -e "${EDITOR:-vi} $1" else $BROWSER "$1" >/dev/null 2>&1 & fi ;; esac