<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Beat Hagenlocher</title><description>A digital garden exploring programming, minimalism and learning</description><link>https://beathagenlocher.com/</link><language>en-us</language><image><url>https://beathagenlocher.com/favicon.png</url><title>beathagenlocher.com</title><link>https://beathagenlocher.com/</link></image><item><title>GNOME Wayland Desktop Portal/Nautilus/Screen Sharing Issues</title><link>https://beathagenlocher.com/stream/#00135/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00135/</guid><description>Over the last week, I learned that it&apos;s possible to have multiple desktop portals (implementations, I guess?) for Wayland active, and even specify which one to choose for which one.

This is what this looks like:

nix title=&quot;home.nix&quot;
# ...
    xdg.portal = {
      enable = true;
      extraPortals = [
        pkgs.xdg-desktop-portal-gtk
        pkgs.xdg-desktop-portal-gnome
      ];
      config.common = {
        # for files, mainly, since my nautilus takes ages to load
        default = &quot;gtk&quot;;
         # screen sharing doesn&apos;t work otherwise on GNOME
        &quot;org.freedesktop.impl.portal.ScreenCast&quot; = &quot;gnome&quot;;
        &quot;org.freedesktop.impl.portal.RemoteDesktop&quot; = &quot;gnome&quot;;
      };
    };
# ...


Link to the config</description><pubDate>Fri, 10 Apr 2026 14:49:17 GMT</pubDate></item><item><title>Details that make interfaces feel better</title><link>https://beathagenlocher.com/stream/#00134/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00134/</guid><description>A pretty good article on small but meaningful design elements: Details that make interfaces feel better

Sweet!</description><pubDate>Sat, 04 Apr 2026 18:52:18 GMT</pubDate></item><item><title>Nutrient Ranking Tool</title><link>https://beathagenlocher.com/stream/#00133/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00133/</guid><description>I just found something pretty cool: A nutrient ranking tool which one can use to filter for basically any ingredient across lots of sources with lots of filters.

Here it is:

My Food Data | Nutrient Ranking Tool

(I discovered this through reading this nice article on glycine on LessWrong)

Hope it helps!</description><pubDate>Thu, 26 Mar 2026 18:00:58 GMT</pubDate></item><item><title>UnoCSS</title><link>https://beathagenlocher.com/unocss/</link><guid isPermaLink="true">https://beathagenlocher.com/unocss/</guid><pubDate>Sat, 14 Mar 2026 17:55:12 GMT</pubDate></item><item><title>Fluid (Type) Scales</title><link>https://beathagenlocher.com/fluid-type-scales/</link><guid isPermaLink="true">https://beathagenlocher.com/fluid-type-scales/</guid><pubDate>Sat, 14 Mar 2026 17:52:18 GMT</pubDate></item><item><title>Fluid Scales in Tailwind</title><link>https://beathagenlocher.com/stream/#00132/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00132/</guid><description>Some time ago, I held a lightning talk at our functional programming meetup on [[Fluid Type Scales]] (Where you try and get rid of class=&quot;sm:... md:... lg:...&quot; whenever it makes sense).

This was, for a long time, a good reason for me to use [[UnoCSS]].

But today, I learned that someone built this for [[Tailwind]], too:

- fluid.tw

But since this doesn&apos;t support Tailwind 4, I&apos;ll be using the slightly uglier, but simpler (and maintained!) tailwind-clamp for now.

May your utility classes always be simple :)</description><pubDate>Sat, 14 Mar 2026 17:48:53 GMT</pubDate></item><item><title>Size Textarea to Content</title><link>https://beathagenlocher.com/stream/#00131/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00131/</guid><description>Today I learned that you can use field-sizing: content to make the &lt;textarea&gt; shrink and grow with the text in it.

Try it out: (If you can, haha ^^)

&lt;textarea
  class=&quot;w-full p-2 rounded-xl bg-zinc-700 focus:outline-none&quot;
  style=&quot;field-sizing: content&quot;
&gt;&lt;/textarea&gt;

It&apos;s not available everywhere as of today (field-sizing: content | Can I use), but that&apos;s up to you to decide.

:)</description><pubDate>Sat, 14 Mar 2026 17:30:34 GMT</pubDate></item><item><title>Wasm</title><link>https://beathagenlocher.com/wasm/</link><guid isPermaLink="true">https://beathagenlocher.com/wasm/</guid><pubDate>Mon, 09 Mar 2026 18:43:43 GMT</pubDate></item><item><title>Lean and Wasm</title><link>https://beathagenlocher.com/stream/#00130/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00130/</guid><description>Today I was thinking about how easy it is to include Lean into a website.

Since it compiles via an intermediate [[C]] layer, it shouldn&apos;t be that hard to do this via [[Emscripten]], but apparently it&apos;s harder than that: Since there&apos;s #eval, every function of the language needs to be exported per default (only then it&apos;s really a full [[Lean]] compiler), and that apparently hit a limit for the number of imports and exports a WASM program(?, module?) allows.

That has been increased since then, but now there&apos;s other issues.

Wild.

# Notes

# Links

- Lean 4 | wasm build | Zulip team chat
- Lean 4 | lean.js | Zulip team chat
- GitHub - T-Brick/lean2wasm: Tool for compiling Lean to WASM · GitHub (shouldn&apos;t work right now, if the lean.js thread is right)</description><pubDate>Mon, 09 Mar 2026 18:40:48 GMT</pubDate></item><item><title>Lean and WASM</title><link>https://beathagenlocher.com/lean-and-wasm/</link><guid isPermaLink="true">https://beathagenlocher.com/lean-and-wasm/</guid><pubDate>Mon, 09 Mar 2026 14:06:42 GMT</pubDate></item><item><title>Better Computer Use</title><link>https://beathagenlocher.com/stream/#00129/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00129/</guid><description>Some time ago, I visited a friend who&apos;s fairly well versed in tech (e.g. [[NeoVim]], can code) and watches him struggle with editing a file in Word fast on someone else&apos;s Laptop.

I asked him whether he knew about  for wordwise movement (which he didn&apos;t), and was fairly surprised. But in hindsight, I didn&apos;t know that for the longest time either.

I took this as an example to start writing on [[Better Computer Use]] (then only a collection of basically &quot;Keyboard Shortcuts You Might Want To Know&quot;).

Today I revisited this, and something that started out as &quot;You might want to know these shortcuts&quot; ended in a discussion on how Software Developers and Product Designers should structure their UIs.

Feel free to check it out, tell me what you think, and tell me where I&apos;m wrong: [[Better Computer Use]]

(Or just wait until it&apos;s more polished.)

:)</description><pubDate>Fri, 06 Mar 2026 11:56:52 GMT</pubDate></item><item><title>Window Switching Made Simple | Part 2</title><link>https://beathagenlocher.com/window-switching-made-simple--part-2/</link><guid isPermaLink="true">https://beathagenlocher.com/window-switching-made-simple--part-2/</guid><pubDate>Fri, 06 Mar 2026 09:21:19 GMT</pubDate></item><item><title>Async Link Fetching in Emacs</title><link>https://beathagenlocher.com/stream/#00128/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00128/</guid><description>Today I finally tackled something that has annoyed me for a while since switching most of my editing/digital gardening/second brain-writing over to Emacs.

Whenever I took 30 minutes and tried to get title fetching of links to work, I couldn&apos;t get it to work in this self-allotted time. So I asked Opus to do the dumbest thing possible: Just fetch it via curl, and then apply stuff asynchronously.

(Obviously the other, non-dumb way should work too, but I&apos;ve spent way too much time on this now either way.)  
(And apparently there&apos;s also url-insert-file-contents, maybe I&apos;m gonna try that some other time.)

elisp
(defun flt--url-at-point ()
  &quot;Get URL at point, or nil.&quot;
  (thing-at-point &apos;url))

(defun flt--url-from-kill-ring ()
  &quot;Get URL from kill ring if it looks like one, or nil.&quot;
  (let ((text (current-kill 0 t)))
    (when (and text (string-match-p &quot;\\https?://&quot; text))
      (string-trim text))))

(defun flt--get-url ()
  &quot;Get URL from point first, then kill ring. Nil if neither has one.&quot;
  (or (flt--url-at-point)
      (flt--url-from-kill-ring)))

(defun flt--extract-title (html)
  &quot;Extract &lt;title&gt; content from HTML string.&quot;
  (when (string-match &quot;&lt;title[^&gt;]&gt;\\([^&lt;]\\)&lt;/title&gt;&quot; html)
    (string-trim (match-string 1 html))))

(defun flt--insert-markdown-link (url title marker)
  &quot;Replace URL at MARKER with a markdown link, or insert at MARKER.&quot;
  (with-current-buffer (marker-buffer marker)
    (save-excursion
      (goto-char marker)
      ;; If there&apos;s a raw URL at point, replace it
      (let ((url-bounds (thing-at-point-bounds-of-url-at-point)))
        (if url-bounds
            (progn
              (delete-region (car url-bounds) (cdr url-bounds))
              (insert (format &quot;%s&quot; title url)))
          (insert (format &quot;%s&quot; title url)))))))

(defun flt-fetch-link-title ()
  &quot;Fetch the title of a URL (at point or kill ring) and insert a markdown link.
If point is on a URL, replaces it. Otherwise inserts at point.&quot;
  (interactive)
  (let ((url (flt--get-url)))
    (if (not url)
        (message &quot;No URL found at point or in kill ring.&quot;)
      (let ((marker (point-marker))
            (buf (generate-new-buffer &quot; flt-curl&quot;)))
        (message &quot;Fetching title for %s...&quot; url)
        (make-process
         :name &quot;flt-curl&quot;
         :buffer buf
         :command (list &quot;curl&quot; &quot;-sL&quot; &quot;-m&quot; &quot;10&quot;
                        &quot;-H&quot; &quot;User-Agent: Emacs&quot;
                        &quot;--&quot; url)
         :sentinel
         (lambda (proc event)
           (when (eq (process-status proc) &apos;exit)
             (let ((title
                    (with-current-buffer (process-buffer proc)
                      (flt--extract-title (buffer-string)))))
               (if title
                   (progn
                     (flt--insert-markdown-link url title marker)
                     (message &quot;Inserted: %s&quot; title url))
                 (message &quot;Could not extract title from %s&quot; url)))
             (kill-buffer (process-buffer proc))
             (set-marker marker nil))))))))

(map! :leader
      :desc &quot;-&gt;title&quot; :nv &quot;d f&quot; #&apos;flt-fetch-link-title)


And in the meantime, I also learned that markers exist!

So now, I can fetch link titles again, like I&apos;m used to :)</description><pubDate>Wed, 04 Mar 2026 23:16:25 GMT</pubDate></item><item><title>SolidJS</title><link>https://beathagenlocher.com/solidjs/</link><guid isPermaLink="true">https://beathagenlocher.com/solidjs/</guid><pubDate>Wed, 04 Mar 2026 21:46:13 GMT</pubDate></item><item><title>Lean</title><link>https://beathagenlocher.com/lean/</link><guid isPermaLink="true">https://beathagenlocher.com/lean/</guid><description>Functional Programming Language, Proof Assistant? Pick two.</description><pubDate>Wed, 04 Mar 2026 21:31:17 GMT</pubDate></item><item><title>AI</title><link>https://beathagenlocher.com/ai/</link><guid isPermaLink="true">https://beathagenlocher.com/ai/</guid><pubDate>Wed, 04 Mar 2026 21:22:10 GMT</pubDate></item><item><title>New notes</title><link>https://beathagenlocher.com/stream/#00127/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00127/</guid><description>I&apos;ve been dragging quite a few notes around with me for the last one, two weeks.

Here they are! :)</description><pubDate>Tue, 03 Mar 2026 16:39:46 GMT</pubDate></item><item><title>AI And Formal Methods</title><link>https://beathagenlocher.com/ai-and-formal-methods/</link><guid isPermaLink="true">https://beathagenlocher.com/ai-and-formal-methods/</guid><pubDate>Tue, 03 Mar 2026 13:13:50 GMT</pubDate></item><item><title>LLM Usage</title><link>https://beathagenlocher.com/llm-usage/</link><guid isPermaLink="true">https://beathagenlocher.com/llm-usage/</guid><pubDate>Tue, 03 Mar 2026 13:10:09 GMT</pubDate></item><item><title>Functional Programming</title><link>https://beathagenlocher.com/functional-programming/</link><guid isPermaLink="true">https://beathagenlocher.com/functional-programming/</guid><pubDate>Tue, 03 Mar 2026 00:26:48 GMT</pubDate></item><item><title>AI Agents</title><link>https://beathagenlocher.com/ai-agents/</link><guid isPermaLink="true">https://beathagenlocher.com/ai-agents/</guid><pubDate>Tue, 03 Mar 2026 00:15:12 GMT</pubDate></item><item><title>Oxide</title><link>https://beathagenlocher.com/oxide/</link><guid isPermaLink="true">https://beathagenlocher.com/oxide/</guid><pubDate>Tue, 03 Mar 2026 00:05:33 GMT</pubDate></item><item><title>Bryan Cantrill</title><link>https://beathagenlocher.com/bryan-cantrill/</link><guid isPermaLink="true">https://beathagenlocher.com/bryan-cantrill/</guid><pubDate>Tue, 03 Mar 2026 00:03:20 GMT</pubDate></item><item><title>Slidev QRCode Addon</title><link>https://beathagenlocher.com/stream/#00126/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00126/</guid><description>For presentations, I&apos;m using slidev, a pretty cool and versatile tool (Markdown slides with inline HTML/Vue, so you can do basically anything on your slides), which has lots of cool features.

One minor annoyance: If you&apos;re using either of the QRCode addons and want to add more than one QR Code per slide deck, it breaks.

Luckily, with the power of the web, this is pretty easy to fix:

We can just define a component:

vue
&lt;template&gt;
  
&lt;/template&gt;

&lt;script lang=&quot;ts&quot; setup&gt;
import { QrcodeCanvas } from &apos;qrcode.vue&apos;

const props = withDefaults(
  defineProps&lt;{
    value: string
    width?: number
    height?: number
    color?: string
    margin?: number
  }&gt;(),
  {
    width: 200,
    color: &apos;#000000&apos;,
    margin: 2,
  },
)

const foreground = props.color.startsWith(&apos;#&apos;) ? props.color : #${props.color}
const background = &apos;#FFFFFF&apos;
&lt;/script&gt;


And use it:

vue



Sweet!</description><pubDate>Mon, 02 Mar 2026 23:42:12 GMT</pubDate></item><item><title>package.json postinstall scripts</title><link>https://beathagenlocher.com/stream/#00125/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00125/</guid><description>Today I learned that there&apos;s magic pre&lt;&gt; and post&lt;&gt; hooks inside npm (and everything npm-compatible):

-&gt; https://docs.npmjs.com/cli/v8/using-npm/scripts

I think I would&apos;ve preferred less magic-side-effect-ness, but fair, I guess.

So, to run something post install

json
{
  &quot;scripts&quot;: {
    // ...,
    &quot;postinstall&quot;: &quot;echo &apos;hello postinstall&apos;&quot;
  }
}


Caveat:

For npm, this only works when literally running npm install (or npm i), but not when running npm i &lt;some-package&gt;.  
Well, that&apos;s what you get, I guess?  
I&apos;m even less convinced by its usefulness now.

For bun at least, both seem to work :)

# Links

- https://stackoverflow.com/questions/73155672/npm-not-running-postinstall</description><pubDate>Fri, 27 Feb 2026 09:49:44 GMT</pubDate></item><item><title>TypeScript</title><link>https://beathagenlocher.com/typescript/</link><guid isPermaLink="true">https://beathagenlocher.com/typescript/</guid><pubDate>Fri, 27 Feb 2026 09:40:13 GMT</pubDate></item><item><title>Monitoring</title><link>https://beathagenlocher.com/monitoring/</link><guid isPermaLink="true">https://beathagenlocher.com/monitoring/</guid><pubDate>Sun, 22 Feb 2026 21:52:31 GMT</pubDate></item><item><title>(Fuzzy) Search on The Frontend</title><link>https://beathagenlocher.com/fuzzy-search-on-the-frontend/</link><guid isPermaLink="true">https://beathagenlocher.com/fuzzy-search-on-the-frontend/</guid><pubDate>Sat, 21 Feb 2026 01:43:28 GMT</pubDate></item><item><title>JavaScript Code Snippets</title><link>https://beathagenlocher.com/javascript-code-snippets/</link><guid isPermaLink="true">https://beathagenlocher.com/javascript-code-snippets/</guid><pubDate>Fri, 20 Feb 2026 17:04:10 GMT</pubDate></item><item><title>JS range()</title><link>https://beathagenlocher.com/stream/#00124/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00124/</guid><description>JS doesn&apos;t have a range() function or anything, but you can do this:

js
[...Array(5).keys()];
 =&gt; [0, 1, 2, 3, 4]


≺≻ [[JavaScript Code Snippets]]</description><pubDate>Fri, 20 Feb 2026 17:03:06 GMT</pubDate></item><item><title>Desktops in the browser</title><link>https://beathagenlocher.com/stream/#00123/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00123/</guid><description>I did not know it&apos;s a thing that people are building desktop environments in the browser for fun:

- https://webos.js.org/
- https://dustinbrett.com/

Wild.</description><pubDate>Mon, 16 Feb 2026 09:53:34 GMT</pubDate></item><item><title>Harness Engineering</title><link>https://beathagenlocher.com/harness-engineering/</link><guid isPermaLink="true">https://beathagenlocher.com/harness-engineering/</guid><pubDate>Sun, 15 Feb 2026 23:11:43 GMT</pubDate></item><item><title>Cognitive Debt</title><link>https://beathagenlocher.com/cognitive-debt/</link><guid isPermaLink="true">https://beathagenlocher.com/cognitive-debt/</guid><pubDate>Sun, 15 Feb 2026 17:11:44 GMT</pubDate></item><item><title>litecli</title><link>https://beathagenlocher.com/stream/#00122/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00122/</guid><description>After getting annoyed by the default sqlite Command Line Interface (it doesn&apos;t even support arrow up ≙ last typed command), I found litecli

nix title=flake.nix
# ...
packages = [
# ...
   pkgs.litecli
# ...
];
# ...


in every sqlite project from now on :)</description><pubDate>Sun, 15 Feb 2026 16:56:14 GMT</pubDate></item><item><title>Auth</title><link>https://beathagenlocher.com/stream/#00121/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00121/</guid><description>Over the last few weeks, I&apos;ve spent some time on and off researching a good way to do Authn and Authz, and struggled quite a bit with the number of options available.

