diff --git a/docs/fish-config.1 b/docs/fish-config.1
index a4ab56e..32cf455 100644
--- a/docs/fish-config.1
+++ b/docs/fish-config.1
@@ -54,8 +54,9 @@ Drop-in replacements for common Unix tools (ls, cat, rm, du, ping, less)
Deep Kitty and WezTerm terminal integration: tab/window/pane management
from the command line
.IP \[bu] 2
-Scrollback history snapshots saved to \[ti]/.terminal_history on session
-exit
+Automatic session logging: terminal scrollback, tmux/zellij panes, and
+paru/yay output captured to \[ti]/.terminal_history (on by default; see
+below)
.IP \[bu] 2
Automatic Python virtualenv activation on directory change
.IP \[bu] 2
@@ -64,6 +65,23 @@ Cross-platform package management via pkg and fish-deps
AI session helpers for Claude Code and Antigravity
.IP \[bu] 2
Catppuccin Mocha color theme throughout
+.RS 2
+.PP
+┌───────────────────────────────────────────────────────────────────────────┐
+│ CAUTION - SESSION LOGGING IS ON BY DEFAULT │ │ │ │ This configuration
+silently records terminal output to │ │ \[ti]/.terminal_history: Kitty
+scrollback on window close, live tmux pane │ │ streams, zellij pane
+snapshots on exit, and full paru/yay output.
+These │ │ logs can contain command output, file contents, and secrets
+printed to │ │ the terminal.
+Nothing leaves your machine, but the files persist locally.
+│ │ │ │ Disable all logging with: set -U __fish_config_op_logging off │
+│ Prefer a menu?
+Run the interactive picker: config-toggle │ │ See Section 7 (C5 -
+Logging and Capture) for the full breakdown.
+│
+└───────────────────────────────────────────────────────────────────────────┘
+.RE
.PP
The configuration is split across:
.IP
@@ -80,6 +98,8 @@ conf.d/
logging-events.fish C5 --on-variable event handlers; syncs logging state at startup
paru-wrapper.fish Auto-generates \[ti]/.local/bin/paru logging wrapper
puffer.fish !! / !$ / ./ expansion (bundled from nickeb96/puffer-fish)
+ tmux-logging.fish C5 starts tmux pipe-pane capture when fish runs inside tmux
+ zellij-logging.fish C5 fish_exit handler dumping zellij pane scrollback on exit
sponge_privacy.fish Sponge privacy patterns; filters credentials from history
starship.fish fish_prompt with OSC 133 shell-integration markers
tailscale.fish Tailscale CLI tab completions
@@ -1973,6 +1993,11 @@ set -U __fish_config_op_greeting 1
\f[R]
.fi
.PP
+For an interactive alternative to setting these variables by hand, run
+config-toggle \[em] a full-screen TUI that flips any category (including
+C5 logging) on or off, per session or universally.
+See its entry in Section 5.
+.PP
Notes:
.IP \[bu] 2
Command shadows (rm, cat, ls, \&...)
@@ -2116,7 +2141,7 @@ print a colored error to stderr naming the variable that disabled them
rather than silently failing.
.SS C5 \[em] Logging and Capture
.PP
-Three components capture shell output to disk.
+Five components capture shell output to disk.
Disabling __fish_config_op_logging skips all capture and removes the
logging wrappers.
.IP
@@ -2126,6 +2151,10 @@ Component What it captures
───────────────────────────────────────────────────────────────────────────
Scrollback capture Terminal session output saved to:
\[ti]/.terminal_history/scrollback_YYYY-MM-DD_HH-MM-SS.log
+tmux pane capture Continuous pane stream via pipe-pane, saved to:
+ \[ti]/.terminal_history/tmux_ For an interactive alternative to setting these variables by hand,
+run config-toggle — a full-screen TUI that flips any category (including
+C5 logging) on or off, per session or universally. See its entry in
+Section 5. Notes:
Three components capture shell output to disk. Disabling +
Five components capture shell output to disk. Disabling __fish_config_op_logging skips all capture and removes the logging wrappers.
Component What it captures
───────────────────────────────────────────────────────────────────────────
Scrollback capture Terminal session output saved to:
~/.terminal_history/scrollback_YYYY-MM-DD_HH-MM-SS.log
+tmux pane capture Continuous pane stream via pipe-pane, saved to:
+ ~/.terminal_history/tmux_<session>-w<win>-p<pane>_YYYY-MM-DD_HH-MM-SS.log
+zellij pane capture Pane scrollback snapshot on shell exit, saved to:
+ ~/.terminal_history/zellij_<session>-p<pane>_YYYY-MM-DD_HH-MM-SS.log
paru wrapper All paru/AUR output captured to:
~/.terminal_history/paru_YYYY-MM-DD_HH-MM-SS.log
yay wrapper All yay/AUR output captured to:
~/.terminal_history/yay_YYYY-MM-DD_HH-MM-SS.log
Kitty watcher watcher.py captures scrollback when Kitty closes
+The tmux capture starts automatically when fish launches inside any +tmux pane ($TMUX is set). It uses tmux's native pipe-pane to stream all +pane output directly to disk without an intermediate process. Each fish +shell session gets its own log file; a new log is created on each shell +start (including exec fish and new splits). Before each new log, the +oldest tmux_*.log files are pruned (by modification time) to keep the +total within SCROLLBACK_HISTORY_MAX_FILES, matching the paru/yay wrapper +behaviour.
+The zellij capture works differently: Zellij has no live
+output-streaming facility like pipe-pane, so the log is taken as a
+one-shot snapshot when the shell exits, via
+zellij action dump-screen --full. A fish_exit handler
+(registered whenever $ZELLIJ is set) writes the pane's full scrollback
+and then prunes old zellij_*.log files the same way. Because the capture
+happens at exit, toggling __fish_config_op_logging takes effect on the
+next exit with no restart or sentinel coordination needed — the C5 guard
+is re-checked when the handler fires.
Logging coordination via sentinel file
C5 uses a sentinel file to synchronize state between the shell and out-of-process components (the Kitty watcher and all running @@ -715,12 +740,16 @@ bare /usr/bin/paru and /usr/bin/yay are used instead.
Re-enabling __fish_config_op_logging:
Changes propagate to all running shells through an event handler that fires whenever __fish_config_op_logging changes — no shell restart diff --git a/docs/html/3-description.html b/docs/html/3-description.html index 53933ea..2649fdb 100644 --- a/docs/html/3-description.html +++ b/docs/html/3-description.html @@ -492,16 +492,29 @@
A production-grade Fish shell configuration targeting Fish 4.x. It provides:
Drop-in replacements for common Unix tools (ls, cat, rm, du, +ping, less)
Deep Kitty and WezTerm terminal integration: tab/window/pane +management from the command line
Automatic session logging: terminal scrollback, tmux/zellij +panes, and paru/yay output captured to ~/.terminal_history (on by +default; see below)
Automatic Python virtualenv activation on directory +change
Cross-platform package management via pkg and fish-deps
AI session helpers for Claude Code and Antigravity
Catppuccin Mocha color theme throughout
+┌───────────────────────────────────────────────────────────────────────────┐ +│ CAUTION - SESSION LOGGING IS ON BY DEFAULT │ │ │ │ This configuration +silently records terminal output to │ │ ~/.terminal_history: Kitty +scrollback on window close, live tmux pane │ │ streams, zellij pane +snapshots on exit, and full paru/yay output. These │ │ logs can contain +command output, file contents, and secrets printed to │ │ the terminal. +Nothing leaves your machine, but the files persist locally. │ │ │ │ +Disable all logging with: set -U __fish_config_op_logging off │ │ Prefer +a menu? Run the interactive picker: config-toggle │ │ See Section 7 (C5 +- Logging and Capture) for the full breakdown. │ +└───────────────────────────────────────────────────────────────────────────┘
The configuration is split across:
config.fish Main entry point; sets env vars and PATH
@@ -515,6 +528,8 @@ conf.d/
logging-events.fish C5 --on-variable event handlers; syncs logging state at startup
paru-wrapper.fish Auto-generates ~/.local/bin/paru logging wrapper
puffer.fish !! / !$ / ./ expansion (bundled from nickeb96/puffer-fish)
+ tmux-logging.fish C5 starts tmux pipe-pane capture when fish runs inside tmux
+ zellij-logging.fish C5 fish_exit handler dumping zellij pane scrollback on exit
sponge_privacy.fish Sponge privacy patterns; filters credentials from history
starship.fish fish_prompt with OSC 133 shell-integration markers
tailscale.fish Tailscale CLI tab completions
diff --git a/docs/wiki/7-customization.md b/docs/wiki/7-customization.md
index d8ef29c..58bc187 100644
--- a/docs/wiki/7-customization.md
+++ b/docs/wiki/7-customization.md
@@ -101,6 +101,10 @@ Examples:
set -U __fish_config_op_greeting 1
# (erase both to go back to full-flavor defaults)
+For an interactive alternative to setting these variables by hand, run
+config-toggle — a full-screen TUI that flips any category (including C5
+logging) on or off, per session or universally. See its entry in Section 5.
+
Notes:
- Command shadows (rm, cat, ls, ...) react immediately; conf.d-level
@@ -227,19 +231,40 @@ silently failing.
#### C5 — Logging and Capture
-Three components capture shell output to disk. Disabling
+Five components capture shell output to disk. Disabling
__fish_config_op_logging skips all capture and removes the logging wrappers.
Component What it captures
───────────────────────────────────────────────────────────────────────────
Scrollback capture Terminal session output saved to:
~/.terminal_history/scrollback_YYYY-MM-DD_HH-MM-SS.log
+ tmux pane capture Continuous pane stream via pipe-pane, saved to:
+ ~/.terminal_history/tmux_-w-p_YYYY-MM-DD_HH-MM-SS.log
+ zellij pane capture Pane scrollback snapshot on shell exit, saved to:
+ ~/.terminal_history/zellij_-p_YYYY-MM-DD_HH-MM-SS.log
paru wrapper All paru/AUR output captured to:
~/.terminal_history/paru_YYYY-MM-DD_HH-MM-SS.log
yay wrapper All yay/AUR output captured to:
~/.terminal_history/yay_YYYY-MM-DD_HH-MM-SS.log
Kitty watcher watcher.py captures scrollback when Kitty closes
+The tmux capture starts automatically when fish launches inside any tmux
+pane ($TMUX is set). It uses tmux's native pipe-pane to stream all pane
+output directly to disk without an intermediate process. Each fish shell
+session gets its own log file; a new log is created on each shell start
+(including exec fish and new splits). Before each new log, the oldest
+tmux_*.log files are pruned (by modification time) to keep the total within
+SCROLLBACK_HISTORY_MAX_FILES, matching the paru/yay wrapper behaviour.
+
+The zellij capture works differently: Zellij has no live output-streaming
+facility like pipe-pane, so the log is taken as a one-shot snapshot when the
+shell exits, via `zellij action dump-screen --full`. A fish_exit handler
+(registered whenever $ZELLIJ is set) writes the pane's full scrollback and
+then prunes old zellij_*.log files the same way. Because the capture happens
+at exit, toggling __fish_config_op_logging takes effect on the next exit with
+no restart or sentinel coordination needed — the C5 guard is re-checked when
+the handler fires.
+
Logging coordination via sentinel file
C5 uses a sentinel file to synchronize state between the shell and
@@ -254,11 +279,13 @@ Disabling __fish_config_op_logging:
3. Kitty's watcher.py reads the sentinel on each save attempt and
skips capture — no Kitty restart required.
4. smart_exit stops saving scrollback logs.
+ 5. Stops tmux pipe-pane capture in every open fish shell inside tmux.
Re-enabling __fish_config_op_logging:
1. Removes the sentinel in every open shell.
2. Regenerates paru/yay logging wrappers in ~/.local/bin/.
3. Kitty watcher resumes capture on the next session exit.
+ 4. Restarts tmux pipe-pane capture in every open fish shell inside tmux.
Changes propagate to all running shells through an event handler that fires
whenever __fish_config_op_logging changes — no shell restart needed.
diff --git a/docs/wiki/index.md b/docs/wiki/index.md
index b86f823..eaf5716 100644
--- a/docs/wiki/index.md
+++ b/docs/wiki/index.md
@@ -5,12 +5,27 @@ A production-grade Fish shell configuration targeting Fish 4.x. It provides:
- Drop-in replacements for common Unix tools (ls, cat, rm, du, ping, less)
- Deep Kitty and WezTerm terminal integration: tab/window/pane management from
the command line
-- Scrollback history snapshots saved to ~/.terminal_history on session exit
+- Automatic session logging: terminal scrollback, tmux/zellij panes, and
+ paru/yay output captured to ~/.terminal_history (on by default; see below)
- Automatic Python virtualenv activation on directory change
- Cross-platform package management via pkg and fish-deps
- AI session helpers for Claude Code and Antigravity
- Catppuccin Mocha color theme throughout
+ ┌───────────────────────────────────────────────────────────────────────────┐
+ │ CAUTION - SESSION LOGGING IS ON BY DEFAULT │
+ │ │
+ │ This configuration silently records terminal output to │
+ │ ~/.terminal_history: Kitty scrollback on window close, live tmux pane │
+ │ streams, zellij pane snapshots on exit, and full paru/yay output. These │
+ │ logs can contain command output, file contents, and secrets printed to │
+ │ the terminal. Nothing leaves your machine, but the files persist locally. │
+ │ │
+ │ Disable all logging with: set -U __fish_config_op_logging off │
+ │ Prefer a menu? Run the interactive picker: config-toggle │
+ │ See Section 7 (C5 - Logging and Capture) for the full breakdown. │
+ └───────────────────────────────────────────────────────────────────────────┘
+
The configuration is split across:
config.fish Main entry point; sets env vars and PATH
@@ -24,6 +39,8 @@ The configuration is split across:
logging-events.fish C5 --on-variable event handlers; syncs logging state at startup
paru-wrapper.fish Auto-generates ~/.local/bin/paru logging wrapper
puffer.fish !! / !$ / ./ expansion (bundled from nickeb96/puffer-fish)
+ tmux-logging.fish C5 starts tmux pipe-pane capture when fish runs inside tmux
+ zellij-logging.fish C5 fish_exit handler dumping zellij pane scrollback on exit
sponge_privacy.fish Sponge privacy patterns; filters credentials from history
starship.fish fish_prompt with OSC 133 shell-integration markers
tailscale.fish Tailscale CLI tab completions