#!/bin/sh set -e BOOKMARDS=~/notes/bookmarks.md run() { echo "Run $1" echo "$1" | grep -qE '^~?/' || true echo $? if echo "$1" | grep -qE '^\?'; then # We do search on duckduckgo surf "https://duckduckgo.com/?q=${L#?}&t=surf&kk=-1&ia=web" & elif echo "$1" | grep -qE '^~?/'; then # This is local path surf "${1/#\~/$HOME}" & elif echo "$1" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+'; then # This ipv4 address surf "$1" & else # We follow address LPROTOCOL="$(echo "$1" | sed -n 's#^\([^:]*\)://.*#\1#p')" LHOST="$(echo "$1" | sed -n 's#^[^:]*://##;s#^\([^/]\+\)/\?.*#\1#p')" LPATH="$(echo "$1" | sed 's#^[^:]*://##;s#^[^/]\+/\?##')" if ! getent hosts "$LHOST" >/dev/null; then if getent hosts "$LHOST.cz" >/dev/null; then LHOST="$LHOST.cz" elif getent hosts "$LHOST.org" >/dev/null; then LHOST="$LHOST.org" elif getent hosts "$LHOST.com" >/dev/null; then LHOST="$LHOST.com" fi # TODO what to do when we can't expand it? fi # Decide on protocol (if connection to 443 is not possible then use http otherwise https) if [ -z "$LPROTOCOL" ]; then # We already have protocol (given explicitly) if nc -z -w1 "$LHOST" 443 2>/dev/null; then LPROTOCOL="https" else LPROTOCOL="http" fi fi surf "$LPROTOCOL://$LHOST/$LPATH" & fi } if [ -n "$1" ]; then run "$1" exit else # Note: Bookmarks starts with '* ' sed -n 's/\* //p' "$BOOKMARDS" | dmenu -p 'surf' | while read L; do run "$L" done fi