Weeknotes 2025/6
Oils the shell
- posted:
- Migrated https://wlcx.industries from Gandi to Hetzner. This was a case of booting the
NixOS installer ISO, running
nixos-generate-config
to get ahardware-configuration.nix
tailored to the Hetzner VPS environment, swapping out the Gandi-specific stuff with that in my system config flake, and runningnixos-install --flake
on it.
Entertainingly, there wasn’t aservices.openssh.enable
in the config1, so the newly-installed system came up without an ssh server. Thank dog for remote consoles. There was some fiddling to move data across (a postgres db and some data files for gotosocial).
And why the migration in the first place?- Well, the Gandi “V-R2” VPS I was using was 1 CPU/2GB RAM/25GB disk for £7/month.
- The Hetzner “CX22” VPS is 2 CPU/4GB RAM/40GB disk… for €4/month.
- Ended up at the bottom of a (metaphorical) rabbit hole adding some missing list
methods to Oils a cool dual-personality unix shell that aims to be very compatible
(OSH) for running old scripts and forward thinking (YSH) for when you want to write
new scripts in something more sane and familiar than Bash.
I noticed thatList->remove
was seemingly not implemented while trying to write a script in YSH, but that the documentation hinted that it ought to exist. So I added it. The code is quite approachable and the Zulip was very friendly! So much so that I also addedList->insert
as well! My PR landed and then was almost immediately included in Oils 0.27.0. I then duly updated it in nixpkgs. - Speaking of Nix, my PR to add the victorialogs grafana datasource plugin to nixpkgs got merged too. The signed plugin eventually appeared on Grafana’s plugin registry. See weeknotes/2025/3
- Helped someone who’d run into Github actions storage limits delete all their artifacts
in a repo. Used this 3-liner:
(you’ll need gh and jq installed).
1 2 3
for i in $(gh api repos/{owner}/{repo}/actions/artifacts | jq '.artifacts[].id'); do gh api -X DELETE repos/{owner}/{repo}/actions/artifacts/$i done
-
I’m confused as to how there was an ssh server running on the old VM given it was using the same config. Fun! ↩︎