feat: complete Rust port of claude-statusline

Port the entire 2236-line bash statusline script to Rust.
Implements all 25 sections, 3-phase layout engine (render, priority
drop, flex/justify), file-based caching with flock, 9-level terminal
width detection, trend sparklines, and deep-merge JSON config.

Release binary: 864K with LTO. Render time: <1ms warm.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Taylor Eernisse
2026-02-06 14:21:57 -05:00
commit b55d1aefd1
65 changed files with 12439 additions and 0 deletions

75
install.sh Executable file
View File

@@ -0,0 +1,75 @@
#!/usr/bin/env bash
# install.sh — Set up claude-statusline symlinks
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
CLAUDE_DIR="$HOME/.claude"
echo "claude-statusline installer"
echo "==========================="
echo ""
# Check dependencies
if ! command -v jq &>/dev/null; then
echo "ERROR: jq is required but not installed."
echo " macOS: brew install jq"
echo " Ubuntu: sudo apt install jq"
echo " Fedora: sudo dnf install jq"
exit 1
fi
echo "[ok] jq found"
# Check bash version
if (( BASH_VERSINFO[0] < 4 )); then
echo "WARNING: bash 4+ recommended (you have ${BASH_VERSION})"
echo " macOS ships bash 3. Install bash 4+:"
echo " brew install bash"
fi
# Ensure ~/.claude exists
mkdir -p "$CLAUDE_DIR"
# Create symlinks
create_link() {
local src="$1" dst="$2" name="$3"
if [[ -L "$dst" ]]; then
local existing
existing="$(readlink "$dst")"
if [[ "$existing" == "$src" ]]; then
echo "[ok] $name already linked"
return
fi
echo "[update] $name: updating symlink"
ln -sf "$src" "$dst"
elif [[ -f "$dst" ]]; then
echo "[skip] $name: $dst exists as a regular file"
echo " To use the symlink, rename or remove the existing file first."
return
else
ln -s "$src" "$dst"
echo "[ok] $name linked"
fi
}
create_link "$SCRIPT_DIR/statusline.sh" "$CLAUDE_DIR/statusline.sh" "statusline.sh"
# Optionally link user config if they want to start from an example
if [[ ! -f "$CLAUDE_DIR/statusline.json" ]]; then
echo "[info] No statusline.json found. You can copy an example from:"
echo " $SCRIPT_DIR/examples/"
fi
echo ""
echo "Symlinks created. Now add the status line to your Claude Code settings."
echo ""
echo "Add this to ~/.claude/settings.json:"
echo ""
echo ' "statusLine": "'$CLAUDE_DIR'/statusline.sh"'
echo ""
echo "If ~/.claude/settings.json doesn't exist yet, create it:"
echo ""
echo ' {'
echo ' "statusLine": "'$CLAUDE_DIR'/statusline.sh"'
echo ' }'
echo ""
echo "Then restart Claude Code to see the status line."