Weeknotes 2025/0

Congress, tetrapods, and a new year


To end 2024, I attended 38C3. It was my first congress in 5 years, and the first time I’ve visited the event in Hamburg/CCH. It was, as ever, a Good Time - I hung around with Scotcon/Irish Embassy and printed more stickers.

A "disco ball" made of three interlocking but not touching rings covered in mirrors. It hangs in a large lobby. A ton of beams of light are reflecting off of it. A stylised rocket is visible on the left of the frame.

A highlight of the event was probably being found(!) by a Tinytoolkits enjoyer, who I had a lovely chat with.

I also - unusually - left the congress center in daytime and visited Willhelmsburg Energiebunker courtesy of hackertours. It’s a monumental former air defence structure which has been hollowed out and turned into a district heating plant.

An almost black and white photo of 4 large angled poles emerging from inside a circular concrete structure supporting a louvred roof of solar panels.

I managed to nab a USB KVM from Carrot Industries, via guserav. This does the same thing as the openterface device I wrote about on tinytoolkits, using the same MS2109 HDMI USB capture IC. It’s also open source. I spent some time writing a Nix derivation for the companion host app1 but wasn’t fast enough! Perhaps I can still contribute by adding macos support.

As usual, I re-entered so-called “normal society” feeling reënergised and reënthused.


As is customary, it’s biennial minecraft season among my friends. For around 2 weeks a server is summoned into being to be played on obsessively until everyone gets bored (again). This task usually falls to me, and of course I have some NixOS config for it, which runs inside a (NixOS) container with Tailscale so it doesn’t need to be open to the internet.

⚠️ Warning: Nix
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
{ pkgs, ... }: let
  containerIp = "192.168.123.2";
  hostAddress = "192.168.123.1";
in {
  # Setup NAT so our container networking works properly
  networking.nat = {
    enable = true;
    internalInterfaces = [ "ve-+" ];
    externalInterface = "eno1";
    enableIPv6 = true;
  };
  # Run MC in a container to keep it (and tailscale) isolated from our host
  containers.minecraft = {
    enableTun = true;
    privateNetwork = true;
    localAddress = containerIp;
    inherit hostAddress;
    config = ({ lib, ... }: {
      services.resolved.enable = true;
      networking.useHostResolvConf = lib.mkForce false;
      services.tailscale.enable = true;
      services.minecraft-server = {
        enable = true;
        package = (pkgs.callPackage ../pkgs/paper-mc { });
        jvmOpts = "-Xmx4096M -Xms4096M";
        eula = true;
        openFirewall = true;
        declarative = true;
        serverProperties = {
          enable-rcon = true;
          motd = "Fisher price my first minecraft server";
          view-distance = 20;
          snooper-enabled = false;
          level-seed = "31563250179158";
        };
      };
    });
  };
}

And finally, as a first project to begin the year, I made a plush tetrapod


  1. Not trivial; the app is C++ and uses the Meson build system, but links to a library written in Go, which has to be built with Nix’s buildGoModule tooling, else go fails to download dependencies at build time due to the Nix sandbox not allowing network access. So, the Go stuff has to be built with a separate nix derivation and meson.build has to be patched to use this. I was pleased to see that the merged PR took a similar approach to me, although the author used substituteInPlace on the meson.build rather than a custom meson option as I was using. ↩︎