Not completely understanding what I&apos;m doing/how to search for my requirements, I&apos;ve first started trying Logto (but that was a UI clicking contest to set up), then going for [[kanidm]] without realizing this doesn&apos;t have support for a public sign in form, which is something I need.

And just now when I&apos;m relatively sure that [[Better Auth]] fits my needs quite well, I&apos;ve discovered [[Stack Auth]] via this nice website: https://www.auth0alternatives.com/

Man, if I only would&apos;ve found this 4 weeks earlier.</description><pubDate>Thu, 12 Feb 2026 19:46:35 GMT</pubDate></item><item><title>Trader/Non-trader in Chrome Web Store</title><link>https://beathagenlocher.com/stream/#00120/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00120/</guid><description>Today, I thought about writing and publishing an extension to the Chrome Web Store.

I researched, and found this funny bit:

The EU apparently requires you to indicate whether you&apos;re a Trader or Non-Trader, when you want to publish extensions on the store.

Which is fine, (I guess), but apparently literally no one has a definitive answer to what that means:

- Am I a trader or non-trader | Stackoverflow
- What constitutes a trader
- trader/non-trader disclosure | Google Groups</description><pubDate>Thu, 12 Feb 2026 19:14:54 GMT</pubDate></item><item><title>Setting A DNS Record On A Domain</title><link>https://beathagenlocher.com/setting-a-dns-record-on-a-domain/</link><guid isPermaLink="true">https://beathagenlocher.com/setting-a-dns-record-on-a-domain/</guid><pubDate>Wed, 11 Feb 2026 01:33:56 GMT</pubDate></item><item><title>Setting Up A Server (with NixOS and Clan)</title><link>https://beathagenlocher.com/setting-up-a-server-with-nixos-and-clan/</link><guid isPermaLink="true">https://beathagenlocher.com/setting-up-a-server-with-nixos-and-clan/</guid><pubDate>Wed, 11 Feb 2026 01:15:59 GMT</pubDate></item><item><title>Diffing two directories</title><link>https://beathagenlocher.com/stream/#00119/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00119/</guid><description>Today I learned that you can diff two directories just like you can diff two files:

shell
diff dir1/ dir2/

# or recursively
diff --recursive dir1/ dir2/


Sweet!

Comparing the contents of two directories | Stackoverflow</description><pubDate>Sun, 08 Feb 2026 22:35:28 GMT</pubDate></item><item><title>Setting Up Immich On NixOS with Clan</title><link>https://beathagenlocher.com/setting-up-immich-on-nixos-with-clan/</link><guid isPermaLink="true">https://beathagenlocher.com/setting-up-immich-on-nixos-with-clan/</guid><pubDate>Sun, 08 Feb 2026 22:18:18 GMT</pubDate></item><item><title>New stuff</title><link>https://beathagenlocher.com/stream/#00118/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00118/</guid><description>Just now I learned

- about Shannon, a pentesting agent
- and that there&apos;s still an ongoing &quot;Emacs in Rust&quot; experiment people are actively working on!
  -&gt; rune

Looking forward to try Shannon out ^^

(rune isn&apos;t anything more than an Elisp interpreter right now)</description><pubDate>Sun, 08 Feb 2026 12:05:39 GMT</pubDate></item><item><title>OAuth Playground</title><link>https://beathagenlocher.com/stream/#00117/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00117/</guid><description>Now that it&apos;s working again (I couldn&apos;t access it some days ago), OAuth playground is just a pretty nice way to understand code flows in [[Auth]].</description><pubDate>Thu, 05 Feb 2026 17:09:12 GMT</pubDate></item><item><title>&lt;a name=&quot;&quot;&gt; in HTML</title><link>https://beathagenlocher.com/stream/#00116/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00116/</guid><description>Today I learned there was a name attribute in HTML once.</description><pubDate>Thu, 05 Feb 2026 12:52:41 GMT</pubDate></item><item><title>Dynamic Scoping</title><link>https://beathagenlocher.com/dynamic-scoping/</link><guid isPermaLink="true">https://beathagenlocher.com/dynamic-scoping/</guid><description>The one unambiguously bad design choice in programming languages.</description><pubDate>Thu, 05 Feb 2026 00:14:20 GMT</pubDate></item><item><title>TypeScript Macros</title><link>https://beathagenlocher.com/stream/#00115/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00115/</guid><description>Today I&apos;ve been playing around with [[Immutable.js]] as a library that supplies immutable collections for [[JavaScript]] and [[TypeScript]].

Something that&apos;s relatively annoying at first sight (cause verbose) is how they handle typed Objects (Records).

I&apos;m not completely sure yet, but I think in [[TypeScript]] you want to declare sums of products using those records something like this:

js
import { Record } from &apos;immutable&apos;

type IdleT = { kind: &apos;Idle&apos; }
type Idle = Record&lt;IdleT&gt;
const Idle = Record&lt;IdleT&gt;({ kind: &apos;Idle&apos; })

type TrackT = { id: string; url: string; title: string }
type Track = Record&lt;TrackT&gt;
const Track = Record&lt;TrackT&gt;({ id: &apos;&apos;, url: &apos;&apos;, title: &apos;&apos; })

type LoadingT = { kind: &apos;Loading&apos;; track: Track }
type Loading = Record&lt;LoadingT&gt;
const Loading = Record&lt;LoadingT&gt;({ kind: &apos;Loading&apos;, track: Track() })
// ..

export type State = Idle | Loading // | ..


This is, compared to

js
export type Track = { id: string; url: string; title: string }

type Idle = { kind: &apos;Idle&apos; }
type Loading = { kind: &apos;Loading&apos;; track: Track }
// ..


export type State = Idle | Loading // | ..


quite the feat syntax-wise.

It can be alleviated a bit by doing something like this:

js

export const makeRecord = &lt;T extends object&gt;(defaults: T) =&gt; Record&lt;T&gt;(defaults)

const Idle = makeRecord({ kind: &apos;Idle&apos; as const })
type Idle = ReturnType&lt;typeof Idle&gt;


But even that is still double the code and more mental workload paid as a price for immutability.

So I wondered:

&gt; Are there people writing [[Macros]] in TypeScript?

And as it turns out, there are:

- ts-macros
- macro-ts

But nope, I&apos;m not gonna use them.</description><pubDate>Wed, 04 Feb 2026 23:07:15 GMT</pubDate></item><item><title>selfhostblocks</title><link>https://beathagenlocher.com/stream/#00114/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00114/</guid><description>Today, I lurked a bit around the on the clan gitea, which made me find this nice PR trying to nail down a better clan positioning in the future, which made me find selfhostblocks.

Cool!

(Though I&apos;m pretty convinced by clan so far)</description><pubDate>Wed, 04 Feb 2026 22:24:45 GMT</pubDate></item><item><title>Bun</title><link>https://beathagenlocher.com/bun/</link><guid isPermaLink="true">https://beathagenlocher.com/bun/</guid><description>The all-in-one JS thingy</description><pubDate>Tue, 03 Feb 2026 14:33:56 GMT</pubDate></item><item><title>Bun ❤️ sqlite</title><link>https://beathagenlocher.com/stream/#00113/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00113/</guid><description>Today I learned that [[Bun]] has a sqlite db driver built in.

That&apos;s pretty cool.

js
import { Database } from &apos;bun:sqlite&apos;

const setup = () =&gt; {
  const db = new Database(&apos;mydb.sqlite&apos;, { create: true })

  const createUsers = db.query(
CREATE TABLE users (
  id string PRIMARY KEY,
  name integer NOT NULL)
)
  createUsers.run()

  const addUser = db.query(
INSERT INTO users (id, name) VALUES (?, ?)
)

  addUser.run(&apos;qwfparstoienarst&apos;, &apos;beat&apos;)
  db.close(false)
}

const main = () =&gt; {
  const db = new Database(&apos;mydb.sqlite&apos;)

  const selectUsers = db.query(&apos;select  from users&apos;)

  console.log(selectUsers.all())

  db.close(false)
}

// First:
// setup()
// Then:
main()


:)</description><pubDate>Tue, 03 Feb 2026 11:41:10 GMT</pubDate></item><item><title>Auth</title><link>https://beathagenlocher.com/auth/</link><guid isPermaLink="true">https://beathagenlocher.com/auth/</guid><description>Passwords, OAuth, OIDC, and whatever</description><pubDate>Tue, 03 Feb 2026 10:49:36 GMT</pubDate></item><item><title>Clan</title><link>https://beathagenlocher.com/clan/</link><guid isPermaLink="true">https://beathagenlocher.com/clan/</guid><description>A NixOS fleet management tool</description><pubDate>Tue, 03 Feb 2026 10:04:48 GMT</pubDate></item><item><title>How People Learn</title><link>https://beathagenlocher.com/how-people-learn/</link><guid isPermaLink="true">https://beathagenlocher.com/how-people-learn/</guid><description>A course I taught at Schülerakademie Roßleben 2022</description><pubDate>Wed, 28 Jan 2026 11:16:36 GMT</pubDate></item><item><title>Screen Freezes on Framework 16 with AMD and GNOME</title><link>https://beathagenlocher.com/screen-freezes-on-framework-16-with-amd-and-gnome/</link><guid isPermaLink="true">https://beathagenlocher.com/screen-freezes-on-framework-16-with-amd-and-gnome/</guid><pubDate>Tue, 27 Jan 2026 16:09:45 GMT</pubDate></item><item><title>Domain Name System</title><link>https://beathagenlocher.com/domain-name-system/</link><guid isPermaLink="true">https://beathagenlocher.com/domain-name-system/</guid><pubDate>Mon, 26 Jan 2026 15:26:50 GMT</pubDate></item><item><title>Using dig</title><link>https://beathagenlocher.com/stream/#00112/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00112/</guid><description>Just had a small DNS dispute again, and remembered the post by Julia Evans on using dig.

Pretty helpful!

(She also wrote a website for simple DNS lookup: a simple DNS lookup tool)</description><pubDate>Mon, 26 Jan 2026 15:23:23 GMT</pubDate></item><item><title>Backing up my stuff from Github</title><link>https://beathagenlocher.com/stream/#00111/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00111/</guid><description>Today, I thought about making myself less dependent on Github (once again).

There are a few ways to do that (I still want to have an account on Github and be there, just be less dependent on them) – the easiest thing for this would be setting up a git mirror.

I could do that by setting up my private git forge (forgejo or gitea), or by just going to one of the git hosters (Gitlab or Codeberg)

Two promising tools for that seem to be:

- https://github.com/ChappIO/git-backup
- and https://github.com/cooperspencer/gickup

