Cargo Box D57-002
A terminal mod manager for RimWorld. It self-updates from its own release server.
rust · ratatui
❯ fastfetch
❯ cat README.md
Tools, mods and experiments in Rust and TypeScript, mostly for the games I play, and some of it finished. Any Lua you see here was written because DCS left no choice.
I'm Dan, a web and software developer in Wales. By day it's JavaScript, Node and very old Angular, and by night it's a PowerEdge R720 in the corner running Proxmox and more services than strictly necessary.
❯ ls -t ~/projects | head -7
| 27 sep | cargo-box |
| 18 sep | readscreen |
| 09 sep | sun-config |
| 02 aug | gyrotrack |
| 29 jul | battle-flow-engine |
| 19 jul | zedlua |
| 05 may | plastic-theme |
A terminal mod manager for RimWorld. It self-updates from its own release server.
rust · ratatui
A port of Will Stone's Plastic theme from VS Code to the Zed editor, including the deprioritised-punctuation variant.
zed · theme
A fast little Rust utility that fixes broken DCS livery installs. It replaced two earlier attempts.
dcs · rust
Sends a Lua selection or file from Zed straight into a running DCS instance and returns the result. No more restarting missions to test one line.
dcs · zed · lua
* has a README. click to read.
D57-002 · complete
A mod manager for RimWorld, written for me and my friends. Our mod lists run to hundreds of mods, and keeping everyone on the same set, in the same order, by hand was a job in itself.
x-fix lands after x.Rust, with Ratatui for the terminal interface.
On my friends' PCs. It's three files: the program itself, just 4.25 MB, plus the two it needs to talk to the Steam Workshop. It keeps itself up to date too: every time it starts, it checks my release server for a new version.
A very, very rare thing for me: I think it's done. Unless someone has a brilliant idea or we find a bug, I'm happy to call it finished.
D57-004 · complete
The third go at unlocking DCS liveries, and the one that stuck (the first two are in the graveyard). Drop it in your liveries folder and hit Enter, or give it the path, and every livery locked to certain countries is free to fly.
description.lua under the folder.countries block, whether it's one line or spread over several. Nothing else in the file changes.Rust. It walks the folder with walkdir and edits the files in parallel with rayon, so even a big livery folder is quick. There are tests for the fiddly Lua cases, like trailing commas and comments after the closing brace, and a benchmark to keep it fast.
On the PC, next to the liveries. One small .exe, nothing to install.
Nothing much. It does one job, and does it quickly.
A web app in Rust, still being built. More once I know whether it's a keeper or one for the graveyard.
rust · axum · htmx
A native keyboard workbench styled after Sun workstations, with per-app remapping on Windows.
rust · egui
Embedded firmware for a load cell on the RP2350. The mechatronics part of the name.
rust · embedded
A gyro-based tracker built around the IAM-20380. At the moment it's a PDF and good intentions.
hardware
Physical cockpit panels for flight simming: an up-front controller and a pair of multi-function display bezels. The start of the hardware rabbit hole.
hardware · dcs
A drone build that's about 95% done. As everyone knows, the last 5% is the other 95%.
hardware · drone
❯ ls -l ~/graveyard
| permissions | project | note |
|---|---|---|
| d--------- | battle-flow-engine | # capture the zone to capture the zone to capture the zone |
| d--------- | discord-bots/ | # five bots, one idea |
| d--------- | discordbot | # there were more. we don't talk about discordbot4 |
| d--------- | discordbot3 | # third time lucky. it wasn't |
| d--------- | discordbot5 | # see above, again |
| d--------- | gpdiscordbot | # a general-purpose bot for no purpose in general |
| d--------- | reforger-bot | # it was a discord bot |
| d--------- | monopoly/ | # proved nobody wins monopoly |
| d--------- | monopoly-simulator-js | # proved it once |
| d--------- | monosim | # proved it again, faster |
| d--------- | dcs-livery/ | # died so liveryfix could live |
| d--------- | dcs-livery-manager | # attempt one |
| d--------- | dcs-livery-fix | # attempt two |
| d--------- | dcs-servermanager | # the server managed itself in the end |
| d--------- | meal-planner | # planned zero meals |
| d--------- | novumbb | # a forum for a community of one |
* has a post-mortem. click to read.
D57-005 · retired
A dynamic campaign for DCS: a war that carries on between sessions, with supplies, convoys and an AI commander on each side. The mission file held a single init.lua; everything else ran on a server, so the campaign could be far bigger than a mission file allows.
From the cockpit, it was still capture the zone. All that machinery only decided which zone came next.
Simulation depth the player can't see or influence is very expensive set dressing.
D57-013 · retired
A series of unfortunate bots.
Five of them. Most were general-purpose server bots with the usual commands. Two did something more interesting:
discordbot3 was for a New World guild. It ran a bounty board: members posted bounties for in-game resources or gold, and others claimed them.reforger-bot was for a DCS World mission. Players could talk to the game with slash commands and get live data back in Discord.Scope creep. Each one started small, kept growing, and never had a finished shape to grow towards.
Know what the finished thing should do, and how you'll build it, before starting.
They were all written with discord.js. Next time I'd like to try Rust, with Serenity.
D57-014 · retired
Cheating never pays. (Robbing the Monopoly bank is easier.)
The idea: roll the dice enough times and patterns fall out, like which squares get landed on most. Both simulated hundreds of millions of throws around the board. One was JavaScript (Node), the other an early Rust project of mine.
Nothing, really. It's retired rather than dead.
This is a terrible way to cheat at Monopoly.
D57-015 · retired
Two attempts at unlocking DCS liveries.
In DCS World you can make custom liveries for aircraft. Each one comes with a Lua file that tells the game where every part of the livery goes, and that file can include a countries line locking the livery to certain countries. That gets very limiting in multiplayer, where, as we all know, looking cool is 80% of the battle. These tools found every livery and switched that line off.
I was never happy with the UI or how they worked, and one of them was JavaScript (Node) again.
I did learn my lesson: I started again, did it differently, and ended up with liveryfix, in Rust.
D57-016 · retired
An all-in-one settings manager for a DCS server and SRS, the radio server that runs alongside it. One place for everything, instead of a config file each.
No real use case. It didn't make anything much easier than editing the settings files directly.
A manager has to do something the config files can't. Next time: a bigger tool that also bridges in-game chat and runs several DCS and SRS servers at once.
D57-017 · retired
My father built a meal planner in Express, which is also what I'd normally reach for. I rebuilt it feature for feature in React, with Next.js, as practice with something I don't use every day.
Nothing. It was practice, and it did its job.
Not much. Knowing more React now, I'd probably find better ways to do a few things.
D57-018 · retired
Ah, NovumBB: my homage to the bulletin board forums of the 90s and 00s, built the way they were. Pages rendered on the server, no front-end framework.
Sadly, there's no demand or need for it these days.
Nostalgia is a fine reason to build something, but not a reason for anyone to use it.
❯ finger dan@d57.dev
Login: danDirectory: /home/danShell: /bin/zsh
Plan:
❯ ls ~/books | head
# a select few. the real shelf is a lot longer.
❯ cat ~/ideas.md
# got one for me? projects [at] d57.dev
❯ cat ~/games/favourites
dcs world most of the modules: ~40 aircraft · 11 maps · 10 campaigns
❯ cat ~/skills
❯ starship --status
❯ launches
# live launch data from launch library 2, by the awesome people at the space devs# live launch data needs javascript
No cookies, no tracking, no analytics. Everything the page loads comes from d57.dev itself.
| 1 2 3 4 5 6 | switch workspace |
| j k | focus next / previous window |
| g g / G | top / bottom |
| i : | focus the shell |
| t | clock: 24h / 12h |
| Esc | back to normal mode |
| ? | this help |