Skip to content

Releases: Rynaro/potions

v2.15.3 — Ghostty ssh no longer breaks remote terminals

Choose a tag to compare

@Rynaro Rynaro released this 23 Jun 22:34
e3336ac

A quiet but annoying one: sshing from Ghostty into a host that lacks the xterm-ghostty terminfo entry left the remote shell unusable — garbled line editing, then 'xterm-ghostty': unknown terminal type. on exit. The Potions-managed ghostty.conf was disabling the very feature that prevents this.

🐛 Root cause

Ghostty ships ssh-env / ssh-terminfo shell-integration features that fix remote TERM mismatches automatically — install the terminfo on the remote, or fall back to xterm-256color. But the generated ghostty.conf hardcoded a full replacement set:

shell-integration-features = cursor,sudo,title

…which silently disabled both ssh features. Every ssh session then shipped TERM=xterm-ghostty to remotes that had never heard of it, breaking zsh's line editor.

✨ Fix

The theme adapter (the generator of record) now emits:

shell-integration-features = cursor,sudo,title,ssh-env,ssh-terminfo
  • ssh-terminfo — Ghostty auto-installs the xterm-ghostty terminfo on the remote host on first connect.
  • ssh-env — falls back to TERM=xterm-256color for hosts where that install can't run.

The generated file carries a self-documenting comment explaining both.

✅ Testing

269/269 tests pass across Ubuntu, macOS, Fedora, and Termux — including a new regression assertion that the generated ghostty.conf keeps ssh terminfo integration enabled.

⬆️ Upgrading

Existing installs pick this up after the next potions theme set <variant> (or potions upgrade) regenerates ghostty.conf.

v2.15.2 — NeoVim body follows the variant, not just the tabline

Choose a tag to compare

@Rynaro Rynaro released this 09 Jun 18:30
f68b456

A follow-up to v2.15.1: the variant rotation now reaches the editor body, not only the tabline. Setting sepia or white recolored the barbar tabline but the editing area stayed dark blue — this release fixes that.

🐛 Root cause — a load-order fight

