Commit Graph

70 Commits

Author SHA1 Message Date
MDietermann
2d73114b5f feat(platform): add atomic HTTP download helper 2026-04-14 08:25:22 +02:00
MDietermann
afed8ab600 feat(platform): add textblock helper for idempotent config-file blocks 2026-04-14 08:21:38 +02:00
MDietermann
83bb622232 perf(tui): cache Detect+Plan results in wizard renderPlan 2026-04-14 08:18:38 +02:00
MDietermann
05dc8aa7f5 chore: ignore .worktrees 2026-04-14 08:13:47 +02:00
MDietermann
42dabf85a5 docs(plans): add Plan 3a install-modules implementation plan 2026-04-14 08:11:03 +02:00
MDietermann
6318362e99 docs(specs): add Plan 3a install-modules design 2026-04-14 08:03:17 +02:00
MDietermann
2ebaa6b5c6 fix: address Plan 2 final-review findings
- tui/doc.go: remove teatest blank import (test harness in prod binary)
- cmd: honor wizard HaltOnError toggle in addition to --halt-on-error flag
- cmd: wire SIGINT/SIGTERM to root context via signal.NotifyContext
- dashboard/run: derive engine context and cancel on tea.Program exit
  so the engine goroutine does not outlive Run
2026-04-13 22:26:54 +02:00
MDietermann
ea5667e040 test(tui): integration smoke — dashboard runs hello module end-to-end 2026-04-13 22:20:08 +02:00
MDietermann
4f3d736bd7 refactor(cmd): drop err=runErr reassignment, return runErr directly 2026-04-13 22:19:09 +02:00
MDietermann
341250d8f4 feat(cmd): wire TUI wizard and dashboard into install subcommand 2026-04-13 22:13:52 +02:00
MDietermann
7baf0fceaa feat(tui): add dashboard.Run bridging engine to Bubble Tea 2026-04-13 22:11:54 +02:00
MDietermann
5c5076f1f1 fix(tui): guard against late Progress/Log after DoneMsg; drop dead quitting field 2026-04-13 22:09:08 +02:00
MDietermann
feb01242f2 feat(tui): add Bubble Tea dashboard model for Apply phase 2026-04-13 22:02:38 +02:00
MDietermann
e7aa75735d refactor(tui): use strconv.Atoi in parseIntClamp, drop spurious error return 2026-04-13 22:00:49 +02:00
MDietermann
394fb33d0c fix(tui): short-circuit wizard.Run on cancelled context before opening TTY 2026-04-13 21:52:50 +02:00
MDietermann
d21ab3fd30 feat(tui): add six-screen Huh wizard for installer input 2026-04-13 21:52:17 +02:00
MDietermann
c0983284b3 feat(tui): add TeaReporter forwarding engine events to bubbletea 2026-04-13 21:49:14 +02:00
MDietermann
258b53b6a0 feat(tui): add shared WizardState seeded from config and registry 2026-04-13 21:48:12 +02:00
MDietermann
777a3fe49b chore(tui): add Charm dependencies and package skeleton 2026-04-13 21:47:02 +02:00
MDietermann
07c13551ce docs: add Plan 2 (TUI) implementation plan 2026-04-13 21:40:44 +02:00
MDietermann
8b43a0f273 fix: address final-review findings before closing Plan 1
- privilege: wire sudo -v to real stdin/stdout/stderr so it can prompt
- cmd: validate --only/--skip IDs against registry (prevents silent
  run-all on typo); gate install to Arch-only (spec requirement);
  mark --only and --skip mutually exclusive
- platform: Pacman.Update now runs -Syu --noconfirm, not -Sy (avoids
  Arch partial-upgrade anti-pattern)
