The bootstrap silently installs tools for ~30s+ on a version bump or
first login, which looked like an unexplained hang. Now prints a
banner explaining what is happening, that it may take a minute, and
that subsequent runs are a no-op. The box is built dynamically so the
right edge stays aligned regardless of the version string length.
Also clarifies the trigger comment in zshrc.
Bootstrap (zshrc-bootstrap.zsh):
- Add bat and zoxide to the cross-distro install loop
- Add git-delta install block (package is 'git-delta' on every PM but
binary is 'delta', mirroring the starship/lazydocker pattern)
- Debian/Ubuntu compat: symlink batcat->bat and fdfind->fd into
~/.local/bin so zshrc integrations work under both names
- Bump ZSHRC_BOOTSTRAP_VERSION 2 -> 3 so existing machines re-run the
bootstrap and auto-install the new tools
zshrc:
- Add setopts HIST_VERIFY, EXTENDED_HISTORY, AUTO_PUSHD,
PUSHD_IGNORE_DUPS, PUSHD_SILENT
- Self-configuring tool integrations (all behind command -v guards):
- zoxide: eval $(zoxide init zsh) for frecent 'z'/'zi' dir jumping
- bat: alias cat->bat, BAT_THEME, colored MANPAGER via bat
- delta: GIT_PAGER=delta for prettier git diff/log/show
- Extend the interactive auto-update block to also sync starship.toml
to ~/.config/starship.toml (overwrite-if-changed, validated the
same way as zshrc); keep the reproducible/self-configuring design
- Inverted hyperlink fix already landed in prior commit; no change
here
starship.toml (new):
- Two-line prompt: directory + git status + cmd duration on line 1,
arrow (red on error) on line 2; Nerd Font symbols, SSH host/user,
Python/Node/Rust/Go/Java/Docker context blocks
- Validated clean with starship 1.21.1 (uses [nodejs], not [node])
README.md:
- Full rewrite: documents the design philosophy, all files, deps,
integrations, history options, aliases, keybindings, the eza
hyperlink workaround rationale, auto-update behavior, per-machine
overrides, env vars, and helper functions
The oh-my-zsh eza plugin adds a bare --hyperlink flag as the last tail
option. eza's --hyperlink takes an optional value, so clap swallows the
next token (the path) -> 'la /' fails with 'invalid value /'.
- Drop the 'hyperlink' zstyle so the plugin stops adding the bare flag
- After oh-my-zsh loads, append the glued --hyperlink=always form to
each eza alias; the glued form cannot eat the next token, so paths
work and hyperlinks stay on
- Add --connect-timeout 5 --max-time 30 to all curl calls (starship,
lazydocker, fastfetch, eza) so an unreachable/slow host aborts instead
of hanging the new shell during a bootstrap version bump
- Add -f/--fail to curl calls so a 502/HTML error page is not saved as
a tarball or piped into sh
- Guard fastfetch extract: only cp/chmod when $ffdir is non-empty,
preventing cp of '/usr/bin/fastfetch' and glob against '/' when
curl/tar fails
- Only run fastfetch/eza copy steps when both curl and tar succeed;
clean up temp tarballs in both success and failure paths
- git clone now uses GIT_TERMINAL_PROMPT=0 and http.lowSpeedLimit/
lowSpeedTime so a stalled clone aborts after ~10s of no progress
and an unexpected credential prompt cannot block startup
- Drop invalid -y flag from 'dnf list available' availability check
(it is a global dnf option, not a list subcommand arg) which could
cause the check to fail and skip the dnf path
- Add -f/--fail to all curl calls so HTTP error pages (502/404) are not
written to temp files and mistaken for valid config/scripts
- Fix tmux check at line 49: was testing the directory path with -f
(always true when dir exists) causing tmux.conf to re-download on
every shell start; now checks for the actual conf files in both
tmux and byobu config dirs
- Detect netbird installed via pacman
- Remove netbird packages using pacman -Rns when replacing with binary install
- Update README to document pacman support
- Add missing 'shift' in --list case (caused infinite loop)
- Initialize color vars to empty strings before tput block
(set -u errored when tput unavailable or non-TTY)
Usage: docker-stacks-update -s stack_a -s stack_b
Only matching running stacks are processed. Shows a helpful message
with available stacks if no match is found.
- Add -h/--help usage with options
- Add argument parsing with unknown-option error
- Fix update detection: 'Pulled' appears for all services even when
up-to-date; only 'Downloaded newer image for' is reliable
- Show 'Stopping containers...' before docker compose down
- Show 'Starting containers...' before docker compose up
- Show 'Dumping named volumes...' during volume backup
- Move 'Backup complete' message to after stack restart
Adds syntax validation via zsh -n to both update_zshrc() and the
auto-update on shell start. Prevents error pages or corrupted content
from overwriting ~/.zshrc and breaking the shell.