Assorted Projects

Miscellanious things that don’t go in the “games” section, because they’re not games. Mostly programming, because that’s most of what I do.


A minecraft screenshot of a player using an obsidian compass.

Datapack: Obsidian Compass

Initially released Dec 5th, 2025
A Minecraft datapack introducing a new compass to help perfectly link nether portals together.

One of my favorite mods of all time is Portal Linking Compass, and all it does is simply add a new craftable compass which points to the correct coordinates to build a nether portal in the exact right position relative to the other dimension, meaning you can do it without relying on the debug screen. I wanted to see if I could do the same thing using a normal vanilla datapack, and so I did.

You can craft an obsidian compass the same way you would craft a normal compass, just using obsidian and blaze powder. If you use the texture pack I made, it’ll even have the right colors. Then you can just step through a nether portal, and you’ll see the compass pointing to the location the exit portal should be on your current side.

https://modrinth.com/datapack/obsidian-compass


Datapack: Dimitri’s Smithing

Initially released Dec 3rd, 2025
A Minecraft datapack that makes it possible to repair all of your tools on an anvil indefinitely.

One of my favorite mods is Tinkerer’s Smithing. It completely reworks how durability-bearing items work so that every item which can be damaged can also be easily repaired or combined with close to no cost, and tools and armor are easily upgraded between material tiers. In addition, named and enchanted items never fully break, they simply become unusable until they’re repaired. I believe this is fundamentally superior to how anvils actually work in the vanilla game.

It’s not (currently) possible to do all of this with just a datapack, but I took a similar concept and ran with it to the best of my abilities anyways.

With this datapack, all* named gear will turn into a “broken” version when it runs out of durability. Items which do not normally have a repair material have been given one, and the anvil’s prior work penalty is capped to at most 15 levels. In addition, you can combine tools and armor with those of different tiers in a smithing table in order to change their material.

In my (biased) opinion, this is best used with a datapack that also completely removes smithing templates.

*for some reason, it doesn’t work with fishing rods. I don’t know why.
(Come to think of it, I probably should have made netherite repair with diamonds, like Tinkerer’s Smithing does. Maybe I’ll merge in my personal anti-smithing template datapack and change the netherite repair material while I’m at it.)

https://modrinth.com/datapack/dimitris-smithing


lua_ssg

Initially released Feb 15th, 2025
This is the website generation tool I wrote in order to create this website. It’s built on top of preprocess.lua, Pandoc, and the standard Unix command line utilities, and uses a custom file-tree representation and filepath resolver for maximum unnecessary over-engineering.

Note: at the time of writing (2026-03-12) this project is currently so entirely undocumented that both the provided example and the RSS test data are no longer correct. It’s built entirely to my own standards and desires, and even I don’t truly know how to use it. Attempt to use this yourself at your own risk.

https://github.com/DimitriBarronmore/lua_ssg


WezTerm window showing nerdfetch with the MultiMC cat in the background.

wezterm-catpacks

Initially released: Nov 23rd, 2024
A small module for the WezTerm terminal emulator on Unix systems which reads a CatPack folder created for Prism Launcher and faithfully displays the resulting cat to the side of the window. Cats not included.

https://github.com/DimitriBarronmore/wezterm-catpacks


preprocess.lua

Initially released: Nov 13th, 2024
A language-agnostic file preprocessor written in plain Lua, based around a powerful C-inspired macro system.

This library was originally designed for use as a meta-programming tool for Lua programs as part of my work on Luxtre, but after spinning it out into an independent project it’s proven to be highly useful as a general-purpose tool. My static site generator, and therefore this entire website, is built primarily on top of this preprocessor.

https://github.com/DimitriBarronmore/preprocess.lua


pd-require.lua

Initially released: Nov 20th, 2023
A reimplementation of vanilla Lua’s require function for use with the Playdate Lua SDK.

The Playdate SDK’s import pseudo-function does a decent enough job of enabling multi-file projects in the absence of real filesystem APIs it was initially devised as a result of, but since then the SDK has gained functions to allow for loading precompiled Lua code in a more typical fashion. So I just rewrote the normal one myself.

This is very specific to people who are like me.

https://github.com/DimitriBarronmore/pd-require


sandbox.lua

Initially released: Jun 24th, 2023
A secure sandbox creation library for Lua 5.1 and above.

Based heavily on previous works by potentially more skilled programmers. The primary differentiating features of this library versus other solutions for creating trusted sandboxes are a focus on creating multiple sandboxes from pre-made or user-defined templates, and an attempt to allow for a(n optional) sandboxed environment which maintains a reasonable guarantee of safety while still allowing for the use of metatables and dynamic file loading. This is intended primarily for creating sandboxed APIs for user-scriptable games, or for constructing purely-internal scripting systems for ease of development, in already primarily Lua-based games.

Ironically, even though this was written as a Luxtre file, the final .lux code actually contains no non-Lua syntax. I just can’t be bothered to go change the filename.

https://github.com/DimitriBarronmore/lua-universal-sandbox


Luxtre

Initially released: May 6th, 2022
A fully (kind of) portable transpiled superset of Lua 5.4 written entirely in native Lua.

Luxtre was originally a hobby project of mine to attempt to add augmented assignment and Python-style decorators to Lua, but on the discovery that doing this would require some real effort it spiraled out into an experiment in dynamic Earley parsing. Along the way it was discovered that Earley parsers are incredibly awesome.

Although Luxtre is still only in a “finished enough to be useful” state, it supports and is partially powered by the creation of runtime syntax transformations (read: outputting text directly from the parsed AST) allowing for compile-time dynamic language extensions and the creation of entire DSLs which compile into Lua code - or, really, into any form of textual output whatsoever.

Creating a parser/compiler is hard, and I don’t entirely know what I’m doing. Luxtre needs a lot of work still. It’s a little annoying to set up, the tokenizer is built specifically for Lua’s semantics, which limits reusability, and due to lacking an intermediate represenation the internal tools for performing the textual compilation are irritating enough to use that even I have some trouble with it. But it does work.

I intend to come back to it and rebuild a better version from the ground up when I find the time. For now I’m occasionally adding little bits and pieces to the included grammar.

(TODO: Fix up the awful parts making it hard to use on the command line, and finish documenting the latest additions.)

https://github.com/DimitriBarronmore/luxtre


CBTools

Initially released: Jun 16, 2021
I built this as a small collection of functions to make it easier to use Lua’s coroutines, for the purpose of creating bullet patterns in the Undertale fangame engine Create Your Frisk, and the code is still specific to CYF. However, I’ve since begun using modified versions of CBTools for other projects on other platforms, proving that it’s still very useful in other contexts.

Yes, the abbreviation is exactly what you think. No, it wasn’t my idea. I just went with it, and it seems too late to change it.

(TODO: Push the agnostic version to the repository, and probably rename it. Then just keep improving it with time and real use.)

https://github.com/DimitriBarronmore/cyf-cbtools