How to automatically build a human.json file in Hugo

As I mentioned the other day, I recently added a human.json file to this site. However, it became a bit annoying adding new vouches to the json manually. So today I sat down and made it get created automatically during my page build powered by Hugo, based on a list of vouches stored in a vouches.yaml data file1. For this I first created said data file in data/vouches.yaml: - url: https://food.foosel.net date: "2026-03-14" - url: https://chaos.social/@foosel date: "2026-03-14" - url: https://octoprint.org date: "2026-03-14" # ... Then I created a new output format humanjson in my config.yaml, making sure to also add it to the home page: ...

March 20, 2026 · 2 min

human.json

Thanks to a toot by Seth Larson yesterday I learned about the still in draft human.json spec by Beto Dealmeida: human.json is a lightweight protocol for humans to assert authorship of their site content and vouch for the humanity of others. It uses URL ownership as identity, and trust propagates through a crawlable web of vouches between sites. Basically, a web of trust to confirm that pages are written by actual human beings vs just LLM generated slop. ...

March 15, 2026 · 1 min

How to work around tailscale breaking IPv6 on the host

Yesterday I ran into an incredibly weird issue. I installed the Tailscale client on two of my virtual servers hosted in the Hetzner Cloud (running Ubuntu) and suddenly the websites they offered stopped working. I suspected Tailscale and indeed, tailscale down immediately restored functionality. The websites in question are actually on GitHub Pages and my servers are just acting as reverse proxy to resolve domain and TLS, and a look into the web server’s error.log showed that the issue in serving was that the server could no longer reach its upstream at github.io when Tailscale was active. It wasn’t a general loss of external connectivity though - IPv4 addresses still worked great, the webserver however was trying to connect to the upstream via IPv6 and this is where things failed. ...

January 23, 2026 · 5 min

How to set the internal schedule on a Roomba 960 using rest980

For some reason my Roomba 960 decided to fall off the cloud, or at least the official app refuses to see it. I thankfully already have an instance of rest980 running in my homelab anyhow, and it is still happily chatting with the bot. And tbh, I might just block cloud access again as having everything local is better anyhow. In any case, I wanted to disable the schedule currently set on it internally to switch to scheduling stuff from my home automation, but without the app working I wasn’t sure on how. So I went hunting through rest980’s source - as the README didn’t tell me what I was looking for - and found that I could program the weekly schedule with some easy curl magic via the /api/local/config/week endpoint. ...

July 9, 2025 · 2 min

How to automatically sync screenshots from the Steamdeck to Immich

As part of my ongoing effort to reduce my dependency on US services, I just moved my photos from Google Photos to a self-hosted immich instance (which I btw can only recommend so far). You might remember from a previous TIL that I had my Steamdeck configured to push my screenshots into a custom album on Google Photos. Obviously I had to change that now as well, but sadly couldn’t use the existing rclone-based setup for it. ...

March 25, 2025 · 3 min

How to fix VirtualBox on Fedora 40 with Kernel 6.12+

I (accidentally1) did a software update on my laptop last night, and this morning when I needed my Win10 VM for something, VirtualBox threw an error like this at me: VirtualBox can’t operate in VMX root mode. Please disable the KVM kernel extension, recompile your kernel and reboot (VERR_VMX_IN_VMX_ROOT_MODE). A quick web search for “fedora update virtualbox vboxisomaker” gave me this forum post and consequently this bug report, in which I found the solution: I just had to add the kernel parameter kvm.enable_virt_at_load=0 to disable KVM - which comes enabled by default since Kernel 6.12. I accomplished that with grubby: ...

February 27, 2025 · 1 min

How to fetch additional data for a flux query from a json file

My buddy Romses is currently taking care of the Datenzwerg deployment at 38c3, and like at every event where we deploy them I’m updating our page and Grafana dashboard with the locations of the gnomes. So far the latter was always quite annoying: We have only the names of the gnomes in our influx data, and adding the location/deployment status to the graph thus meant having something like this for every single graph: ...

December 26, 2024 · 2 min

How to make transparent GIFs more easily sharable by adding a checkerboard background

I’m currently taking part in the "#hARToween" daily art challenge, as I want to work on my pixelart skills and drawing a 128x128px pixel drawing each day1 for a month seemed like a good idea. You can follow my posts in this thread. I’m using Aseprite, and recently came across the “record for aseprite” script for it that allows taking regular snapshots of what I’m currently drawing so a timelapse can be created from that. And that works nicely, but I had to realize that the timelapse would come with transparency until I came to the background during my drawing, which looked really weird when sharing the resulting GIF. ...

October 15, 2024 · 2 min

How I (hopefully) fixed the flickering of my UHKv2's left half

I’ve been a long time user of the Ultimate Hacking Keyboard (UHK). It started with acquiring version 1 in 2020 and upgrading to version 2 in 2022. The UHK is a split keyboard with two halves connected by a bridge cable. While the first version was rock solid for me, with the second one I sadly started to experience intermittent flickering of the left half, during which the left side became unresponsive. Sometimes the half would then even outright disconnect completely. Unplugging and replugging it would usually fix the issue, but was annoying. ...

August 19, 2024 · 4 min

How to check for cloud IPs in nginx

I’m currently busy mitigating a stats manipulation on OctoPrint, and one of the steps I’m taking is blocking off several cloud options from accessing the tracking endpoint - and only that. Since we are talking about several thousand of IPs here in at least 1.5k of CIDR ranges, I was looking for the best way to do that that wouldn’t cause a lot of performance impact - the tracking server needs to be fast. ...

July 1, 2024 · 2 min
Mastodon Alt