[idea:26w34]2026-08-23

Week 34

Contents

As I work more with rookery, I am realising that the way of thinking it allows will be perhaps even more integral in my research going forward than I suspected while building it. As a result, I spent most of my cycles this week tuning it. I also switched to niri on both my laptop and desktop as a window manager, and we had a couple of (non-academic) visitors at home in Turin to usher in the cooler weather. This is one of the last weeks of real hacking, as we move more into regular programming in step with the Fall semester now that September is on the horizon.

I released rookery 0.1.0 at the start of last week, and over the course of it I’ve iterated through a couple of versions to reach 0.4.0.

This fast release cycle is mostly a function of wanting to deploy updates quickly on this site and my main blog, both of which employ a deployment pipeline that pulls Rheo and its packages from published releases. In the future it will probably make sense to set up some sort of prerelease pipeline so that I can dogfood new functionality on my own sites first, but as rookery hasn’t actually been announced anywhere yet (besides these weeknotes), I figure that it doesn’t have any real users who would be impacted. 1

The features and default styling has changed fairly significantly since 0.1.0, so I again encourage the interested reader to check out rookery’s documentation for a more complete account. Highlights include a more thorough comparison between rookery and other similar tools and a tag system that complements the idea ecosystem. The tagging is conceptually and visually inspired by DEVONthink, and includes rudimentary integration with rookery-search, which you can see in action on the documentation site. An easter egg is that if you type the prefix tags: in the search modal followed directly without a space by some characters (i.e. tags:con), you can fuzzy search by tag names.

I also made my Math(s), Philosophy, History reading group site a rookery, sketching out the authors of texts we’ve read as their own ideas as a placeholder for how I intend to deepen the presentation of our group’s thinking there. The next phase of adopting rookery is to migrate my personal knowledge base to rookery, which is currently a flat folder of Orgmode files. These four projects—my weeknotes, my blog site, a reading group site, and my personal knowledge base—are a pretty good representation of projects that I feel the current version of rookery should be able to support.

Footnotes

  1. ^ Rheo, on the other hand, does seem to have at least a few users, and so I’m being more careful with its release cycle.

Alongside rookery development, I worked on an 0.6.0 release of Rheo. (I’ve also worked all day today on this. The release has been blocking the release of this weeknote, which I wrote at a cafe this morning.) Because it does seem that there are at least a few idle users of Rheo, I’m being a little bit more thoughtful about release cadence, even as it is also still 0.x software and thus not marketed as reliably stable.

The 0.6.0 release actually only removes features, rather than adding any. As I’ve recognised before, there are several aspects of Rheo, such as Atom feed generation in the HTML export, that can already be achieved with native Typst. 1 Rheo is designed as a harness around Typst, and thus in principle should only ever offer functionality that is not possible or otherwise difficult to achieve in native Typst. By this token, 0.6.0 strips Atom feed generation from the Rheo compiler and moves it to a custom Typst package. This refactor makes feed generation much more customizable, as configuration all takes place in Typst, rather than mixing and matching between Typst and rheo.toml.

There is one important aspect of feeds that cannot be achieved in native Typst, at least not without some downstream hackery. With bundle export, Typst can generate custom files such as feed.xml in the build folder easily enough, and introspect Typst state such as document titles in order to programmatically determine that file’s metadata. What it can’t achieve, however, is filling in the feed with the actual HTML content that Typst compilation generates, as this would require a ‘second-pass’ or double compilation.

Thus Rheo 0.6.0 introduces a notion of beacons, which are placeholders that Rheo can replace with compiled content such as the HTML output of a blog post in a cheap second pass after Typst compilation. Because Rheo treats each separate Typst file as a vertebra in a spine, a beacon can indicate that Rheo should replace it with the compiled content of a vertebra, therefore allowing the feeds package to generate a content-rich Atom or RSS feed.

Footnotes

  1. ^ I released the first version of Rheo before bundle export landed in 0.15.0, an experimental target that makes possible several of the motivating features for Rheo.
[idea:26w34-config]

A new window manager: niri

After using Hyprland for a little more than a year (before Hyprland I used dwm, another tiling window manager), I switched this week to niri. I don’t exactly remember where I got the idea, but the switch has been sitting in my notes for a month or two, motivated by niri’s horizontal scroll as a default. Hyprland and dwm have both worked well enough, but I have found that I almost never use a window layout more complex than two side-by-side windows—usually a terminal running tmux and firefox—so while features like fibonacci layouts are interesting in theory, they’re lost on me in practice. Moreover, niri is written in Rust.

I don’t think that my config is particularly complex, as I mostly followed what’s demonstrated in this video. But I am already finding it significantly nicer, both on a single laptop screen and on multiple screens at home on my desktop. Rather than treating workspaces as fixed and numbered, and tying certain applications to them, I’m now typically just using one or two workspaces (niri by default keeps one free ‘below’ your last workspace), and letting applications stack out horizontally as I use them. I took the opportunity to also tune some tmux hotkeys around switching panes and windows, and I have to say, my setup now feels markedly snappy.

One of the visitors this week was on her way back to the UK after a cycling trip around Switzerland and France, so we punched out a casual 100km with a healthy 1400m climbing one morning:

This was a gorgeous loop that I’ll definitely do again. Like many of the routes out West of Turin, it’s a bit of drudgery to dodge cars and traffic lights getting out: but once you’re there it’s supreme.

We also spent two nights at Lago d’Orta, meandering 15km one day around the lake (I’ll spare you the Strava screenshot) before taking the ferry back. We visited the Monastery of San Giulio, ate some overpriced pastries, and caught the second half of a mighty All Blacks victory over the Springboks in South Africa. All in a late August day’s work.