#!/bin/sh -e # script to create new gemposts GEMINI_HOME="$HOME/Documents/gemini-aaoth.xyz" # gemlog page on your capsule, e.g. gemini://foo.bar/gemlog/ # ^----^ GEMLOG_DIR="gemlog" GEMLOG_HOME="$GEMINI_HOME/$GEMLOG_DIR" GEMLOG_INDEX="$GEMLOG_HOME/index.gmi" GEMLOG_TEMPLATE="$GEMLOG_HOME/.template" # gemlikes view binary location GEMLIKES="/cgi-bin/gemlikes/view" die() { echo "$1" && exit 1 } usage() { echo "add new post to gemlog" echo echo "this script is using gemini subscription specification and also \ utilizes gemlikes utility for likes and comments" echo echo "usage:" echo " $0 [OPTIONS]" echo echo "options:" echo " -t, --title " echo " specify new post title" echo " -g, --tags <tags>" echo " specify new post tags (space separated, now they are just decorative)" echo " -h, --help" echo " print this help message" } read_title() { echo "new post title:" read -r _new_post_title } read_tags() { echo "new post tags:" read -r _new_post_tags } update_index() { sed "$_new_post_loc i => $_new_post_rel_url $_new_post_date - $_new_post_title" < "$GEMLOG_INDEX" > "$GEMLOG_INDEX.tmp" mv "$GEMLOG_INDEX.tmp" "$GEMLOG_INDEX" } edit_post() { _new_post_gemlikes=$(echo "$_new_post_gemlikes" | sed 's/\//\\\//g') cp "$GEMLOG_TEMPLATE" "$_new_post_filename" [ -n "$_new_post_tags" ] && sed -e "s/{{ tags }}/\* tags: $_new_post_tags/" \ < "$_new_post_filename" > "$_new_post_filename.tmp" mv "$_new_post_filename.tmp" "$_new_post_filename" sed -e '/{{ tags }}/d' < "$_new_post_filename" > "$_new_post_filename.tmp" mv "$_new_post_filename.tmp" "$_new_post_filename" sed -e "s/{{ title }}/$_new_post_title/" \ -e "s/{{ gemlog_location }}/\/$GEMLOG_DIR\//" \ -e "s/{{ date }}/$_new_post_date/" \ -e "s/{{ gemlog_title }}/back to post list/" \ -e "s/{{ gemlikes }}/${_new_post_gemlikes#/}/" < "$_new_post_filename" \ > "$_new_post_filename.tmp" mv "$_new_post_filename.tmp" "$_new_post_filename" nvim -c ":Go" -c "normal 6j" -c "startinsert" "$_new_post_filename" } main() { if [ $# -gt 0 ] then while [ -n "$1" ] do case "$1" in --title|-t) shift _new_post_title="$1" ;; --tags|-g) shift _new_post_tags="$1" ;; --help|-h) shift usage exit ;; *) usage exit 1 ;; esac shift done fi [ -z "$_new_post_title" ] && read_title [ -z "$_new_post_title" ] && die "title could not be empty" [ -z "$_new_post_tags" ] && read_tags [ -z "$_new_post_tags" ] && echo "no tags specified" _new_post_date=$(date +%F) _new_post_title_for_file=$(echo "$_new_post_title" | tr '[:upper:]' '[:lower:]' \ | sed 's/ /-/g') _new_post_basename="$_new_post_date-$_new_post_title_for_file.gmi" _new_post_filename="$GEMLOG_HOME/$_new_post_basename" _new_post_rel_url="/$GEMLOG_DIR/$_new_post_basename" _new_post_loc=$(awk '/^## posts/ { print NR+2 }' < "$GEMLOG_INDEX") _new_post_gemlikes="$GEMLIKES?$_new_post_basename" update_index edit_post } main "$@"