I've set this site up with chronicle, a Perl based blog compiler. It converts content written in html, markdown, or textile into static html. In combination with templates, it generates archives, tag collections, and RSS feeds. Chronicle also provides a mechanism for moderated comments, which I may set up in the future.
It also includes pre- and post-compile hooks for executing scripts. For example, I use the following as a pre-compile hook to fill in the date field in a blog entry:
#!/bin/bash
#---------------------------------------------------
# Fills in the current date wherever "^Date: *$" is
# found in *.mdwn. Useful with chronicle blog
# entries as a mercurial precommit hook.
#---------------------------------------------------
DIR=${1:-.}
DATE=$(date "+%Y-%m-%d %R %z")
cd "$DIR" || exit 1
for file in *.mdwn; do
base=$(basename "$file")
sed "s/^Date: *$/Date: $DATE/" "$file" > "/tmp/$base" || exit 1
mv -f "/tmp/$base" "$file" || exit 1
rm -f "/tmp/$base"
done
This script scans all .mdwn files in the specified directory (defaults to pwd) for lines consisting of "Date:" and fills in today's date and time. Reading every markdown file in a directory may prove inefficient as the number of entries grows, so I may have to revisit this in the future.
I also maintain the site in the mercurial RCS. This gives me a history and the ability to revert to previous versions of the site, if desired. Unfortunately, my host does not provide any sort of RCS, so I can't use mercurial to keep my local files synced with those on the webserver. Rsync would work, but that's not available either.
Fortunately, I came across lftp, a command line ftp client with the capability to mirror directories. I have it set to run after all mercurial commits, syncing the local files with the remote ones.
I'd like to thank my wife Meg for the awesome theme. There will probably be some subtle changes over the next few weeks, but overall, I'm really happy with the look.