But actually setting this up is for another day. ^^

(Small caveat: Codeberg doesn&apos;t want you to mirror your stuff there for resource reasons.)</description><pubDate>Mon, 19 Jan 2026 22:15:01 GMT</pubDate></item><item><title>Threading Macros And Pipes</title><link>https://beathagenlocher.com/threading-macros-and-pipes/</link><guid isPermaLink="true">https://beathagenlocher.com/threading-macros-and-pipes/</guid><pubDate>Sat, 17 Jan 2026 18:03:05 GMT</pubDate></item><item><title>Macros</title><link>https://beathagenlocher.com/macros/</link><guid isPermaLink="true">https://beathagenlocher.com/macros/</guid><description>Code that writes Code (so AI, basically)</description><pubDate>Sat, 17 Jan 2026 17:41:59 GMT</pubDate></item><item><title>dash.el for nice list operations</title><link>https://beathagenlocher.com/stream/#00110/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00110/</guid><description>When programming in [[Elisp]] I&apos;ve been using the -&gt; and -&gt;&gt; threading [[Macros]] for quite some time.

I learned to value them first in [[Racket]] ((require threading)), then in Elixir: (|&gt;), and since then I use them wherever it makes sense (&amp; in [[Haskell]], or the -&gt;/-&gt;&gt; Threading Macros in [[Clojure]], for example.

And yesterday, I opened the in-Emacs docs of -&gt; for the first time (since I actually needed -as-&gt; in that situation, and wanted to see whether it exists, which it does) only to see it&apos;s part of a library called dash.el, which has lots of list functions with an intuitive api.

Nice!

In case you&apos;re more confused about Threading Macros now than you were before, take a look here: [[Threading Macros And Pipes]].</description><pubDate>Sat, 17 Jan 2026 17:38:46 GMT</pubDate></item><item><title>Emacs Unicode Input Doesn&apos;t Work Correctly: IBus Errors</title><link>https://beathagenlocher.com/ibus-emacs-input-errors/</link><guid isPermaLink="true">https://beathagenlocher.com/ibus-emacs-input-errors/</guid><pubDate>Fri, 16 Jan 2026 17:55:20 GMT</pubDate></item><item><title>Typing Emojis with :shortcodes: in Emacs</title><link>https://beathagenlocher.com/stream/#00109/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00109/</guid><description>After I just properly learned/understood how completion in [[Emacs]] works, today I had my &apos;wait a moment&apos; moment for knowing what to google to emoji input via :shortcodes: in [[Emacs]].

It&apos;s as easy as knowing that you need to google &quot;emacs company emoji input&quot;

And then the thing that immediately worked was company-emoji.

elisp
;; packages.el
(package! company-emoji)


elisp
;; config.el
(require &apos;company-emoji)
(after! markdown-mode
  (set-company-backend! &apos;markdown-mode &apos;company-emoji))


Nice to be able to easily type emojis again, finally! 🙌</description><pubDate>Fri, 16 Jan 2026 17:01:11 GMT</pubDate></item><item><title>22. Tü.λ-Meetup: Property Testing</title><link>https://beathagenlocher.com/stream/#00108/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00108/</guid><description>The next edition of tu-lambda is up: https://www.meetup.com/tu-lambda/events/312848576/

If you&apos;re in the vicinity of Tübingen at the 28.01.26, come by :)

(There&apos;s gonna be free pizza!)</description><pubDate>Fri, 16 Jan 2026 14:46:52 GMT</pubDate></item><item><title>Emacs Custom Completion</title><link>https://beathagenlocher.com/stream/#00107/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00107/</guid><description>Today I learned how to create a custom completion for company-mode.

I&apos;m gradually moving my personal knowledge management away from Obsidian into Emacs, but I want to keep the giant heap of Markdown files I&apos;ve already got (so that I can use my keybindings/custom commands from programming in my Personal Knowledge Base, too).

Something [[Emacs]] already does way better out-of-the-box than Obsidian is full-text search (obviously) and templates work nicely, too. Really the only thing I&apos;ve been missing are the wikilink behaviors:

1. File Creation on  inside [[]]
2. Highlighting of files in [[]] when the file already exists
3. Completion for already existing files when typing inside [[]]

The first two I&apos;ve already completed some time ago (you can find them here: mycelium.el)

And today, I finally read the doom docs (mid-helpful), company docs+blog post (helpful) and Emacs completion docs (not so helpful), and then went and implemented this:

