add gemlog and tool to publish to it the tool is a simple script that is very similar to one i created for aaoth.xyz, except that this script utilizes simple template. template variables are: - title -- post title - date -- date when post is written - tags -- space separated list of tags - gemlog_location -- relative path to gemlog homepage - gemlog_title -- title of link to gemlog homepage - gemlikes -- relative path to gemlikes `view` binary with query
la-ninpre leobrekalini@gmail.com
Tue, 01 Jun 2021 17:04:57 +0300
3 files changed,
149 insertions(+),
0 deletions(-)
A
gemlog-new
@@ -0,0 +1,123 @@
+#!/bin/sh -ex + +# 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 <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" + + $EDITOR "$_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 "$@"
A
gemlog/.template
@@ -0,0 +1,12 @@
+# {{ title }} + +* date: {{ date }} +* author: la-ninpre +{{ tags }} + + + +## links + +=> {{ gemlog_location }} {{ gemlog_title }} +=> {{ gemlikes }} like and comment!
A
gemlog/index.gmi
@@ -0,0 +1,14 @@
+# aaoth.xyz gemlog + +hello to my gemlog. i will occasionally write here something about tech stuff and also some personal thought about different things. + +this gemlog is formatted according to gemini gemlog specification (see below). + +=> gemini://gemini.circumlunar.space/docs/companion/subscription.gmi subsribing to gemini pages + +## posts + + +## other gemlogs + +=> gemini://perso.pw/blog/ solène's %