Files
jeremy 10caebad29 zsh: add zoxide/bat/delta, starship prompt config, extra history options; rewrite README
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
2026-07-29 11:30:49 -04:00

101 lines
2.0 KiB
TOML

# Starship prompt configuration - managed by the zshrc repo.
# Local edits to ~/.config/starship.toml are overwritten on the next interactive
# shell start (reproducible/self-configuring design). Uses Nerd Font symbols
# (JetBrainsMono Nerd Font is installed by the tmux config).
command_timeout = 1000
add_newline = true
# Two-line prompt:
# line 1: directory + git status + command duration
# line 2: the input arrow (red on error)
format = """
$directory\
$git_branch\
$git_status\
$cmd_duration\
$line_break\
$character\
"""
[character]
success_symbol = "[➜](bold green)"
error_symbol = "[✗](bold red)"
vimcmd_symbol = "[V](bold green)"
[directory]
truncation_length = 3
truncate_to_repo = true
style = "bold blue"
read_only = " 󰌾"
read_only_style = "red"
repo_root_style = "bold cyan"
[git_branch]
symbol = " "
style = "bold purple"
format = "[$symbol$branch]($style) "
[git_status]
style = "bold red"
conflicted = "=${count}"
ahead = "⇡${count}"
behind = "⇣${count}"
diverged = "⇕↑${ahead_count}↓${behind_count}"
untracked = "?${count}"
stashed = " *${count}"
modified = " !${count}"
staged = " +${count}"
renamed = " »${count}"
deleted = " ✘${count}"
format = '([$all_status$ahead_behind]($style) )'
[cmd_duration]
min_time = 2000
format = "took [$duration](bold yellow) "
[status]
disabled = false
format = '[$symbol]($style)'
symbol = "✗ "
success_symbol = ""
style = "bold red"
[username]
show_always = false
style_user = "bold yellow"
style_root = "bold red"
format = "[$user]($style)@"
[hostname]
ssh_only = true
style = "bold green"
format = "[$hostname]($style) "
[python]
symbol = " "
format = '[${symbol}${pyenv_prefix}(${version})(\($virtualenv\))]($style) '
[nodejs]
symbol = " "
format = "[$symbol($version)]($style) "
[rust]
symbol = " "
format = "[$symbol($version)]($style) "
[golang]
symbol = " "
format = "[$symbol($version)]($style) "
[java]
symbol = " "
format = "[$symbol($version)]($style) "
[docker_context]
symbol = " "
format = "[$symbol$context]($style) "
[shell]
disabled = true
style = "bold cyan"