dotfiles/bin/plumber

244 lines
8.2 KiB
Plaintext
Raw Normal View History

2024-06-23 19:39:49 +02:00
#!/bin/bash -pe
# SPDX-License-Identifier: GPL-3.0-or-later
# Copyright 2024, Gerrit-John Los <los@lugons.org>
unset http_proxy https_proxy
# - options -
msg() { echo "${0##*/}: $*" 1>&2 ; }
usage() {
[ $# -eq 0 ] || msg "$*"
cat 1>&2 <<-EOT
usage: ${0##*/} [-h] [-1|-2|-3] [-p|-s|-c] [explicit selection]
-h: show this help
-1: use rule set 1 (default)
-2: use rule set 2
-3: use rule set 3
-p: use primary selection (default)
-s: use secondary selection
-c: use clipboard
EOT
exit 2
}
rule_set=1
selection=primary
while getopts 'h123psc' opt "$@" ;do
case "$opt" in
h) usage ;;
[123]) rule_set="$opt" ;;
p) selection='primary' ;;
s) selection='secondary' ;;
c) selection='clipboard' ;;
--) break ;;
*) usage ;;
esac
done
shift $((OPTIND-1))
shopt -s extglob
if [ $# -eq 0 ] ;then
clip="$(xclip -out -selection "$selection" |tr '\n' ' ')"
set -- "${clip}"
else
clip="$*"
fi
man_pat='+([a-zA-Z_.-])?([a-z0-9])?(\ )\([0-9]?([a-zX]*([a-z0-9]))\)'
term() { "$(type -p uxterm)" -e "${*}" ; }
flash() { term "$(type -p xine)" "${@}" ; }
movie() { xtoolwait "$(type -p xine)" "${@}" ; }
stream() { xtoolwait "$(type -p mplayer)" "${@}" ; }
image() { xtoolwait "$(type -p display)" -b "${@}" ; }
pdf() { xtoolwait "$(type -p xpdf)" "${@}" ; }
ps() { xtoolwait "$(type -p ghostview)" "${@}" ; }
#view() { xtoolwait "$(type -p uxterm)" -e "view '${*}'" ; }
view() { term "view '${*}'" ; }
www() { "$(type -P www)" "${@}" ; }
#ftp() { xtoolwait "$(type -p uxterm)" -e "lftp '${*}'" ; }
ftp() { term "lftp '${*}'" ; }
wget() { ( cd ~/tmp/_INCOMING && "$(type -P wget)" "$@" ) ; }
man() {
for mp in "$@" ;do
if [[ "$mp" == *\(*\) ]] ;then
local section="${mp##*\(}" ; section="${section%)}"
local name="${mp%?( )(*)}"
#xtoolwait "$(type -p uxterm)" -e "man -s${section} '${name}'"
term "man -s${section} '${name}'"
else
#xtoolwait "$(type -p uxterm)" -e "man -s1,8 '${mp}'"
term "man -s1,8 '${mp}'"
fi
done
}
#info() { xtoolwait "$(type -p uxterm)" -e "info '${*}'" ; }
info() { term "info '${*}'" ; }
#dict() { xtoolwait "$(type -p uxterm)" -e "dict '${*}'" ; }
dict() { term "dict '${*}'" ; }
google() { $(type -P google) "${*}" ; }
#dir() { xtoolwait "$(type -p uxterm)" -e "ltr '${*}' |less" ; }
dir() { term "ltr '${*}' |less" ; }
w3m() { term "w3m '${*}'" ; }
youtube-dl() { cd /home/los/opt/var/data/Media/vids/ && /home/los/opt/bin/youtube-dl "$@" ; }
surf() { ("$(type -P surf)" -gm "$@" ; sleep 1) & sleep 1 ; }
fake_chromium() { surf -u 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36' "$@" ; }
browse() {
case "$rule_set" in
3) view "$@" ;;
2) fake_chromium "$@" ;;
*) www "$@" ;;
esac
}
search() {
case "$rule_set" in
2) dict "$@" ;;
*) google "$@" ;;
esac
}
if [[ "${clip}" == http?(s)://?(www.)google.+([a-z])/url?q=* ]] ;then
clip="${clip#*q=}" ; clip="${clip%%&sa=*}"
fi
if [ -z "${clip}" ] ;then
exit
elif [[ "${clip}" == +([0-9]) ]] && cmd="$(ps -o cmd= -p "${clip}")" ;then
case "$rule_set" in
2) xwingo -R "${clip}" ;;
*) xwingo "${clip}" ;;
esac
elif [[ "${clip}" == Paket?(verfolgungs)nummer*+([0-9]) ]] ;then
pnr="${clip##Paket?(verfolgungs)nummer+([^0-9])}"
#go dhl="$pnr"
www "http://nolp.dhl.de/nextt-online-public/track.do?zip=68161&idc=${pnr}&rfn=&lang=de"
elif [[ "${clip}" == https://www.lawblog.de/archives/* ]] ;then
surf "$clip"
elif [[ "${clip}" == CWE-+([0-9]) ]] ;then
cwenr="${clip#CWE-}"
www "https://cwe.mitre.org/data/definitions/$cwenr.html"
elif [ -e "${clip}" -o -e "$HOME/${clip#\~/}" ] ;then
[ -e "${clip}" ] && file="${clip}" || file="$HOME/${clip#\~/}"
filetype="$(file -biz "${clip}")"
case "$filetype" in
image/*) image "$file" ;;
application/pdf) pdf "$file" ;;
application/postscript) ps "$file" ;;
application/x-directory)
if [ -e "$file"/index.html ] ;then
browse "$file/index.html"
else
view "$file"
fi
;;
text/*)
if [[ "$file" == *.htm?(l) ]] ;then
browse "$file"
else
view "$file"
fi
;;
*) view "$file" ;;
esac
elif [[ "${clip}" == http?(s)://* || "${clip}" == www.* ]] ;then
if \
[[ "${clip}" == ?(https://encrypted.google.com/url?q=)http?(s)://?(www.|music.|[a-z][a-z].|m.)youtube?(-nocookie).com/@(watch|v/|embed/|shorts/)* ]] ||
[[ "${clip}" == http://www.liveleak.com/view?i=* ]] ||
[[ "${clip}" == http?(s)://@([a-z][a-z].)sevenload.com/videos/* ]] ||
[[ "${clip}" == http?(s)://?(player.)vimeo.com?(/video)/+([0-9]) ]] ||
[[ "${clip}" == http?(s)://?(www.)break.com?(/video)/+([a-z0-9-]) ]] ||
[[ "${clip}" == http?(s)://?(www.)dailymotion.com/video/+([a-z0-9-]) ]]
then
#cd ~/tmp/INCOMING/ && flash "$(clive --quiet --print-fname "${clip}")"
youtube-dl "${clip#https://encrypted.google.com/url?q=}"
elif [[ "${clip}" =~ https?://de-vid.com/video/.*-(.{11,11})\.html ]] ;then
youtube-dl "https://www.youtube.com/watch?v=${BASH_REMATCH[1]}"
elif \
[[ "${clip}" == http?(s)://@(x|twitter).com/*/video/+([0-9])?(\?lang=[a-z][a-z]) ]] ||
[[ "${clip}" == http?(s)://vk.com/video_ext.php?oid=* ]] ||
[[ "${clip}" == http?(s)://www.bitchute.com/@(video|embed)/* ]] ||
[[ "${clip}" == http?(s)://rumble.com/embed/* ]] ||
[[ "${clip}" == http?(s)://rutube.ru/video/* ]] ||
[[ "${clip}" == http?(s)://odysee.com/@@(RT|Ruptly|SputnikInternational|Overthrown):*/* ]] ||
[[ "${clip}" == http?(s)://ok.ru/video/* ]]
then
youtube-dl "${clip}"
elif [[ "${clip}" == http?(s)://youtu.be/* ]] ;then
youtube-dl "https://youtube.com/watch?v=${clip#http?(s)://youtu.be/}"
elif [[ "${clip}" == http?(s)://odysee.com/\$/embed/* ]] ;then
youtube-dl -f 0 "${clip}"
elif \
[[ "${clip}" == http?(s)://kb.vmware.com/kb/* ]] ||
[[ "${clip}" == http?(s)://www.w3schools.com/howto/tryit.asp?* ]]
then
surf "${clip}"
elif \
[[ "${clip}" == http?(s)://?(mobile.)@(x|twitter).com/*/+([0-9])?(\?lang=[a-z][a-z]) ]] ||
[[ "${clip}" == http?(s)://?(mobile.)@(x|twitter).com/*/status/* ]]
then
fake_chromium "${clip}"
elif [[ "${clip}" == http?(s)://*.d.o/* ]] ;then
www "${clip/.d.o\//.debian.org\/}"
elif [[ "${clip}" == http?(s)://deb.li/* ]] ;then
www "${clip/\/\/deb.li\//\/\/deb.li\/p\/}"
elif \
[[ "${clip}" == http?(s)://?(www).zeit.de/* ]] ||
[[ "${clip}" == http?(s)://?(www).golem.de/* ]]
then
www "https://archive.ph/${clip}"
elif [[ "${clip}" == http?(s)://tinyurl.com/* ]] ;then
www "${clip/tinyurl/preview.tinyurl}"
elif [[ "${clip}" == http?(s)://@(bit.ly|j.mp|ju.mp)/* ]] ;then
www "${clip}+"
elif [[ "${clip}" == http?(s)://goo.gl/* ]] ;then
www "${clip}.info"
elif [[ "${clip}" == http?(s)://@(youtu.be|fb.me|dpaq.de)/* ]] ;then
# no useful longurl support
www "${clip}+no_preview_yet+"
# elif [[ "${clip}" == https://@(gcc.gnu.org|isocpp.org|dun.gs|meetingcpp.com)/* ]] ;then
# # non working SSL certs ->use plain http
# www "${clip/https/http}"
# elif [[ "${clip}" == http?(s)://@(*.wordpress.com|*.wikipedia.org|*.wiktionary.org|www.linux-foundation.org|github.com|www.techdirt.com|*.debian.org|netzpolitik.org|blog.quasardb.net|www.reddit.com|isocpp.org|*.archlinux.org|forums.virtualbox.org|*.fedoraproject.org|*.indymedia.org|*.ubuntu.com|*.astaro.org|openvpn.net|www.howtoforge.com|mariadb.com)/* ]] ;then
# # non working SSL certs enforced -> download
# page="${clip%/}" ; page="$(echo "${page##*/}" |urldecode)"
# [ -d ~/tmp/_INCOMING/webpages ] || mkdir ~/tmp/_INCOMING/webpages
# wget --no-check-certificate -k -O ~/tmp/_INCOMING/webpages/"${page} .html" "${clip}"
# www ~/tmp/_INCOMING/webpages/"${page} .html"
elif [[ "${clip}" == http://*.streamcloud.eu:8080/*/video.mp4 ]] ;then
stream "${clip}"
else
arg="$*"
browse "${arg// /}"
fi
elif [[ "${clip}" == file://* ]] ;then
browse "$*"
elif [[ "${clip}" == ftp?(s)://* || "${clip}" == ftp.* ]] ;then
ftp "$@"
elif [[ "${clip}" == slogin\ * ]] ;then
term "${clip}"
elif [[ "${clip}" == +([a-z-])@+([a-z0-9.-])?(:*) ]] ;then
term "slogin '${clip%%:*}'"
elif [[ "${clip}" == info\ [a-z]* ]] ;then
set -- ${clip}
shift
for x in "$@" ; do info "$x" ; done
elif [[ "${clip}" == *(\ )$man_pat*(,+(\ )$man_pat)*(\ ) ]] ;then
clip="${clip// /}"
set -- ${clip//,/ }
man "$@"
elif [[ "${clip}" == @(chromium|firefox)\ * ]] ;then
set -- ${clip}
"$@"
elif [ "$(type -t "${clip}")" == 'file' ] ;then
case "$rule_set" in
2) google "$@" ;;
*) man "${clip}" ;;
esac
else
search "$@"
fi