#!/usr/bin/env bash USAGE="Usage: webdev [-h|--help] [-q|--quiet] uri|file" # NOTE: These can either be set manually here or they # NOTE: can be exported as environment variables (^-^) # === Configuration === # DEFAULT_BROWSER=${DEFAULT_BROWSER:-} # ===================== # # WARNING: Internal use only (do not modify!) # === Internal Environment === # QUIET=false BROWSER="" LOC="" LOC_TYPE="" # file or uri # ============================ # # Quiet Echo - doesn't echo if QUIET is set qecho() { if [[ "$QUIET" == false ]]; then echo "$@" fi } # Argument Parsing for ARG in $@; do case $ARG in -h|--help) echo "$USAGE" exit 0 ;; -q|--quiet) QUIET=true ;; -*) echo -e "[!] Unknown option \"$ARG\"\n$USAGE" >&2 exit 1 ;; *) # first unknown (non-option) argument assumed $LOC if [[ -n "$LOC" ]]; then LOC="$OPT" else echo "[!] Unknown option \"$ARG\"\n$USAGE" >&2 exit 1 fi ;; esac done # ensure $LOC was set during argparse phase if [[ -z "$LOC" ]]; then echo -e "[!] URI or file not specified\n$USAGE" >&2 fi # Use DEFAULT_BROWSER or check XDG default-web-browser or fail if [[ -n "$DEFAULT_BROWSER" ]]; then qecho "[+] Browser manually set to $DEFAULT_BROWSER" qecho " > Skipped checking XDG default-web-browser" else qecho "[*] Lookup XDG default-web-browser" BROWSER=$(xdg-settings get default-web-browser 2>/dev/null) if [[ $? -eq 0 ]]; then BROWSER=${BROWSER%%.desktop} qecho "[+] Browser automatically set to $BROWSER" else echo "[!] Unknown browser girlypop :(" >&2 echo " > Either:" >&2 echo " > 1. export DEFAULT_BROWSER" >&2 echo " > 2. run \`xdg-settings set default-web-browser\`" >&2 exit 1 fi fi echo # linebreak # Check if $LOC is a valid path REALPATH=$(realpath "$LOC" 2>/dev/null) if [ -f "$REALPATH"]; then LOC="file://$LOC" # open file directly via "file" protocol fi # Substitutions left intentionally unquoted (allows for providing args) command $BROWSER $LOC