Most of what I have built belongs to somebody else. These are the ones that do not — small tools written to scratch my own itch, kept public in case the itch was not only mine.
They are all works in progress, and none of them are asking to be depended on. Have a look around anyway; issues and pull requests are welcome.
Repositories #
org-roam-to-obsidian
Points at an org-roam vault and hands back notes Obsidian can open. ID links become wikilinks, org properties become YAML front matter, source blocks become fenced code, and the org-mode scaffolding is dropped on the way through. Standard library only, so there is nothing to install before you run it.
python3 convert.py --help
usage: convert.py [-h] [-i INPUT] [-o OUTPUT] [-p PROPERTIES [PROPERTIES ...]]
[--no-created] [--created-property CREATED_PROPERTY]
Convert org-roam files to Obsidian markdown format
options:
-h, --help show this help message and exit
-i, --input INPUT Input directory containing org-roam files (default:
~/Documents/slip-box)
-o, --output OUTPUT Output directory for markdown files (default:
./output)
-p, --properties PROPERTIES [PROPERTIES ...]
Org-mode properties to extract (e.g., filetags
roam_refs)
--no-created Disable adding created timestamp from filename
--created-property CREATED_PROPERTY
Use a specific org-mode property for created timestamp
instead of filename
gwttr
A small command-line weather client for wttr.in. The client is a proof of concept and stays that way on purpose — the point was somewhere to hang a real Go toolchain, so it comes with tests, coverage reporting and a published module.
./gwttr
Weather report: honolulu
\ / Clear
.-. 26 °C
― ( ) ― ↙ 23 km/h
`-’ 10 km
/ \ 0.0 mm
washing-instructions
Turns a CSV of laundry piles into two PDFs — one tall page for your phone at the machine, one A4 sheet to pin beside it. Every card is drawn for your appliances: you describe the washing machine and iron once in JSON, and each pile then shows the programme dial with the pointer where you turn it, the temperature and spin, which buttons to press, and the iron’s thermostat ring. Fascia labels are never translated — if the dial says
Fijn/Zijde, so does the card. bun run generate --help
Usage: bun run generate [csv] [--out <dir>] [--machine <file>]
csv instruction CSV to read (default: data/washing-instructions.csv,
falling back to the committed .dist)
--out <dir> where the PDFs go (default: out)
--machine <file> the appliances to draw (default: data/machine.json,
falling back to the committed .dist)
form-handler
Turns a contact form submission into an email, which is the whole job. It exists because a static site cannot open an SMTP connection and the mail for these domains is self-hosted, so routing the form through a third party was the alternative. One instance serves any number of forms across any number of domains, each with its own allowed origins, so one site cannot post to another’s form.
form-handler -help
Usage of ./form-handler:
-healthcheck
probe the local /healthz and exit
-version
print the version and exit