#!/bin/sh #{{{ printhelp printhelp () { printf "bm: browser menu script; interface for browsers.\n" printf " -b) basilisk interface\n" printf " -B) brave browser\n" printf " -d) firedragon interface\n" printf " -f) firefox interface\n" printf " -l) librewolf interface\n" printf " -m) mullvad-browser interface\n" printf " -q) qutebrowser interface\n" printf " -d ARG) provide menu args\n" printf " -u ARG) provide URL to open\n" exit } #}}} #{{{ BROWSERSBYCMD # Native binaries type basilisk >/dev/null 2>&1 && BSC="bsc" type brave >/dev/null 2>&1 && BRC="brc" && BRA="brave" type firedragon >/dev/null 2>&1 && FDC="fdc" type firefox >/dev/null 2>&1 && FFC="ffc" type librewolf >/dev/null 2>&1 && LWC="lwc" type mullvad-browser >/dev/null 2>&1 && MBC="mbc" type qutebrowser >/dev/null 2>&1 && QBC="qbc" [ -n "$WAYLAND_DISPLAY" ] && \ type wl-copy >/dev/null 2>&1 && CLIPB="clip" [ -z "$WAYLAND_DISPLAY" ] && [ -n "$DISPLAY" ] && \ type xclip >/dev/null 2>&1 && CLIPB="clip" # Flatpaks if type flatpak >/dev/null; then LIST="$(flatpak list)" echo "$LIST" | grep -q "org.mozilla.firefox" && FFC="ffc" echo "$LIST" | grep -q "com.brave.Browser" && BRA="brave" echo "$LIST" | grep -q "io.gitlab.librewolf-community" && \ LWC="lwc" echo "$LIST" | grep -q "org.qutebrowser.qutebrowser" && \ QBC="qbc" fi BROWSERSINSTALLED="$(printf "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s" \ "$BSC" "${BSC:+\n}" "$BRC" "${BRC:+\n}" "$BRA" "${BRA:+\n}" \ "$FDC" "${FDC:+\n}" "$FFC" "${FFC:+\n}" "$LWC" "${LWC:+\n}" \ "$MBC" "${MBC:+\n}" "$QBC" "${QBC:+\n}" "$CLIPB")" #}}} #{{{ getopts unset ARG BSC BRA FDC FFC LWC MBC QBC CLIPB URL SEL while getopts "hbBcrflmqxwd:u:" o; do case "${o}" in b) SEL="BSC" ;; B) SEL="BRA" ;; r) SEL="FDC" ;; f) SEL="FFC" ;; l) SEL="LWC" ;; m) SEL="MBC" ;; q) SEL="QBC" ;; c) SEL="CLIPB" ;; d) ARG=${ARG:+"$ARG "}"$OPTARG" ;; u) URL="$OPTARG " ;; *) printhelp ;; esac done #}}} #{{{ clip clip () { if [ -n "$WAYLAND_DISPLAY" ] && [ -n "$CANCLIPB" ]; then printf "%s" "${URL%% }" | wl-copy "$*" elif [ -n "$DISPLAY" ] && [ -n "$CANCLIPB" ]; then printf "%s" "${URL%% }" | xclip -selection clipboard "$*" fi } #}}} #{{{ bra bra () { if [ -n "$BRA" ]; then if type brave >/dev/null 2>&2; then brave "$1" else flatpak run com.brave.Browser "$1" fi fi } #}}} dmenu_lp () { dmenu -l 15 -p "$@" } #{{{ main if [ -n "$SEL" ]; then case "$SEL" in "BRA") exec bra "$URL" ;; "BRC") exec brc ${ARG:+"-d"} ${ARG:+"$ARG"} ${URL:+"-u"} ${URL:+"$URL"} ;; "BSC") exec bsc ${ARG:+"-d"} ${ARG:+"$ARG"} ${URL:+"-u"} ${URL:+"$URL"} ;; "FDC") exec fdc ${ARG:+"-d"} ${ARG:+"$ARG"} ${URL:+"-u"} ${URL:+"$URL"} ;; "FFC") exec ffc ${ARG:+"-d"} ${ARG:+"$ARG"} ${URL:+"-u"} ${URL:+"$URL"} ;; "LWC") exec lwc ${ARG:+"-d"} ${ARG:+"$ARG"} ${URL:+"-u"} ${URL:+"$URL"} ;; "MBC") exec mbc ${ARG:+"-d"} ${ARG:+"$ARG"} ${URL:+"-u"} ${URL:+"$URL"} ;; "QBC") exec qbc ${ARG:+"-d"} ${ARG:+"$ARG"} ${URL:+"-u"} ${URL:+"$URL"} ;; "CLIPB") exec clip ${URL:+"$URL"} ;; esac fi if [ -z "$CLIPB$BRA$BSC$FDC$FFC$LWC$MBC$QBC" ]; then echo "$BROWSERSINSTALLED" [ -z "$BROWSERSINSTALLED" ] && \ printf "No suitable browsers!\n" && exit 1 BROWSERSEL="$(echo "$BROWSERSINSTALLED" | dmenu_lp "browser?" ${ARG:+"$ARG"})" [ -z "$BROWSERSEL" ] && \ printf "No browser selected!\n" && exit 1 case "$BROWSERSEL" in clip) clip "$ARG" ${URL:+"-u"} ${URL+"$URL"} ;; brave) bra ${URL:+"$URL"} ;; *) $BROWSERSEL ${ARG:+"-d"} ${ARG:+"$ARG"} ${URL:+"-u"} ${URL+"$URL"} ;; esac fi #}}}