feat(hosts): add the Raspberry Pi Zero 2 W Psion sidecar #98

Open
lyrathorpe wants to merge 1 commits from feat/pi-zero-2w-psion-sidecar into main
Owner

What

A headless aarch64 companion for a Psion 5MX, after Kian Ryan's PPP modem and terminal write-up.

  • hosts/PiZero2W/ — host config plus serial-ppp.nix (pppd on /dev/ttyAMA0, 10.0.0.110.0.0.2, NAT out of wlan0, socket-activated telnetd for the Psion's terminal client), email-proxy.nix, an SD-image variant, and a hardware-configuration.nix placeholder.
  • Host table entry on nixos-hardware's raspberry-pi-3 profile — the Zero 2 W is the Pi 3's BCM2837 SoC. nixpkgs' linuxPackages_rpi02w is deprecated and warns that the linux-rpi series is being removed in favour of nixos-hardware.
  • The host owns its firmware partition (hardware.raspberry-pi.firmware), which is what puts the disable-bt and uart0,ctsrts overlays into config.txt so /dev/ttyAMA0 is the RS232 header rather than Bluetooth. uboot.enable keeps the U-Boot → extlinux boot path that the rewritten config.txt would otherwise lose.
  • packages.aarch64-linux.zero2w-sd-image — the host's own configuration as an installable card. The board has no Ethernet and no free serial port, so a generic image would leave no way in.
  • docs/hosts/pizero2w.md, plus the README host table and shared-layer notes.

Why not the upstream Pi Zero 2 flake

plmercereau/nixos-pi-zero-2 is pinned to nixpkgs 25.11 and is not consumable here:

  • its sd-image module calls lib.mdDoc, removed in 26.05;
  • its cross-compilation recipe sets nixpkgs.pkgs, which nixos/modules/misc/nixpkgs.nix forbids alongside a non-empty nixpkgs.config — and every host here sets allowUnfreePredicate.

Its useful content is ~40 lines, most of which nixos-hardware already provides.

Security

The Psion speaks no TLS, so telnet (23) and the mail proxy (110/25) are cleartext and unauthenticated. The firewall is the confinement: ppp0 is trusted, wlan0 is not, and those ports are never opened there. Only key-only sshd is reachable over wifi. Documented in the host notes.

Dependency

Consumes legacy-email-proxy#16 (merged); flake.lock pins it at f1e1373.

Verification

  • nix flake check — green against the merged proxy flake.
  • lyrathorpe-zero2w and zero2w-sd-image both evaluate.
  • Rendered and reviewed the generated config.txt, /etc/ppp/peers/psion, and the telnetd units.
  • Not yet run on hardware; the board is not built.
## What A headless `aarch64` companion for a Psion 5MX, after [Kian Ryan's PPP modem and terminal write-up](https://www.kianryan.co.uk/2022-11-28-psion-sidecar-ppp-modem-and-terminal/). - `hosts/PiZero2W/` — host config plus `serial-ppp.nix` (pppd on `/dev/ttyAMA0`, `10.0.0.1`↔`10.0.0.2`, NAT out of `wlan0`, socket-activated telnetd for the Psion's terminal client), `email-proxy.nix`, an SD-image variant, and a `hardware-configuration.nix` placeholder. - Host table entry on `nixos-hardware`'s `raspberry-pi-3` profile — the Zero 2 W is the Pi 3's BCM2837 SoC. nixpkgs' `linuxPackages_rpi02w` is deprecated and warns that the `linux-rpi` series is being removed in favour of nixos-hardware. - The host owns its firmware partition (`hardware.raspberry-pi.firmware`), which is what puts the `disable-bt` and `uart0,ctsrts` overlays into `config.txt` so `/dev/ttyAMA0` is the RS232 header rather than Bluetooth. `uboot.enable` keeps the U-Boot → extlinux boot path that the rewritten `config.txt` would otherwise lose. - `packages.aarch64-linux.zero2w-sd-image` — the host's own configuration as an installable card. The board has no Ethernet and no free serial port, so a generic image would leave no way in. - `docs/hosts/pizero2w.md`, plus the README host table and shared-layer notes. ## Why not the upstream Pi Zero 2 flake [plmercereau/nixos-pi-zero-2](https://github.com/plmercereau/nixos-pi-zero-2) is pinned to nixpkgs 25.11 and is not consumable here: - its `sd-image` module calls `lib.mdDoc`, removed in 26.05; - its cross-compilation recipe sets `nixpkgs.pkgs`, which `nixos/modules/misc/nixpkgs.nix` forbids alongside a non-empty `nixpkgs.config` — and every host here sets `allowUnfreePredicate`. Its useful content is ~40 lines, most of which nixos-hardware already provides. ## Security The Psion speaks no TLS, so telnet (23) and the mail proxy (110/25) are cleartext and unauthenticated. The firewall is the confinement: `ppp0` is trusted, `wlan0` is not, and those ports are never opened there. Only key-only sshd is reachable over wifi. Documented in the host notes. ## Dependency Consumes [legacy-email-proxy#16](https://code.emmathe.dev/lyrathorpe/legacy-email-proxy/pulls/16) (merged); `flake.lock` pins it at `f1e1373`. ## Verification - `nix flake check` — green against the merged proxy flake. - `lyrathorpe-zero2w` and `zero2w-sd-image` both evaluate. - Rendered and reviewed the generated `config.txt`, `/etc/ppp/peers/psion`, and the telnetd units. - Not yet run on hardware; the board is not built.
lyrathorpe added 1 commit 2026-08-21 13:38:29 +01:00
feat(hosts): add the Raspberry Pi Zero 2 W Psion sidecar
CI / flake (push) Skipped
CI / flake (pull_request) Successful in 4m16s
a94a749f29
A headless aarch64 companion for a Psion 5MX: PPP over RS232 with NAT out to
wifi and a telnet login, plus a cleartext POP3/SMTP proxy for the Psion's mail
client.

- hosts/PiZero2W/: host config, serial-ppp.nix, email-proxy.nix, an SD-image
  variant, and a hardware-configuration.nix placeholder.
- Host table entry on nixos-hardware's raspberry-pi-3 profile; the Zero 2 W is
  the Pi 3's BCM2837 SoC. nixpkgs' linuxPackages_rpi02w is deprecated and warns
  that the linux-rpi series is being removed in favour of nixos-hardware.
- The host owns its firmware partition (hardware.raspberry-pi.firmware), which
  is what puts the disable-bt and uart0/ctsrts overlays in config.txt so
  /dev/ttyAMA0 is the RS232 header rather than Bluetooth. uboot.enable keeps the
  U-Boot -> extlinux boot path the rewritten config.txt would otherwise lose.
- packages.aarch64-linux.zero2w-sd-image: the host's own configuration as an
  installable card. The board has no Ethernet and no free serial port, so a
  generic image would leave no way in.
- The mail proxy comes from the legacy-email-proxy flake, which provides the
  package and the NixOS module; nothing about it is vendored here.
- docs/hosts/pizero2w.md, plus README host table and shared-layer notes.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
lyrathorpe force-pushed feat/pi-zero-2w-psion-sidecar from fd97b694ad to a94a749f29 2026-08-21 13:38:29 +01:00 Compare
lyrathorpe marked the pull request as ready for review 2026-08-21 13:39:41 +01:00
All checks were successful
CI / flake (push) Skipped
Required
CI / flake (pull_request) Successful in 4m16s
Required
Details
Checking for merge conflicts…
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin feat/pi-zero-2w-psion-sidecar:feat/pi-zero-2w-psion-sidecar
git checkout feat/pi-zero-2w-psion-sidecar
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: lyrathorpe/nixfiles#98