Commit Graph

263 Commits

Author SHA1 Message Date
rootiest 499bf672f8 chore(gitignore): add python patterns to gitignore 2026-06-11 22:57:30 -04:00
rootiest 477a4ab265 fix(logging): render AUR progress animations to clean logs via terminal emulator
pacman/paru download progress is a multi-line terminal animation: it
repaints lines in place using ANSI cursor-movement (ESC[<n>A) and
erase-line (ESC[K) sequences, not just carriage returns. The previous
line-wise regex approaches could not reconstruct this — frames either
concatenated into one giant line (CR removed) or collapsed to blanks
(CR kept), discarding the final 100% frame.

Add scripts/clean_progress_log.py, a small dependency-free terminal
screen-buffer emulator that replays the cursor movements against an
in-memory grid and dumps the final static frame, preserving SGR color
so logs still render with color in ov/bat/less -R. It also drops the
script(1) header/footer.

Both wrappers now pipe the raw PTY capture through this cleaner (bumped
to version 5), falling back to stripping only the script(1) header when
python3 is unavailable. Document the scripts/ dir and mechanism in
AGENTS.md and docs/fish-config.md.
2026-06-11 22:48:02 -04:00
rootiest bd0eac8413 fix(logging): fix CR-collapse and script header filtering in AUR log post-processing
col -bp is designed for backspace-overstriking (man pages), not ANSI
terminal animations; it mangled escape sequences and garbled overprinted
progress bar text. Replace with a perl -ne one-liner that:
  1. Skips Script started/done header lines (next if matches, with -ne
     so next truly suppresses print, unlike -pe which still auto-prints)
  2. Strips trailing \r from PTY \r\n line endings
  3. Collapses CR-redrawn progress bar frames to their final state
  4. Preserves all ANSI color codes so ov renders them correctly
Bump wrapper version to 4 to force regeneration.
2026-06-11 22:23:38 -04:00
rootiest fc63b4f1b0 fix(logging): use col -bp to collapse progress bar redraws in AUR logs
script(1) captures every \r-redrawn frame of the pacman progress bar
as raw bytes. The previous sed pass only stripped ANSI codes, leaving
all intermediate frames concatenated in the log. col -bp semantically
replays the carriage-return overwrites and retains only the final state
of each line; the sed pass then strips residual ANSI codes and the
"Script started/done" header that script(1) writes to the file even
under -q. Bump wrapper version to 3.
2026-06-11 22:10:19 -04:00
rootiest 0cbb7c6892 fix(logging): run paru/yay wrappers in PTY to restore progress bars
Piping through tee caused libalpm to detect a non-TTY stdout and
suppress download progress bars. Switch to script(1) with -q -e -c
which allocates a pseudo-TTY so paru/yay see a real terminal, then
strip ANSI escape sequences from the captured log for readability.
Bump wrapper version to 2 to force regeneration on next shell start.
2026-06-11 22:02:56 -04:00
rootiest 35e86dcd6e docs(readme): lead Minimal Mode with the config-toggle TUI
Offline docs drift reminder / remind (push) Successful in 11s
Promote config-toggle to a callout at the top of the Minimal Mode
section so users see the interactive UI before the variable table,
and drop the now-redundant tip at the bottom.
2026-06-11 03:31:34 -04:00
rootiest 4bfea67cc5 chore(gitignore): ignore and untrack superpowers planning artifacts
Add docs/plans, docs/specs, docs/superpowers, and .superpowers to
.gitignore and stop tracking the two config-toggle artifacts that were
committed before the ignore rules existed. The files are kept on disk
(now ignored), only removed from version control.
2026-06-11 03:29:04 -04:00
Gitea Actions 85a7889c5c chore(docs): regenerate man page, HTML docs, and wiki 2026-06-11 07:20:34 +00:00
rootiest 97f783e9a8 Merge pull request 'feat(config-toggle): add interactive TUI for toggling opinionated component settings' (#43) from feat/config-toggle into main
Generate documentation / build-docs (push) Successful in 39s
Offline docs drift reminder / remind (push) Successful in 11s
Reviewed-on: #43
2026-06-11 07:19:54 +00:00
rootiest 764a9d35e5 feat(config-toggle): right-align ON badge to mirror value direction
The badge now positions each state by where it sits on the scale: OFF
left-aligned, DEFAULT centered, ON right-aligned. This makes the
OFF ← DEFAULT → ON ordering visible at a glance and reinforces the
direction the ←→/h l keys move.
2026-06-11 03:16:33 -04:00
rootiest cfd4749e72 feat(config-toggle): drop Space, add vim h/l for value changes
Directional arrows fully cover value changes, so the Space cycle is
removed. Add h/l as vim-style aliases for ←/→ (matching the existing
j/k for up/down), keeping the whole keymap hjkl-consistent. Update the
in-panel hint, help text, docstrings, and offline docs accordingly.
2026-06-11 03:10:50 -04:00
rootiest bddb068ec0 feat(config-toggle): add Left/Right arrows for directional value changes
Left/Right now adjust the highlighted value one step along the
OFF ← DEFAULT → ON scale, clamped at the ends (no wrap), complementing
Space which cycles through all states and wraps. Right steps toward ON,
Left toward OFF.

Extract the set/erase side-effect into __config_toggle_apply so Space,
Left, and Right share one implementation of the scope-aware
set -U/-g/-Ue/-eg logic. Update the in-panel keybind hint (now
width-padded via string pad so the border stays aligned) and the help
text and offline docs to cover the new keys.
2026-06-11 03:07:17 -04:00
rootiest 608b0227cb fix(config-toggle): read keys via raw tty, fixing arrows/Tab/redraw/prompt
fish's `read` invokes its interactive line editor on a TTY, which (1)
prints a `read> ` prompt below the panel, (2) intercepts Tab and arrow
keys for its own line editing so they never reach the switch, and (3)
shifts the cursor down a line, throwing off the `\e[14A` redraw so top
borders stacked on every keypress. Plain keys (j/k/q/space) passed
through, masking the problem.

Add __config_toggle_read_key: puts the terminal in raw, no-echo mode
(`stty raw -echo min 1 time 1`), reads one keypress from /dev/tty, and
returns a normalized token (up/down/left/right/tab/space/escape/quit or
the literal char) by decoding the bytes via od. Arrow keys and Tab now
work, there is no stray prompt, and the redraw stays aligned. Ctrl-C in
raw mode arrives as byte 3 and maps to quit; bare Esc exits after the
0.1s inter-byte timer.

Rewrite the event loop to consume these tokens and restore Esc to the
help text.
2026-06-11 03:03:32 -04:00
rootiest 5a018fe975 fix(config-toggle): use valid -n read flag, stopping the busy redraw loop
The event loop used `read -k 1`, but `-k` is not a valid fish read option
(it errors with "unknown option", status 2). read therefore returned
instantly every iteration without consuming a keypress, so the loop
redrew the panel as fast as the terminal could render and ignored all
input. The nchars flag is `-n`, not `-k`.

Switch to `read -s -n 1` (one char, silent so keystrokes don't garble the
panel) and add `or break` so a read failure (EOF / non-tty stdin) exits
cleanly instead of spinning. Applies to the primary read and both escape
sequence continuation reads.
2026-06-11 02:56:12 -04:00
rootiest cc14f7fb3d fix(config-toggle): replace read -k 3 with read -k 1 + ESC sequence detection
fish's read -k N waits for exactly N bytes; single-char keys ('q', 'j',
Space, Tab) were blocking indefinitely waiting for 2 more bytes, causing
the input loop to appear unresponsive. Random 3-key bundles were then
processed as unrecognised input, triggering infinite redraws.

Switch to read -k 1 (one raw byte per call). Arrow keys still work: the
terminal sends ESC+[+A/B as a burst, so after reading ESC the two
continuation bytes are already in the TTY buffer and the follow-up reads
return immediately. Bare ESC now passes the next keypress through as the
effective key rather than exiting (q/Q remain the exit keys).
2026-06-11 02:51:01 -04:00
rootiest bff084db07 fix(config-toggle): exit on Ctrl-C via flag variable, add README tip 2026-06-11 01:29:28 -04:00
rootiest f75d64bf9c docs(config-toggle): add config-toggle entry to offline docs and index 2026-06-11 01:20:55 -04:00
rootiest 43fd36f5ea feat(config-toggle): add Space cycling with immediate apply 2026-06-11 01:18:09 -04:00
rootiest 9a820fc3e6 fix(config-toggle): use read -k 3 for ESC sequences, clear INT trap on exit
Replace two-read-k-1 ESC handling with a single read -k 3 so that a bare
ESC returns immediately instead of blocking the shell indefinitely waiting
for a second byte.  Add trap - INT in the cleanup block so the signal
handler does not leak into the global session after config-toggle exits.
2026-06-11 01:16:41 -04:00
rootiest d20f7f8d7b feat(config-toggle): add event loop with navigation and scope switching 2026-06-11 01:11:04 -04:00
rootiest a4f6ee26cb feat(config-toggle): add function skeleton and help flag 2026-06-11 01:07:15 -04:00
rootiest c9174f9d4a feat(config-toggle): add panel renderer helper 2026-06-11 01:01:19 -04:00
rootiest c372c96dd7 feat(config-toggle): add scope-specific variable reader helper 2026-06-11 00:52:11 -04:00
rootiest aa8e4437ec docs(plans): add config-toggle implementation plan
6-task plan: scope-value reader, panel renderer, skeleton/help,
event loop + navigation, cycling + immediate apply, docs update.
2026-06-11 00:49:41 -04:00
rootiest 87960cc8cc docs(specs): add config-toggle design spec
Interactive TUI for toggling opinionated component categories and master
variable. Tabbed Universal/Session scope, arrow-key navigation, Space to
cycle ON/OFF/DEFAULT with immediate apply.
2026-06-11 00:31:49 -04:00
Gitea Actions a9d1d6ac4d chore(docs): regenerate man page, HTML docs, and wiki 2026-06-11 03:38:01 +00:00
rootiest fc17c9fd61 Merge pull request 'docs(catalog): migrate opinionated component catalog into fish-config.md' (#42) from docs/migrate-opinionated-catalog into main
Generate documentation / build-docs (push) Successful in 34s
Reviewed-on: #42
2026-06-11 03:37:26 +00:00
rootiest 780bda7ab7 docs(catalog): migrate opinionated component catalog into fish-config.md
Promotes the internal opinionated_catalog.md (git-ignored dev reference)
to first-class user documentation in docs/fish-config.md Section 7.

- Add per-category component tables (C1–C6) under a new "Component
  Reference" subsection in "Opinionated Components (Minimal Mode)"
- Document the C5 sentinel-file coordination mechanism and how
  __fish_config_logging_changed propagates changes to all open shells
- Document C3/C5 composition (smart_exit wrapper vs capture block)
- Document bang-bang system atomicity across its multiple source files
- Add rg function entry to Section 5.1 (Kitty hyperlink wrapper)
- Update fish-config.index with keywords for all new headings
2026-06-10 23:36:24 -04:00
Gitea Actions e4bcbd3da2 chore(docs): regenerate man page, HTML docs, and wiki 2026-06-11 03:10:26 +00:00
rootiest 4bef8f9c91 Merge pull request 'feat(guards): per-category variable overrides master in __fish_config_op_enabled' (#41) from feat/per-category-master-override into main
Generate documentation / build-docs (push) Successful in 34s
Offline docs drift reminder / remind (push) Successful in 10s
Reviewed-on: #41
2026-06-11 03:09:51 +00:00
rootiest e776e7fba6 docs(guards): document per-category master override in fish-config.md 2026-06-10 23:02:16 -04:00
rootiest a170d82086 docs(guards): document per-category master override in README Minimal Mode 2026-06-10 23:00:23 -04:00
rootiest c04c1a4bc2 docs(guards): fold no-arg edge case into RETURNS status-1 line 2026-06-10 22:59:49 -04:00
rootiest 4c989a45c1 refactor(guards): remove what-comments; document no-arg edge case in RETURNS 2026-06-10 22:59:11 -04:00
rootiest cccef17031 feat(guards): category variable overrides master in __fish_config_op_enabled 2026-06-10 22:57:01 -04:00
Gitea Actions b0debaa421 chore(docs): regenerate man page, HTML docs, and wiki 2026-06-11 02:48:40 +00:00
rootiest 6edeb5bdd1 Merge pull request 'feat(greeting): add C6 — Greeting & First-Run UI opinionated guard' (#40) from feat/greeting-toggle-c6 into main
Generate documentation / build-docs (push) Successful in 35s
Offline docs drift reminder / remind (push) Successful in 11s
Reviewed-on: #40
2026-06-11 02:48:05 +00:00
rootiest b64e7d4f3c docs(greeting): note C6 guard on first-run welcome in Fisher Plugins section 2026-06-10 22:42:34 -04:00
rootiest 251f512806 docs(greeting): fix remaining five→six count in fish-config.md Minimal Mode 2026-06-10 22:35:31 -04:00
rootiest 43135aef02 docs(greeting): add C6 __fish_config_op_greeting to fish-config.md Minimal Mode 2026-06-10 22:34:46 -04:00
rootiest c909a4f054 docs(greeting): add C6 __fish_config_op_greeting to README Minimal Mode 2026-06-10 22:33:55 -04:00
rootiest 5394a6d494 docs(greeting): add C5 and C6 to __fish_config_op_enabled ARGUMENTS docstring 2026-06-10 22:30:26 -04:00
rootiest c9ac952553 feat(greeting): add late-running C6 fish_greeting override to config.fish 2026-06-10 22:27:00 -04:00
rootiest 85be47582b feat(greeting): add C6 greeting guard to first_run.fish welcome message 2026-06-10 22:25:10 -04:00
Gitea Actions 8de2cf229b chore(docs): regenerate man page, HTML docs, and wiki 2026-06-11 02:05:41 +00:00
rootiest 0cced863f8 Merge pull request 'feat(logging): add C5 — Logging & Capture opinionated guard' (#39) from feat/logging-toggle-c5 into main
Generate documentation / build-docs (push) Successful in 32s
Offline docs drift reminder / remind (push) Successful in 10s
Reviewed-on: #39
2026-06-11 02:05:06 +00:00
rootiest 7fcf268fc7 fix(logging): suppress Kitty watcher capture when C5 logging is disabled
When smart_exit skips fish-side capture due to the C5 guard, it now sets
logged_by_shell=true on the Kitty window before calling builtin exit. This
prevents watcher.py's on_close handler from capturing the scrollback even
if the sentinel file is absent, providing a second layer of protection.

Also restructures the capture block to be flat (no wrapper if-true) after
the early-exit guard.
2026-06-10 21:59:52 -04:00
rootiest 76349ad94b fix(logging): register C5 event handlers in conf.d for reliable startup
--on-variable handlers in functions/ are only autoloaded on explicit call,
so they never fire when a universal variable changes. Moving the definitions
to conf.d/logging-events.fish ensures they are registered at shell init.

Also adds a startup __fish_config_sync_logging call so pre-set variable
values (e.g. set before this shell was opened) take effect immediately
without requiring a re-set.
2026-06-10 21:54:56 -04:00
rootiest eb1b780a80 docs(logging): add C5 logging toggle to Minimal Mode in README 2026-06-10 21:49:47 -04:00
rootiest 2ce41d0c55 docs(logging): fix 'four' → 'five' category count in fish-config.md prose 2026-06-10 21:46:14 -04:00