elisp
(defun bah/mycelium-company-backend (command &amp;optional arg &amp;rest ignored)
  (interactive (list &apos;interactive))
  (cl-case command
    (interactive (company-begin-backend &apos;bah/mycelium-company-backend))
    (prefix (when (looking-back &quot;\\[\\[\\([^]]\\)&quot; (line-beginning-position))
              (match-string 1)))
    (candidates (cl-remove-if-not
                 (lambda (candidate)
                   (string-prefix-p arg candidate t))
                 (hash-table-keys (bah/get-project-markdown-file-names))))))

(after! markdown-mode
  (set-company-backend! &apos;markdown-mode #&apos;bah/mycelium-company-backend))


-&gt; mycelium-completion.el</description><pubDate>Mon, 12 Jan 2026 18:10:06 GMT</pubDate></item><item><title>curl Converter</title><link>https://beathagenlocher.com/stream/#00106/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00106/</guid><description>Today I found curlconverter

You give it a curl HTTP request, and it translates it into a corresponding request in many, many other languages.

Sweet :)</description><pubDate>Sat, 10 Jan 2026 00:40:32 GMT</pubDate></item><item><title>elysia</title><link>https://beathagenlocher.com/stream/#00105/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00105/</guid><description>TIL about [[Elysia]], a .. pretty nice-looking new-ish framework for writing strongly typed web services that has a strong emphasis on [[Bun]].

Their docs are pretty nice, they have cool tutorial/playground (and a very small thing: Their CORS plugin just works (that&apos;s not that high of a bar, I know))

I especially like how code example-heavy their comparison pages are: https://elysiajs.com/migrate/from-hono.html

Sweet!</description><pubDate>Sat, 10 Jan 2026 00:29:58 GMT</pubDate></item><item><title>Kanidm</title><link>https://beathagenlocher.com/stream/#00103/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00103/</guid><description>I&apos;ve already thought for a few times about setting up an LDAP service for organizations I&apos;m in, and always stopped doing it/thinking about it, because it didn&apos;t seem worth the effort.

Now (thanks to being on the clan.lol Matrix Server) I learned about Kanidm, which sounds way easier to use.

But especially valuable is Kanidm&apos;s Comparisons page where there&apos;s several other options listed.

I probably just should&apos;ve looked for a bit longer when I researched the LDAP stuff last time :)</description><pubDate>Wed, 31 Dec 2025 18:38:35 GMT</pubDate></item><item><title>Extism</title><link>https://beathagenlocher.com/stream/#00102/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00102/</guid><description>I just found out about Extism, a framework that lets you write plugins in {Rust, JS, Python, Go, Haskell, .NET, C, C++, Zig} as of now, compiles them to WASM, and then lets you call the resulting WASM modules from even more programming languages, but with only limited capabilities.

This looks like one of the frameworks finally fulfilling one of the promises of WASM (namely the one replacing docker, see Rust, WebAssembly and the future of Serverless).

Interesting!</description><pubDate>Wed, 31 Dec 2025 18:24:01 GMT</pubDate></item><item><title>clan.lol Backups</title><link>https://beathagenlocher.com/stream/#00101/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00101/</guid><description>Yesterday, I added a new service to my server (Actual), and then tried to get backups in clan to work.

This is the (very simple) result:

nix
  inventory.instances = {
    # https://docs.clan.lol/services/official/borgbackup/
    borgbackup = {
      module = {
        name = &quot;borgbackup&quot;;
        input = &quot;clan-core&quot;;
      };
      roles.client.machines.&quot;formenos&quot;.settings = {
        destinations.&quot;storagebox&quot; = {
          repo = &quot;u366465-sub5@u366465-sub5.your-storagebox.de:/./borgbackup&quot;;
          rsh = &apos;&apos;ssh -p 23 -oStrictHostKeyChecking=accept-new -i /run/secrets/vars/borgbackup/borgbackup.ssh&apos;&apos;;
        };
      };
    };
  machines.formenos = {
    # https://docs.clan.lol/guides/backups/backup-intro/
    clan.core.state.actual = {
      folders = [
        &quot;/var/lib/actual&quot;
      ];
    };
    # https://search.nixos.org/options?channel=unstable&amp;query=services.actual
    services.actual = {
      enable = true;
      settings = {
        port = 5006;
      };
    };
  };
</description><pubDate>Thu, 18 Dec 2025 10:09:58 GMT</pubDate></item><item><title>Vimium NixOS</title><link>https://beathagenlocher.com/stream/#00100/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00100/</guid><description>Today I learned that there&apos;s a home manager module for generating a Vimium config.

You can find it here: https://github.com/uimataso/vimium-nixos

Nothing crazy, but still pretty nice.

This is what my config looks like now

nix
home.vimiumOptions = {
  enable = true;

  outputFilePath = &quot;.cache/vimium-options.json&quot;;

  keyMappings = {
  unmapAll = true;
  map = {
      j = &quot;goBack&quot;;
      y = &quot;goForward&quot;;
      l = &quot;scrollPageDown&quot;;
      u = &quot;scrollPageUp&quot;;
      f = &quot;LinkHints.activateMode&quot;;
      p = &quot;LinkHints.activateModeToOpenInNewTab&quot;;
    };
  };
};


(You can find it here: https://github.com/haglobah/mynix/blob/f3277da86ff0834d5f1371ba5b5af1550e9da967/home/home.nix#L298)</description><pubDate>Mon, 15 Dec 2025 15:54:13 GMT</pubDate></item><item><title>Spritely&apos;s new stuff</title><link>https://beathagenlocher.com/stream/#00099/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00099/</guid><description>I swear it&apos;s not been that long when I last looked at the news page of [[Spritely Institute]] (okay, it&apos;s been about one and a half years), but man did they work on stuff.

They&apos;ve started work on their [[Malleable Software]]/sandboxing foreign code equivalent, Oaken, created a prototype composing OCaps and CRDTs and that was already enough to go through.

Pretty exciting stuff!</description><pubDate>Fri, 12 Dec 2025 16:09:35 GMT</pubDate></item><item><title>Finitary and Infinitary</title><link>https://beathagenlocher.com/stream/#00098/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00098/</guid><description>Lol, I learned two new words: Finitary and Infinitary

They mean the simplest thing you would expect: That something has a &lt;span class=&quot;font-bold&quot;&gt;finit&lt;/span&gt;e &lt;span class=&quot;font-bold&quot;&gt;ar&lt;/span&gt;it&lt;span class=&quot;font-bold&quot;&gt;y&lt;/span&gt; or an &lt;span class=&quot;font-bold&quot;&gt;infinit&lt;/span&gt;e &lt;span class=&quot;font-bold&quot;&gt;ar&lt;/span&gt;it&lt;span class=&quot;font-bold&quot;&gt;y&lt;/span&gt;.

Apparently these words get said more often than I&apos;d have expected ^^</description><pubDate>Fri, 12 Dec 2025 15:38:46 GMT</pubDate></item><item><title>Excluding Tailwind Classes From Being Generated</title><link>https://beathagenlocher.com/stream/#00097/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00097/</guid><description>Today I learned to exclude tailwind classes from being generated.

It works like this:

css
@import &apos;tailwindcss&apos;;
@source not inline(&quot;collapse&quot;); / excludes the collapse class /
</description><pubDate>Thu, 11 Dec 2025 17:12:53 GMT</pubDate></item><item><title>Unmap Return in company&apos;s completion menu</title><link>https://beathagenlocher.com/stream/#00096/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00096/</guid><description>(Mostly just a note to my future self)

Somehow I just had issues with [[Doom Emacs]]&apos;s map! function and unmapping the  key in company mode.

This didn&apos;t work:

elisp
(map! :map company-active-mode
  &quot;RET&quot; nil
  &quot;TAB&quot; #&apos;company-complete-selection)


but this did:

elisp
(after! company
  (keymap-unset company-active-map &quot;&lt;return&gt;&quot; t)
  (define-key company-active-map (kbd &quot;&lt;tab&gt;&quot;) #&apos;company-complete-selection))


Maybe I&apos;m gonna investigate this later.</description><pubDate>Wed, 10 Dec 2025 17:20:27 GMT</pubDate></item><item><title>Design Your Code From The Output On</title><link>https://beathagenlocher.com/stream/#00095/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00095/</guid><description>I just came upon this pretty interesting post by Jeremy Gibbons:  
How to design Co-Programs

His point is that data structure determines program structure (or at least should), and there&apos;s an easy way to apply this principle (data structure =&gt; program structure) that&apos;s missing from How to Design Programs:

htdp mostly concerns itself with deriving programs from the input data, but doesn&apos;t talk about deriving programs from the output data. (If that sentence doesn&apos;t produce a clear picture in your head, go now and read his article)

And that&apos;s something that hasn&apos;t been clear to me until now.</description><pubDate>Wed, 10 Dec 2025 15:12:51 GMT</pubDate></item><item><title>The Four Document Model for Writing Documentation</title><link>https://beathagenlocher.com/stream/#00094/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00094/</guid><description>Some time ago, I learned about Diataxis and found it pretty nice. I&apos;m not sure whether I read its critiques then, but today I got reminded (or got to know, who knows) one of them:

https://www.hillelwayne.com/post/problems-with-the-4doc-model/

I think I mostly buy his conclusion (Whenever I tried applying diataxis, I without question first wrote a conceptual overview page) :)</description><pubDate>Wed, 10 Dec 2025 14:51:54 GMT</pubDate></item><item><title>nixpkgs: Number of Packages</title><link>https://beathagenlocher.com/stream/#00093/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00093/</guid><description>Yesterday was Tü.λ again and the topic of the day was Guix (and with it, reproducible package management).

There&apos;s also an [[Operating System]] based on Guix, Guix System (as there is with [[Nix]] and [[NixOS]]) with basically the same trade-offs.

One of these trade-offs is that due to the nature of reproducible packages, you can&apos;t just run any linux binary directly on your system (cause they normally rely on dynamically linked libraries).

(There are some pretty easy workarounds to that, though)

That&apos;s why it&apos;s doubly important and useful to have as many packages packaged in Guix&apos;s and Nix&apos;s package repos Guix Packages and nixpkgs

After coming to that point at Tü.λ, I showed people the package repo size/freshness graph from repology, and could rest assured that basically everything you&apos;ll need that&apos;s available on Linux is also in nixpkgs.</description><pubDate>Thu, 04 Dec 2025 11:04:00 GMT</pubDate></item><item><title>On the Effectiveness of FIXMEs</title><link>https://beathagenlocher.com/stream/#00092/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00092/</guid><description>Today I learned about On the Effectiveness of FIXMEs.

The TL;DR:

Having a kind of code comment that&apos;s a immediate todo is helpful. That&apos;s because you can use it for lowering your mental workload while writing the code.

Instead of just dropping the part of the modeling you don&apos;t want to concern yourself with right now, you place a crumb there to pick it up later.

And that&apos;s pretty helpful.</description><pubDate>Mon, 01 Dec 2025 17:08:09 GMT</pubDate></item><item><title>Lix installer</title><link>https://beathagenlocher.com/stream/#00091/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00091/</guid><description>Today I learned Lix has an installer that&apos;s based off the determinate systems one now.

So now, you can install Lix with this command:

shell
curl --proto &apos;=https&apos; --tlsv1.2 -sSf -L https://install.lix.systems/lix | sh -s -- install


Nice!</description><pubDate>Mon, 01 Dec 2025 16:48:34 GMT</pubDate></item><item><title>Setting up a Win 11 VM on NixOS</title><link>https://beathagenlocher.com/setting-up-a-win-11-vm-on-nixos/</link><guid isPermaLink="true">https://beathagenlocher.com/setting-up-a-win-11-vm-on-nixos/</guid><description>Getting Win </description><pubDate>Mon, 01 Dec 2025 02:11:17 GMT</pubDate></item><item><title>nix-portable</title><link>https://beathagenlocher.com/stream/#00090/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00090/</guid><description>I just found nix-portable, a way to run [[Nix]] as a static executable from any linux system.

Cool!</description><pubDate>Sun, 30 Nov 2025 22:41:27 GMT</pubDate></item><item><title>kitty &amp; tmux</title><link>https://beathagenlocher.com/stream/#00089/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00089/</guid><description>Just got reminded (through a tmux bro) of this nice thread again:

https://github.com/kovidgoyal/kitty/issues/391#issuecomment-638320745
([[kitty]]&apos;s main dev on why [[Multiplexer]]s are a bad idea)</description><pubDate>Wed, 26 Nov 2025 19:41:18 GMT</pubDate></item><item><title>kitty</title><link>https://beathagenlocher.com/kitty/</link><guid isPermaLink="true">https://beathagenlocher.com/kitty/</guid><description>A pretty nice terminal emulator</description><pubDate>Wed, 26 Nov 2025 19:32:48 GMT</pubDate></item><item><title>evil mode</title><link>https://beathagenlocher.com/evil-mode/</link><guid isPermaLink="true">https://beathagenlocher.com/evil-mode/</guid><description>Emacs&apos; Vim mode</description><pubDate>Wed, 26 Nov 2025 16:59:39 GMT</pubDate></item><item><title>magit/evil interaction weirdness</title><link>https://beathagenlocher.com/stream/#00088/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00088/</guid><description>In [[magit]]&apos;s diff view ([[evil mode]]), it happens semi-regularly to me that I want to extract some code out of there to apply to my current state.

There&apos;s the option to apply a full hunk a

But sometimes, I just want to select a piece of text from there. For that, I could view the buffer at the current state by clicking  on the hunk, and then selecting it from the normal buffer, but even that gets annoying fast.

Today I realized that I can just set a mark with , and then select the text normally.

Nice!</description><pubDate>Wed, 26 Nov 2025 16:57:03 GMT</pubDate></item><item><title>Github: Public ssh keys</title><link>https://beathagenlocher.com/stream/#00087/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00087/</guid><description>Github has a website where one can see all the public keys per user.

It&apos;s at https://github.com/&lt;username&gt;.keys.

Sweet!</description><pubDate>Wed, 26 Nov 2025 13:38:45 GMT</pubDate></item><item><title>mu4e</title><link>https://beathagenlocher.com/mu4e/</link><guid isPermaLink="true">https://beathagenlocher.com/mu4e/</guid><description>An Email client for Emacs.</description><pubDate>Tue, 25 Nov 2025 12:36:05 GMT</pubDate></item><item><title>mu4e: Show the time in email list</title><link>https://beathagenlocher.com/stream/#00086/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00086/</guid><description>Today I learned how to also show the time in [[mu4e]]&apos;s email list.

This is how you do it:

elisp
(setq mu4e-headers-date-format &quot;%Y-%m-%d %H:%M&quot;)

(setq mu4e-headers-fields
  &apos;((:human-date . 18) ; this needs to be there
    (:flags . 6)
    (:from . 22)
    (:subject)))


Sweet!</description><pubDate>Tue, 25 Nov 2025 12:34:36 GMT</pubDate></item><item><title>Nix</title><link>https://beathagenlocher.com/nix/</link><guid isPermaLink="true">https://beathagenlocher.com/nix/</guid><description>Package Manager, Package Repo, Programming Language, and Operating System</description><pubDate>Mon, 24 Nov 2025 01:26:28 GMT</pubDate></item><item><title>clan.lol</title><link>https://beathagenlocher.com/stream/#00085/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00085/</guid><description>Today I learned about a new tool in the [[Nix]] space: Clan

Really looking forward to trying this out.</description><pubDate>Mon, 24 Nov 2025 01:24:25 GMT</pubDate></item><item><title>Law as Coding</title><link>https://beathagenlocher.com/stream/#00084/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00084/</guid><description>Today I finally watched A Language Server for your DSL for Fun and Profit, which was a pretty nice talk.

In the talk, he mentions L4—it&apos;s a [[Specification Language]] for legal systems.

Looks interesting!</description><pubDate>Thu, 20 Nov 2025 16:55:50 GMT</pubDate></item><item><title>Frontier Tower</title><link>https://beathagenlocher.com/stream/#00083/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00083/</guid><description>Ooh, there&apos;s a new &quot;different kind of society/state/governance/living&quot; experiment I didn&apos;t know about yet:

It&apos;s called the Frontier Tower.

And looks pretty promising!</description><pubDate>Tue, 18 Nov 2025 17:17:43 GMT</pubDate></item><item><title>just parallel</title><link>https://beathagenlocher.com/stream/#00082/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00082/</guid><description>Today I learned that [[Just]] can finally run recipes in parallel.

This is what this looks like:

just
[parallel]
dev: astro bsky

astro:
    npm run dev

bsky:
    cd bsky-post-server &amp;&amp; bun run dev


Sweet!</description><pubDate>Sat, 15 Nov 2025 17:09:37 GMT</pubDate></item><item><title>Today I learned</title><link>https://beathagenlocher.com/stream/#00081/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00081/</guid><description>Today I learned

- about bunster
- about util.inspect() for longer console.log() printing in Node.js</description><pubDate>Fri, 14 Nov 2025 12:13:44 GMT</pubDate></item><item><title>Adjusting transient menus in Emacs</title><link>https://beathagenlocher.com/stream/#00080/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00080/</guid><description>Today I learned how to adjust the keybindings in transient menus (those nice hover menus you may know from [[magit]]).

This is how you can do it for aidermacs:

elisp
(with-eval-after-load &apos;aidermacs
  (transient-replace-suffix
    &apos;aidermacs-transient-menu
    &quot;F&quot; &apos;(&quot;f&quot; &quot;Add Current File&quot; aidermacs-add-current-file)))


Code here: haglobah/doom | eval-after-load | aidermacs.el</description><pubDate>Thu, 13 Nov 2025 16:04:52 GMT</pubDate></item><item><title>git ssh command</title><link>https://beathagenlocher.com/stream/#00079/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00079/</guid><description>TIL that git can pick up its ssh command from the environment:

shell
GITSSHCOMMAND=&quot;ssh -v&quot; git pull


Especially the -v option is pretty useful to see if something&apos;s not working right now.</description><pubDate>Thu, 13 Nov 2025 12:59:52 GMT</pubDate></item><item><title>NeoVim</title><link>https://beathagenlocher.com/neovim/</link><guid isPermaLink="true">https://beathagenlocher.com/neovim/</guid><pubDate>Wed, 12 Nov 2025 21:44:04 GMT</pubDate></item><item><title>Emacs</title><link>https://beathagenlocher.com/emacs/</link><guid isPermaLink="true">https://beathagenlocher.com/emacs/</guid><description>An editor | a lisp interpreter with an editor | an operating system scriptable with a lisp (interpreter) with an editor | a lisp machine that is an operating system (scriptable with an interpreter) with an editor</description><pubDate>Wed, 12 Nov 2025 21:26:45 GMT</pubDate></item><item><title>count-words</title><link>https://beathagenlocher.com/stream/#00078/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00078/</guid><description>Today I learned that Emacs has a word and character-counting command baked in:

M-x count-words

But following the StackExchange thread on counting words, I discovered

- M-|: (shell-command-on-region)

That is pretty nice for doing anything fast you know how to do in the shell, but lack the knowledge to do with [[Emacs]] tools right now.</description><pubDate>Wed, 12 Nov 2025 15:51:28 GMT</pubDate></item><item><title>aider-chat-with-playwright</title><link>https://beathagenlocher.com/stream/#00077/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00077/</guid><description>Lol. I spent 20 minutes researching/reading Github issues on how to correctly set up aider with playwright on [[NixOS]], only to realize then that someone&apos;s already done it the way it should&apos;ve been done:

In addition to the aider-chat package in nixpkgs, there&apos;s an aider-chat-with-playwright package that does the right thing.

Sweet :)</description><pubDate>Mon, 10 Nov 2025 15:33:52 GMT</pubDate></item><item><title>git: naturally moving around the commit tree</title><link>https://beathagenlocher.com/stream/#00076/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00076/</guid><description> is a tool where I regularly think &quot;I wonder...&quot;, and then it just
works.

I had that already with discovering that—obviously—I can also commit --amend from the commit menu, and today I had it with navigating and manipulating the whole commit tree (l b).

When in the commit tree view, you can just do whatever you normally did and see the result directly.

Checkout a commit? -&gt; Hover over it, then b c
Rebase a branch? Check it out, then r b

And so on.  
Sweet!</description><pubDate>Fri, 07 Nov 2025 23:22:26 GMT</pubDate></item><item><title>magit</title><link>https://beathagenlocher.com/magit/</link><guid isPermaLink="true">https://beathagenlocher.com/magit/</guid><description>The way to use git.</description><pubDate>Fri, 07 Nov 2025 22:55:21 GMT</pubDate></item><item><title>iframes</title><link>https://beathagenlocher.com/stream/#00075/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00075/</guid><description>Apparently you can&apos;t open links from iframes in new tabs or windows.

Sad.

But searching for the question on StackOverflow brings you back to the olden days of the site at which at least one of the answers was completely ignoring the point of the question.</description><pubDate>Fri, 07 Nov 2025 22:47:32 GMT</pubDate></item><item><title>Just</title><link>https://beathagenlocher.com/just/</link><guid isPermaLink="true">https://beathagenlocher.com/just/</guid><description>Just is a simple and nice command runner</description><pubDate>Fri, 07 Nov 2025 22:25:39 GMT</pubDate></item><item><title>just open</title><link>https://beathagenlocher.com/stream/#00074/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00074/</guid><description>I came up with a new and simple thing I really like (utilizing ):

just
# Justfile

open cmd=&quot;&quot;:
    #!/usr/bin/env bash
    url=&quot;http://localhost:8080&quot;

    if [[ -n &quot;{{ cmd }}&quot; ]]; then
        {{ cmd }} &quot;$url&quot;
    elif command -v xdg-open &amp;&gt; /dev/null; then
        xdg-open &quot;$url&quot;
    elif command -v open &amp;&gt; /dev/null; then
        open &quot;$url&quot;
    else
        echo &quot;No suitable cmd found. Please install xdg-open or open.&quot;
        exit 1
    fi


This adds a canonical command for &quot;opening&quot; your projects.

My preferred way of launching a project is now:

shell
just open chromium &amp;&amp; just dev


(which becomes )</description><pubDate>Fri, 07 Nov 2025 22:10:19 GMT</pubDate></item><item><title>Getting More Power by Limiting Your Options</title><link>https://beathagenlocher.com/getting-more-power-by-limiting-your-options/</link><guid isPermaLink="true">https://beathagenlocher.com/getting-more-power-by-limiting-your-options/</guid><description>Simplicity is Power</description><pubDate>Thu, 06 Nov 2025 23:32:57 GMT</pubDate></item><item><title>Lingua Franca</title><link>https://beathagenlocher.com/stream/#00073/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00073/</guid><description>Oh wow:

I&apos;ve apparently never properly thought about the word lingua franca in its parts.  
It literally means &quot;language of the francs&quot;, which makes total sense.

That makes it harder for me now to point to the general principle behind it—german has it better there:

It&apos;s not only the word lingua franca we can and need to use—there&apos;s also another one:
Verkehrssprache (meaning &quot;language you commonly use when interacting&quot;)</description><pubDate>Thu, 06 Nov 2025 23:26:55 GMT</pubDate></item><item><title>Letting haiku-4.5 fill in Architectural Decision Records</title><link>https://beathagenlocher.com/stream/#00072/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00072/</guid><description>Today, I let haiku critique and write out bare drafts from my side into proper texts, and I think it worked pretty well.

That is an interesting property about LLMs:
I think that human-interaction-wise, the style in which they generate text could become a new lingua franca-like thing but for writing style. (-&gt; [[Writing with LLMs is Googling in Reverse]])</description><pubDate>Thu, 06 Nov 2025 23:02:03 GMT</pubDate></item><item><title>Battery Warning</title><link>https://beathagenlocher.com/stream/#00071/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00071/</guid><description>Lol. Just now I learned that GNOME doesn&apos;t give you a way of changing the battery percentage. You somehow got to know that there&apos;s another service, UPower, that does this.

So for changing the battery warning percentage, you got to edit /etc/UPower/UPower.conf:

toml
# UPower.conf

[UPower]
AllowRiskyCriticalPowerAction=false
CriticalPowerAction=HybridSleep
EnableWattsUpPro=false
IgnoreLid=false
NoPollBatteries=false
PercentageAction=2
PercentageCritical=5
PercentageLow=20 # set this to 30 or whatever
TimeAction=120
TimeCritical=300
TimeLow=1200
UsePercentageForPolicy=true


Or on [[NixOS]]:

nix
# configuration.nix

{
  config = {
    services.upower.percentageLow = 30;
  };
}

</description><pubDate>Thu, 06 Nov 2025 22:55:26 GMT</pubDate></item><item><title>Vite Cache</title><link>https://beathagenlocher.com/stream/#00070/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00070/</guid><description>Just today I ran into a weird issue:

shell
The file does not exist at &quot;&lt;projectroot&gt;/nodemodules/.vite/deps/chunk-3QUCSPQG.js?v=xxxxxxxx&quot; which is in the optimize deps directory. The dependency might be incompatible with the dep optimizer. Try adding it to optimizeDeps.exclude


Refreshing it via the browser cache solves it:

https://github.com/vitejs/vite/discussions/17738#discussioncomment-13090665

Makes sense, but could use a better error message before everyone first nukes their nodemodules/ ^^</description><pubDate>Mon, 03 Nov 2025 14:01:13 GMT</pubDate></item><item><title>Solid Primitives</title><link>https://beathagenlocher.com/stream/#00069/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00069/</guid><description>Yesterday, looking for how to properly do keyboard shortcuts in SolidJS, I found this website:

Solid Primitives

That&apos;s a pretty nice idea, actually—I especially like how clear they are on the Design Principles and the maturity indicators.</description><pubDate>Sat, 01 Nov 2025 14:51:03 GMT</pubDate></item><item><title>Is Elm dead?</title><link>https://beathagenlocher.com/stream/#00068/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00068/</guid><description>Hihi: https://iselmdead.info/

Is Elm dead?</description><pubDate>Fri, 31 Oct 2025 16:08:26 GMT</pubDate></item><item><title>Valibot</title><link>https://beathagenlocher.com/stream/#00067/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00067/</guid><description>Ooh, there is a new-ish Zod replacement that looks pretty cool!

-&gt; Valibot</description><pubDate>Thu, 30 Oct 2025 16:20:59 GMT</pubDate></item><item><title>Tools for Conviviality</title><link>https://beathagenlocher.com/stream/#00066/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00066/</guid><description>Just properly read Jacky Zhao&apos;s note on Tools for Conviviality: https://jzhao.xyz/thoughts/Tools-for-Conviviality

I&apos;ve only read Deschooling from [[Ivan Illich]] so far, which I found great.

And onto my book list it goes ^^</description><pubDate>Wed, 29 Oct 2025 17:02:46 GMT</pubDate></item><item><title>About Keybindings</title><link>https://beathagenlocher.com/about-keybindings/</link><guid isPermaLink="true">https://beathagenlocher.com/about-keybindings/</guid><pubDate>Mon, 27 Oct 2025 16:22:21 GMT</pubDate></item><item><title>Better Computer Use</title><link>https://beathagenlocher.com/better-computer-use/</link><guid isPermaLink="true">https://beathagenlocher.com/better-computer-use/</guid><description>Keyboard shortcuts &amp; other stuff you probably want to know about</description><pubDate>Mon, 27 Oct 2025 15:57:50 GMT</pubDate></item><item><title>Ctrl-Arrow</title><link>https://beathagenlocher.com/stream/#00065/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00065/</guid><description>Some time ago, a fairly computer savvy friend of mine looked at me confused/surprised when I sat down at his PC and skipped through the text word by word by holding down Ctrl and then clicking the arrow keys.

And then I remembered I, too, found out about that only after my first few years of using computers.

Probably time to start my version of this list: [[Better Computer Use]]</description><pubDate>Mon, 27 Oct 2025 15:30:18 GMT</pubDate></item><item><title>Learning Vim</title><link>https://beathagenlocher.com/learning-vim/</link><guid isPermaLink="true">https://beathagenlocher.com/learning-vim/</guid><description>What I used/found helpful for learning Vim keybindings</description><pubDate>Sun, 26 Oct 2025 09:51:55 GMT</pubDate></item><item><title>Small Improvements</title><link>https://beathagenlocher.com/stream/#00064/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00064/</guid><description>I&apos;m already a person that tends to do this enough/a lot, but today I got inspired to do it some more: Do One New Thing A Day To Solve Your Problems

(I think I&apos;ve got a loose contact on one of the nice!nanos on my keyboard–and today, I finally resolved to just buy a new one – not even really new, but nevertheless ^^)</description><pubDate>Fri, 24 Oct 2025 03:44:39 GMT</pubDate></item><item><title>Thinking in Systems</title><link>https://beathagenlocher.com/stream/#00063/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00063/</guid><description>Ooh, there&apos;s a Video Series on Thinking in Systems!</description><pubDate>Fri, 24 Oct 2025 03:41:06 GMT</pubDate></item><item><title>fast-check</title><link>https://beathagenlocher.com/stream/#00062/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00062/</guid><description>I just tried out fast-check for property testing in TypeScript, and my first impression is it&apos;s pretty sweet.

With most of the things in JS, it&apos;s half pretty straightforward and half quite some steps you need to take if you&apos;re setting it up from scratch.

shell
# -1. Have vite
# 0. Install a test runner
npm install --save-dev vitest
# 1. Install fast-check
npm install --save-dev fast-check


And then, for:

ts
// modulo.ts
export const mod = (n: number, m: number): number =&gt; {
  return ((n % m) + m) % m
}


add this

ts
# modulo.test.ts
import fc from &apos;fast-check&apos;
import { describe, it } from &apos;vitest&apos;

describe(&apos;mod&apos;, () =&gt; {
  it(&apos;result is always in range [0, m)&apos;, () =&gt; {
    fc.assert(
      fc.property(fc.integer(), fc.integer({ min: 1 }), (n, m) =&gt; {
        const result = mod(n, m)
        return result &gt;= 0 &amp;&amp; result &lt; m
      })
    )
  })
})
</description><pubDate>Tue, 21 Oct 2025 18:19:25 GMT</pubDate></item><item><title>Presenterm</title><link>https://beathagenlocher.com/stream/#00061/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00061/</guid><description>I&apos;m always on the lookout for &apos;the perfect&apos; slides program (whatever that might be).

I like:

- full power of a programming language (runnable code snippets, for example, slides as code)
- good interop with other stuff (web, mostly)
- runnable code in slides
- easy/fast to write slides (lol)

Strong contenders are/have been Reveal JS, Slidev, impress.js and Racket Slideshow.

Today, I found out about presenterm (slides that run from your terminal)

Looks promising!</description><pubDate>Tue, 21 Oct 2025 17:18:53 GMT</pubDate></item><item><title>A Million Ways to Fold in JS</title><link>https://beathagenlocher.com/stream/#00060/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00060/</guid><description>Just found this gem: A Million Ways to Fold in JS

The speed at which this talk is progressing is insane.
I can count myself lucky that I just listened to a presentation of Recursion Schemes at Tü.λ</description><pubDate>Tue, 21 Oct 2025 17:04:19 GMT</pubDate></item><item><title>LLM Poisoning</title><link>https://beathagenlocher.com/stream/#00059/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00059/</guid><description>Uh oh: Apparently, you can poison LLMs pretty easily</description><pubDate>Tue, 21 Oct 2025 16:56:40 GMT</pubDate></item><item><title>Constraint Solving</title><link>https://beathagenlocher.com/stream/#00058/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00058/</guid><description>In earlier grades in school, I&apos;ve been time constrained in what I could do for most of the time.

Later, I&apos;ve read about that it&apos;s more helpful to manage your energy, not your time—and realized I&apos;d been doing that inconsistently but pretty well already.

But, during the last year, I&apos;ve come close to the point at which almost all of the things I do in life give me energy.

Now, the biggest thing that still takes my energy is everything I still need to think of: My mental workload.

So does this make it

&gt; Manage Your Mental Workload, Not Your Time.

for me?

Good question.</description><pubDate>Mon, 20 Oct 2025 00:38:59 GMT</pubDate></item><item><title>Rich in Moonshots</title><link>https://beathagenlocher.com/stream/#00057/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00057/</guid><description>As I&apos;m slowly progressing through my read-review pile in Nirvana, I find Jade Bonacolta&apos;s Quiet Rich stuff better and better.

Today, I had my first Moonshot slot scheduled. It is a pretty good calendar entry to have.

Maybe you want that for yourself, too?</description><pubDate>Sat, 18 Oct 2025 02:49:49 GMT</pubDate></item><item><title>Contacting Me</title><link>https://beathagenlocher.com/contacting-me/</link><guid isPermaLink="true">https://beathagenlocher.com/contacting-me/</guid><description>Tell me something I don&apos;t know | Tell me where I&apos;m wrong | Ask for help | Have a nice conversation</description><pubDate>Sat, 18 Oct 2025 01:48:25 GMT</pubDate></item><item><title>Working with an AI Pair: Outsource Your Mental Workload to Your Commit Messages</title><link>https://beathagenlocher.com/working-with-an-ai-pair-outsource-your-mental-workload-to-your-commit-messages/</link><guid isPermaLink="true">https://beathagenlocher.com/working-with-an-ai-pair-outsource-your-mental-workload-to-your-commit-messages/</guid><pubDate>Fri, 17 Oct 2025 01:54:29 GMT</pubDate></item><item><title>(Doom) Emacs Config Bits</title><link>https://beathagenlocher.com/doom-emacs-config-bits/</link><guid isPermaLink="true">https://beathagenlocher.com/doom-emacs-config-bits/</guid><description>Configuration parts you might want to know</description><pubDate>Mon, 13 Oct 2025 18:13:59 GMT</pubDate></item><item><title>Emacs language server speedup</title><link>https://beathagenlocher.com/stream/#00055/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00055/</guid><description>Over the last few weeks, I found lsp-mode TypeScript suggestions to be slower than they should&apos;ve been.

The full-on solution is lsp-bridge (which makes the lsp stuff work asynchronously), but I first wanted to try what lsp-mode still has to offer.

There&apos;s emacs-lsp-booster, and I&apos;m using it now :)

≺≻ [[Doom Emacs Config Bits]]</description><pubDate>Mon, 13 Oct 2025 18:06:59 GMT</pubDate></item><item><title>Liberland</title><link>https://beathagenlocher.com/stream/#00054/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00054/</guid><description>Some setup:

I regularly think about why our civilization currently struggles the way it does, and I think a significant part of our struggles comes from not really having an alternative system available to which we can compare ourselves to.

It feels like—viewed from an average western citizen—having competing socialist countries with high equality available for comparison gave governing bodies a really good incentive to not let e.g. inequality go out of hand.

This easily-comparable-alternative died in 1990, and since then, we have a hard time to even imagine an alternative.

So, even if it were just for the quality of our collective imagination—it would be pretty nice to have a different and competing society to ours available to compare ourselves to.

And optimally, it wouldn&apos;t even only be one, but a diverse set of them: Something up to Scott Alexander&apos;s Archipelago of communities from Archipelago and Atomic Communitarianism.

---

And this is why it both makes me pretty happy to see that people are finally experimenting with this, and quite a bit sad that basically all of them sound like the same US-libertarian-web3-AI wet dream.

The latest contender: Liberland

Well, I wish them all the best :)</description><pubDate>Mon, 13 Oct 2025 01:23:50 GMT</pubDate></item><item><title>IPv6 Internet Issues</title><link>https://beathagenlocher.com/ipv6-internet-issues/</link><guid isPermaLink="true">https://beathagenlocher.com/ipv6-internet-issues/</guid><pubDate>Thu, 09 Oct 2025 11:50:18 GMT</pubDate></item><item><title>Jacky Zhao</title><link>https://beathagenlocher.com/jacky-zhao/</link><guid isPermaLink="true">https://beathagenlocher.com/jacky-zhao/</guid><pubDate>Thu, 09 Oct 2025 01:11:57 GMT</pubDate></item><item><title>Jacky Zhao</title><link>https://beathagenlocher.com/stream/#00053/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00053/</guid><description>Would you look at that!

[[Jacky Zhao]] (of Quartz and of Socratica) built a JSON CRDT from scratch to properly learn how they work.

This is so cool.</description><pubDate>Thu, 09 Oct 2025 00:47:06 GMT</pubDate></item><item><title>Abusing Maths</title><link>https://beathagenlocher.com/stream/#00052/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00052/</guid><description>I&apos;m always having a hard time when people use a mathy notation in a context where it could make sense, but doesn&apos;t really.

This is one of them: Big L Notation

I don&apos;t even know what assigning &apos;learnings&apos; with a big-O like complexity should mean.

And this irritates me, which is pretty sad.
Because normally articles like these have a point—they just fail to formulate the point in Maths.

This article is like that: It has a point, but fails to formulate it in Maths :)</description><pubDate>Thu, 09 Oct 2025 00:13:17 GMT</pubDate></item><item><title>Digital Garden</title><link>https://beathagenlocher.com/digital-garden/</link><guid isPermaLink="true">https://beathagenlocher.com/digital-garden/</guid><description>A web of notes that grow</description><pubDate>Wed, 08 Oct 2025 23:34:29 GMT</pubDate></item><item><title>IP Network Ranges</title><link>https://beathagenlocher.com/stream/#00051/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00051/</guid><description>I&apos;m currently looking at a solution for the Internet issues when traveling via DB, and found this lovely Wikipedia page:

IPv4 Address Blocks

I&apos;ve always wondered whom the local 10.0.0.0/8 range originally belonged to. Go and see for yourself :)</description><pubDate>Mon, 06 Oct 2025 16:12:08 GMT</pubDate></item><item><title>Deutsche Bahn | Issues and Solutions</title><link>https://beathagenlocher.com/deutsche-bahn--issues-and-solutions/</link><guid isPermaLink="true">https://beathagenlocher.com/deutsche-bahn--issues-and-solutions/</guid><description>Things that can go wrong in DB trains and how to (sometimes) resolve them</description><pubDate>Sat, 04 Oct 2025 21:53:29 GMT</pubDate></item><item><title>Thank You for Traveling with Deutsche Bahn</title><link>https://beathagenlocher.com/stream/#00050/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00050/</guid><description>When traveling via DB in Germany, there are a few things that can go wrong.

