Skip to content

feat: interactive layer selection, MINO_LAYERS env, progress UX#12

Merged
dean0x merged 3 commits intomainfrom
feat/interactive-layer-selection
Feb 17, 2026
Merged

feat: interactive layer selection, MINO_LAYERS env, progress UX#12
dean0x merged 3 commits intomainfrom
feat/interactive-layer-selection

Conversation

@dean0x
Copy link
Owner

@dean0x dean0x commented Feb 17, 2026

Summary

  • Interactive layer picker: When no --layers/--image CLI args and no config layers exist, prompts users to select development tool layers (multiselect) with option to save to .mino.toml or global config
  • MINO_LAYERS env var: Non-interactive callers (CI, IDE plugins, parent processes) can set MINO_LAYERS=rust,typescript to specify layers without a config file or --layers flag. Precedence: CLI --layers > --image > MINO_LAYERS > config layers
  • Progress bar liveness: Animated braille spinner, elapsed timer, streaming non-step Podman build output (filtered via is_build_noise())

Design decisions

  • MINO_LAYERS is read manually (not via clap env attribute) to avoid conflict errors when both MINO_LAYERS and --image are present
  • parse_layers_env() extracted as pure function for testability without std::env::set_var in parallel tests
  • Interactive picker only triggers when: no CLI layer/image args + terminal is interactive + config image is default fedora:43

Test plan

  • cargo clippy — zero warnings
  • cargo test — 190 unit + 10 integration tests pass
  • MINO_LAYERS=typescript mino run — uses typescript layer
  • MINO_LAYERS=typescript mino run --image fedora:43 — uses fedora, no conflict error
  • MINO_LAYERS=typescript mino run --layers rust — CLI wins, uses rust
  • mino run (no config, interactive terminal) — shows layer picker

Dean Sharon added 3 commits February 17, 2026 22:26
When `mino run` is invoked interactively with no layers, image, or
config, prompt the user to select development tool layers via a
multiselect picker. After selection, offer to save the choice to
local .mino.toml or global config.
…tput

- Animated braille spinner (⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏) at 120ms tick
- Elapsed timer on right side of progress bar
- Stream non-step Podman output as message (filtered via is_build_noise())
- disable_steady_tick() called on finish
CI, IDE plugins, and parent processes can set MINO_LAYERS=rust,typescript
to specify layers without a config file or --layers flag every invocation.

Precedence: CLI --layers > --image > MINO_LAYERS env > config layers.
Manual env read avoids clap conflict with --image (env= attribute would
error when MINO_LAYERS is set and --image is passed).
@dean0x dean0x merged commit 57af31f into main Feb 17, 2026
5 of 6 checks passed
@dean0x dean0x deleted the feat/interactive-layer-selection branch February 17, 2026 21:41
@dean0x dean0x mentioned this pull request Feb 18, 2026
3 tasks
Repository owner locked and limited conversation to collaborators Feb 21, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant