#!/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 <title> 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