Date Tags Blog

This blog uses the static site generator Pelican and is hosted on Github. Here are a few notes on how I set things up.

Installing Pelican

First, get Python 2.7, and get the Python package manager Pip. For Windows, you can follow the instructions here.

Make a directory for your blog, such as c:\blog. Then, pip install pelican and if you want Markdown support pip install markdown. Many online guides suggest you put Pelican into a Python virtualenv. That’s not necessary, but it keeps things tidy, so I made a virtualenv at c:\blog and installed Pelican using Pip like this:

virtualenv virtualenv-pelican
cd virtualenv-pelican\scripts
pip install pelican markdown

Creating The Blog

Next, I set up the blog for Pelican. I put the source content that Pelican processes into c:\blog\source and the generated HTML into c:\blog\site by doing this:

md c:\blog\source c:\blog\site
cd c:\blog\source

The default answers to the questions are usually reasonable, but season to taste.

By default, Pelican puts the generated HTML into the output directory relative to I prefer to call it the site directory and have it sit side-by-side the source directory because it makes the Github setup a bit cleaner. I edited the and changed the OUTPUTPATH variable to point to c:\blog\site:

OUTPUT_PATH = '../site'

Then add a post in the content directory at c:\blog\source\content. A simple Markdown post should work:

Title: First Post
Date: 2014-5-26 12:00
Tags: Blog
Category: Blog
Slug: first-post
Author: David Farrell
Summary: First Post
It's so easy when everybody's trying to please me, baby

We should be able to generate the blog now. Try this:

make html
make serve

Browse to and, hey, it works!

Live Editing

In one shell, run make regenerate. This automatically regenerates the site directory whenever you change a file in the source directory. In another shell, run the local web server make serve. Now you can change any file, refresh your browser, and immediately see your changes.

The command make devserver will also do that, but it calls a Bash script, which doesn’t work on Windows.

Pelican Themes

The default Pelican theme isn’t spectacular. You can get additional themes by cloning the Pelican theme repository:

cd c:\blog\source
git clone themes

You’ll find all the themes in the new themes directory. To choose one, set the THEME variable in

THEME = 'themes/pelican-bootstrap3'

I like the Pelican-Bootstrap3 theme. It has a that you’ll want to read. The Bootstrap theme is actually themed itself with Bootswatch. You can also easily customize the CSS and set the syntax highlighting style. Here’s the relevant bits in my

BOOTSTRAP_THEME = 'cyborg'        # Bootswatch sub-theme for Bootstrap
PYGMENTS_STYLE = 'monokai'        # Syntax highlighting theme
CUSTOM_CSS = 'static\custom.css'
EXTRA_PATH_METADATA = {'extra\custom.css': {'path': 'static\custom.css'}}

The full extra\custom.css path is c:\blog\source\content\extra\custom.css (some of Pelican’s paths were relative to the content directory). The only thing my custom.css does right now is change the backtick block highlighting colors; for some reason, those colors don’t change with the Bootstrap theme or subthemes. Here’s what that looks like:

code {
 padding:2px 4px;

Google Analytics

Google Analytics can be set up by following the instructions here: Google Analytics With Pelican

Once you have modified the with your analytics tracking number, you need to run the command make publish instead of make html to have the tracking code included. You want to make publish once you are ready to generate the pages that will go live, and make html when you are generating pages to view your changes locally.

Github Pages Hosting

I’m using Github Pages to host this blog. I created two repositories. One is named and holds the blog site, and the other is named and holds the Pelican source for the blog. You can configure git branches to hold everything in a single repo, but I thought it was more straightforward to just use two repositories.

I cleaned up the themes directory to remove the themes I don’t want (otherwise, that directory is around 176 megs). I then init both repositories and push them to Github with this:

cd c:\blog\site
git init
git add -A .
git commit -m "initial commit"
git remote add origin
git push -u origin master
cd c:\blog\source
git init
git add -A .
git commit -m "initial commit"
git remote add origin
git push -u origin master

A few minutes later, the blog appears at