#!/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 "
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 "$@"