- test/integration: trap-clean the named docker volume on any exit
- go.mod: tidy — yaml.v3 is a direct dep
2026-04-13 21:35:14 +02:00
MDietermann
40ac730719 test(integration): run archduino install end-to-end on archlinux:base 2026-04-13 21:22:29 +02:00
MDietermann
3a4855b92a feat(modules): add hello toy module as engine smoke test 2026-04-13 20:31:43 +02:00
MDietermann
7a3ebbb146 docs(cmd): clarify why !noTUI branch prints the fallback notice 2026-04-13 20:18:07 +02:00
MDietermann
7a382c9bdd feat(cmd): wire install subcommand to engine with plain reporter 2026-04-13 20:13:50 +02:00
MDietermann
e4f945146b feat(state): persist per-run logs with rotation and last-run pointer 2026-04-13 20:02:48 +02:00
MDietermann
8f9e34174c feat(privilege): acquire sudo and keep timestamp fresh via goroutine 2026-04-13 20:01:34 +02:00
MDietermann
83cf7f0e72 feat(platform): add PackageManager interface and Pacman implementation 2026-04-13 20:00:11 +02:00
MDietermann
3b666615d7 feat(platform): detect distro, WSL, and architecture 2026-04-13 19:59:04 +02:00
MDietermann
ea0d793461 feat(config): load embedded defaults and merge optional overlay 2026-04-13 19:56:53 +02:00
MDietermann
0f0ea7e925 refactor(engine): remove dead failed map from markFailed 2026-04-13 19:55:41 +02:00
MDietermann
94c7084ec3 feat(engine): run modules through Detect/Plan/Apply/Verify with DAG + skip-on-failure 2026-04-13 19:49:52 +02:00
MDietermann
37761e017e feat(engine): add topological sort and descendants for module DAG 2026-04-13 19:39:35 +02:00
MDietermann
30643e385d feat(engine): add Reporter with buffered and plain implementations 2026-04-13 19:37:51 +02:00
MDietermann
eb54225ad3 feat(module): add four-phase Module interface and registry 2026-04-13 19:29:18 +02:00
MDietermann
5b5e677749 chore: go mod tidy, pin go 1.22, clarify module path in plan 2026-04-13 19:21:13 +02:00
MDietermann
94dbea001c docs: add Plan 1 (Foundation) implementation plan 2026-04-13 18:44:47 +02:00
MDietermann
b952704be5 docs: add installer architecture redesign spec
Design for Go rewrite of the Bash installer: single static binary with
Bubble Tea + Huh TUI, four-phase module contract, DAG execution engine,
embedded config + optional overlay, and a minimal Bash pre-install shim.
Scoped to installer architecture only; toolset overhaul, CLI browser,
and TTY Nerd Font support are queued as follow-up specs.
2026-04-13 18:44:47 +02:00
MDietermann
5b8de40b4c chore: bootstrap Go project with cobra skeleton 2026-04-13 18:24:37 +02:00
MDietermann
897dc424dc Updated Gitignore 2026-04-13 17:40:22 +02:00
MDietermann
9c3cdbc90f Updated Gitignore 2026-04-13 17:39:18 +02:00
MDietermann
f53663298e fix(wokwi): add serial monitor config and USB_SERIAL_JTAG for ESP32-S3
- Add serialMonitor display config to all diagram templates
- Set USB_SERIAL_JTAG attr on ESP32-S3 for built-in USB serial
- Add TX/RX → $serialMonitor wiring for ESP32 (UART-based serial)
- Remove disconnected breadboard parts (wired directly to MCU pins)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 16:40:42 +02:00
MDietermann
33f1112bf8 fix(renode): wokwi-cli releases are plain binaries, not tarballs
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 16:27:07 +02:00
MDietermann
9bec4660f6 feat: add Wokwi CLI for visual breadboard simulation
- Install wokwi-cli binary from GitHub releases
- Generate wokwi.toml and board-specific diagram.json in arduino-new
  with a button + LED breadboard layout for each supported board
- Add <leader>aw keybinding in nvim to run Wokwi simulation
- Diagram templates for: uno, mega, nano, esp32, esp32s3 (+ default)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 16:05:24 +02:00
MDietermann
9c38a8414e fix(neovim): only remove lspconfig config, keep conform and other starter plugins
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 15:27:06 +02:00
MDietermann
b512d41dc8 feat: add Renode emulator, nvim-dap debugging, and backup collision fix
- Add Renode installation (AUR/deb) with arduino-sim helper script
  supporting STM32F4, RP2040, and nRF52840 (USB HID) platforms
- Add nvim-dap + nvim-dap-ui with GDB remote adapter for Renode debugging
- Add debug keybindings under <leader>d prefix
- Fix backup_config() path collisions when multiple sources share a
  basename (e.g. ~/.config/nvim and ~/.local/share/nvim)
- Strip NvChad starter's nvim-lspconfig block that conflicts with
  native vim.lsp.config, preserving configs/lazy.lua
- Update step counts from 11 to 12 (TOTAL_STEPS 12→13, 13→14 on WSL)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 15:23:57 +02:00
marvin.dietermann
7021c915e6 fix(neovim): migrate LSP config to native vim.lsp.config API
Replace deprecated require("lspconfig") setup with the Neovim 0.11+
native vim.lsp.config/vim.lsp.enable API. Clangd config now lives in
lsp/clangd.lua instead of the old plugins/lspconfig.lua +
configs/lspconfig.lua pair.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 15:02:01 +02:00
marvin.dietermann
d1286329f8 fix(common): restore output helpers after end_quiet_mode
After end_quiet_mode closes fd 3/4, the overridden warn/error/info
functions still reference >&3, causing "bad file descriptor" errors
for any calls after quiet mode ends (e.g. the reboot prompt).
Restore the original function definitions when leaving quiet mode.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 14:59:28 +02:00
marvin.dietermann
43247d4404 fix(arduino): probe for --insecure flag before using it
The --insecure global flag was removed in arduino-cli 1.0, causing
the command parser to fail with "unknown command update-index".
Detect support at runtime so the script works with both old and new
versions.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 14:52:23 +02:00
marvin.dietermann
1f42e42bd1 feat: add Nerd Font installation, Yazi file manager, and themed Yazi config
- Install JetBrainsMono Nerd Font for icons across all TUI tools
- Add Yazi as terminal file manager with themed config per colorscheme
- Add write_yazi_config() to all 5 theme files
- Theme switcher (archduino-theme) now also updates Yazi
- Add 'y' alias for yazi in shell config
- Update step numbering (9 -> 11 steps) and README
2026-04-10 13:03:46 +02:00