dotfiles/.bin/dexec_browser

178 lines
6.6 KiB
Plaintext
Raw Normal View History

#!/bin/ksh
2022-12-06 08:01:44 +01:00
# dexec_browser
# A multi browser launcher
#
# 1. choose input source
# (filtered-, full history, clipboad, manual entry)
# 2. choose how to handle the input
# (can suggest a matching default)
# 3. choose which browser to use
# (can suggest a matching default)
. ${HOME}/.bin/_config
2022-12-06 08:01:44 +01:00
BROWSER=luakit
HISTFILE="${HOME}/.browser_history"
touch "${HISTFILE}"
2022-12-06 08:01:44 +01:00
# show history file
# EXPECTS: $HISTFILE $DMENU_CMD
2022-12-06 08:01:44 +01:00
# PROVIDES: $INPUT
read_input() {
local S=$( { echo "paste_from_clipboard"; tail -r ${HISTFILE}; } \
| awk '!seen[$0]++' \
| ${DMENU_CMD} -p "Bookmarks" -l 20)
2022-12-06 08:01:44 +01:00
case "${S}" in
paste_from_clipboard) S=$(xclip -o | head -n 1); ;;
2022-12-06 08:01:44 +01:00
esac
2022-12-06 08:01:44 +01:00
[ -z "${S}" ] && exit 0
2022-12-06 08:01:44 +01:00
INPUT="${S}"
}
# Decide how to open the thing
# EXPECTS: $INPUT $DMENU_CMD
# PROVIDES: $URI
choose_wrapper() {
local SE="OPEN URL
Amazon
Amazon Order ID
2022-12-06 08:01:44 +01:00
CPAN
Crates.io
DuckDuckGo Web Search
DuckDuckGo Image Search
Startpage Web Search
Kagi Web Search
2022-12-11 11:55:10 +01:00
GLIB Documentation
2022-12-06 08:01:44 +01:00
Github
2022-12-11 11:55:10 +01:00
LibSOUP Documentation
Webkit Documentation
2022-12-06 08:01:44 +01:00
Marc Info MessageID
Marc Info OpenBSD Misc List
Marc Info OpenBSD Ports CVS
Marc Info OpenBSD Ports List
Marc Info OpenBSD Tech List
PDF Viewer
SearX Web Search
SearX Image Search
2023-03-06 08:14:38 +01:00
Torrent Leech
2022-12-06 08:01:44 +01:00
Wikipedia DE
Wikipedia EN
InternetMovieDataBase (IMDB)
OpenStreetMap (OSM)
Grep.app
Google Maps
2023-01-07 15:07:46 +01:00
Youtube
2023-02-22 08:18:57 +01:00
Zalando"
2022-12-06 08:01:44 +01:00
local C="$(printf '%s' "${INPUT}" \
| head -n 1)"
case "${C}" in
*::*) DEFAULT="CPAN (default)"; ;;
http*) DEFAULT="OPEN (default)"; ;;
2023-04-09 09:37:39 +02:00
192.168.*) DEFAULT="OPEN (default)"; C="http://${C}"; ;;
10.20.*) DEFAULT="OPEN (default)"; C="http://${C}"; ;;
???-???????-???????) DEFAULT="Amazon Order ID (default)"; ;;
2022-12-06 08:01:44 +01:00
gopher*) DEFAULT="OPEN (default)"; ;;
g_*) DEFAULT="GLIB Documentation (default)"; ;;
[Ss]oup_*) DEFAULT="LibSOUP Documentation (default)"; ;;
[Ww]ebkit_*) DEFAULT="Webkit Documentation (default)"; ;;
2023-04-09 09:37:39 +02:00
www.*) DEFAULT="OPEN (default)"; C="http://${C}"; ;;
2022-12-06 08:01:44 +01:00
\<*@*\>) DEFAULT="Marc Info Message ID (default)"; ;;
2023-04-09 09:37:39 +02:00
*.com|*.de|*.net|*.org) DEFAULT="OPEN (default)"; C="http://${C}"; ;;
*.at|*.ch|*.social) DEFAULT="OPEN (default)"; C="http://${C}" ;;
*.io|*.sh|*.pw|*.party) DEFAULT="OPEN (default)"; C="http://${C}"; ;;
*.coffee|*.me|*.cloud) DEFAULT="OPEN (default)"; C="http://${C}"; ;;
*.[a-zA-Z]*/*) DEFAULT="OPEN (default)"; C="http://${C}"; ;;
*) DEFAULT="DuckDuckGo Web Search (default)"; ;;
2022-12-06 08:01:44 +01:00
esac
local S="$(printf "%s\n%s" "${DEFAULT}" "${SE}" \
| ${DMENU_CMD} -p "Search Where?" -l 20)"
2023-03-06 08:14:38 +01:00
C=$(echo "$C" | sed 's/ /%20/g')
2022-12-06 08:01:44 +01:00
case "${S}" in
OPEN*) URI="${C}"; ;;
Amazon) URI="https://www.amazon.de/s?k=${C}&rh=p_n_enc-merchantbin%3AA3JWKAKR8XB7XF"; ;;
Amazon*O*) URI="https://www.amazon.de/gp/your-account/order-details/ref=ppx_yo_dt_b_order_details_o00?orderID=${C}"; ;;
2022-12-06 08:01:44 +01:00
CPAN*) URI="https://metacpan.org/search?q=${C}"; ;;
Crate*) URI="https://crates.io/search?q=${C}"; ;;
Grep*) URI="https://grep.app/search?q=${C}"; ;;
2022-12-11 11:55:10 +01:00
GLIB*) URI="https://docs.gtk.org/glib/flags.UriFlags.html?q=${C}"; ;;
LibSOUP*) URI="https://libsoup.org/libsoup-3.0/index.html?q=${C}"; ;;
2022-12-06 08:01:44 +01:00
Github) URI="https://github.com/search?q=${C}"; ;;
D*Web*) URI="https://html.duckduckgo.com/html?q=${C}"; ;;
Startpage*) URI="https://eu.startpage.com/do/search?prfe=00d4bb7f075582be9304aaad813ac6b4dc4bd733a098955c35c0586a99eaddf123ac81f1301f1e4f06fd014082141134ec5e0c5441250cf4c05557bed28fcfbced8de0007d01a0254332962533&query=${C}"; ;;
2022-12-06 08:01:44 +01:00
D*Ima*) URI="https://duckduckgo.com/?q=${C}&iax=images&ia=images"; ;;
S*Web*) URI="https://searx.bar/search?q=${C}&category_general=on"; ;;
Kagi*Web*) URI="https://kagi.com/search?q=${C}"; ;;
Webkit*) URI="https://webkitgtk.org/reference/webkit2gtk/2.42.5/?q=${C}"; ;;
2022-12-06 08:01:44 +01:00
S*Ima*) URI="https://searx.bar/search?q=${C}&category_images=on"; ;;
2023-03-06 08:14:38 +01:00
Tor*Lee*) URI="https://www.torrentleech.org/torrents/browse/index/query/${C}"; ;;
2022-12-06 08:01:44 +01:00
W*DE*) URI="https://de.m.wikipedia.org/wiki/Spezial:Suche/${C}"; ;;
W*EN*) URI="https://en.m.wikipedia.org/wiki/Spezial:Search/${C}"; ;;
*IMDB*) URI="https://www.imdb.com/find?q=${C}"; ;;
O*S*M*) URI="https://www.openstreetmap.org/search?query=${C}"; ;;
G*Maps) URI="https://www.google.com/maps/place/${C}"; ;;
You*be) URI="https://m.youtube.com/results?sp=mAEA&search_query=${C}" ;;
M*I*ID*) URI="https://marc.info/?i=$(printf '%s' "${C}" | tr -d '<>')"; ;;
M*I*P*List) URI="https://marc.info/?l=openbsd-ports&s=${C}&q=b"; ;;
M*I*T*List) URI="https://marc.info/?l=openbsd-tech&s=${C}&q=b"; ;;
M*I*M*List) URI="https://marc.info/?l=openbsd-misc&s=${C}&q=b"; ;;
M*I*P*CVS) URI="https://marc.info/?l=openbsd-ports-cvs&s=${C}&q=b"; ;;
2023-02-22 08:18:57 +01:00
Zalando) URI="https://www.zalando.de/herren/?q=${C}"; ;;
2022-12-06 08:01:44 +01:00
*) exit 0 ;;
esac
}
# Which browser shall we use?
# EXPECTS: $URI $DMENU_CMD
# PROVIDES: $BROWSER
choose_browser() {
2022-12-06 08:01:44 +01:00
case "${URI}" in
gopher://*) DEFAULT="Lagrange (default)"; ;;
gemini://*) DEFAULT="Lagrange (default)"; ;;
*console.hetzner.cloud*) DEFAULT="Firefox (default)"; ;;
*youtube.com/watch*) DEFAULT="Mpv (default)"; ;;
*media.ccc.de/v/*) DEFAULT="Mpv (default)"; ;;
*.pdf|*.cb|*.ps) DEFAULT="Zathura (default)"; ;;
*.mp4|*.m4v|*.mkv) DEFAULT="Mpv (default)"; ;;
*) DEFAULT="$BROWSER (default)"; ;;
2022-12-06 08:01:44 +01:00
esac
local S="${DEFAULT}\nLuakit\nVimb\nFirefox\nChrome\nQutebrowser\nWyeb\nNetsurf\nTor-Browser\nDillo\nSurf\nMpv"
case $(echo "${S}" | ${DMENU_CMD} -p "Browser" -l 20) in
[Nn]etsurf*) BROWSER=netsurf-gtk3 ;;
[Vv]imb*) BROWSER="vimb --no-maximize" ;;
[Dd]illo*) BROWSER=dillo; ;;
[Qq]uteb*r*) BROWSER="qutebrowser -R" ;;
[Ss]urf*) BROWSER=surf ;;
[Oo]tter*r*) BROWSER=otter-browser ;;
[Ll]uakit*) BROWSER="luakit -Un" ;;
[Cc]hrome*) BROWSER=chrome ;;
[Ff]irefox*) BROWSER=firefox ;;
[Tt]or-B*r*) BROWSER=tor-browser ;;
[Zz]athura*) BROWSER=zathura ;;
[Ll]agrange*) BROWSER=lagrange ;;
[Ww]yeb*) BROWSER=wyeb ;;
[Mm]pv*) BROWSER="mpv" ;;
2022-12-06 08:01:44 +01:00
*) exit 0;;
esac
}
save_history() {
printf '%s\n' "${INPUT}" | sed 's/^ *//g;s/ *$//g' >> "${HISTFILE}"
2022-12-06 08:01:44 +01:00
}
# main program starts here.
read_input
choose_wrapper
choose_browser
2022-12-06 08:01:44 +01:00
save_history
$BROWSER "$(printf '%s' "${URI}" | sed 's/ /%20/g')" &