Modernize toolchain & deps, fix on-device serving, rename eisrom→esrom #1

Merged
pim merged 1 commit from modernize-and-rename into master 2026-07-19 16:39:35 +02:00
Owner

Dependency & toolchain update:

  • nix flake update (nixpkgs 2026-05 → 2026-07); pin both dev shells to
    Erlang/OTP 28 + Elixir 1.18 via beam.packages.erlang_28.
  • esrom_ui: Phoenix 1.6→1.7, LiveView 0.17→1.x, phoenix_html 3→4. Migrate
    to the 1.7 web structure (Layouts / PageHTML / ErrorHTML+ErrorJSON,
    verified routes, ~H render, live routes); drop the old view/template tree.
  • esrom_ui: circuits_gpio 1→2. The 2.x cdev backend holds the GPIO line
    exclusively, so open it once per morse run and reuse the handle instead
    of reopening on every dot/dash.
  • esrom_firmware: bump the Nerves stack (nerves 1.14, nerves_system_rpi2
    2.0.3, nerves_pack, ring_logger, toolshed, …).

Fixes:

  • flake: the firmware FHS shell uses targetPkgs = p: with p; [...], and
    with p; silently shadowed the erlang_28 pin with nixpkgs' default
    OTP-27 beam set — breaking the Nerves host/target OTP match
    (nerves_system_rpi2 wants OTP 28). Bind the toolchain under
    collision-proof names and put erl on PATH.
  • Serve the UI on the device: config/dev.exs now enables server: true
    and binds 0.0.0.0:80 in the non-host (firmware) branch. Previously the
    endpoint started with no listener, so the device pinged but served
    no page.

Rename eisrom → esrom across directories, modules (Esrom*), app atoms
(:esrom_ui / :esrom_firmware), and config keys. The project is "esrom";
"eisrom" was a typo.

Docs: rewrite README with Nix-oriented build/flash instructions and a
troubleshooting section (FHS sudo/no_new_privs limitation, host/target
OTP mismatch, unmounting auto-mounted SD partitions).

Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com

Dependency & toolchain update: - nix flake update (nixpkgs 2026-05 → 2026-07); pin both dev shells to Erlang/OTP 28 + Elixir 1.18 via beam.packages.erlang_28. - esrom_ui: Phoenix 1.6→1.7, LiveView 0.17→1.x, phoenix_html 3→4. Migrate to the 1.7 web structure (Layouts / PageHTML / ErrorHTML+ErrorJSON, verified routes, ~H render, live routes); drop the old view/template tree. - esrom_ui: circuits_gpio 1→2. The 2.x cdev backend holds the GPIO line exclusively, so open it once per morse run and reuse the handle instead of reopening on every dot/dash. - esrom_firmware: bump the Nerves stack (nerves 1.14, nerves_system_rpi2 2.0.3, nerves_pack, ring_logger, toolshed, …). Fixes: - flake: the firmware FHS shell uses `targetPkgs = p: with p; [...]`, and `with p;` silently shadowed the erlang_28 pin with nixpkgs' default OTP-27 beam set — breaking the Nerves host/target OTP match (nerves_system_rpi2 wants OTP 28). Bind the toolchain under collision-proof names and put `erl` on PATH. - Serve the UI on the device: config/dev.exs now enables `server: true` and binds 0.0.0.0:80 in the non-host (firmware) branch. Previously the endpoint started with no listener, so the device pinged but served no page. Rename eisrom → esrom across directories, modules (Esrom*), app atoms (:esrom_ui / :esrom_firmware), and config keys. The project is "esrom"; "eisrom" was a typo. Docs: rewrite README with Nix-oriented build/flash instructions and a troubleshooting section (FHS `sudo`/no_new_privs limitation, host/target OTP mismatch, unmounting auto-mounted SD partitions). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Dependency & toolchain update:
- nix flake update (nixpkgs 2026-05 → 2026-07); pin both dev shells to
  Erlang/OTP 28 + Elixir 1.18 via beam.packages.erlang_28.
- esrom_ui: Phoenix 1.6→1.7, LiveView 0.17→1.x, phoenix_html 3→4. Migrate
  to the 1.7 web structure (Layouts / PageHTML / ErrorHTML+ErrorJSON,
  verified routes, ~H render, live routes); drop the old view/template tree.
- esrom_ui: circuits_gpio 1→2. The 2.x cdev backend holds the GPIO line
  exclusively, so open it once per morse run and reuse the handle instead
  of reopening on every dot/dash.
- esrom_firmware: bump the Nerves stack (nerves 1.14, nerves_system_rpi2
  2.0.3, nerves_pack, ring_logger, toolshed, …).

Fixes:
- flake: the firmware FHS shell uses `targetPkgs = p: with p; [...]`, and
  `with p;` silently shadowed the erlang_28 pin with nixpkgs' default
  OTP-27 beam set — breaking the Nerves host/target OTP match
  (nerves_system_rpi2 wants OTP 28). Bind the toolchain under
  collision-proof names and put `erl` on PATH.
- Serve the UI on the device: config/dev.exs now enables `server: true`
  and binds 0.0.0.0:80 in the non-host (firmware) branch. Previously the
  endpoint started with no listener, so the device pinged but served
  no page.

Rename eisrom → esrom across directories, modules (Esrom*), app atoms
(:esrom_ui / :esrom_firmware), and config keys. The project is "esrom";
"eisrom" was a typo.

Docs: rewrite README with Nix-oriented build/flash instructions and a
troubleshooting section (FHS `sudo`/no_new_privs limitation, host/target
OTP mismatch, unmounting auto-mounted SD partitions).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
pim merged commit 4e73be23e0 into master 2026-07-19 16:39:35 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
pim/esrom!1
No description provided.