This web blog is generated with the Ruby Jekyll framework. Of course you can create static pages in any way you like. Since I am actually a fan of the Perl scripting language I have e.g. already implemented several pages with Perl and the Perl Template Toolkit. So why Jekyll? Jekyll meets for me the balance between simplicity, functionality and comfort. It brings everything with it to create a static blog page.
Thereby the implementation is so simple that it does not stand in the way, but can still be flexibly adapted and extended. Another important point for me is the integration of Markdown as a document format. Jekyll is the technical basis for GitHub Pages. Thus there is a huge community with a variety of themes and plugins. Not to forget the nice Jekyll website with a mostly good documentation. The documentation of external components and their integration in Jekyll is not always well documented.
Per default Jekyll builds on the following external components:
- Liquid template language: Open-source template language created by Shopify and written in Ruby. Jekyll provides a bunch of additional variables and integrates Liquid with the YAML front matter block concept.
- Kramdown Markdown converter: Fast Ruby library for parsing and converting a superset of Markdown, namely GFM, the GitHub Flavored Markdown Spec.
- Rouge: Ruby code highlighter that is compatible with Python Pygments.
Whether with Liquid you need yet another template language? Probably not. But although template languages are very similar, every framework and programming language invents a new one.
The design and layout is based on the Texture Theme. This one I have simplified (e.g. removed the configuration options), ported the layout to Flexbox, changed the syntax highlighting theme to gruvbox, and added a sticky footer.
Well, what should I say. I switched to Hugo. There is no real pressing requirement for this step, Jekyll really worked fine. Why did I do it? Jekyll is the only software I am aware of that is based on ruby, and while my site is tiny updating ruby and required modules already got into my way. This is not different to any other script language with a package manager: PHP, Perl, Python. You name it, they all stand in your way at some point. It is just a bad idea to expose the user of the software to the complexity of its dependencies. Because I already do a lot of stuff in golang now, it made sense to also stay in the golang world for this. No need to struggle with just another template language. And updating is just to throw in a new binary (OpenBSD binaries are available at the Hugo GitHub page).
Porting my few existing pages was not difficult. I used the recommended Hugo Ananke Theme. It took some trial and error to get the same style as on the previous page, though. The documentation is (at least for me) a bit confuse. But finally I succeeded and I am happy with the result. I hope you like it, too.