@saburto/pi-colorful-footer
v0.2.0
Published
Replaces the default pi footer with a vibrant, icon-rich status bar using emoji icons and theme-colored backgrounds. No Nerd Fonts required.
Maintainers
Readme
Colorful Footer
Replaces the default pi footer with a vibrant, icon-rich status bar using emoji icons and theme-colored backgrounds. No Nerd Fonts required.
🤖 claude-sonnet-4 │ 📁 extensions │ 🌱 main │ ↑1.2k↓3k │ 💾500 45% │ 📊 8.5k/200k (4%) │ 💰$0.042 │ 🧠 ● xhighFeatures
- Emoji icons — works in any modern terminal without Nerd Fonts
- Theme-aware — each section uses a themed background color from your pi theme
- Responsive pruning — sections drop progressively as the terminal narrows
- Working indicator — replaces the default spinner and "Working..." message with themed variants
- Thinking level display — shows current thinking level with a colored circle indicator
- Current folder — shows repo root name (if in a git repo) or the working directory without
$HOME - Configurable — customize icons, colors, hide sections, and set per-model style rules via JSON config files
Footer Sections
| Section | Icon | Description | |---------|------|-------------| | Model | 🤖 | Current model ID | | Folder | 📁 | Git repo root folder name, or cwd without $HOME | | Git branch | 🌱 | Active git branch (hidden if not in a repo) | | Tokens | ↑↓ | Input and output token counts | | Cache | 💾 | Cache read count and hit rate (hidden when empty) | | Context | 📊 | Context window usage fraction and percentage (hidden when unavailable) | | Cost | 💰 | Total session cost in USD | | Thinking | 🧠 | Current thinking level with circle indicator | | Extensions | 🔌 | Status messages from other extensions (via setStatus) |
Installation
From npm
pi install npm:@saburto/pi-colorful-footerQuick test (no install)
pi -e npm:@saburto/pi-colorful-footerUsage
Once installed, the colorful footer replaces the default status bar automatically. No configuration needed.
Commands
/colorful— Toggle the colorful footer on/off. Use/reloadto re-enable it after disabling./colorful-config— Chat-based configuration. Feeds the full config guide into the conversation so the LLM can read your current config, ask you questions, and edit the JSON file for you. Follow it up with/reloadto apply.
Configuration
Place a JSON file in one of these locations:
| Path | Scope |
|------|-------|
| ~/.pi/agent/colorful-footer.json | Global (all projects) |
| .pi/colorful-footer.json | Project-local (overrides global) |
Configs are deep-merged: project-local values override global values, which override built-in defaults.
Quick Example
{
"icons": {
"model": "🧠",
"git": "🔀"
},
"sections": {
"cost": {
"hidden": true
},
"model": {
"bgColor": "toolSuccessBg",
"fgColor": "text"
}
},
"separator": " ║ ",
"separatorColor": "accent"
}Full Schema
interface ColorfulFooterConfig {
/** Override any section icon (standard emoji). */
icons?: {
model?: string;
folder?: string;
git?: string;
tokensIn?: string;
tokensOut?: string;
cache?: string;
context?: string;
cost?: string;
thinking?: string;
statuses?: string;
};
sections?: {
model?: SectionConfig;
folder?: SectionConfig;
git?: SectionConfig;
tokens?: SectionConfig;
cache?: SectionConfig;
context?: SectionConfig;
cost?: SectionConfig;
thinking?: SectionConfig;
statuses?: SectionConfig;
};
thinking?: {
off?: { icon?: string; color?: string };
minimal?: { icon?: string; color?: string };
low?: { icon?: string; color?: string };
medium?: { icon?: string; color?: string };
high?: { icon?: string; color?: string };
xhigh?: { icon?: string; color?: string };
};
/** Separator between sections. */
separator?: string;
/** Foreground color of the separator — theme name or hex RGB. */
separatorColor?: string;
/** Conditional style rules — applied when a model ID matches. */
rules?: ConditionalRule[];
}
interface SectionConfig {
hidden?: boolean; // Hide this section entirely
bgColor?: string; // ThemeBg name or hex RGB (#rrggbb)
fgColor?: string; // ThemeColor name or hex RGB
labelColor?: string; // ThemeColor name or hex RGB
order?: number; // Sort position (lower = further left)
}
interface ConditionalRule {
models?: string[]; // Model IDs or glob patterns (e.g. "claude-opus*", "deepseek*")
priority?: number; // Higher wins when multiple rules match
icons?: IconOverrides;
sections?: Partial<Record<string, SectionConfig>>;
thinking?: Record<string, ThinkingLevelConfig>;
separator?: string;
separatorColor?: ThemeColor;
}Available Colors
Foreground (ThemeColor):
accent, border, borderAccent, borderMuted, success, error, warning, muted, dim, text, thinkingText, userMessageText, customMessageText, customMessageLabel, toolTitle, toolOutput, mdHeading, mdLink, mdLinkUrl, mdCode, mdCodeBlock, mdCodeBlockBorder, mdQuote, mdQuoteBorder, mdHr, mdListBullet, toolDiffAdded, toolDiffRemoved, toolDiffContext, syntaxComment, syntaxKeyword, syntaxFunction, syntaxVariable, syntaxString, syntaxNumber, syntaxType, syntaxOperator, syntaxPunctuation, thinkingOff, thinkingMinimal, thinkingLow, thinkingMedium, thinkingHigh, thinkingXhigh, bashMode
Background (ThemeBg):
selectedBg, userMessageBg, customMessageBg, toolPendingBg, toolSuccessBg, toolErrorBg
Hex RGB colors are also accepted anywhere a theme color name is expected. Use
#rrggbbformat (e.g."#ff4444","#2e7d32"). Short#rgbworks too.
Hex Color Example
{
"sections": {
"model": {
"bgColor": "#1a1a2e",
"fgColor": "#e94560"
},
"cost": {
"bgColor": "#0f3460",
"fgColor": "#16c79a"
}
},
"separatorColor": "#555555"
}Conditional Rules Example
Different colors per model — red for Opus, green for DeepSeek:
{
"rules": [
{
"models": ["claude-opus-4*", "claude-opus-4-5*"],
"priority": 10,
"sections": {
"model": {
"bgColor": "toolErrorBg",
"fgColor": "error"
}
}
},
{
"models": ["deepseek*"],
"priority": 10,
"sections": {
"model": {
"bgColor": "toolSuccessBg",
"fgColor": "success"
}
}
},
{
"models": ["*sonnet*"],
"priority": 5,
"sections": {
"model": {
"bgColor": "toolPendingBg",
"fgColor": "warning"
}
}
}
]
}Hide Sections Example
Hide the cost and cache sections to save space:
{
"sections": {
"cost": { "hidden": true },
"cache": { "hidden": true }
}
}To hide extension status messages (from other extensions using setStatus):
{
"sections": {
"statuses": { "hidden": true }
}
}Custom Icons Example
Replace emoji icons with Nerd Font characters (if your terminal supports them):
{
"icons": {
"model": "",
"folder": "",
"git": "",
"tokensIn": "",
"tokensOut": "",
"cache": "",
"context": "",
"cost": "",
"thinking": "�11"
}
}