#!/bin/sh set -eu FILE="${1:-}" MYLINENO="${2:-}" COMMIT="$(git rev-parse HEAD)" ORIGIN="$(git config --get remote.origin.url)" REPOSITORY="$(basename "$PWD")" usage() { cat <&2 exit 2 fi euandreh() { printf 'https://git.euandreh.xyz/%s/tree/%s?id=%s%s\n' "$REPOSITORY" "$FILE" "$COMMIT" "${MYLINENO:+#n$MYLINENO}" } sourcehut() { printf '%s/tree/%s/item/%s%s\n' "$ORIGIN" "$COMMIT" "$FILE" "${MYLINENO:+#L$MYLINENO}" } savannah() { printf '%s/tree/%s?id=%s%s\n' "$(echo "$ORIGIN" | sed 's|gnu.org/git|gnu.org/cgit|')" "$FILE" "$COMMIT" "${MYLINENO:+#n$MYLINENO}" } gitlab() { if echo "$ORIGIN" | grep -q '^git@gitlab.com:'; then NAME="$(echo "$ORIGIN" | cut -d: -f2 | cut -d/ -f1)" ORIGIN="https://gitlab.com/$NAME/$REPOSITORY" fi printf '%s/-/blob/%s/%s%s\n' "$ORIGIN" "$COMMIT" "$FILE" "${MYLINENO:+#L$MYLINENO}" } damnyou_github() { if echo "$MYLINENO" | grep -q -- -; then P1="$(echo "$MYLINENO" | cut -d- -f1)" P2="$(echo "$MYLINENO" | cut -d- -f2)" printf '#L%s-L%s' "$P1" "$P2" elif [ -n "$MYLINENO" ]; then printf '#L%s' "${MYLINENO}" else printf '' fi } github() { if echo "$ORIGIN" | grep -q '^git@github.com:'; then NAME="$(echo "$ORIGIN" | cut -d: -f2 | cut -d/ -f1)" ORIGIN="https://github.com/$NAME/$REPOSITORY" fi printf '%s/blob/%s/%s%s\n' "$ORIGIN" "$COMMIT" "$FILE" "$(damnyou_github)" } guess_permalink() { case "$ORIGIN" in *euandreh.xyz*) euandreh ;; *git.sr.ht*) sourcehut ;; *git.savannah.gnu.org*) savannah ;; *gitlab.com*) gitlab ;; *github.com*) github ;; *) echo "Unsupported origin: $ORIGIN" exit 1 ;; esac } xdg-open "$(guess_permalink)"