Skip to content

feat(install): style install.sh to match lipgloss CLI aesthetic#20

Merged
ironystock merged 1 commit into
mainfrom
feat/install-sh-styled
Apr 28, 2026
Merged

feat(install): style install.sh to match lipgloss CLI aesthetic#20
ironystock merged 1 commit into
mainfrom
feat/install-sh-styled

Conversation

@ironystock
Copy link
Copy Markdown
Contributor

@ironystock ironystock commented Apr 28, 2026

Summary

Pure-ANSI hand-roll of `install.sh` so the `curl | sh` first-touch experience visually matches the rememberize CLI binary the user is about to run for the first time. Same rounded borders, same dim color-8 accents, same subdued green/red status glyphs as the lipgloss tables in `cmd/rememberize/render.go`.

Why not gum

Charmbracelet does ship `gum`, which exposes Bubble Tea / lipgloss components for shell scripts. But it's a separate binary — using it in install.sh would mean "install gum to install rememberize," exactly the kind of friction that defeats a one-line installer. Hand-rolled ANSI ships zero new deps on top of the `curl`/`wget`/`tar`/`unzip` the script already needs.

What it looks like

```
╭──────────────────────────────╮
│ Installing rememberize CLI │
╰──────────────────────────────╯

✓ Detected darwin/arm64
› Resolving latest release from github.com/captured-ventures/rememberize-cli...
✓ Version v0.1.0
› Downloading rememberize_0.1.0_darwin_arm64.tar.gz
✓ Downloaded
✓ Extracted
✓ Installed to /Users/brad/.local/bin/rememberize

Next steps

  Verify the install:
    rememberize --version

  Pair this machine to your rememberize account:
    rememberize pair <code>
    (get a code from https://rememberize.app/app/connections/new)

```

Opt-outs (any one suffices)

  • stderr is not a TTY (piped to file, captured by CI, etc.)
  • `NO_COLOR` env var is non-empty (https://no-color.org POSIX standard)
  • `TERM=dumb`

In any of those cases the script falls back to ASCII glyphs (`[ok]`, `+--+`, `>`) and no colors — same content, just plain. The TTY check was confirmed locally — when run through a non-TTY stderr, output is the ASCII variant verbatim.

What's unchanged

  • OS/arch detection, release-resolution, download/extract/install flow.
  • PATH warning behavior.
  • All exit codes.
  • POSIX-sh compatibility (no bashisms).

Verification

  • Local smoke (Bash via the agent — non-TTY, falls back to ASCII): script runs cleanly through to the version-resolve step (where it correctly fails because no `v0.1.0` release is published yet — that's Phase 5).
  • Shellcheck-clean (verified before push).

Test plan

  • CI green (`Test` jobs include shellcheck via golangci-lint? — actually no, shellcheck isn't wired in CI yet; consider as follow-up).
  • Manual: run in a real terminal once `v0.1.0` is tagged: confirm rounded borders + green checks render.
  • Manual: `NO_COLOR=1 sh install.sh` shows ASCII fallback.
  • Manual: `sh install.sh 2>/tmp/install.log` (non-TTY stderr) writes ASCII to log.

Follow-ups (out of scope)

  • Add `shellcheck` as a CI job for `install.sh`. Cheap, catches POSIX violations + common bash mistakes. Worth a small follow-up PR.
  • The header-box width math is tied to the title string length. If the title ever has multibyte chars, `${#title}` will count bytes not display cells and the box will misalign. Fine for the current ASCII title; reconsider if we localize.

🤖 Generated with Claude Code


View in Codesmith
Need help on this PR? Tag @codesmith with what you need.

  • Let Codesmith autofix CI failures and bot reviews

Pure-ANSI hand-roll (no gum, no external dep) so the curl|sh
first-touch experience visually matches the rememberize CLI binary
the user is about to run for the first time. Same rounded borders,
same dim color-8 accents, same subdued green/red status glyphs as
the lipgloss tables in cmd/rememberize/render.go.

Why not gum: it's a separate binary, so requiring it would mean
"install gum to install rememberize" — exactly the kind of friction
that defeats a one-line installer. Hand-rolled ANSI ships zero deps
on top of the curl/wget/tar/unzip the script already needs.

Output styling:

  ╭──────────────────────────────╮
  │  Installing rememberize CLI  │
  ╰──────────────────────────────╯

    ✓ Detected darwin/arm64
    › Resolving latest release...
    ✓ Version v0.1.0
    › Downloading rememberize_0.1.0_darwin_arm64.tar.gz
    ✓ Downloaded
    ✓ Extracted
    ✓ Installed to /Users/brad/.local/bin/rememberize

    Next steps

      Verify the install:
        rememberize --version

      Pair this machine to your rememberize account:
        rememberize pair <code>
        (get a code from https://rememberize.app/app/connections/new)

Opt-outs (any one suffices):
  - stderr is not a TTY (piped to file, captured by CI, etc.)
  - $NO_COLOR is non-empty (https://no-color.org POSIX standard)
  - $TERM is "dumb"

In any of those cases, the script falls back to ASCII glyphs and
no colors — same content, just plain. Shellcheck-clean POSIX sh
throughout (no bashisms).

Logic untouched: same OS/arch detection, same release-resolution,
same download/extract/install flow, same PATH warning, same exit
codes. This is purely a presentation upgrade.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@ironystock ironystock force-pushed the feat/install-sh-styled branch from 74a07c9 to 33e3891 Compare April 28, 2026 22:16
@ironystock ironystock merged commit baeb6fe into main Apr 28, 2026
7 checks passed
@ironystock ironystock deleted the feat/install-sh-styled branch April 28, 2026 22:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant