dotfiles/scripts/webdev

81 lines
2 KiB
Bash
Executable file

#!/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