Running Orxite 2 now

In the last two weeks, I have prototyped Orxite 2, the second generation of the Orxite static site generator based on emacs lisp, shell scripting and make.

Since yesterday, the site on glitzersachen.de is generated by Orxite 2.

Orxite 2 is available (without a specific release yet) from codeberg.org/m-e-leypold/orxite2. (All my software will move out from Github and Gitlab within the next months, but this is another story).

In some ways Orxite 2 is a step back in achievements from Orxite 1. Orxite 1 — announced here and still available from Gitlab here — promised:

  • Templating in a proven (more or less) main stream language, instead of a fringe templating language (like gohugo). /Orxite 1 employed emacs lisp as templating language.
  • Getting relative links right. A bundle of rendered HTML pages can be browsed from disk without an intervening web server.
  • Automatic perma-links.
  • Extensibility of site building via the well-known (and loved) make utility. As opposed to e.g. gohugo which is either impossible to extend or makes it only excruciatingly difficult to extend, but definitely doesn't want external tools integrating with it.

Unfortunately Orxite 1 disappointed in some aspects:

  • It was definitely too slow because it rendered pages one by one, starting a new emacs instance for every single page, instead of rendering all pages in one go by using org-publish.
  • The extensibility did not materialize for the awkward internal architecture.
  • Furthermore for minimalist web sites (like Glitzersachen) adhering to brutalist web design as explained by David Bryant Copeland on brutalist-web.design, a full templating framework is totally overblown. It turns out, what is necessary is only a mechanism to prefix and suffix some content to the pages, and the rest can be styled sufficiently in CSS.

And then in the year since I published Orxite 1 additional requirements accumulated which I found hard to integrate into the Orxite 1 architecture (if I might be so bold to call some organization principles for scripts and architecture — but then I have heard people calling the most absurd things architecture, so I will be so free):

  • A central metadata database that allows tools to pull from the page metadata.
  • Sub-sites (e.g. for books embedded in the site) which get different headers and footers, maybe even different styling.
  • Integration with Org-roam, that is, blog articles and web page sources are (or can be) Org-roam notes and can be opened from Org-roam.
  • And again: Extensibility preferably with shell tools.

I am happy to say Orxite 2 delivers in most of these points already and looks very promising in the others:

  • Templating is done via the shell. This is the step backwards I already mentioned. But consider that templating is basically the ability to produce a string from a number of arguments that are placed into a "string with holes". The shell knows only strings as data type and the quoting/unquoting plus variable expansion is basically already a templating mechanism.
  • Permalinks and the relative links work as with Orxite 1.
  • Everything is controlled by make.
  • Integration with Org-roam works, but requires a specific configuration of Org-roam that is outside of Orxite.
  • A recutils based metadata database for the pages is generated and maintained by the make rules.
  • Page configuration is done by the org SETUPFILE mechanism and this allows configuring different headers for pages that belong to an article series (e.g. a tutorial on shell-programming).
  • Every page is also available as text rendering (see the link under TXT in the page footer).

Furthermore, what is already in reach (though only prototyped outside of Orxite so far) is:

  • Rendering an article series to a book, handout or slide show.
  • Rendering pages into different formats like PDF.

There are unfortunately no installation instructions for Orxite 2. You can look at the sub-directory example-site and extrapolate from there. And you will need GNU Recutils.