aboutsummaryrefslogblamecommitdiff
path: root/bin/pb
blob: 43a1de2aaf3b3709acb6ba3b27677236d508f19b (plain) (tree)


































































































































                                                                                                  
#!/bin/sh
set -eu

for flag in "$@"; do
	case "$flag" in
		--)
			break
			;;
		--help)
			usage
			help
			exit
			;;
		*)
			;;
	esac
done

while getopts 'hV' flag; do
	case "$flag" in
		h)
			usage
			help
			exit
			;;
		*)
			usage >&2
			exit 2
			;;
	esac
done

NAME='pb'

usage() {
  cat <<EOF
Missing argument <$1>.

Usage:
    $NAME <FULL_TITLE> [-|FILE [LANG]]

    Reads contents from [FILE], from stdin if '-' is given, and opens the
    editor on the content.

    Arguments:
      FULL_TITLE       Full title of the pastebin

Examples:
    $NAME 'My example pastebin title'
    $NAME 'My example pastebin title' file
    $NAME 'My example pastebin title' - < file
    cat file | $NAME 'My example pastebin title' -
    $NAME 'Title' file lang
    $NAME 'Title' - lang < file
    cat file | $NAME 'Title' - lang
EOF
}

FULL_TITLE="${1:-}"
[ -z "$FULL_TITLE" ] && {
  usage 'FULL_TITLE'
  exit 2
}

# Derived from:
# https://stackoverflow.com/questions/4009281/how-can-i-generate-url-slugs-in-perl/4009519#4009519
slugify() {
  echo "$1"                     | \
    tr '[:upper:]' '[:lower:]'  | \
    perl -ne 'tr/\000-\177//cd;
              s/[^\w\s-]//g;
              s/^\s+|\s+$//g;
              s/[-\s]+/-/g;
              print;'
}

SLUG_TITLE="$(slugify "$FULL_TITLE")"
PASTE_DATE="$(date -I)"
OUT="_pastebins/$PASTE_DATE-$SLUG_TITLE.md"
INPUT="${2:-}"
PL="${3:-FIXME}"
if [ -n "$INPUT" ]; then
  CONTENT=$(cat "$INPUT")
else
  CONTENT='FIXME'
fi


cd ~/dev/libre/website > /dev/null

[ -f "$OUT" ] && {
  echo "Pastebin named $OUT already exists."
  exit 1
}

FILE="$(mktemp)"
cat <<EOF > "$FILE"
---

title: ${FULL_TITLE}

date: ${PASTE_DATE}

layout: post

lang: en

ref: $SLUG_TITLE

---

\`\`\`$PL
$CONTENT
\`\`\`
EOF

if [ "$PL" = FIXME ]; then
	vipe < "$FILE" > "$OUT"
else
	cp "$FILE" "$OUT"
fi

git reset .
git add "$OUT"
git commit -m "pastebin: Auto-add $OUT"
make clean publish
URL="https://euandre.org/pastebin/$(echo "$PASTE_DATE" | tr '-' '/')/$SLUG_TITLE.html"
open "$URL"
printf "$URL" | xsel -ib
echo 'Opened on the browser and copied URL to clipboard.' >&2
cd - > /dev/null