Ivory Siege Tower

mobile construct built of thoughts and parentheses

Essence of the Tower

[2022-03-27]

emacs setup siegetower st_dev

My transition to emacs that started quite a while ago, by this time is terminal and irreversible. It's not either mere editor of choice, nor even a "ten times better bash than bash ". After some time spent with the community around emacs, I was inspired by its most devoted members who advocate doing just everything within this interactive environment. The only thing that was missing - an inter-connection tool suited to interlink the projects and notes with little extra effort. But that also came in soon.

Expanding Universe of my knowledgebase in Emacs org-roam
visualised with org-roam-ui

The cornerstone for me was the discovery of org-roam. Apart from being a handy Roam Research replica for personal Zettelkasten / knowledgebase (of which there is a ton of projects already), emacs-widely org-roam also provides a very useful node structure. Essentially, org-roam-node is an abstraction over Org files and headings that treats them as similar entry objects.

That is the thing one may be missing in vanilla Org the most. Attempts to add such functionality are made in various add-ons to Org (e.g. my previous bus stop: org-brain). However, org-roam beats them all in usability: paired with local database (obvious next step to build a slip-box system out of Org), not dictating its own hierarchy of files and notes (important for me), appearing with plenty of it's own bells, whistles and extensions. Even with its own fan-base :)

Myself I find org-roam a solid base to build upon in further Org-extending projects - dealing directly with org's parsers is way more cumbersome. And at the moment I organize my creative process entirely in Roam, wrapped up in a literate style within org-mode + org-babel. The Siege Tower is built within org-roam too, and its engine package code is one of the sections of the Tower.

the Tower-related Roam subgraph at the moment this post is being written

In essence, the Siege Tower is more than a blog... or maybe less? Because it does not have its pages stored separately but extracts them directly from my Org-Roam knowledge base. The approach I use declares how to filter a set of pages (an index) from Roam and how to output it along with its individual entries. This way the overhead needed to publish the stuff from my personal roam wiki is minimal compared to the time and effort of the actual work on a project. And the style of the output is under control as well - it is decoupled from the actual entry structure and location within Roam as, in "adult MVC/MVT CMS" systems.

I had fun developing the engine for the Tower in elisp. The org-roam-blog, as I call it (expanding the prefix as there are other, more mature emacs package candidates that have orb in their title), is in fact quite simple. mustache.el is used primarily for templates: logic-less and concise - I like them! orgize rust library interfaced as dynamic module for elisp serves as faster HTMLizer than org's native exporter. Other few libraries I use are well-known collections of extra handy definitions for elisp (f.el, ht.el, ...). Add up some clever CSS generation - and the result is eye-pleasing. At least for me.

Last but not least - the Siege Tower blog is a totally, 100% static set of pages. So by design, it can be served anywhere, by anything that serves.