I have been planning to rejuvenate this blog with a new design and hopefully some good posts! Before this, I used to publish this blog using Jekyll which is a great tool if you want to serve static website using Github Pages.

Jekyll is written in Ruby, which is one of the reasons I was planning to move away from it. I don’t have anything against the language, but if you want to install Jekyll locally to test out your pages, you have to install the whole Ruby toolchain on your machine. This was extremely painful. In my experience, dealing with version conflicts in Ruby is so much more difficult than I want to deal with for my blog.

So, I moved my blog to a new static site generator called Hugo, which is written in Golang. It is extremely fast and pretty easy to install and use on my Ubuntu 16.10 machine. There is a theme showcase for Hugo that you can use to get started. Also, Hugo has a nifty little trick to import your blog posts from Jekyll, see hugo import jekyll command.

The only problem with using Hugo with Github Pages is that you have to manually generate the webpages and push to your username.github.io repository. So, I automated this process with a Makefile:

HUGO=/usr/bin/hugo
PUBLISH_DIR=public/
GIT=git --git-dir=$(PUBLISH_DIR).git --work-tree=$(PUBLISH_DIR)

all: run

run:
	echo "Building your website now..."
	$(HUGO)

serve:
	# Run a hugo server that restarts whenever changes are made to files.
	$(HUGO) serve

publish:
	# First, run hugo to compile all the files.
	$(HUGO)
	# Second, add and commit all the changes in the static directory.
	echo "Committing changes..."
	$(GIT) add . && \
	$(GIT) commit -am '' --allow-empty-message --quiet
	# Push the changes to the remote server to publish them.
	$(GIT) push origin master
	echo "Done publishing your website."

This way, you will have to create two repos, in one you keep your code and posts and the 2nd one username.github.io keeps your statically generated files.