#!/bin/bash
# A bash script to make posting new phlog posts a bit
# easier.
#
# To set up a new phlog, do
#
# whip setup
#
# This makes a 'phlog' directory in your 'public_gopher'
# directory and creates two files inside it,
# 'gophermap', and '.phlog_index'.
#
# To write a new phlog post, do
#
# whip new "My Phlog Post Title"
#
# This makes a new text file for your post, opens it for
# editing and, once you've quit your text editor,
# updates the '.phlog_index' file. (You can set your
# preferred text editor below, it defaults to `nano -r
# 56`).
#
# NB: Phlog posts should be hard wrapped at less than 70
# characters. You'll probably want to add a link to
# your phlog from your main gophermap
# (~/public_gopher/gophermap)
#
# TODO: add whip_html and whip_rss as subcommands
set -o errexit
set -o pipefail
# Config
gopher_dir="$HOME/public_gopher"
phlog_dir="$gopher_dir/phlog"
phlog_gophermap="$phlog_dir/gophermap"
phlog_index_file="$phlog_dir/.phlog_index"
phlog_header="!Welcome to ~$USER's phlog."
phlog_index_cmd="=/usr/bin/cat $phlog_index_file"
phlog_footer="1Back\t/~$USER/\n."
phlog_editor="/usr/bin/vim +6 "
if [ -z ${phlog_editor+x} ]; then
phlog_editor="/usr/bin/nano -r 56"
fi
if [ -d "$phlog_dir" ] && \
[ -f "$phlog_gophermap" ] && \
[ -f "$phlog_index_file" ];then
phlog_exists="true"
else
phlog_exists="false"
fi
usage() {
cat << END
USAGE:
${0##*/} [command]
COMMANDS:
help Show this help message
setup Create a phlog directory and gophermap
new
Add a new phlog post
END
}
phlog_setup() {
mkdir -p "$phlog_dir"
touch "$phlog_dir/.phlog_index"
{
printf "\n"
printf "%s\n\n" "$phlog_header"
printf "%s\n\n" "$phlog_index_cmd"
printf "%b\n" "$phlog_footer"
} >> "$phlog_gophermap"
printf "%s\n\n" "Phlog setup successful!"
printf "%s\n" "Don't forget to link to your"
printf "%s\n" "phlog from your main gophermap:"
printf "%s\n" "$gopher_dir/gophermap"
}
phlog_new() {
post_title="$*"
post_slug="$(echo "$post_title" | tr '[:upper:]' '[:lower:]' | tr ' ' '-')"
post_date="$(date +"%Y-%m-%d")"
post_file="$post_date-$post_slug.txt"
touch "$phlog_dir/$post_file"
{
printf "\n%s\n" "# $post_title"
printf "%s\n" "## $post_date"
} >> "$phlog_dir/$post_file"
$phlog_editor "$phlog_dir/$post_file"
}
update_index() {
cp "$phlog_index_file" "$phlog_index_file.backup"
printf "%b" "0$post_date $post_title\t$post_file"\
>> "$phlog_index_file"
sort -o "$phlog_index_file" -r "$phlog_index_file"
}
shift $((OPTIND - 1))
subcommand=$1
if [ -z "$1" ]; then
printf "%s\n" "Command missing!"
usage
exit 1
elif [ "$1" != "help" ] && \
[ "$1" != "setup" ] && \
[ "$1" != "new" ]; then
printf "%s\n" "Invalid command: $1"
usage
exit 1
fi
shift
case "$subcommand" in
help)
usage
exit 0
;;
setup)
if [ "$phlog_exists" == "true" ];then
printf "%s\n" "It looks like you already have a phlog set up!"
printf "%s\n\n" "To start again, remove $phlog_dir"
usage
exit 1
fi
phlog_setup
;;
new)
if [ "$phlog_exists" == "false" ];then
printf "%s\n" "Phlog files missing!"
printf "%s\n\n" "Run 'whip setup' to get started"
usage
exit 1
fi
phlog_new "$@"
update_index
;;
esac