diff --git a/.gitignore b/.gitignore
index 5ebf894c..6a52c615 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,6 +9,7 @@ resources/
node_modules/
docs/
+*.lock
*.class
.certificates
diff --git a/config.toml b/config.toml
index 37d1b8ee..0a503417 100644
--- a/config.toml
+++ b/config.toml
@@ -58,6 +58,12 @@ enableGitInfo = true
disable = false
privacyEnhanced = true
+# added since Hugo 0.9x to allow babel to be executed
+[security]
+ enableInlineShortcodes = false
+ [security.exec]
+ allow = ['^dart-sass-embedded$', '^go$', '^npx$', '^postcss$', 'babel']
+
[[menu.main]]
name = "Brain Baking"
pre = " "
@@ -80,8 +86,15 @@ enableGitInfo = true
name = "About"
pre = " "
url = "/about"
+ weight = 4
+
+[[menu.mainright]]
+ name = "Links"
+ pre = " "
+ url = "/links"
weight = 5
[outputs]
home = ["HTML", "RSS"]
page = ["HTML"]
+
diff --git a/content/links.md b/content/links.md
new file mode 100644
index 00000000..266c5349
--- /dev/null
+++ b/content/links.md
@@ -0,0 +1,15 @@
+---
+title: Fellow Brain Bakers
+---
+
+_Brain Baking_ never happens in isolation. This page contains a list of curious websites and fellow bloggers that deserve a shout-out. It is a nostalgic throwback to the nineties _links_ pages, like my recently excavated [2007 browser bookmarks](/museum/fav.html).
+
+Enjoy the serendipitous discoveries by clicking through!
+
+## Blogroll
+
+This is an automatically updated and maintained blogroll by my RSS reader. Those who'd rather download the `.opml` file, [here you go](https://raw.githubusercontent.com/wgroeneveld/brainbaking/master/data/blogroll.xml).
+
+Visit [blogroll.org](https://blogroll.org/) for a superior humanly curated list of "fine personal & independent blogs". It's a great way to get to know new people and sites.
+
+{{< blogroll >}}
diff --git a/content/post/2022/01/generating-a-blogroll-with-opml-in-hugo.md b/content/post/2022/01/generating-a-blogroll-with-opml-in-hugo.md
new file mode 100644
index 00000000..edcc1693
--- /dev/null
+++ b/content/post/2022/01/generating-a-blogroll-with-opml-in-hugo.md
@@ -0,0 +1,74 @@
+---
+title: Generating a Blogroll With OPML in Hugo
+date: 2022-01-20T20:16:00+01:00
+categories:
+ - webdesign
+tags:
+ - hugo
+---
+
+Blogrolls have been on my mind lately. It's a rather fancy word for a more common but far from mundane corner of your website, called a _links_ section. Ever since [my first website in 1998](/museum/1998/)---you can marvel at my old junk at the [Brain Baking Museum](/museum)---I've had a links section. But for some reason, on the latest revision of this site, it's been gone for years.
+
+A links page is fun for a couple of reasons:
+
+- It shows what the website owner is interested in;
+- It's a chance to give a shout-out to fellow _websiters_ (if I'd type _blogger_ here, I'd be too limiting);
+- It can be used to play the im-bored-lets-click-through-stuff game (isn't that the purpose of those webrings?).
+
+Especially since I've been encountering my own site in the midst of the links of others (thank you!), I felt a bit bad for not returning the favor. Enter the [/links page](/links)!
+
+After getting nostalgic (again...), I rummaged through my digital archive to dig up [my 2007 browser bookmarks](/museum/fav.html). It's a lot of fun to scroll through and instantly gives an impression of what I was up to back then (Infinity engine game modding, Nintendo DS programming, Wizardry 8 guide writing, retro gaming, BSD and Linux kernel programming, Magic the Gathering, hip-hop).
+
+So much yet so little has changed! It's a bit embarrassing. Or should I be proud? I'm not sure. I feel a bit conflicted when looking back at it. Like Brit Butler wrote in "[Deliberate Action](https://blog.kingcons.io/posts/Deliberate-Action.html)":
+
+> A tremendous amount has happened, but I feel like I've lost the boy I remember from college a little. He was excited about things: video games, music, common lisp, poetry.
+
+Anyway. As Ruben would write: _I digress_.
+
+## Hugo and XML parsing
+
+Since nowadays I manage my digital intake via my RSS reader, which already contains an XML-based list of links in an `.opml` file, I took a stab at automating this process.
+
+Recently, Hugo implemented [XML Data support](https://github.com/gohugoio/hugo/commit/0eaaa8fee37068bfc8ecfb760f770ecc9a7af22a) (part of the `0.92.0` release). This means chucking an XML file in `/data` automatically exposes it in the template engine, making iterating over entries using `{{ range $.Site.Data.blogroll.body.outline }}` trivial. Or so I thought.
+
+The supplied example in the commit message of the patch is very brief and only covers retrieving contents of XML tags: `
sup` can be accessed via the not-so-special `{{ .title }}` shortcode, as it becomes a Go property. But OPML outline XML is something like this:
+
+```xml
+
+```
+
+All attributes, no content: the `outline` tag is auto-closed (`/>`). I had no clue how to fetch that data, as dumping the entire variable printed a map of keys prepended with a dash. Why? It seems that someone else submitted an issue to the hugoDocs repository, so I took the effort to summarize changes into a pull request. Accessing properties, apparently, is done via `{{ index $body.outline "-title" }}`.
+
+I've never used Hugo's [index function](https://gohugo.io/functions/index-function/) before. Having to prepend attribute names with `-` feels awkward. I presume the changes are still young and a bit untested. Hopefully it'll evolve and stabilize over time. The problem right now is a total lack of documentation. Hopefully this blog post helps alleviate the problem a bit.
+
+## NetNewsWire OPML exports
+
+Where does the OPML file come from? NetNewsWire keeps track of local subscriptions ("On My Mac") in a file somewhere (`/Users/me/Library/Containers/com.ranchero.NetNewsWire-Evergreen/Data/Library/Application\ Support/NetNewsWire/Accounts/OnMyMac/Subscriptions.opml`). Copying over suffices, but of course does not auto-update when I add more feeds in the reader. Other options I've considered:
+
+- Softlinks. Nothing but trouble while committing into git, tried a lot of different approaches;
+- Hardlinks. Borked in MacOS. As soon as NetNewsWire makes a change, the hardlink is severed;
+- Third party hardlink cmd-based solutions. Didn't work;
+- Write a script that parses it into JSON and add to the CI. Too complicated;
+- Add a stupid copy command into the user's crontab.
+
+The last option is currently in use, although not ideal. Oh well.
+
+Another problem is the lack of metadata, or description information. The [/links](/links) page contains little information of the link itself that way, especially if the blogger's `` tag is a bit... woozy. Like, "Articles", for instance. Any RSS feed, such as mine, contains a (proper) title and description:
+
+```xml
+
+ Brain Baking
+ http://localhost:1313/
+ Freshly Baked Thoughts by Wouter Groeneveld
+ ...
+
+```
+
+It somehow doesn't get saved into the OPML, although there's a description tag---it's [hardcoded to the empty string](https://github.com/Ranchero-Software/NetNewsWire/issues/3406). Why? I'd love to hack away in the Swift code but could use some help.
+
+
+## Bonus material
+
+Hey, this site also supports dark mode from now on! It seems to be a thing and after discovering MacOS Montery's "Auto" Appearance switch setting, I couldn't resist. Enjoy!
+
+![](../darkmode.gif "Switching from light to dark mode in MacOS.")
diff --git a/content/post/2022/01/winnie-lim-on-rebuilding-oneself.md b/content/post/2022/01/winnie-lim-on-rebuilding-oneself.md
index 639e0bc7..15c3d611 100644
--- a/content/post/2022/01/winnie-lim-on-rebuilding-oneself.md
+++ b/content/post/2022/01/winnie-lim-on-rebuilding-oneself.md
@@ -19,7 +19,7 @@ It takes a lot of courage to do so---to write, not about the things you're good
But my public writing does not come close to Winnie's blog. I simply don't have the guts to do so. These things, for now, stay in my analog journal.
-> I don't with to wait till death is imminent for me to realize that I should have loved deeper, traveled further, written more.
+> I don't want to wait till death is imminent for me to realize that I should have loved deeper, traveled further, written more.
Why do these quotes grab me by the throat? Is it because they're deeply infused with philosophy, which I'm also fascinated by? Is it because her thinking patterns align with mine? Is it out of respect for opening up, admitting to the sensitivity?
diff --git a/content/post/2022/2022.md b/content/post/2022/2022.md
new file mode 100644
index 00000000..b1c7e9f4
--- /dev/null
+++ b/content/post/2022/2022.md
@@ -0,0 +1,9 @@
+---
+title: "Archive by year: 2022"
+type: archive
+icontag: tag
+url: /post/2022/
+disableComments: true
+---
+
+{{< archive 2022 >}}
diff --git a/content/tags/_index.md b/content/tags/_index.md
index 58b2ccfd..6a22fc54 100644
--- a/content/tags/_index.md
+++ b/content/tags/_index.md
@@ -40,7 +40,8 @@ I also write about retro PC/Handheld gaming and actual _bread baking_ on sister
### By year
-- [2021](/post/2021) ... when I got that shiny new M1 MacBook Air
+- [2022](/post/2022) ... when working from home was still a thing
+- [2021](/post/2021) ... when I got back into both retro (80486) and modern (M1) hardware
- [2020](/post/2020) ... when I paid attention to webdesign and wrote a book about baking
- [2019](/post/2019) ... when computing education articles started appearing
- [2018](/post/2018) ... when my PhD work started and I tried writing essays in Dutch
diff --git a/data/blogroll.xml b/data/blogroll.xml
new file mode 100644
index 00000000..9df7e2f9
--- /dev/null
+++ b/data/blogroll.xml
@@ -0,0 +1,62 @@
+
+
+
+
+On My Mac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layouts/shortcodes/blogroll.html b/layouts/shortcodes/blogroll.html
new file mode 100644
index 00000000..8354cad4
--- /dev/null
+++ b/layouts/shortcodes/blogroll.html
@@ -0,0 +1,16 @@
+
+{{ range $.Site.Data.blogroll.body.outline }}
+
{{ index . "-title" }}
+
+
+ {{ range .outline }}
+ {{ $url := index . "-htmlUrl" }}
+ {{ if eq $url "" }}
+ {{ $url = index . "-xmlUrl" }}
+ {{ end }}
+
+