I ❤️ Jekyll
27 May 2018 by Martin
After a few years of neglect and paying Digital Ocean $5/month+tax for hosting
by Wordpress site, I decided it was time for a change. I have been using the
static website generator, Jekyll, at work to power a couple of websites and I
just love it’s simplicity. Jekyll is also what powers GitHub Pages making
it really simple to host really great looking blog totally for free on GitHub.
There are plenty of examples of Jekyll sites and blogs hosted on GitHub Pages
just a few clicks away on Google, but I thought I’d share some of the details of
how I set up this site that I didn’t find elsewhere.
Firstly, some of the things I love about Jekyll:
- Markdown: It’s great being able to just type words and add simple
formatting, but I’m still able to sprinkle in a few HTML tags if needed. I can
even rely on my text editor (currently Atom) to check spelling as I type.
- Git Workflow: Unlike my Wordpress site I can write content any where with
just a simple text editor then push changes to a Git repository next time I’m online
(I’m currently writing this 37,000 feet somewhere above the Indian Ocean). With
GitHub Pages pushing to the Master branch of my repository automatically
publishes the latest version of the site. Similarly, on my other Jekyll sites I
have started using Git Hooks to invoke build and deploy scripts automatically
when the Master Branch is pushed.
- [Liquid]: Scripting in Liquid is good enough to create some pretty flexible
layouts. See below for more about Liquid and Arrays.
- Posts, Collections & Data: Jekyll’s built in ability to create pages and
content from data files and YAML is really powerful.
The Challenges
Moving my blog from Wordpress to Jekyll + GitHub Pages wasn’t all easy
though, there were a few challenges I had to solve. Rather than describe them
all here and make one long enormous post, I’ll create separate posts about
each and include links here.
GitHub Pages and Jekyll plug-ins
GitHub has a fixed, limited set of Jekyll plugins that it supports and will not
execute any custom or 3rd party plug-ins. I assume they want to avoid people
running custom code on their servers. I never felt the need to use Jekyll
Plug-ins on the other Jekyll sites I have built so I didn’t think this would be
much of an issues, but there was more than one occasion where
a custom liquid filter (e.g. for processing a Jekyll data hash table) or Jekyll
generator (e.g. for generating category pages) would have made things simpler.
So far I have found work arounds but I keep wondering whether I will have to
switch to generating my site elsewhere then pushing the generated site to GitHub.
I really want to avoid that but we’ll see how it goes.