Lisp Game Jam 2023

I participated in another Lisp Game Jam this time with more success. If you remember my last participation saw me come in last (place 14/14). Now this year around I ranked in 10th place (out of 16 submissions), a solid result and improvement. How did I achieve this? Preparation. In the last year I have written two scheme libraries, for colored terminal output and also for an entity-component-system engine. Both of these helped tremendously.

How to change the bash prompt to show which guix profile is active

I am using GNU Guix as my package manager on top of Fedora Silverblue. Guix has several advantages over other package managers: packages can be installed with user privileges, several versions of the same packages can be installed in parallel, tools exists for reproducibility and versioning. The one I use regularly being the creation of different profiles each with a distinct set of packages (at specific versions). You activate a profile with: guix shell -p path/to/profile.

A new keyboard build with only 36 Keys

After having build my solderless SofleV2 keyboard, I discovered, that I could not actually type on it. Even keeping my existing QWERTZ layout I was struggling to hit the right keys. This is due to the fact that this keyboard is “column staggered”, meaning the columns are shifted in relation to a fixed grid while a standard keyboard is “row staggered”, i.e. the rows are shifted relative to each other and compared to a standard grid.

A Scheme Tui Library Core

Inspired by a reddit post and the referenced blog post I have started a small library in R6RS scheme for the creation of terminal user interfaces and published it on GitHub. The design is quite straight forward: creating such a user interface is the same as printing a list of characters to the screen. Some of these characters are ANSI escape codes and will be interpreted by the terminal and affect later characters.

Migrate a Fedora Silverblue install to a new SSD

I wanted to upgrade my laptop hard-drive to double the capacity. However it only has a single M.2 slot and I wanted as little downtime as possible. So moving ‘in-place’ was not possible. Fortunately I have a desktop PC with a free M.2 slot that could take the new drive. Since my laptop is running Fedora Silverblue on a btrfs file system I was hoping to use btrfs send/receive to move subvolumes to the new drive.

(Almost) Solderless 3D-printed Handwired Mechanical Keyboard

This title is quite a mouthful. I want to start with a story of how I got here. For most of this project, I am standing on the shoulders of giants. Those interested in the actual build can you skip this the next section. I ran into mechanical keyboards on social media and thought this was a great combination with 3D printing. My ideas were spurred by a post on geekhack where the author has incorporated hotswap sockets into a 3d printed case.

My First Game Jam

Recently I participated in my first game jam. I took part in the Autumn Lisp Game Jam 2022. My main motiviation in participating was to excercise my soon-to-be-released scheme library for bioinformatics called (harebrained scheme). I took inspiration from e.g. Chris Lemmer-Webber which created the game Terminal Phase to showcase the features of spritely goblins. The results are now in and my contribution Metabolize! came in last. However, I had a lot of fun participating and want to summarise my experience.

Ba3dp: A Fresh Start

Background I got unlucky with AliExpress (the twotree speciality store), where I ordered all parts apart from extrusions. Rails came first after 3-4 weeks, but in the wrong size (instead of 3x300mm I got 1x400mm and 2x450mm). I then used the function for reclamation and got 12 euros back. The rest did not come at all. In the shipping tracker I saw that the order was actually returned to the warehouse.

TIL: convmv

Since ingesting disks that were in different computers with different operating systems, sometimes the encoding used for the filenames are different. The nifty convmv utility can change the encoding of filenames. It is used like so to convert from latin-1 Windows encoding to utf-8: convmv -f latin-1 -t utf-8 -r /root/of/path It prints information on the filename encoding and whatever changes it will do. It will not perform any renaming until you re-run the command by adding the --no-test flag.

TIL: dd over netcat

I found out that you can transfer raw bytes as generated by the ddcommand over the network using netcat, which improves throughput compared to transfer over SSH using scp. Thanks to NDCHost for a comprehensive writeup. On the server (, start a process listing for raw data packets: nc -l 19000 | bzip2 -d | dd bs=16M of=/ptah/to/output/file And on the client, send data packets: dd bs=16M if=/path/to/input/file | bzip2 -c | nc serverB.