For those of you who frequently read this blog (n ≈ 0) you'll
notice that it looks a bit different. I've moved it from my own
hosted Wordpress instance to static pages generated by Nikola
and hosted up on Github.

Why bother? I didn't like my blog being something I wouldn't be
proud to write or operate myself. Wordpress was overkill and
not worth the trouble:

Wordpress is database driven for dynamic sites. My little blog isn't
dynamic at all. Once you buy into the static idea, lots of otehr
things fall into place.

Comments and account spam are still is a nuisance. The nice
people at Akismet have done a great job holding back the tide,
but I still get at least one bogus registration a day. I expect a
service like Disqus or Facebook or Google+ will be more likely
to keep pace with the spammers.

I want to author in markdown; maybe even ReST someday. All this
wysiwyg-ish stuff in browsers is for the birds.

I don't actually need to host anything. I'm not running my own IRC
server or anything. Even though Dreamhost has been a perfectly
good service, I just want something... well, less Wordpress-ey.

Choosing

So I need to pick a static web site hosting package, specifically
one that is good for blogs. The big things I was looking for:
static site generation, Markdown/ReST support, and ability
to host on free services like Github Pages.

I considered three options before settling on Nikola. There are a
ton of static site generators, even when you limit them to Python.
But the only alternatives I seriously looked at were Pelican and
Hyde. Of these Nikola seems to have the most active development
and the richest set of features. I ease especially drawn by their
good documentation and theming.

Up and Running

Here are my notes of what it took. This isn't a nicely-written howto,
but if you want to see the blow-by-blow, read on.

The software was easy to set up and get started

pip install nikola did the right thing. Of course
within a virtual environment, you have to keep the lab clean!

Along the way I found a few other requirements, like request,
phpserialize, and markdown. These were easy to find/fix because of
helpful error messages.

This is all now captured in the project's requirements.txt.

Initial import from wordpress XML dump went ok but a fair bit of
manual HTML prettification took some time.

The slugs aren't how I like them: 201311seven-things.wp
instead of seven-things.wp. I tried a bit to do mass
rewrite of those, but couldn't easily do that without breaking
everything, so just decided to let this go for now. I'll just do
slugs without dates going forward.

I considered html2text but figured I'd just let the HTML
slide for now. Too much trouble to go back and clean all that
up now.

The "wp" extension, by default, is mapped to markdown instead of
html. Odd but easy to change.

Nikola has a nice simple redirect facility that the importer
pre-populated for me.

Migrate threads to Disqus - clean and simple,
worked right out of the box.

wordpress plugin has a nice import facility. Said it'd take a
day, but didn't take that long at all. Aside from one thread with
75 comments, not much else that should cause them much heartache.

nice simple URL mapping utility

Publishing to github. Again, easy peasy. The way to make this work
is to put all your static files in a repo titled
USERNAME.github.io. In my case:
sefk.github.io. Just
a couple of "tricks" were needed to make this work smoothly:

So that it would correctly serve my own domain, you have to put a
CNAME file in the root of the repo

I put my nikola themes and source files in the "src" subdirectory,
and changed the OUTPUT_DIR configuration option to
... Github Pages wants things in the root.

The final swich. I moved my domain from Dreamhost over to
Gandi, which is the registrar I like to use. They throw in
basic DNS with registration, which is sufficient for me.

So There You Have It

So far I am really pleased with the result. It's a bit more work to
publish, but for me that's natural and what I want. I guess I wouldn't
recommend this to someone who isn't adept with all these bits (virtual
environments, DNS, github repos, etc.) but for me that's no problem.

Thanks to:

Using livereload with Nikola makes for a very nice workflow. Check
out this blog post that describes how. Very helpful post,
thanks to Joshua Barratt for sharing.