all repos — gemini-aaoth.xyz @ fadc7b5d64683d56da65d78f6d9f2830c1bca80b

aaoth.xyz gemini capsule (archive)

gemlog-new (view raw)

  1#!/bin/sh -e
  2
  3# script to create new gemposts
  4
  5GEMINI_HOME="$HOME/Documents/gemini-aaoth.xyz"
  6# gemlog page on your capsule, e.g. gemini://foo.bar/gemlog/
  7#                                                    ^----^
  8GEMLOG_DIR="gemlog"
  9GEMLOG_HOME="$GEMINI_HOME/$GEMLOG_DIR"
 10GEMLOG_INDEX="$GEMLOG_HOME/index.gmi"
 11GEMLOG_TEMPLATE="$GEMLOG_HOME/.template"
 12# gemlikes view binary location
 13GEMLIKES="/cgi-bin/gemlikes/view"
 14
 15die() {
 16    echo "$1" && exit 1
 17}
 18
 19usage() {
 20    echo "add new post to gemlog"
 21    echo 
 22    echo "this script is using gemini subscription specification and also \
 23utilizes gemlikes utility for likes and comments"
 24    echo
 25    echo "usage:"
 26    echo "  $0 [OPTIONS]"
 27    echo
 28    echo "options:"
 29    echo "  -T, --title <title>"
 30    echo "      specify new post title"
 31    echo "  -t, --tags  <tags>"
 32    echo "      specify new post tags (space separated, now they are just decorative)"
 33    echo "  -h, --help"
 34    echo "      print this help message"
 35}
 36
 37read_title() {
 38    echo "new post title:"
 39    read -r _new_post_title
 40}
 41
 42read_tags() {
 43    echo "new post tags:"
 44    read -r _new_post_tags
 45}
 46
 47update_index() {
 48    sed "$_new_post_loc i => $_new_post_rel_url $_new_post_date $_new_post_title" < "$GEMLOG_INDEX" > "$GEMLOG_INDEX.tmp"
 49    mv "$GEMLOG_INDEX.tmp" "$GEMLOG_INDEX"
 50}
 51
 52edit_post() {
 53    _new_post_gemlikes=$(echo "$_new_post_gemlikes" | sed 's/\//\\\//g')
 54
 55    cp "$GEMLOG_TEMPLATE" "$_new_post_filename"
 56
 57    [ -n "$_new_post_tags" ] && sed -e "s/{{ tags }}/\* tags: $_new_post_tags/" \
 58        < "$_new_post_filename" > "$_new_post_filename.tmp"
 59    mv "$_new_post_filename.tmp" "$_new_post_filename"
 60
 61    sed -e '/{{ tags }}/d' < "$_new_post_filename" > "$_new_post_filename.tmp"
 62    mv "$_new_post_filename.tmp" "$_new_post_filename"
 63
 64    sed -e "s/{{ title }}/$_new_post_title/" \
 65        -e "s/{{ gemlog_location }}/\/$GEMLOG_DIR\//" \
 66        -e "s/{{ date }}/$_new_post_date/" \
 67        -e "s/{{ gemlog_title }}/back to post list/" \
 68        -e "s/{{ gemlikes }}/${_new_post_gemlikes#/}/" < "$_new_post_filename" \
 69        > "$_new_post_filename.tmp"
 70    mv "$_new_post_filename.tmp" "$_new_post_filename"
 71
 72    nvim -c ":Go" -c "normal 6j" -c "startinsert" "$_new_post_filename"
 73}
 74
 75main() {
 76    if [ $# -gt 0 ]
 77    then
 78        while [ -n "$1" ]
 79        do
 80            case "$1" in
 81                --title|-T)
 82                    shift
 83                    _new_post_title="$1"
 84                    ;;
 85                --tags|-t)
 86                    shift
 87                    _new_post_tags="$1"
 88                    ;;
 89                --help|-h)
 90                    shift
 91                    usage
 92                    exit
 93                    ;;
 94                *)
 95                    usage
 96                    exit 1
 97                    ;;
 98            esac
 99            shift
100        done
101    fi
102
103    [ -z "$_new_post_title" ] && read_title
104    [ -z "$_new_post_title" ] && die "title could not be empty"
105
106    [ -z "$_new_post_tags" ] && read_tags
107    [ -z "$_new_post_tags" ] && echo "no tags specified"
108
109    _new_post_date=$(date +%F)
110    _new_post_title_for_file=$(echo "$_new_post_title" | tr '[:upper:]' '[:lower:]' \
111        | sed 's/ /-/g')
112    _new_post_basename="$_new_post_date-$_new_post_title_for_file.gmi"
113    _new_post_filename="$GEMLOG_HOME/$_new_post_basename"
114    _new_post_rel_url="/$GEMLOG_DIR/$_new_post_basename"
115    _new_post_loc=$(awk '/^## posts/ { print NR+2 }' < "$GEMLOG_INDEX")
116    _new_post_gemlikes="$GEMLIKES?$_new_post_basename"
117
118    update_index
119
120    edit_post
121
122    {
123        cd "$GEMINI_HOME"
124        git add "$GEMLOG_INDEX" "$_new_post_filename"
125        git commit && git push
126    }
127}
128
129main "$@"