And as I just learned about a new solution for DB issues, I thought it&apos;s time to start a page collecting them: [[Deutsche Bahn | Issues and Solutions]]</description><pubDate>Sat, 04 Oct 2025 21:50:28 GMT</pubDate></item><item><title>Microlife Review</title><link>https://beathagenlocher.com/microlife-review/</link><guid isPermaLink="true">https://beathagenlocher.com/microlife-review/</guid><pubDate>Sat, 04 Oct 2025 21:21:51 GMT</pubDate></item><item><title>Weekly Review</title><link>https://beathagenlocher.com/weekly-review/</link><guid isPermaLink="true">https://beathagenlocher.com/weekly-review/</guid><pubDate>Sat, 04 Oct 2025 21:16:10 GMT</pubDate></item><item><title>My Review System</title><link>https://beathagenlocher.com/stream/#00049/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00049/</guid><description>At some time in 2019, I started journaling to get a clearer head about thoughts and other open threads I accumulated during the day.

Through it, I&apos;ve come to appreciate [[Leslie Lamport]]s If you&apos;re thinking without writing, you only think you&apos;re thinking, and I still do think it&apos;s pretty great.

Writing about things that feel fuzzy in my head really clears the fog, and things get concrete.

But I&apos;ve always struggled with transferring that clarity to bigger thoughts (&apos;bigger&apos; in the time it takes to think it through, not necessarily in scope of the thought).

