Destination
The outer Zellij hands F1–F11 to whatever actually wants them — a nested Zellij reached
over SSH, and local F-key TUIs like htop and Midnight Commander — automatically, in place
of today's manual Ctrl+; d. Reached when that behaviour is applied in the dotfiles and
documented, or consciously abandoned.
Notes
Domain: chezmoi-managed dotfiles (this repo). Read the repo's CLAUDE.md first — it
governs capability-flag gating, the no-hardcoded-/home/<user> rule, and the standing
requirement that any keybinding or shell-command change updates the README cheatsheet.
Execution override: this map carries execution. It ends at the change applied in
private_dot_bash_env, not at a spec.
Background in the config itself: dot_config/zellij/config.kdl.tmpl binds F1–F11 in
shared_except "tmux", and the tmux mode is deliberately emptied out to serve as the
pass-through layer — both comment blocks are worth reading before touching anything. The
cost of that hot path is already named there: applications inside Zellij never see a
function key.
Decisions so far
Not yet specified
- Whether nested Zellij is pleasant enough to keep once the F-keys are handled. The
known costs are two status bars, plugins loaded twice on the remote's CPU, and an
inner Locked mode with no manual escape because F12 belongs to the outer. Graduates
once the pass-through has actually been lived with.
- Whether
mosh, distrobox enter, devpod ssh and similar wrappers each need their
own entry in the trigger list. Depends on what each reports as the shell's direct
foreground child, which is only knowable by trying them.
Out of scope
- Forking
zellij-autolock in Rust to drive the mode per-pane from a plugin. Ruled out
as disproportionate to a config repo — it would need a wasm build, a release pipeline
for .chezmoiexternal.toml to fetch, and a permission grant, and the shell-hook route
reaches the same destination without any of it.
Destination
The outer Zellij hands F1–F11 to whatever actually wants them — a nested Zellij reached
over SSH, and local F-key TUIs like htop and Midnight Commander — automatically, in place
of today's manual
Ctrl+; d. Reached when that behaviour is applied in the dotfiles anddocumented, or consciously abandoned.
Notes
Domain: chezmoi-managed dotfiles (this repo). Read the repo's
CLAUDE.mdfirst — itgoverns capability-flag gating, the no-hardcoded-
/home/<user>rule, and the standingrequirement that any keybinding or shell-command change updates the README cheatsheet.
Execution override: this map carries execution. It ends at the change applied in
private_dot_bash_env, not at a spec.Background in the config itself:
dot_config/zellij/config.kdl.tmplbinds F1–F11 inshared_except "tmux", and thetmuxmode is deliberately emptied out to serve as thepass-through layer — both comment blocks are worth reading before touching anything. The
cost of that hot path is already named there: applications inside Zellij never see a
function key.
Decisions so far
— No. The collision is symmetry, not F-keys: both ends apply the same dotfiles, and Zellij
has no prefix-key concept. Keep the F-keys;
F12= up a level,Ctrl+;= this level.— Exactly one level below the pane's launch command, so
git pushdoes not false-triggeron the
sshit spawns, and wrappers report as themselves.— Yes.
list-clientsexposes the command, andPS0/PROMPT_COMMANDshell hooks cover itwith no daemon, composing with unmodified
autolock. The Rust fork is out of scope.Not yet specified
known costs are two status bars, plugins loaded twice on the remote's CPU, and an
inner
Lockedmode with no manual escape because F12 belongs to the outer. Graduatesonce the pass-through has actually been lived with.
mosh,distrobox enter,devpod sshand similar wrappers each need theirown entry in the trigger list. Depends on what each reports as the shell's direct
foreground child, which is only knowable by trying them.
Out of scope
zellij-autolockin Rust to drive the mode per-pane from a plugin. Ruled outas disproportionate to a config repo — it would need a wasm build, a release pipeline
for
.chezmoiexternal.tomlto fetch, and a permission grant, and the shell-hook routereaches the same destination without any of it.