diff --git a/CHANGELOG.md b/CHANGELOG.md index 3a5cec3..d52ff98 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,33 @@ Pre-v1.0.0 tags followed the pi npm version (`v{pi_version}[letter]`). ## Unreleased +### Added + +- **Two non-modal terminal editors alongside `nvim`: `nano` and `micro`.** + The image previously shipped only `nvim` (with `EDITOR=nvim`), a modal + vi-style editor. Not everyone is comfortable with vi keybindings, so both + a classic and a modern non-modal option now ship: + - **`nano`** (apt) — ~2.8 MB installed. Its dependencies (`libc6`, + `libncursesw6`, `libtinfo6`) are already present via `nvim`/`less`/`htop`/ + `tmux`, so it pulls in **no extra packages**. On-screen shortcut hints + (`^O` write, `^X` exit) make it the lowest-friction fallback. + - **`micro`** — ~12 MB, a single static Go binary installed from GitHub + releases (same pattern as `bat`/`eza`/`zoxide`). Desktop-style keybindings + (`Ctrl+S` save, `Ctrl+Q` quit, `Ctrl+C/V/X`, `Ctrl+Z` undo), mouse + support, and syntax highlighting out of the box. Pin with + `--build-arg MICRO_VERSION=vX.Y.Z`; defaults to `latest`. + + Combined footprint is ~15 MB (<0.5% of the ~3.2 GB image). **`EDITOR` + stays `nvim`** — the new editors are opt-in via `export EDITOR=micro` + (or `nano`) and/or `git config --global core.editor micro`. + + Note: micro's upstream repo moved `zyedidia/micro` → `micro-editor/micro`; + the Dockerfile uses the canonical URL because the old org's + `/releases/latest` redirect lands on another `/latest` URL (the org + rename), which would defeat the tag-parsing `latest`-resolution idiom. + These are base-image additions, so they only land once the `base-` + rebuilds (this file changed, so the next build picks them up). + ### Added (CI) - **Workflow lint (`.gitea/workflows/lint.yml`) running on every push and PR.** diff --git a/Dockerfile.base b/Dockerfile.base index 01ed5a2..95afbc2 100644 --- a/Dockerfile.base +++ b/Dockerfile.base @@ -57,6 +57,12 @@ ENV DEBIAN_FRONTEND=noninteractive # pi-studio's container-loopback server to the container's # external interface so a published port can reach it. # ~1 MB; generally useful for any port-forwarding need. +# nano — small, non-modal terminal editor for users who don't want +# a vi-based editor. ~2.8 MB installed; its deps (libc6, +# libncursesw6, libtinfo6) are already pulled in by nvim/less/ +# htop/tmux, so it adds no extra packages. Companion to nvim +# and the `micro` binary installed further down. EDITOR stays +# nvim; users opt in via `export EDITOR=nano`. RUN apt-get update && \ apt-get upgrade -y --no-install-recommends && \ apt-get install -y --no-install-recommends \ @@ -92,6 +98,7 @@ RUN apt-get update && \ graphviz \ imagemagick \ socat \ + nano \ && ln -s /usr/bin/fdfind /usr/local/bin/fd \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* @@ -231,6 +238,33 @@ RUN ARCH=$(case "${TARGETARCH}" in amd64) echo "x86_64" ;; arm64) echo "arm64" ; ln -s /opt/nvim-linux-${ARCH}/bin/nvim /usr/local/bin/nvim && \ nvim --version | head -1 +# micro — modern, non-modal terminal editor. Ships alongside nvim so users +# who aren't comfortable with vi-style modal editing have a friendly option: +# desktop-style keybindings (Ctrl+S save, Ctrl+Q quit, Ctrl+C/V/X, Ctrl+Z +# undo), mouse support, and syntax highlighting out of the box. A single +# static Go binary (~12 MB) installed from GitHub releases, exactly like +# bat/eza/zoxide below. EDITOR stays nvim (see below); users opt in with +# `export EDITOR=micro` or `git config --global core.editor micro`. +# +# NOTE: upstream moved zyedidia/micro -> micro-editor/micro. The old org URL +# still 302s, but its /releases/latest redirect lands on ANOTHER /latest URL +# (the org rename), so the tag-parsing idiom below would resolve "latest" +# instead of a version. Use the canonical micro-editor/micro URL. +# Arch asset naming differs from the others: amd64 -> linux64, arm64 -> +# linux-arm64. The tarball extracts to micro-/micro. +ARG MICRO_VERSION=latest +RUN ARCH=$(case "${TARGETARCH}" in amd64) echo "linux64" ;; arm64) echo "linux-arm64" ;; *) echo "linux64" ;; esac) && \ + V="${MICRO_VERSION}" && \ + if [ "$V" = "latest" ]; then \ + V=$(curl -sI --retry 5 --retry-delay 5 --retry-all-errors "https://github.com/micro-editor/micro/releases/latest" | awk 'tolower($1)=="location:" { sub(/\r$/,"",$2); n=split($2,a,"/"); print a[n] }'); \ + fi && \ + V="${V#v}" && [ -n "$V" ] && \ + echo "Installing micro ${V}" && \ + curl -fsSL --retry 5 --retry-delay 5 --retry-all-errors "https://github.com/micro-editor/micro/releases/download/v${V}/micro-${V}-${ARCH}.tar.gz" | tar -xz -C /tmp && \ + install /tmp/micro-${V}/micro /usr/local/bin/micro && \ + rm -rf /tmp/micro-${V} && \ + micro --version + # bat ARG BAT_VERSION=latest RUN ARCH=$(case "${TARGETARCH}" in amd64) echo "x86_64" ;; arm64) echo "aarch64" ;; *) echo "x86_64" ;; esac) && \ diff --git a/README.md b/README.md index 61307c7..604a984 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,9 @@ this container so all your agents share one brain. | Tool | Purpose | |---|---| -| `nvim` | Neovim text editor | +| `nvim` | Neovim text editor (modal / vi-style) | +| `nano` | Small non-modal editor (on-screen shortcut hints) | +| `micro` | Modern non-modal editor (Ctrl+S/Ctrl+Q keys, mouse, syntax highlighting) | | `tmux` | Terminal multiplexer (configured for 0-indexed sessions) | | `ripgrep`, `fd` | Fast file content / filename search | | `fzf` | Fuzzy finder | @@ -49,6 +51,11 @@ this container so all your agents share one brain. | `gosu` | Privilege de-escalation in entrypoint | | `htop`, `tree`, `less` | Inspection utilities | +The default `$EDITOR` is `nvim`. Three editors ship so you can pick your +comfort level — if you'd rather not use a vi-style editor, `nano` and `micro` +are both non-modal. Set your preference with `export EDITOR=micro` (or `nano`) +in your shell profile, and/or `git config --global core.editor micro`. + ### Document and image tooling - `pandoc` — universal Markdown↔HTML/Org/RST/etc. converter diff --git a/scripts/smoke-test.sh b/scripts/smoke-test.sh index c3e838f..528c791 100755 --- a/scripts/smoke-test.sh +++ b/scripts/smoke-test.sh @@ -6,6 +6,7 @@ # Verifies: # - pi binary present and (if EXPECTED_PI_VERSION set) matches CI's resolved version # - new v1.0.0 base additions (pandoc, graphviz, imagemagick, yq, tealdeer) +# - non-modal editors nano + micro (alongside nvim) # - tmux 0-indexing baked in /etc/tmux.conf (required for pi-studio variants) # - pi-toolkit cloned at /opt/pi-toolkit # - pi-extensions cloned at /opt/pi-extensions @@ -24,7 +25,8 @@ set -euo pipefail IMAGE="${1:?usage: $0 }" PASS=0; FAIL=0 # pi-devbox v1.0.0 (decoupled from opencode-devbox) added pandoc, graphviz, -# imagemagick, yq, tealdeer, and a baked /etc/tmux.conf. Local arm64 build +# imagemagick, yq, tealdeer, a baked /etc/tmux.conf, and the non-modal +# editors nano + micro (~15 MB combined). Local arm64 build # observed 3.20 GB. CI amd64 builds may differ slightly; threshold below # carries +300 MB margin to absorb arch differences without false reds. # Tighten in a follow-up release once amd64 actuals are observed in CI logs. @@ -71,6 +73,8 @@ run "git" "git --version" run "aws" "aws --version" run "uv" "uv --version" run "nvim" "nvim --version" +run "nano" "nano --version" +run "micro" "micro --version" run "mempalace-mcp" "mempalace-mcp --help" # v1.0.0 base additions — verify presence and basic functionality. run "pandoc" "pandoc --version"