And sometimes during last year, I&apos;ve started with something new trying to tackle this:

- Every week (or so, lol), I&apos;m writing a [[Weekly Review]]
- And every 12-week cycle, I&apos;m doing a [[Microlife Review]] and outlook spanning the last and next 12 weeks

I found that this works nicely for the bigger stuff in life.

:)</description><pubDate>Sat, 04 Oct 2025 21:04:01 GMT</pubDate></item><item><title>Economics</title><link>https://beathagenlocher.com/stream/#00048/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00048/</guid><description>Pretty recently, I saw the monthly newsletter by Global Development &amp; Economic Advancement in my inbox.

I couldn&apos;t remember that I subscribed to it, and was really pleasantly surprised. Of the pieces that sounded interesting and which I read, 100% were. Some gems:

- How Asia Works
- (On measuring) GDP: We don&apos;t really know how good we have it

But take a look at the rest if you&apos;re interested: GDEA Substack \| October 2025</description><pubDate>Thu, 02 Oct 2025 16:54:00 GMT</pubDate></item><item><title>Needles eye</title><link>https://beathagenlocher.com/stream/#00047/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00047/</guid><description>I&apos;m currently reading The Baroque Cycle by Neal Stephenson—and just now one of the protagonists came upon something called Needle&apos;s eye in an ancient city. It&apos;s a small stone arch that&apos;s used to keep camels out of spaces.

Suddenly the bible quote with the camel and the needles eye makes a lot more sense.

And this is not the first time Stephenson weaves a nice little fact into the overall story (though I can&apos;t remember the other occurrences right now).  
Pretty nice!</description><pubDate>Thu, 02 Oct 2025 16:45:37 GMT</pubDate></item><item><title>Bluesky</title><link>https://beathagenlocher.com/stream/#00046/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00046/</guid><description>And now I can publish texts to Bluesky from Emacs!

Code here: haglobah/doom: bluesky.el</description><pubDate>Wed, 24 Sep 2025 21:52:00 GMT</pubDate></item><item><title>Augmenting Human Intellect</title><link>https://beathagenlocher.com/stream/#00045/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00045/</guid><description>Last night, I finished reading Augmenting Human Intellect, a summary report on Computer Use for [[Tools for Thought]] (also incredibly old: it&apos;s from 1962) written by Douglas Engelbart, the guy behind the The Mother of All Demos

Content-wise, it&apos;s pretty good: We&apos;ve got some way towards it, but we&apos;re still miles away from achieving the human augmentation he describes in the report.

Regarding the Writing Style, I&apos;m honestly surprised just how badly it&apos;s written.  
Every other sentence is a jumble of the words process, function, structure, substructure, and basically every verb is substantivized.</description><pubDate>Tue, 16 Sep 2025 11:21:04 GMT</pubDate></item><item><title>Automations</title><link>https://beathagenlocher.com/stream/#00044/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00044/</guid><description>Ever got annoyed by having to do a lot of very simple and repetitive actions?

For solving that, being able to control your whole editor programmatically is pretty neat.

It&apos;s not much, but just now I added a small new capability to my Emacs, which is:

Being able to create those small blog post files from wherever I am.

This is what it looks like:

elisp
(defun bah/new-streamlet ()
 (interactive)
 (let ((dg-root &quot;/beathagenlocher.com&quot;)
        (stream-folder (doom-path dg-root &quot;src&quot; &quot;content&quot; &quot;stream&quot;))
        (next-number (-&gt;&gt; (directory-files stream-folder nil (rx &quot;.mdx&quot;))
                          (map &apos;list
                               (lambda (filename)
                                 (string-to-number (file-name-sans-extension filename))))
                          (sort)
                          (reverse)
                          (first)
                          (+ 1)))
        (next-streamlet-filename (concat (number-to-string next-number) &quot;.mdx&quot;))
        (next-streamlet-path (doom-path stream-folder next-streamlet-filename)))
   (with-temp-file next-streamlet-path (insert &quot;stream&quot;))
   (find-file next-streamlet-path)
   (move-end-of-line nil)
   (evil-append 0)))

(map! :leader
      :prefix (&quot;e&quot; . &quot;personal&quot;)
      :desc &quot;Writing: Streamlet&quot; :nv &quot;s&quot; #&apos;bah/new-streamlet)
</description><pubDate>Tue, 16 Sep 2025 11:17:46 GMT</pubDate></item><item><title>Comparing Bikes</title><link>https://beathagenlocher.com/stream/#00043/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00043/</guid><description>I&apos;m currently looking for a new bike, and found a pretty nice website for comparing them:

https://99spokes.com/

I especially like the Gear Speed thing and the Price/Spec Level map :)</description><pubDate>Sun, 14 Sep 2025 21:03:23 GMT</pubDate></item><item><title>Recipes</title><link>https://beathagenlocher.com/recipes/</link><guid isPermaLink="true">https://beathagenlocher.com/recipes/</guid><pubDate>Fri, 12 Sep 2025 21:52:16 GMT</pubDate></item><item><title>Crocker&apos;s Rules</title><link>https://beathagenlocher.com/crockers-rules/</link><guid isPermaLink="true">https://beathagenlocher.com/crockers-rules/</guid><description>Signalling: &apos;Please be harsh with me—I&apos;ll value it tremendously.&apos;</description><pubDate>Fri, 12 Sep 2025 21:38:36 GMT</pubDate></item><item><title>Good Incentive Systems</title><link>https://beathagenlocher.com/stream/#00042/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00042/</guid><description>A few days ago, I read Explaining British Naval Dominance During the Age of Sail and have been thinking about it quite regularly since.

You should go and read it—it&apos;s not that long—but the TL;DR is that when you have bad and/or long feedback loops, having good incentive systems in place makes you win wars.</description><pubDate>Fri, 12 Sep 2025 21:13:59 GMT</pubDate></item><item><title>Work Boundaries</title><link>https://beathagenlocher.com/stream/#00041/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00041/</guid><description>Recently, I came upon The Quiet Rich, specifically the article on Work Boundaries.

So I thought I&apos;d try and write this down for me: [[My Work Boundaries]]</description><pubDate>Fri, 12 Sep 2025 21:10:26 GMT</pubDate></item><item><title>My Work Boundaries</title><link>https://beathagenlocher.com/my-work-boundaries/</link><guid isPermaLink="true">https://beathagenlocher.com/my-work-boundaries/</guid><description>A sheet on the logistics of working together (pretty barebones, but hopefully useful) | &quot;How I&apos;d like to work&quot;</description><pubDate>Fri, 12 Sep 2025 21:09:00 GMT</pubDate></item><item><title>LessWrong Community Weekend 2025</title><link>https://beathagenlocher.com/lesswrong-community-weekend-2025/</link><guid isPermaLink="true">https://beathagenlocher.com/lesswrong-community-weekend-2025/</guid><pubDate>Wed, 10 Sep 2025 22:50:12 GMT</pubDate></item><item><title>emacs-monkeytype</title><link>https://beathagenlocher.com/stream/#00040/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00040/</guid><description>For quite some time I&apos;ve been a bit jealous of the [[NeoVim]] people for having something like Typr or DuckyType available to them.

But I&apos;ve never really translated that into actually searching for a Monkeytype package for [[Emacs]].

Today, I did—and found emacs-monkeytype.

This combined with The touch typing test text editor | Drew&apos;s blogsite makes for a pretty nice workflow :)

(commit that adds it: haglobah/doom#7bfe9a0)</description><pubDate>Wed, 10 Sep 2025 22:49:01 GMT</pubDate></item><item><title>Autosave in Editors</title><link>https://beathagenlocher.com/autosave-in-editors/</link><guid isPermaLink="true">https://beathagenlocher.com/autosave-in-editors/</guid><description>Saving by hand is just less simple</description><pubDate>Sun, 07 Sep 2025 13:31:15 GMT</pubDate></item><item><title>VS Code tips and tricks</title><link>https://beathagenlocher.com/vs-code-tips-and-tricks/</link><guid isPermaLink="true">https://beathagenlocher.com/vs-code-tips-and-tricks/</guid><description>How I&apos;m using VS Code</description><pubDate>Sun, 07 Sep 2025 13:23:22 GMT</pubDate></item><item><title>Raising Aspirations</title><link>https://beathagenlocher.com/stream/#00039/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00039/</guid><description>Just came upon this wonderful piece again:

The high-return activity of raising others’ aspirations

Already raised someone&apos;s aspirations today?</description><pubDate>Fri, 05 Sep 2025 18:28:27 GMT</pubDate></item><item><title>Real Time Giant Chess</title><link>https://beathagenlocher.com/stream/#00038/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00038/</guid><description>Oh my god, this looks great:

https://www.youtube.com/watch?v=5ioIkgPO14</description><pubDate>Sun, 17 Aug 2025 15:23:29 GMT</pubDate></item><item><title>The Goddess of Everything Else</title><link>https://beathagenlocher.com/stream/#00037/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00037/</guid><description>Just got reminded (via the LessWrong Community Weekend) of this wonderful piece: The Goddess of Everything Else (Video Version)</description><pubDate>Sat, 09 Aug 2025 20:30:55 GMT</pubDate></item><item><title>A Streamlet</title><link>https://beathagenlocher.com/stream/#00036/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00036/</guid><description>Nice talk about Deutsche Bahn.

- Talk: https://www.youtube.com/watch?v=gQN9EQAu9HE
- Website: https://bahnvorhersage.de/</description><pubDate>Sat, 09 Aug 2025 19:40:21 GMT</pubDate></item><item><title>Weaving Threads</title><link>https://beathagenlocher.com/stream/#00035/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00035/</guid><description>At the DSA, I made a promise:

&gt; When the first attendant of one of my programming workshops would be finished with reading the first book for [[Learning to Program]] I proposed, I would start to draft the guide to Software Engineering I would&apos;ve liked to have when I was younger.

That happened nine days after the DSA finished.

So now I find myself writing this guide (still  for now)—and I&apos;m really enjoying it so far.</description><pubDate>Fri, 01 Aug 2025 00:53:44 GMT</pubDate></item><item><title>Nix Flake</title><link>https://beathagenlocher.com/nix-flake/</link><guid isPermaLink="true">https://beathagenlocher.com/nix-flake/</guid><pubDate>Tue, 29 Jul 2025 02:20:58 GMT</pubDate></item><item><title>Learning to C</title><link>https://beathagenlocher.com/learning-to-c/</link><guid isPermaLink="true">https://beathagenlocher.com/learning-to-c/</guid><description>A mastery guide for the ugly side of programming</description><pubDate>Tue, 29 Jul 2025 00:52:40 GMT</pubDate></item><item><title>No more commit hashes</title><link>https://beathagenlocher.com/stream/#00034/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00034/</guid><description>Lol. Today I learned that you can reference commits in git by searching through their messages:

In this commit graph:

shell
 30997b5 (HEAD -&gt; main, bugFix) Add lala
 ceeae15 Add hehe
 c4a2cd2 Add hoho
 b2627b3 Add a


shell
git show :/hoho


does the thing you&apos;d expect—it shows commit c4a2cd2. Nice!</description><pubDate>Mon, 28 Jul 2025 22:54:13 GMT</pubDate></item><item><title>Keyboard Shortcuts</title><link>https://beathagenlocher.com/stream/#00033/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00033/</guid><description>TIL that holding Ctrl on https://chatgpt.com shows all available keyboard shortcuts.

That&apos;s actually pretty nice UX :)

Minus me not knowing that until now (which clearly is bad UX)—but hey, you can&apos;t have everything, I guess. It would have been nice of them to indicate that somewhere.</description><pubDate>Mon, 28 Jul 2025 02:31:45 GMT</pubDate></item><item><title>NAND to Tetris</title><link>https://beathagenlocher.com/stream/#00032/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00032/</guid><description>We&apos;re currently thinking about which course to teach at a possible next SchülerAkademie next year.

We thought a course that traverses a sizeable chunk of the abstraction stack of [[Computer Science]] could be pretty nice, and I had a website that did that in mind for starting my investigation into course materials.
However, I didn&apos;t do that immediately, and found NAND to Tetris on one of [[Eli Tyre]]&apos;s links first. This somehow felt familiar.

And I&apos;m still not sure where I saw it/read about it first, but just today I sorted some links about Supernuclear into my personal knowledge base, one of which was a guest post by one of the Fractal University (which I already knew) people, which taught NAND to Tetris before.

I love it when I find out a graph is connected like that.</description><pubDate>Sun, 27 Jul 2025 23:24:35 GMT</pubDate></item><item><title>Mechanical Keyboards United</title><link>https://beathagenlocher.com/mechanical-keyboards-united/</link><guid isPermaLink="true">https://beathagenlocher.com/mechanical-keyboards-united/</guid><description>A collection of links we mentioned at our TDF mechanical keyboards workshop/meetup</description><pubDate>Sat, 26 Jul 2025 19:46:04 GMT</pubDate></item><item><title>Writing A Web Server in Elixir</title><link>https://beathagenlocher.com/writing-a-web-server-in-elixir/</link><guid isPermaLink="true">https://beathagenlocher.com/writing-a-web-server-in-elixir/</guid><pubDate>Sat, 26 Jul 2025 00:00:00 GMT</pubDate></item><item><title>Navigating The Shell</title><link>https://beathagenlocher.com/navigating-the-shell/</link><guid isPermaLink="true">https://beathagenlocher.com/navigating-the-shell/</guid><pubDate>Thu, 24 Jul 2025 17:41:49 GMT</pubDate></item><item><title>cmdchallenge</title><link>https://beathagenlocher.com/stream/#00031/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00031/</guid><description>TIL about a nice new thing: cmdchallenge

- Twelve Days of Shell (easy)
- Command Challenge (mid)
- Without /bin version (hard)

