Jason's Creations

I love creating things. It’s a big part of why I enjoy software development, and it often motivates me to take a DIY approach to solve my problems. Below are some of my creations.

My kids have been asking for a treehouse ever since we moved into our house. I was supportive, but knowing it would be a big project, I struggled to muster the energy to get started. A few weeks ago my brother came to visit and helped us finally make it happen. Now we have a treehouse! It’s a simple platform with a trap door and wooden ladder on one of the oak trees in our side yard. …
What do you get when an unemployed software engineer needs to practice math with his kids? A worksheet generator, of course! Could I have just found some free worksheets online? Probably. But I was in the mood to write some code and an opportunity presented itself, so here we are. …
The closet in my kids’ room has long been in need of organizational improvements. Previously, it had a only single wire shelf near the top. We wanted to fit more in the same space, so I built some shelves. They’re adjustable using the little metal pegs that fit in holes along the side to support each shelf. …
I built a mud kitchen for my kids. It has a functional foot-pump-powered double sink, a pretend stove and oven, and some handy storage space. I had fun building it, and the kids seem to be having fun playing with it. …
Back in 2022, I built myself a Kyria, a split mechanical keyboard. One of the draws of a split keyboard is the ability to position the two halves independently to fit your body; it can really be quite comfy. But the downside is that you have two different pieces that can drift around your desk; add a couple of palm rests and it becomes four moving pieces that constantly need to be rearranged. After dealing with this issue for years, sometimes hardly using my Kyria out of frustration, I finally decided to build myself a solution, with LEGOs. …
I’m a bit of an email nerd, and my setup is rather complicated. I wrote a sync-mail script to sync email between the mail server and my laptop, keeping it organized in the process. …
The distance-vector routing algorithm is used in computer networking to determine the best path for data to take through the network. It can be tricky to understand, and working out examples by hand is cumbersome, so I built a basic simulator to use as a teaching aid with my undergraduate networking students. …
Combine multiple aerc-style address books into a single, unified address book. The unified address book contains no duplicate email addresses, and the addresses are sorted based on the order of the books, the order of the addresses within the books, and the optional ranks assigned to addresses. …
This year for Christmas, my siblings, wife, and I decided to each give a gift to one other person rather than having everyone give to everyone else. I’m a nerd, so instead of simply drawing names (what are we, animals?!), I wrote a little Python script to generate matches for us. …
A base Docker image for creating build sidecars for git-personal. These sidecars allow git-personal to trigger a build every time new code is pushed. …
Seamless navigation between Sway windows and (Neo)Vim splits with the same key bindings. …
A status command for the Sway window manager’s built-in swaybar that allows sections of the bar to update independently. Each section updates at a regular frequency, and additional updates can be requested on-demand via a helper command and/or a background script. The sections are configured in a simple TOML file and communicate with the bar using the swaybar-protocol. …
A stand for my Kyria keyboard that allows me to use it tented 90° and is also a case.
A script to convert LDS General Conferences for e-readers, as well as pre-generated files for past conferences. These are pretty basic EPUBs – the footnotes are removed, images may not show up right, and links aren’t guaranteed to work – but if you just want a table of contents and the text of each talk, they should be good enough. …
A custom, split, ergonomic, tiny, mechanical keyboard that I built from a kit.
A Docker image for a simple, single-user Git server with support for mirroring to other Git servers and triggering automatic builds. I use this to maintain full control of my Git repos while still making them available to the world on public Git servers like SourceHut.
The code for this website! It’s a simple static site built with Hugo and my own custom layouts.
A simple Vim plugin to integrate the + register with Wayland’s system clipboard using wl-clipboard. This plugin allows you to yank text into the + register and paste it in other Wayland applications, or copy text in other Wayland apps and paste it in Vim from the + register. Operators and counts work, too! …
The code for a previous, DIY version of this website. I used pandoc to convert Markdown to HTML and a Makefile to orchestrate the whole process. (But I’ve since moved on to Hugo.)
A Bash script wrapper for pandoc that I use to convert (primarily Markdown) files to PDFs. I appreciate pandoc’s incredible power and flexibility, but I can’t ever remember what options to pass to it without this script. …
An old desktop PC running Nextcloud and Pi-hole. I’ve had a lot of fun getting into self-hosting and have learned tons along the way.
A Dockerfile for running scheduled backups using restic with rclone as the backend. I used to run this on my home server but have since abandoned it in favor of running restic and rclone directly on the host OS to integrate my backups with ZFS snapshots. (There’s also an image available on Docker Hub, but it’s quickly becoming out-of-date…) …
Theme for Grav CMS that powered my old portfolio website. This was one of my favorite projects because other people actually used it; I loved getting an occasional email thanking me for the theme or asking for help getting it working. (I’ve since moved on from Grav for simplicity’s sake, but I’m still happy to help existing users! I’d also love to find a new maintainer – email me.)