alchemists-orchid.nvim ships plugin/alchemists-orchid.lua that eagerly runs setup() (its dark default) plus colorscheme alchemists-orchid. Vim sources plugin/** scripts after init.vim, so:

  1. init.vim sources generated/palette.vimsetup({ mode = 'light' }) → body correctly becomes sepia/white.
  2. After init.vim, Vim auto-runs the plugin's plugin/*.luasetup() (dark) → body reverts to dark.

That step-2 colorscheme alchemists-orchid fires Potions' ColorScheme autocmd, which repaints only the barbar tabline / Visual / cheat groups from the variant tokens. So the tabline tracked the variant while the editor body did not — exactly the reported symptom.

✨ Fix

  • Re-callable apply. The body apply is now a global PotionsApplyOrchid() — still invoked immediately, so a live :source / potions reload keeps winning (no plugin pass follows a live source).
  • Startup re-assert. A has('vim_starting')-gated VimEnter guard re-asserts the variant after the plugin's eager pass, then re-asserts the component highlights on top. Live re-sources skip it.

🎨 Verified end-to-end

Under the real init.vim, post-VimEnter:

Variant Normal bg background
dark #2e3440 dark
white #fafbfc light
sepia #f5f0e6 light

✅ Testing

270/270 tests pass across Ubuntu, macOS, Fedora, and Termux — including two new regression assertions that lock in the VimEnter re-assert guard so the body can't silently revert again.

Full changelog: v2.15.1...v2.15.2

v2.15.1 — NeoVim follows your theme rotation

Choose a tag to compare

@Rynaro Rynaro released this 09 Jun 16:37
0a9354f

NeoVim now tracks the active Potions theme variant. Until now potions theme set|cycle repainted the terminal, Zellij, and shell — but nvim stayed dark no matter what. Switching to white or sepia now switches the editor too.

✨ Highlights

  • nvim follows the rotation. dark, white, and sepia each render in nvim, driven through the real alchemists-orchid.nvim v2.0 API (setup({ mode })) instead of the phantom per-variant colorscheme names that silently fell back to dark.
  • Editor matches the surface. bg/fg are pinned to the active variant's tokens, so the nvim background byte-matches your terminal — no seam between the editor and the pane around it.
  • Light barbar shipped. The barbar tabline, Visual selection, and cheat float are now legible on the light variants (white & sepia) instead of inheriting dark Nord shades.
  • Coherent sepia. Potions' sepia is a light parchment everywhere, so nvim's sepia rides the plugin's light mode with parchment overrides — not the plugin's own dark warm-brown sepia, which would have clashed with every other surface.

🐛 Root cause

The nvim adapter emitted colorscheme alchemists-orchid-{light,sepia}, but alchemists-orchid.nvim ships a single colorscheme whose palette is chosen at runtime via require('alchemists-orchid').setup({ mode = … }). The variant colorscheme names never existed → white/sepia fell back to setup() with no args → always dark.

🎨 Mode mapping

Variant Plugin mode Editor surface
dark dark #2e3440
white light #fafbfc
sepia light + parchment overrides #f5f0e6

🔁 Live switch

Re-source the generated palette in a running nvim to apply a switch without restarting — potions reload nvim now points you straight at it:

:source ~/.potions/nvim/generated/palette.vim

✅ Testing

268/268 tests pass across Ubuntu, macOS, Fedora, and Termux, including the compiler-drift, docs-sync, token-pairing, base-inheritance gates and new variant→mode mapping coverage.

Full changelog: v2.15.0...v2.15.1

v2.15.0 — One verb to reload your config everywhere

Choose a tag to compare

@Rynaro Rynaro released this 09 Jun 14:50
bd34324

On-demand config reload across every surface. potions reload regenerates all your theme artifacts and live-applies them wherever it safely can — independent of terminal, OS, or multiplexer — then prints an honest status matrix telling you the one action (if any) needed to finish.

✨ Highlights

  • potions reload — one verb, every surface. Regenerates shell, NeoVim, Zellij, and every terminal-emulator artifact, then live-pushes where a control channel already exists. Until now, re-application only happened as a side effect of theme set|cycle and install/upgrade.
  • Honest by design. Regenerate is the contract; live-push is an optimization; the matrix is the truth. The current terminal repaints instantly via OSC; Termux reloads live; Kitty reloads when remote control is on; Alacritty/WezTerm auto-watch their imports. Surfaces that can't be hot-reloaded from outside (Zellij, NeoVim, Ghostty) get the exact one-line action to finish.
  • Never hangs, never over-promises. Every live-push is gated on a channel already named in the environment — no discovery, no probing — and bounded by a built-in watchdog (no GNU timeout dependency). reload exits 0 whenever regeneration succeeded.
  • Scoped reloads. potions reload terminal|shell|nvim|zellij narrows the live-push + matrix to what you care about; potions terminal reload is shorthand for the terminal surfaces.

🆕 Commands

potions reload                    # regenerate + live-apply everywhere
potions reload terminal           # terminal surfaces only (== potions terminal reload)
potions reload shell|nvim|zellij  # scoped

Example status matrix:

Reload complete. Surface status:
  Shell palette: live now
  Alacritty: auto-reloaded (Alacritty watches the import)
  Kitty: needs restart (or enable remote control)
  Ghostty: needs action — press your Ghostty reload keybind (or restart)
  Zellij: applies on next Zellij session
  NeoVim: needs action — run :source $MYVIMRC in nvim (or restart)

🔧 Notes

  • One engine (.potions/lib/reload/manager.sh), two surface sets — the terminal command reuses the same engine, no divergent code paths.
  • Bash 3.2 compatible, idempotent, cross-platform (macOS / WSL / Termux / Debian / Fedora), and exit-0-on-absence. All prior theme/terminal behavior is unchanged.

Full changelog: v2.14.0...v2.15.0

v2.14.0 — First-class Ghostty & Termux, AAA Alchemist's Orchid

Choose a tag to compare

@Rynaro Rynaro released this 09 Jun 13:31
80aa7a2

First-class terminal-emulator support with live theme rotation, and adoption of the upstream Alchemist's Orchid palette (Nord-based, WCAG-AAA, astigmatism-friendly) as the canonical theme across every surface.

✨ Highlights

  • Ghostty (Linux & macOS) — first-class. potions terminal setup ghostty backs up your ~/.config/ghostty/config and adds a single managed config-file include: palette + cursor/selection + QoL (block cursor, dimmed inactive splits, shell-integration, macos-option-as-alt, Zellij tab keybinds). Configure-only — Potions never installs Ghostty.
  • Termux (Android) — first-class. Writes ~/.termux/colors.properties and applies it live via termux-reload-settings on every theme switch, plus a touch-friendly extra-keys row.
  • One palette, byte-faithful everywhere. A single source of truth now carries an explicit 16-color ANSI palette + cursor/selection, so shell, NeoVim, Zellij, Ghostty, Termux, Alacritty, Kitty, and WezTerm all match the upstream theme exactly — in dark, white, and sepia.
  • Live theme changes. potions theme cycle repaints the terminal instantly (OSC) in a bare shell; Termux reloads live; Ghostty structural settings apply on reload.

🆕 Commands

potions terminal setup [ghostty|termux|all]   # wire detected emulators (backs up first)
potions terminal status                       # show detection + wiring
potions theme set alchemists-orchid white     # dark | white | sepia
potions theme cycle

🔧 Notes

  • Existing Potions installs: colors shift to the AAA upstream palette on upgrade; install/upgrade auto-wire any detected emulator (idempotent, backup-first).
  • Bring-your-own themes, the restricted-parser trust boundary, and all prior theme behavior are unchanged.

Full changelog: v2.13.1...v2.14.0

v2.13.1

Choose a tag to compare

@Rynaro Rynaro released this 02 Jun 22:26
cc738da

What's Changed

  • fix(theme): legible accents for light variants (sepia, white) by @Rynaro in #106

Full Changelog: v2.13.0...v2.13.1

v2.13.0

Choose a tag to compare

@Rynaro Rynaro released this 01 Jun 22:58
f207c14

What's Changed

  • feat(theme): central theme mechanism — one-switch colorscheme (Phases 0–2) by @Rynaro in #105

Full Changelog: v2.12.14...v2.13.0

v2.12.14 — Cross-platform keystroke compatibility

Choose a tag to compare

@Rynaro Rynaro released this 30 May 18:24
03f9c1e

First tagged Potions release. Focus: making keybindings honest and functional on every platform (macOS, WSL, Termux, Debian/Linux, Fedora).

Fixes

  • Zellij footer no longer advertises broken keys. The compact layout now uses zellij:compact-bar (clean live mode indicator) instead of the full status-bar, which auto-dumped the no-prefix Alt bindings — dead on macOS (Option ⌥ needs "Use Option as Meta") and mislabeled "Alt".
  • Ctrl+S works everywhere. Added a guarded stty -ixon to .zshrc; previously Ctrl+S (Neovim's advertised save) sent XOFF and froze the terminal on every platform.
  • Universal help key. New F1 opens the Zellij cheatsheet — modifier-free, no terminal setup (alongside the always-works Ctrl+a ?).

Docs / clarity

  • CHEATSHEET.md, potions keys popup, KEYMAPS.md, README.md: clarify Alt = Option (⌥) and lead with the universal Ctrl+a prefix (zero-setup path to every action).
  • Removed stale "manually run stty -ixon" notes.

Upgrade

potions upgrade

Reviewer note: the compact-bar footer was config-validated but not rendered headlessly — worth an eyeball in a live macOS Zellij session.

v2.12.13

Choose a tag to compare

@Rynaro Rynaro released this 30 May 14:49
2f4e46c

✨ Highlights — Neovim experience overhaul (#103)

Built on the #100 BarBar work, zero new plugin dependencies, fully within the Tier-1 Ctrl / Tier-2 Leader / Tier-3 native-motion doctrine.

  • Tab highlightingcterm* fallbacks on all 13 Buffer* groups (the #100 styling previously collapsed on non-truecolor Termux/WSL); brighter active left-bar.
  • Individual buffer control<leader>bo close-others, <leader>bP close-all-but-pinned, <leader>b[ / <leader>b] close left/right; stable buffer indices (insert_at_end) + focus_on_close='previous'.
  • Cheatsheet modal — zero-dependency floating :PotionsCheatsheet on <leader>? (toggle), Orchid-themed, mirrors KEYMAPS.md.
  • Cursor movement — native motions (0 ^ $ w b e ge gg G % …) documented in the cheatsheet + Tier 3, not rebound (keeps <C-a>/<C-e> Zellij-safe).
  • Native QoL — yank-flash, restore-last-cursor-position, smartcase, scrolloff, persistent undo, etc.

Verified via nvim --headless full load (clean) + cheatsheet open/close/reopen.


What's Changed

  • ci(termux): fix shebang failure on native ARM64 runner by @Rynaro in #98
  • feat(zellij): restore mode indicator and add floating cheatsheet by @Rynaro in #99
  • fix(nvim): make barbar tabs keyboard-navigable and readable by @Rynaro in #100
  • chore(release): regenerate .checksums for 2.12.11 by @Rynaro in #101
  • chore(eidolons): wire dispatch pointer and gitignore markers; bump 2.12.12 by @Rynaro in #102
  • feat(nvim): cheatsheet modal, bulk buffer control, cterm-safe tab highlights by @Rynaro in #103

Full Changelog: v2.12.9...v2.12.13

v2.12.9

Choose a tag to compare

@Rynaro Rynaro released this 24 May 11:26
7560ea8

Fixes

  • drink: Suppress the duplicate POTIONS banner during one-line install. drink.sh printed the banner before staging files, then invoked install.sh which also printed its own banner — users reported the logo appearing twice and assumed the installer had glitched. drink.sh now exports POTIONS_FROM_DRINK=1 before invoking install.sh, and install.sh's main() skips print_header when that flag is set. Standalone install.sh (manual clone path) is unaffected. (#97)