There are pretty cool ways to learn how to .</description><pubDate>Thu, 24 Jul 2025 17:37:03 GMT</pubDate></item><item><title>Setting Up A New Phone</title><link>https://beathagenlocher.com/setting-up-a-new-phone/</link><guid isPermaLink="true">https://beathagenlocher.com/setting-up-a-new-phone/</guid><description>In search for a small phone: Switching from a Pixel 4a to a iPhone 13 mini</description><pubDate>Thu, 24 Jul 2025 00:31:54 GMT</pubDate></item><item><title>Netscape</title><link>https://beathagenlocher.com/stream/#00030/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00030/</guid><description>Just got reminded of a real gem by Joel Spolsky: Things You Should Never Do, Part I

(You shouldn&apos;t rewrite your software from scratch.)</description><pubDate>Wed, 23 Jul 2025 22:45:39 GMT</pubDate></item><item><title>Techne</title><link>https://beathagenlocher.com/stream/#00029/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00029/</guid><description>And oh my god, he&apos;s got a list of his Personal systems, protocols, workflows, policies, methods, and checklists he calls Techne (nice word, by the way!).

So looking forward to studying them.</description><pubDate>Wed, 23 Jul 2025 00:25:29 GMT</pubDate></item><item><title>Capital</title><link>https://beathagenlocher.com/stream/#00028/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00028/</guid><description>Just got recommended Eli Tyre—and he&apos;s got a nice write-up of types of Capital (I already thought in those three types of Capital before, though—probably not the most novel idea on earth ^^)

But then, I went on a [[roaming the web]] research spree encompassing

- his dating profile
  - how he spends his time
    - an incredibly cool project/course
    - and a pretty nice list of mental models
- his bounties
- and his principles.

And then branched off to his books, Project Lawful, and to finally downloading the Functional Decision Theory papers (1, 2)

Ah, I love [[roaming the web]].</description><pubDate>Tue, 22 Jul 2025 23:06:15 GMT</pubDate></item><item><title>Joey Savoie</title><link>https://beathagenlocher.com/stream/#00027/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00027/</guid><description>I mean, I knew him from him being mentioned in [[Moral Ambition]] for founding the Charity Entrepreneurship stuff, but:
He&apos;s also got a website where he tries (or tried?) to outline his values.

Unfortunately, it&apos;s only little content, but from what I can see it&apos;s pretty neat

- Partners
- Values
- Sleep
- Morning Routine</description><pubDate>Tue, 22 Jul 2025 20:41:34 GMT</pubDate></item><item><title>Books You Probably Want To Read</title><link>https://beathagenlocher.com/books-you-probably-want-to-read/</link><guid isPermaLink="true">https://beathagenlocher.com/books-you-probably-want-to-read/</guid><pubDate>Fri, 11 Jul 2025 21:44:05 GMT</pubDate></item><item><title>dsa-2025</title><link>https://beathagenlocher.com/dsa-2025/</link><guid isPermaLink="true">https://beathagenlocher.com/dsa-2025/</guid><description>A collection of things I mentioned to people at DSA Roßleben 2025</description><pubDate>Fri, 11 Jul 2025 20:23:25 GMT</pubDate></item><item><title>My Keyboard Setup</title><link>https://beathagenlocher.com/my-keyboard-setup/</link><guid isPermaLink="true">https://beathagenlocher.com/my-keyboard-setup/</guid><description>mechanical, split, 36 keys, standing desk</description><pubDate>Tue, 01 Jul 2025 23:56:55 GMT</pubDate></item><item><title>Software</title><link>https://beathagenlocher.com/stream/#00026/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00026/</guid><description>We were promised bicycles for the mind, but we got aircraft carriers instead.</description><pubDate>Tue, 01 Jul 2025 01:07:25 GMT</pubDate></item><item><title>Choosing My Frontend Stack, Part II</title><link>https://beathagenlocher.com/choosing-my-frontend-stack-part-ii/</link><guid isPermaLink="true">https://beathagenlocher.com/choosing-my-frontend-stack-part-ii/</guid><pubDate>Tue, 24 Jun 2025 22:41:49 GMT</pubDate></item><item><title>The Hydrogen Sonata</title><link>https://beathagenlocher.com/stream/#00025/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00025/</guid><description>I&apos;ve just finished reading The Hydrogen Sonata, the now sixth (? I think) [[Culture]] book I&apos;ve read.  
Pretty nice book, although I would sort it into the middle of all the culture books I&apos;ve read so far.
(Doesn&apos;t surpass [[Player of Games]] or [[Consider Phloebas]], for example)

And I think I&apos;m at the point where I find the [[Culture]] books all a bit too similar—but hey, what can you do when you still very much enjoy reading them.</description><pubDate>Tue, 24 Jun 2025 22:39:15 GMT</pubDate></item><item><title>A Streamlet</title><link>https://beathagenlocher.com/stream/#00024/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00024/</guid><description>Oh, and the lean packaged in [[Doom Emacs]] appears to be the Lean 3 Mode. So you can&apos;t use that, and instead need to use the Doom Emacs section of lean4-mode.</description><pubDate>Sun, 08 Jun 2025 15:06:12 GMT</pubDate></item><item><title>Trying Lean</title><link>https://beathagenlocher.com/stream/#00023/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00023/</guid><description>Day 2 of the Zurihac 2025, and I&apos;m trying out Lean.

As regularly is the case, since I&apos;m on [[NixOS]], things don&apos;t work directly out of the box.

This guide in particular doesn&apos;t work anymore since the official [[Nix Flake]] got deprecated.

Luckily, there is a new one that just works™.

Up to some [[Functional Programming]] with it.</description><pubDate>Sun, 08 Jun 2025 14:41:48 GMT</pubDate></item><item><title>A Streamlet</title><link>https://beathagenlocher.com/stream/#00022/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00022/</guid><description>Currently at ZuriHac setting up a PureScript development environment with [[Nix]]—and of course, it&apos;s not issue-free.

shell
nix shell nixpkgs#purescript nixpkgs#spago
spago init
spago build


errors. (Throws a pretty cryptic git error.) You need:

shell
nix shell nixpkgs#purescript nixpkgs#nodejs24
npm install spago@next
npx spago init
npx spago run
npx spago test


That works!</description><pubDate>Sat, 07 Jun 2025 15:59:53 GMT</pubDate></item><item><title>A Streamlet</title><link>https://beathagenlocher.com/stream/#00021/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00021/</guid><description>Aand Super-Productivity&apos;s sync broke again.

Aaah.</description><pubDate>Wed, 28 May 2025 00:02:25 GMT</pubDate></item><item><title>Local-first conf day #1</title><link>https://beathagenlocher.com/stream/#00020/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00020/</guid><description>Aaand I&apos;ve just had my first day at local-first conf!

What a great crowd.

My day started with talks about some pretty nice topics, followed by a lunch with an absolutely amazing range of topics.

We went from [[Clojure]] to [[Emacs]] to Semantic Zooming to [[Simon Willison]] to llm to [[Bret Victor]] and [[Dynamicland]] (and a new talk of him being online!), to [[Stephen Wolfram]]&apos;s personal setup, all interleaved with local-first stuff.

And that was only until just after lunch.

\&lt;3</description><pubDate>Tue, 27 May 2025 23:28:43 GMT</pubDate></item><item><title>Local-first Unconf</title><link>https://beathagenlocher.com/stream/#00019/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00019/</guid><description>I just came home from my first day of Local-first Conference—the less official [[Unconference]] part, and I had a pretty great day.

I&apos;ve worked a bit more with [[jazz.tools]], and had so many interesting conversations.

Today, I:

- read Project Cambria
- thought a lot about bidirectional lenses
- learned where the Software as Aircraft Carriers, not Bicycles quote is coming from
- got reminded of Darklang
- learned more properly about iroh
- and got reminded of how weird/hard [[Schema Migration]] and [[Identity]] actually are.

10/10.
Can recommend.  
😁</description><pubDate>Tue, 27 May 2025 00:07:30 GMT</pubDate></item><item><title>Choosing My Frontend Stack</title><link>https://beathagenlocher.com/choosing-my-frontend-stack/</link><guid isPermaLink="true">https://beathagenlocher.com/choosing-my-frontend-stack/</guid><pubDate>Mon, 26 May 2025 00:59:16 GMT</pubDate></item><item><title>Things I Want In A Programming Language</title><link>https://beathagenlocher.com/things-i-want-in-a-programming-language/</link><guid isPermaLink="true">https://beathagenlocher.com/things-i-want-in-a-programming-language/</guid><pubDate>Mon, 26 May 2025 00:43:22 GMT</pubDate></item><item><title>Local-first Software</title><link>https://beathagenlocher.com/local-first-software/</link><guid isPermaLink="true">https://beathagenlocher.com/local-first-software/</guid><pubDate>Mon, 26 May 2025 00:21:12 GMT</pubDate></item><item><title>Productivity</title><link>https://beathagenlocher.com/stream/#00018/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00018/</guid><description>Over the last few weeks, I&apos;ve grown more and more uncomfortable with the amount of different tasks I&apos;ve been keeping in my head right now. I played around with a bunch of todo apps, and none of them has been really satisfactory.

All I want(ed) is an app with:

- fast UI
- nice search with filtering
- nice search for scheduling
- I can use as my inbox for everything, also things to read. It should integrate with the sharing menu of my phone.
- I can use from anywhere I can access the internet
- I can use without Internet
- That never, ever produces any sync weirdness between devices.

Shouldn&apos;t be that hard, right?

So far, it sounds like I probably could make Amazing Marvin do what I want.

But I&apos;m definitely also using this as an example application to try out [[local-first software]] frameworks.</description><pubDate>Sun, 25 May 2025 23:59:19 GMT</pubDate></item><item><title>Work With The Garage Door Up</title><link>https://beathagenlocher.com/work-with-the-garage-door-up/</link><guid isPermaLink="true">https://beathagenlocher.com/work-with-the-garage-door-up/</guid><pubDate>Thu, 22 May 2025 01:29:53 GMT</pubDate></item><item><title>About this site: Thinking Out Loud</title><link>https://beathagenlocher.com/thinking-out-loud/</link><guid isPermaLink="true">https://beathagenlocher.com/thinking-out-loud/</guid><pubDate>Thu, 22 May 2025 01:22:13 GMT</pubDate></item><item><title>Setting Up git</title><link>https://beathagenlocher.com/setting-up-git/</link><guid isPermaLink="true">https://beathagenlocher.com/setting-up-git/</guid><pubDate>Tue, 20 May 2025 17:32:08 GMT</pubDate></item><item><title>Setting Up Home Manager</title><link>https://beathagenlocher.com/setting-up-home-manager/</link><guid isPermaLink="true">https://beathagenlocher.com/setting-up-home-manager/</guid><description>A tutorial</description><pubDate>Sun, 18 May 2025 16:40:49 GMT</pubDate></item><item><title>https://stopa.io</title><link>https://beathagenlocher.com/stream/#00017/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00017/</guid><description>I&apos;ve just reread some of Stepan Parunashvili&apos;s articles, and damn, he&apos;s good.

He talks about [[local-first software]](here), [[Antifragility]] (here), and progress.

Gotta love it.</description><pubDate>Thu, 15 May 2025 23:38:51 GMT</pubDate></item><item><title>Setting Up Email in Doom Emacs with mu4e on NixOS with Home Manager</title><link>https://beathagenlocher.com/setting-up-email-in-doom-emacs-with-mu4e-on-nixos-with-home-manager/</link><guid isPermaLink="true">https://beathagenlocher.com/setting-up-email-in-doom-emacs-with-mu4e-on-nixos-with-home-manager/</guid><pubDate>Thu, 15 May 2025 10:58:37 GMT</pubDate></item><item><title>RSS</title><link>https://beathagenlocher.com/stream/#00016/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00016/</guid><description>Aand I&apos;ve got an RSS Feed! :)</description><pubDate>Wed, 14 May 2025 23:35:54 GMT</pubDate></item><item><title>nix-tree</title><link>https://beathagenlocher.com/stream/#00015/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00015/</guid><description>I just learned about nix-tree. What a nice tool!

It shows you a searchable dependency tree of your flake(s) + their sizes: Super nice to analyze what&apos;s taking so long when you&apos;re rebuilding your home environment, for example. (It was my humongous nvf config)

You can run it like this:

shell
nix run nixpkgs#nix-tree
</description><pubDate>Sun, 11 May 2025 16:03:58 GMT</pubDate></item><item><title>Roaming the Web</title><link>https://beathagenlocher.com/stream/#00013/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00013/</guid><description>I&apos;ve just had my latest hour-long [[Roaming the Web]]-spree. It started off with reading this great article on relationships (How Relationships Actually Work), and went on with me reading half of her blog.

Then I found out she&apos;s together with Eliezer, which made me go reading some nice [[LessWrong]] articles.

Specifically those two from Duncan Sabien:

- Lies, Damn Lies and Fabricated Options
- You don&apos;t exist, Duncan

It&apos;s probably fair to say I&apos;m in the general vicinity of an Information Monster.</description><pubDate>Fri, 09 May 2025 00:16:13 GMT</pubDate></item><item><title>How I Use Git Worktrees</title><link>https://beathagenlocher.com/how-i-use-git-worktrees/</link><guid isPermaLink="true">https://beathagenlocher.com/how-i-use-git-worktrees/</guid><description>TL; DR: git worktree add ../&lt;name&gt;
</description><pubDate>Wed, 07 May 2025 17:35:17 GMT</pubDate></item><item><title>Mastering 42</title><link>https://beathagenlocher.com/stream/#00012/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00012/</guid><description>When first encountering this whole [[Writing Online]] idea, I really didn&apos;t consider myself a writer in any capacity.

I even thought something among the lines of &quot;Wow, that would be crazy&quot;/&quot;Wow, that would be so not you.&quot;

Well, turns out when I thought that I forgot I had already been writing courses for the Hacker School and walkthroughs/guides for 42 School for quite some time already.

Brains are interesting.</description><pubDate>Wed, 07 May 2025 01:59:52 GMT</pubDate></item><item><title>Battling Muscle Pain</title><link>https://beathagenlocher.com/battling-muscle-pain/</link><guid isPermaLink="true">https://beathagenlocher.com/battling-muscle-pain/</guid><pubDate>Wed, 07 May 2025 00:33:28 GMT</pubDate></item><item><title>Battling Neck Pain</title><link>https://beathagenlocher.com/battling-neck-pain/</link><guid isPermaLink="true">https://beathagenlocher.com/battling-neck-pain/</guid><pubDate>Tue, 06 May 2025 23:55:02 GMT</pubDate></item><item><title>Pages</title><link>https://beathagenlocher.com/stream/#00011/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00011/</guid><description>Aand there are separate pages for my collections now:

  
 l.</description><pubDate>Tue, 06 May 2025 01:42:24 GMT</pubDate></item><item><title>Progress Bars</title><link>https://beathagenlocher.com/stream/#00010/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00010/</guid><description>One of the pretty nice things about writing my own [[Digital Garden]] is how much I&apos;m able to just implement everything I would&apos;ve liked to have on other websites.

