Skip to content

Add selectable Fish/Zellij shell and session backends - #1

Draft
Pyrobrick wants to merge 8 commits into
mainfrom
concept/fish-zellij-defaults
Draft

Add selectable Fish/Zellij shell and session backends#1
Pyrobrick wants to merge 8 commits into
mainfrom
concept/fish-zellij-defaults

Conversation

@Pyrobrick

@Pyrobrick Pyrobrick commented Jun 25, 2026

Copy link
Copy Markdown
Owner

Summary

  • Add optional shell (fish, zsh, or bash) and session_backend (zellij or tmux) selectors.
  • Preserve the existing Zsh/Bash and tmux behavior when the new selectors are omitted, so Supervisor's merged defaults do not silently migrate existing installations.
  • Keep the root account on Bash for OpenSSH command compatibility and dispatch only interactive logins through the selected shell/session wrapper.
  • Preserve shell login semantics when Zellij or tmux starts the configured shell.
  • Add backend regression tests, a dedicated CI job, and updated user documentation.
  • Use the Fish and Zellij package versions provided by the Alpine 3.24 base image.

Compatibility behavior

  • Existing configurations keep using the legacy zsh option and tmux.
  • Direct SSH commands such as ssh host "ha core info" run through Bash without entering a multiplexer.
  • Non-root SSH users retain the configured root handoff for both interactive and command-mode sessions.
  • Fish and Zellij are opt-in until an explicit migration mechanism can distinguish fresh installs from upgraded Supervisor configuration.
  • Mosh bootstraps through command-mode SSH and therefore starts Bash instead of the selected interactive shell or shared-session backend.

Validation

Local checks completed:

  • ssh/tests/test-terminal-backends.sh
    • legacy and explicit selector precedence
    • Fish/Zsh/Bash path selection
    • Zellij/tmux dispatch
    • direct-command quoting and exit-status propagation
    • non-interactive multiplexer bypass
    • root account shell rewrite
    • Bash and POSIX shell syntax checks

The dedicated regression job runs alongside the reusable app CI. The reusable workflow already lints the app and builds both configured architectures (amd64 and aarch64).

Remaining integration checks

  • Confirm the GitHub Actions jobs run successfully on this fork.
  • Smoke-test ttyd, interactive SSH, direct SSH commands, and shared sessions in a Home Assistant add-on runtime.

This remains a draft until those integration checks pass.

…default

- Pin fish to 3.7.1-r0 (latest in Alpine 3.21)
- Pin zellij to 0.40.0-r0 (latest in Alpine 3.21)
- Remove hardcoded sed that changes /bin/sh to /usr/bin/fish globally
  This allows startup scripts to handle shell selection via config

The shell selection should be determined at runtime by the startup scripts
based on the 'shell' and legacy 'zsh' configuration options, not hardcoded
in the image.
Preserve legacy defaults unless the new selectors are explicitly set, keep the root account POSIX-compatible for remote commands, and dispatch only interactive sessions through shell/backend wrappers. Add regression coverage, shell/YAML validation, and updated documentation.
@Pyrobrick Pyrobrick changed the title Concept: add fish shell and zellij session backend defaults Add selectable Fish/Zellij shell and session backends Aug 6, 2026
Use Alpine 3.24 package versions, pin the checkout action, test remote command quoting and exit statuses, make the root Bash rewrite directly testable, and clarify root/Mosh command-mode behavior.
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