Immich ML Hardware Acceleration with OpenVINO in a Proxmox LXC container

Also known as: I am stupid. What? (This is hopefully going to be a short one) I recently installed Immich as I’m trying to get away from backing up my pictures on someone else’s computer, or on NextCloud (awesome tool, horrible auto-sync behavior in the Android app, no fancy features for photo hosting). I chose to run it in an LXC container because it allows me to let it use my GPU without having to do PCIe Passthrough, which reserves the card for that machine1. I’m also running the default Docker Compose setup (yeah, yeah, container in a container… I don’t care). ...

January 31, 2026 · 3 min · 491 words

Build Marlin With Gitea Actions

Or: how I got tired of having to use the excellent Auto Build Marlin and decided to automate the build process even more. Background I run a local Gitea for all my git needs; recently(-ish)1 they introduced Gitea Actions, for CI/CD, instead of relying on external tools like Woodpecker. I also have a Creality Ender-3 Pro 3D printer, whose stock firmware is… Not great.. From what I remember, it does not (or at least did not, when I got it) have Thermal Runaway protection enabled in the firmware2. ...

January 27, 2026 · 12 min · 2368 words

Automatically build your CV with GitLab pipelines

Background For more than a decade I’ve been using a CV1 I wrote in LaTeX; a few years ago I found myself in the unfortunate situation of having to update my CV while on a laptop that didn’t have TeX Live installed, while being on a potato-quality, slower-than-a-56k-modem, internet connection. I keep my TeX files in a git repository, in GitLab, so fetching those was not a problem, but fetching many hundreds of MBs for the compiler was. ...

December 29, 2025 · 12 min · 2447 words

Site to Site VPN for Dummies between pfSense and a Raspberry Pi

Today I find myself trying to solve a question that plagued historians for the past few hundred years: why the fork can’t I ping my off-site backup server?! Background I put a NAS and a Raspberry Pi in $secret_location to my backups (you’re following the 3-2-1 Rule too, right?). The Pi runs Raspbian, with Wireguard configured - via systemd + wg-quick, and a monitoring cronjob - to connect to my homelab (running pfSense). Throw in a couple static routes, and I can configure my TrueNAS to run a backup job to a private IP over a secure connection. The end, right? ...

December 24, 2025 · 8 min · 1507 words

Hiding Octoprint behind Pomerium and dealing with WebSockets

I run OctoPrint behind Pomerium. The actual configuration is somewhat irrelevant (although I’ll still paste it here) # Octoprint - from: https://octoprint.example.com to: http://192.168.169.170 allow_websockets: true policy: - allow: or: - email: is: me@example.com preserve_host_header: true but what you should know is that OctoPrint really likes its WebSocket and will refuse to connect without it. In the network console you’ll see attempts to connect to wss://octoprint.example.com/sockjs/123/random_string/websocket all returning 403 Access Denied instead of 101 Switching Protocols. Your ~/.octoprint/logs/tornado.log will tell you that ...

December 5, 2025 · 4 min · 665 words

trakt.tv and Jellyfin: when tracking your shows goes wrong

I run my own Jellyfin server, as well as having a local OpenELEC (Kodi) for when I’m home, and use trakt.tv to keep my views in sync. While Kodi does a pretty good job at picking up when something is marked as watched on Trakt, Jellyfin does not, so I sometimes watch a show at home, and some time later I’m somewhere else wanting to watch the next episode on my phone, and Jellyfin will still be stuck at those “older” episodes I already watched at home. ...

November 27, 2025 · 12 min · 2509 words

NUT and USB UPSes

I just migrated my homelab to a new machine, and in the process I had to reinstall Network UPS Tools (more commonly known as NUT). In the process, I relearned why you need to make sure NUT is allowed to access USB devices, and how to do that. NUT is configured as a netserver to provide power information to all the machines that are connected to it. I backed up my configuration from my old server so, other than making a couple configuration tweaks, this should’ve been a piece of cake… ...

August 31, 2025 · 5 min · 864 words

TPM2 auto-unlock of a LUKS-encrypted laptop running Debian

For a while now I wanted to make my Debian laptop’s LUKS encrypted drive auto-unlock with TPM2. Today is the day I try to do that: in and out, 20 minute adventure. tl;dr If you’re impatient and don’t want to know what I had to go through: Install dracut and tpm2-tools My initial lack of tpm2-tools is why this post is so long. If it doesn’t work, read through: you may be missing some Dracut modules. echo 'install_optional_items+=" /usr/lib64/libtss2* /usr/lib64/libfido2.so.* "' | sudo tee -a /etc/dracut.conf.d/tss2.conf Add tpm2-device=auto in /etc/crypttab (on your root partition’s line) between luks and discard (looks like luks,tpm2-device=auto,discard) ...

August 22, 2025 · 11 min · 2235 words

You have to start somewhere

I’ve been telling myself (and I’ve been told repeatedly) that writing a blog so I can remember: how I fixed whatever I broke, and what steps I had to go through to make computer do computer things would be a good idea. Well, I don’t have anything to write about today, but - unless something drastically changes in the near future - I probably will have something soon, so… Let’s do this. :)

August 20, 2025 · 1 min · 73 words