I&apos;ve just implemented something I really would&apos;ve liked to have on other websites:

A reading progress bar that indicates both the progress and the total reading time of the note by highlighting the part of the bar that you can currently see.  
It&apos;s a relatively minor thing, I know—but what can I say: I really like those small and simple solutions.</description><pubDate>Sun, 04 May 2025 22:46:37 GMT</pubDate></item><item><title>Project Setup Made Simple</title><link>https://beathagenlocher.com/project-setup-made-simple/</link><guid isPermaLink="true">https://beathagenlocher.com/project-setup-made-simple/</guid><pubDate>Fri, 02 May 2025 01:17:49 GMT</pubDate></item><item><title>Cryptocurrencies</title><link>https://beathagenlocher.com/stream/#00009/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00009/</guid><description>Aand he got me convinced to at least give Cryptocurrencies another chance:  
Why Cryptocurrencies is on my reading list now.</description><pubDate>Fri, 02 May 2025 01:05:29 GMT</pubDate></item><item><title>Jonas Hietala</title><link>https://beathagenlocher.com/people/jonas-hietala/</link><guid isPermaLink="true">https://beathagenlocher.com/people/jonas-hietala/</guid><pubDate>Fri, 02 May 2025 00:42:52 GMT</pubDate></item><item><title>A Streamlet</title><link>https://beathagenlocher.com/stream/#00008/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00008/</guid><description>Just rediscovered  because I got back to trying out  properly.</description><pubDate>Thu, 01 May 2025 02:48:43 GMT</pubDate></item><item><title>Optimizing around</title><link>https://beathagenlocher.com/stream/#00007/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00007/</guid><description>Lately, I had the impression that my workflows somehow stabilized.

I&apos;ve been relatively happy with my window manager combined with [[gnome-magic-window]], and haven&apos;t been tweaking my keybinds for applications much lately.

I&apos;ve been using [[Doom Emacs]] for quite some time now and spend less and less time customizing some behavior of it.

Compared to this, my keyboard layout feels almost completely stable with only minor changes in the whole of 2024, for example.

But lately, I&apos;ve felt like I&apos;ve hit a few ceilings at the same time—and now

- I can type - and  faster
- vsplits are more natural in [[Emacs]]
- Moving around [[S-Expression]]s is cleaner
- And for the first time in ages, I now play around with pure, non-[[Home Row Mod]] Shift buttons on my keyboard.

Well, what can I say? I do like being in a state of [[Flow]]—and am definitely willing to pay the price for it.</description><pubDate>Wed, 30 Apr 2025 01:38:03 GMT</pubDate></item><item><title>CSS Weirdness</title><link>https://beathagenlocher.com/stream/#00006/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00006/</guid><description>I just corrected my  component and it inexplicably blew out of its enclosing element.

Nothing ordinary helped until I found this comment.

[[CSS]] is, indeed, quite weird sometimes.

(The problem is that grids try to accommodate to the size of their elements. The solution is to apply min-w-0 to all of the elements.)</description><pubDate>Tue, 29 Apr 2025 02:25:29 GMT</pubDate></item><item><title>A Streamlet</title><link>https://beathagenlocher.com/stream/#00005/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00005/</guid><description>Oh, and it also has neither a [[REPL]] nor a typeof function by default, as far as I can see.

Maybe this helps for now—but I&apos;m not so sure.

ocaml
type theType = TheType

let t = (thing: theType) =&gt; { thing }

t(&quot;hoho&quot;)
t(5)
t(5.)

</description><pubDate>Tue, 29 Apr 2025 01:55:27 GMT</pubDate></item><item><title>Pedantic Typers</title><link>https://beathagenlocher.com/stream/#00004/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00004/</guid><description>I&apos;m currently and finally getting my feet wet with ReScript.

And I must say, I really do like what I see so far.
The website is clear about what you get, the Docs look nice, and it&apos;s got good and readable error messages.

But what on earth is this?

ocaml
@react.component
let make = () =&gt; {
  let (count, setCount) = React.useState(() =&gt; 0)

  &lt;div className=&quot;p-6&quot;&gt;
      &lt;h1 className=&quot;text-3xl font-semibold&quot;&gt; {&quot;What is this about?&quot; -&gt; React.string} &lt;/h1&gt;
    &lt;p&gt;
      {React.string(&quot;This is a simple template for a Vite project using ReScript &amp; Tailwind CSS.&quot;)}
    &lt;/p&gt;
    
  &lt;/div&gt;
}


Yep, you see that right. One has to explicitly cast every string to a React.string.

(Sounds like it&apos;s due to it not having the ability to form [[Union Types]] with [[Base Types]]. Hmm.)</description><pubDate>Tue, 29 Apr 2025 01:27:02 GMT</pubDate></item><item><title>A Streamlet</title><link>https://beathagenlocher.com/stream/#00003/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00003/</guid><description>[[Ozempic]] is weird.</description><pubDate>Thu, 24 Apr 2025 21:18:34 GMT</pubDate></item><item><title>A Streamlet</title><link>https://beathagenlocher.com/stream/#00002/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00002/</guid><description>Why can&apos;t a human body go to Mars? I&apos;m glad you asked</description><pubDate>Thu, 24 Apr 2025 21:18:00 GMT</pubDate></item><item><title>The most favorite fable</title><link>https://beathagenlocher.com/stream/#00001/</link><guid isPermaLink="true">https://beathagenlocher.com/stream/#00001/</guid><description>Really enjoying roaming around Derek Sivers&apos; website.</description><pubDate>Sat, 19 Apr 2025 00:00:00 GMT</pubDate></item><item><title>Clojure</title><link>https://beathagenlocher.com/programming-languages/clojure/</link><guid isPermaLink="true">https://beathagenlocher.com/programming-languages/clojure/</guid><description>java with a lisp</description><pubDate>Wed, 16 Apr 2025 00:00:00 GMT</pubDate></item><item><title>Packing List</title><link>https://beathagenlocher.com/packing-list/</link><guid isPermaLink="true">https://beathagenlocher.com/packing-list/</guid><description>What I take with me when traveling</description><pubDate>Mon, 24 Mar 2025 00:00:00 GMT</pubDate></item><item><title>A Common Cause</title><link>https://beathagenlocher.com/a-common-cause/</link><guid isPermaLink="true">https://beathagenlocher.com/a-common-cause/</guid><pubDate>Sat, 01 Feb 2025 00:00:00 GMT</pubDate></item><item><title>Building Communities</title><link>https://beathagenlocher.com/building-communities/</link><guid isPermaLink="true">https://beathagenlocher.com/building-communities/</guid><pubDate>Sat, 01 Feb 2025 00:00:00 GMT</pubDate></item><item><title>Things I Regularly Recommend To People</title><link>https://beathagenlocher.com/things-i-regularly-recommend-to-people/</link><guid isPermaLink="true">https://beathagenlocher.com/things-i-regularly-recommend-to-people/</guid><pubDate>Sat, 01 Feb 2025 00:00:00 GMT</pubDate></item><item><title>Which Functional Programming Language Should I Start With?</title><link>https://beathagenlocher.com/which-functional-programming-language-should-i-start-with/</link><guid isPermaLink="true">https://beathagenlocher.com/which-functional-programming-language-should-i-start-with/</guid><pubDate>Sat, 01 Feb 2025 00:00:00 GMT</pubDate></item><item><title>Are You A Knowledge Worker? Establish This Habit To Become More Productive</title><link>https://beathagenlocher.com/are-you-a-knowledge-worker_-establish-this-habit-to-become-more-productive/</link><guid isPermaLink="true">https://beathagenlocher.com/are-you-a-knowledge-worker_-establish-this-habit-to-become-more-productive/</guid><pubDate>Sat, 01 Feb 2025 00:00:00 GMT</pubDate></item><item><title>Does Your Repo&apos;s Getting Started Section Take More Than 10 Minutes? Just Use Nix.</title><link>https://beathagenlocher.com/does-your-repos-getting-started-section-take-more-than-10-minutes_-just-use-nix/</link><guid isPermaLink="true">https://beathagenlocher.com/does-your-repos-getting-started-section-take-more-than-10-minutes_-just-use-nix/</guid><pubDate>Sat, 01 Feb 2025 00:00:00 GMT</pubDate></item><item><title>How I Would Structure My First Physics Semesters If I Went To University Again</title><link>https://beathagenlocher.com/how-i-would-structure-my-first-physics-semesters-if-i-went-to-university-again/</link><guid isPermaLink="true">https://beathagenlocher.com/how-i-would-structure-my-first-physics-semesters-if-i-went-to-university-again/</guid><pubDate>Sat, 01 Feb 2025 00:00:00 GMT</pubDate></item><item><title>How Much Is Too Much? The One Thing You Should Know About Drinking Water</title><link>https://beathagenlocher.com/how-much-is-too-much_-the-one-thing-you-should-know-about-drinking-water/</link><guid isPermaLink="true">https://beathagenlocher.com/how-much-is-too-much_-the-one-thing-you-should-know-about-drinking-water/</guid><pubDate>Sat, 01 Feb 2025 00:00:00 GMT</pubDate></item><item><title>How Programming Changes Your Thinking—And You Can&apos;t Even Explain</title><link>https://beathagenlocher.com/how-programming-changes-your-thinkingand-you-cant-even-explain/</link><guid isPermaLink="true">https://beathagenlocher.com/how-programming-changes-your-thinkingand-you-cant-even-explain/</guid><pubDate>Sat, 01 Feb 2025 00:00:00 GMT</pubDate></item><item><title>It Took Me Years Until I Understood Web Servers—You Can Do It In 10 Minutes</title><link>https://beathagenlocher.com/it-took-me-years-until-i-understood-web-serversyou-can-do-it-in-10-minutes/</link><guid isPermaLink="true">https://beathagenlocher.com/it-took-me-years-until-i-understood-web-serversyou-can-do-it-in-10-minutes/</guid><pubDate>Sat, 01 Feb 2025 00:00:00 GMT</pubDate></item><item><title>Less Headaches And Simpler Programs Using Pipes</title><link>https://beathagenlocher.com/less-headaches-and-simpler-programs-using-pipes/</link><guid isPermaLink="true">https://beathagenlocher.com/less-headaches-and-simpler-programs-using-pipes/</guid><pubDate>Sat, 01 Feb 2025 00:00:00 GMT</pubDate></item><item><title>Setting Up A Repo In Under 5 Minutes As Software Engineers With Nix</title><link>https://beathagenlocher.com/setting-up-a-repo-in-under-5-minutes-as-software-engineers-with-nix/</link><guid isPermaLink="true">https://beathagenlocher.com/setting-up-a-repo-in-under-5-minutes-as-software-engineers-with-nix/</guid><pubDate>Sat, 01 Feb 2025 00:00:00 GMT</pubDate></item><item><title>The 2 Ways Merino T-Shirts Help You To Be More Minimalist</title><link>https://beathagenlocher.com/the-2-ways-merino-t-shirts-help-you-to-be-more-minimalist/</link><guid isPermaLink="true">https://beathagenlocher.com/the-2-ways-merino-t-shirts-help-you-to-be-more-minimalist/</guid><pubDate>Sat, 01 Feb 2025 00:00:00 GMT</pubDate></item><item><title>The 3 Strategies I Used To Remove Neck Pain From My Life</title><link>https://beathagenlocher.com/the-3-strategies-i-used-to-remove-neck-pain-from-my-life/</link><guid isPermaLink="true">https://beathagenlocher.com/the-3-strategies-i-used-to-remove-neck-pain-from-my-life/</guid><pubDate>Sat, 01 Feb 2025 00:00:00 GMT</pubDate></item><item><title>This Is The Best Book I&apos;ve Ever Read On Human Nature</title><link>https://beathagenlocher.com/this-is-the-best-book-ive-ever-read-on-human-nature/</link><guid isPermaLink="true">https://beathagenlocher.com/this-is-the-best-book-ive-ever-read-on-human-nature/</guid><pubDate>Sat, 01 Feb 2025 00:00:00 GMT</pubDate></item><item><title>Want To Learn Programming? The 3 Pointers I Would Give To My 10-Years-Ago Self</title><link>https://beathagenlocher.com/want-to-learn-programming_-the-3-pointers-i-would-give-to-my-10-years-ago-self/</link><guid isPermaLink="true">https://beathagenlocher.com/want-to-learn-programming_-the-3-pointers-i-would-give-to-my-10-years-ago-self/</guid><pubDate>Sat, 01 Feb 2025 00:00:00 GMT</pubDate></item><item><title>Want To Start With Functional Programming? This Is The Book You Should Read For A Smooth Entry, Clear Design, And Better Code In General</title><link>https://beathagenlocher.com/want-to-start-with-functional-programming_-this-is-the-book-you-should-read-for-a-smooth-entry-clear-design-and-better-code-in-general/</link><guid isPermaLink="true">https://beathagenlocher.com/want-to-start-with-functional-programming_-this-is-the-book-you-should-read-for-a-smooth-entry-clear-design-and-better-code-in-general/</guid><pubDate>Sat, 01 Feb 2025 00:00:00 GMT</pubDate></item><item><title>Why Write, And Why In Public?</title><link>https://beathagenlocher.com/why-write-and-why-in-public_/</link><guid isPermaLink="true">https://beathagenlocher.com/why-write-and-why-in-public_/</guid><pubDate>Sat, 01 Feb 2025 00:00:00 GMT</pubDate></item><item><title>Window Switching Made Simple</title><link>https://beathagenlocher.com/window-switching-made-simple/</link><guid isPermaLink="true">https://beathagenlocher.com/window-switching-made-simple/</guid><pubDate>Sat, 01 Feb 2025 00:00:00 GMT</pubDate></item><item><title>Simple Development Environments with Nix</title><link>https://beathagenlocher.com/simple-development-environments-with-nix/</link><guid isPermaLink="true">https://beathagenlocher.com/simple-development-environments-with-nix/</guid><description>Setting up development environments is more complex than it should be. Nix makes entering development environments as easy as running nix develop, making them simple and reproducible. This talk explores what an ideal workflow could look like and walks through a project setup with Nix, outlining its benefits and deficiencies.</description><pubDate>Wed, 12 Jun 2024 00:00:00 GMT</pubDate></item></channel></rss>