Weeknotes 2025/6

Oils the shell


  • Migrated https://wlcx.industries from Gandi to Hetzner. This was a case of booting the NixOS installer ISO, running nixos-generate-config to get a hardware-configuration.nix tailored to the Hetzner VPS environment, swapping out the Gandi-specific stuff with that in my system config flake, and running nixos-install --flake on it.
    Entertainingly, there wasn’t a services.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 that List->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 added List->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:
    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
    
    (you’ll need gh and jq installed).

  1. I’m confused as to how there was an ssh server running on the old VM given it was using the same config. Fun! ↩︎