. starship - Modern Prompt Customization
Tool-Lektion | 35 Minuten
starship ist ein minimaler, extrem schneller und hochgradig anpassbarer Prompt für jede Shell. Geschrieben in Rust, bietet es eine moderne Alternative zu traditionellen Shell-Prompts mit intellige
Lernziele
- Verstehen warum dieses Tool wichtig ist
- Die wichtigsten Einsatzgebiete kennen
- Installation und grundlegende Nutzung beherrschen
- Production-ready Patterns anwenden
- Real-World Use Cases umsetzen
. starship - Modern Prompt Customization
Berechtigung
starship ist ein minimaler, extrem schneller und hochgradig anpassbarer Prompt für jede Shell. Geschrieben in Rust, bietet es eine moderne Alternative zu traditionellen Shell-Prompts mit intelligenten Defaults und reichhaltiger Kontextinformation.
Warum starship seine Berechtigung hat:
- 1. Shell-Agnostic: Funktioniert mit bash, zsh, fish, PowerShell, etc.
- 2. Performance: <1ms Startup durch Rust-Implementation
- 3. Smart Defaults: Zeigt nur relevante Info (Git-Branch nur in Repos)
- 4. Customizable: 100% konfigurierbar via TOML
- 5. Rich Context: Git, Docker, Node, Python, Rust, Cloud, Kubernetes uvm.
- 6. Nerd Font Support: Schöne Icons für Visual-Context
Statistiken:
- Performance: Sub-millisecond Rendering
- Popularität: 43k+ GitHub Stars
- Adoption: Verwendet von VS Code, GitHub, Microsoft-Teams
🚀 Claude Code Relevanz: Starship zeigt Git-Branch, Projekttyp und Laufzeiten direkt im Prompt an -- essentiell, um bei Claude Code Workflows stets den Kontext zu behalten.
Zwecke
Haupteinsatzgebiete:
- 1. Development Context
- - Git-Branch & Status
- - Programming-Language Versionen
- - Package-Versionen
- - Environment-Indicators
- 2. Cloud & DevOps
- - Kubernetes-Context
- - AWS/GCP/Azure Profile
- - Docker-Context
- - Terraform-Workspace
- 3. User-Experience
- - Visuelles Feedback
- - Error-Indication (Exit-Codes)
- - Execution-Time für Commands
- - Battery-Level (Laptops)
- 4. Productivity
- - Directory-Path-Shortening
- - Username@Hostname (SSH)
- - Time-Stamps
- - Custom-Modules
- 5. Aesthetics
- - Consistent Cross-Shell Look
- - Theme-Support
- - Icon-Integration
- - Color-Customization
Verwendung
In diesem Abschnitt lernst du die Installation, Grundkonfiguration und fortgeschrittene Nutzung von starship. Von der ersten Shell-Integration bis hin zu Custom Modules und Claude Code Workflows wird alles abgedeckt.
Installation
Starship kann auf allen gaengigen Plattformen installiert werden. Waehle die passende Methode fuer dein Betriebssystem.
macOS (Homebrew)
Die einfachste Installation auf macOS laeuft ueber Homebrew:
brew install starship
Ubuntu/Debian
Auf Ubuntu und Debian wird starship ueber das offizielle Install-Script heruntergeladen:
curl -sS https://starship.rs/install.sh | sh
Arch Linux
Unter Arch Linux ist starship direkt im offiziellen Repository verfuegbar:
pacman -S starship
Rust (plattformunabhängig)
Falls du bereits eine Rust-Toolchain installiert hast, kannst du starship direkt ueber Cargo bauen:
cargo install starship --locked
Verifizierung
Pruefe nach der Installation, ob starship korrekt installiert wurde und im PATH liegt:
starship --version
# Output: starship 1.17.1
which starship
# Output: /usr/local/bin/starship
💡 Tipp: Installiere zuerst eine Nerd Font (z.B. FiraCode Nerd Font), bevor du starship konfigurierst -- ohne Nerd Fonts werden die Icons nicht korrekt angezeigt.
Quick Start
Um starship nutzen zu koennen, muss es in deiner Shell aktiviert werden. Fuege die passende Zeile am Ende deiner Shell-Konfigurationsdatei hinzu.
Bash Integration
Fuer Bash fuege diese Zeile am Ende deiner ~/.bashrc hinzu:
# ~/.bashrc
eval "$(starship init bash)"
Zsh Integration
Fuer Zsh kommt die Zeile in die ~/.zshrc:
# ~/.zshrc
eval "$(starship init zsh)"
Fish Integration
Fish nutzt eine andere Syntax, da es kein eval unterstuetzt:
# ~/.config/fish/config.fish
starship init fish | source
PowerShell Integration
Fuer PowerShell fuege den Befehl in dein Profil-Script ein:
# $PROFILE
Invoke-Expression (&starship init powershell)
Test Installation
Nach der Konfiguration lade deine Shell neu, um starship zu aktivieren:
# Reload Shell
exec $SHELL
# Sollte starship-Prompt zeigen:
# user@host ~/dir
Advanced Usage
Hier lernst du, wie du starship ueber eine TOML-Konfigurationsdatei an deine Beduerfnisse anpasst -- von individuellen Modulen bis hin zu kompletten Themes.
Config-File erstellen
Starship wird ueber eine TOML-Datei konfiguriert. Du kannst ein Preset als Ausgangsbasis verwenden oder eine leere Datei erstellen:
# Config-File generieren
mkdir -p ~/.config
starship preset nerd-font-symbols -o ~/.config/starship.toml
# Oder manuell erstellen
touch ~/.config/starship.toml
Basis-Configuration
Diese Grundkonfiguration definiert das Prompt-Format, das Prompt-Zeichen und die wichtigsten Module wie Directory und Git:
# ~/.config/starship.toml
# Prompt Format
format = """
[┌───────────────────](bold green)
[│](bold green)$directory$git_branch$git_status
[└─>](bold green) """
# Character Module
[character]
success_symbol = "[❯](bold green)"
error_symbol = "[❯](bold red)"
# Directory Module
[directory]
truncation_length = 3
truncate_to_repo = false
# Git Branch
[git_branch]
symbol = " "
format = "on [$symbol$branch]($style) "
# Git Status
[git_status]
format = '([\[$all_status$ahead_behind\]]($style) )'
🚀 Beispiel: Mit starship preset nerd-font-symbols -o ~/.config/starship.toml hast du in Sekunden einen professionellen Prompt mit allen wichtigen Symbolen -- ideal als Ausgangsbasis fuer eigene Anpassungen.
Presets verwenden
Starship bietet mehrere vorgefertigte Presets, die als Ausgangspunkt fuer deine eigene Konfiguration dienen:
# Verfügbare Presets anzeigen
starship preset --list
# Output:
# - nerd-font-symbols
# - no-nerd-font
# - bracketed-segments
# - plain-text-symbols
# - pastel-powerline
# Preset anwenden
starship preset nerd-font-symbols -o ~/.config/starship.toml
Module aktivieren/deaktivieren
Einzelne Module koennen gezielt ein- oder ausgeschaltet werden. Mit disabled = false aktivierst du ein Modul, und ueber format bestimmst du dessen Darstellung:
# ~/.config/starship.toml
# Node.js Version anzeigen
[nodejs]
disabled = false
format = "via [ $version](bold green) "
# Python Version
[python]
disabled = false
format = 'via [🐍 $version]($style) '
# Docker Context
[docker_context]
disabled = false
format = "via [ $context](bold blue) "
# Kubernetes
[kubernetes]
disabled = false
format = 'on [⛵ $context](bold blue) '
Integration in Claude Code Workflows
Starship kann mit Custom Modules erweitert werden, um Claude Code Workflows direkt im Terminal-Prompt sichtbar zu machen.
. Custom Module für Claude-Context
Dieses benutzerdefinierte Modul liest eine .claude-context-Datei und zeigt deren Inhalt im Prompt an -- so siehst du sofort, ob ein Projekt AI-unterstuetzt ist:
# ~/.config/starship.toml
# Custom Module
[custom.claude]
command = '''
if [[ -f .claude-context ]]; then
cat .claude-context
fi
'''
when = "test -f .claude-context"
format = "[$output]($style) "
style = "bold yellow"
# Usage: echo "AI-ENABLED" > .claude-context
. Project-Type Indication
Mit Custom Modules kannst du den Projekttyp automatisch erkennen und im Prompt anzeigen lassen -- nuetzlich, wenn du zwischen React-, Python- oder anderen Projekten wechselst:
# ~/.config/starship.toml
# React-Projekte
[custom.react]
detect_files = ["package.json"]
detect_extensions = ["jsx", "tsx"]
command = "echo '⚛'"
format = "[$output]($style) "
style = "cyan"
when = 'grep -q "react" package.json 2>/dev/null'
# Python ML-Projekte
[custom.ml]
detect_files = ["requirements.txt", "Pipfile"]
command = "echo '🤖'"
when = '''
grep -E "(tensorflow|pytorch|scikit-learn)" requirements.txt 2>/dev/null ||
grep -E "(tensorflow|pytorch|scikit-learn)" Pipfile 2>/dev/null
'''
. Git-Enhanced Workflow
Ein detaillierter Git-Status im Prompt zeigt dir auf einen Blick, wie viele Dateien geaendert, gestaged oder ungetrackt sind:
# ~/.config/starship.toml
# Detaillierter Git-Status
[git_status]
ahead = "⇡${count}"
diverged = "⇕⇡${ahead_count}⇣${behind_count}"
behind = "⇣${count}"
deleted = "✘${count}"
modified = "!${count}"
staged = "+${count}"
untracked = "?${count}"
stashed = "${count}"
# Branch mit Upstream
[git_branch]
format = "on [$symbol$branch(:$remote_branch)]($style) "
. Execution-Time Tracking
Die Command-Duration zeigt dir, wie lange der letzte Befehl gedauert hat -- besonders nuetzlich, um langsame Build- oder Test-Laeufe sofort zu erkennen:
# ~/.config/starship.toml
# Command Duration
[cmd_duration]
min_time = 500 # Show wenn Command >500ms
format = "took [$duration]($style) "
style = "bold yellow"
# Time-Stamps
[time]
disabled = false
format = '🕙[\[ $time \]]($style) '
time_format = "%T"
Best Practices
Diese bewaeaehrten Konfigurationsempfehlungen helfen dir, starship performant und uebersichtlich einzurichten.
. Essenzielle Config (~/.config/starship.toml)
Diese umfassende Konfiguration deckt die wichtigsten Module ab -- von Git ueber Programmiersprachen bis hin zu Cloud-Kontexten. Sie eignet sich als solide Basis fuer die taegliche Entwicklungsarbeit:
# ~/.config/starship.toml - Recommended Setup
# ===== Format =====
format = """
$username\
$hostname\
$directory\
$git_branch\
$git_status\
$nodejs\
$python\
$rust\
$docker_context\
$kubernetes\
$aws\
$time\
$line_break\
$character"""
# ===== Prompt Character =====
[character]
success_symbol = "[❯](bold green)"
error_symbol = "[❯](bold red)"
vimcmd_symbol = "[❮](bold green)"
# ===== Directory =====
[directory]
truncation_length = 5
truncate_to_repo = true
format = "[$path]($style)[$read_only]($read_only_style) "
style = "bold cyan"
read_only = " 🔒"
# ===== Git Branch =====
[git_branch]
symbol = " "
truncation_length = 30
format = "on [$symbol$branch(:$remote_branch)]($style) "
style = "bold purple"
# ===== Git Status =====
[git_status]
format = '([\[$all_status$ahead_behind\]]($style) )'
style = "bold red"
conflicted = "🏳"
ahead = "⇡${count}"
behind = "⇣${count}"
diverged = "⇕⇡${ahead_count}⇣${behind_count}"
untracked = "?${count}"
stashed = "${count}"
modified = "!${count}"
staged = "+${count}"
renamed = "»${count}"
deleted = "✘${count}"
# ===== Programming Languages =====
[nodejs]
symbol = " "
format = "via [$symbol($version )]($style)"
style = "bold green"
[python]
symbol = " "
format = 'via [${symbol}${pyenv_prefix}(${version} )(\($virtualenv\) )]($style)'
style = "yellow bold"
[rust]
symbol = " "
format = "via [$symbol($version )]($style)"
style = "bold red"
# ===== Cloud & DevOps =====
[docker_context]
symbol = " "
format = "via [$symbol$context]($style) "
style = "bold blue"
[kubernetes]
symbol = "☸ "
disabled = false
format = 'on [$symbol$context( \($namespace\))]($style) '
style = "cyan bold"
[aws]
symbol = " "
format = 'on [$symbol($profile )(\($region\) )]($style)'
style = "bold yellow"
# ===== Performance =====
[cmd_duration]
min_time = 500
format = "took [$duration]($style) "
style = "bold yellow"
# ===== Time =====
[time]
disabled = false
format = '🕙[\[ $time \]]($style) '
time_format = "%T"
utc_time_offset = "local"
style = "bold white"
⚠️ Warnung: Aktiviere nicht alle Module gleichzeitig -- Module wiepackageoderdocker_contextkoennen den Prompt in grossen Repositories merklich verlangsamen. Nutzestarship timingsum Engpaesse zu finden.
. Performance-Tuning
Langsame Module koennen den Prompt-Aufbau merklich verzoegern, besonders in grossen Repositories. Deaktiviere Module, die du nicht brauchst, und reduziere Scan-Timeouts:
# ~/.config/starship.toml
# Disable langsame Module
[package]
disabled = true # Nur wenn wirklich benötigt
[docker_context]
disabled = true # Nur in Docker-Projekten aktivieren
# Scan-Timeout reduzieren
[rust]
detect_extensions = ["rs"]
scan_timeout = 10 # milliseconds
# Caching für Git
[git_status]
disabled = false
ahead_behind = true
. Conditional Activation
Durch gezielte Datei- und Ordner-Erkennung zeigt starship Module nur dann an, wenn sie im aktuellen Projektkontext relevant sind -- das haelt den Prompt schlank:
# ~/.config/starship.toml
# Node nur in Node-Projekten
[nodejs]
disabled = false
detect_files = ["package.json", ".node-version"]
detect_folders = ["node_modules"]
# Python nur in Python-Projekten
[python]
disabled = false
detect_extensions = ["py"]
detect_files = [".python-version", "Pipfile", "requirements.txt"]
# Kubernetes nur in K8s-Projekten
[kubernetes]
disabled = false
detect_files = ["k8s", "kubernetes"]
. Themed-Configs
Mit Paletten kannst du ein einheitliches Farbschema definieren, das zu deinem Terminal-Theme passt:
# ~/.config/starship.toml
# Pastel Theme
palette = "pastel"
[palettes.pastel]
background = "#1e1e2e"
foreground = "#cdd6f4"
yellow = "#f9e2af"
green = "#a6e3a1"
red = "#f38ba8"
blue = "#89b4fa"
purple = "#cba6f7"
💡 Tipp: Nutze STARSHIP_CONFIG als Environment-Variable, um verschiedene Configs fuer Arbeit und persoenliche Projekte zu verwenden -- besonders praktisch bei Multi-Projekt-Setups.
. Shell-Specific Tweaks
Shell-spezifische Einstellungen wie Cache-Verzeichnis und Lazy-Loading optimieren das Starship-Verhalten in deiner konkreten Shell-Umgebung:
# ~/.zshrc (für zsh)
export STARSHIP_CONFIG=~/.config/starship.toml
export STARSHIP_CACHE=~/.starship/cache
eval "$(starship init zsh)"
# Performance: Lazy-Load starship in tmux
if [[ -z $TMUX ]]; then
eval "$(starship init zsh)"
fi
Beispiele
In diesen Beispielen findest du fertige Konfigurationen fuer verschiedene Einsatzszenarien -- vom minimalistischen Setup bis zum vollstaendigen DevOps-Prompt.
. Minimal Clean Setup
Dieses Setup zeigt nur das Noetigste: Verzeichnis, Git-Branch, Git-Status und ein Prompt-Zeichen. Ideal fuer alle, die einen aufgeraeumten Prompt bevorzugen:
# ~/.config/starship.toml - Minimal
format = """
$directory\
$git_branch\
$git_status\
$character"""
[character]
success_symbol = "[❯](green)"
error_symbol = "[❯](red)"
[directory]
truncation_length = 3
format = "[$path]($style) "
style = "cyan"
[git_branch]
format = "[$symbol$branch]($style) "
symbol = " "
style = "purple"
[git_status]
format = '([\[$all_status\]]($style) )'
style = "red"
. Powerline-Style
Ein Powerline-Look mit farbigen Segmenten, die ineinander uebergehen. Benoetigt eine Nerd Font fuer die Trennzeichen-Symbole:
# ~/.config/starship.toml - Powerline
format = """
[](fg:blue)\
$directory\
[](fg:blue bg:purple)\
$git_branch\
$git_status\
[](fg:purple bg:green)\
$nodejs\
[](fg:green)\
$character"""
[directory]
format = "[ $path ]($style)"
style = "bg:blue fg:black"
truncation_length = 3
[git_branch]
format = "[ $symbol$branch ]($style)"
symbol = " "
style = "bg:purple fg:black"
[git_status]
format = '[$all_status$ahead_behind ]($style)'
style = "bg:purple fg:black"
[nodejs]
format = "[ $symbol($version) ]($style)"
symbol = " "
style = "bg:green fg:black"
[character]
success_symbol = "[ ❯](green)"
error_symbol = "[ ❯](red)"
. Developer-Focused (Full-Context)
Diese Konfiguration zeigt alle verfuegbaren Informationen an -- von Git ueber Cloud-Provider bis hin zu Batterie-Status. Ideal fuer Entwickler, die maximalen Kontext im Prompt wollen:
# ~/.config/starship.toml - Developer
format = """
$username\
$hostname\
$directory\
$git_branch\
$git_commit\
$git_state\
$git_status\
$docker_context\
$nodejs\
$python\
$rust\
$golang\
$java\
$php\
$terraform\
$kubernetes\
$aws\
$gcloud\
$azure\
$cmd_duration\
$line_break\
$jobs\
$battery\
$time\
$character"""
# ... (alle Module konfiguriert)
. Cloud/DevOps Focus
Speziell fuer DevOps-Workflows zeigt dieser Prompt Kubernetes-Context, Terraform-Workspace und Cloud-Provider-Profile prominent an:
# ~/.config/starship.toml - Cloud
format = """
$directory\
$git_branch\
$git_status\
$line_break\
$kubernetes\
$docker_context\
$terraform\
$aws\
$gcloud\
$azure\
$line_break\
$character"""
[kubernetes]
disabled = false
symbol = "☸ "
format = '[$symbol$context( \($namespace\))]($style) '
style = "cyan"
[terraform]
disabled = false
format = "[🏗 $workspace]($style) "
style = "purple"
[aws]
disabled = false
symbol = "☁️ "
format = '[$symbol($profile )(\($region\))]($style) '
style = "yellow"
[gcloud]
disabled = false
format = '[$symbol$account(@$domain)(\($project\))]($style) '
symbol = "️🇬️ "
style = "blue"
[azure]
disabled = false
format = '[$symbol($subscription)]($style) '
symbol = "ﴃ "
style = "blue"
. Vim-Mode Indicator (zsh)
Wenn du zsh im Vim-Modus nutzt (bindkey -v), aenderst du staendig zwischen Insert- und Normal-Mode. Ohne visuelles Feedback ist es schwer zu erkennen, in welchem Modus du dich gerade befindest, was zu unbeabsichtigten Tasteneingaben fuehrt. Starship kann den aktuellen Vim-Modus direkt im Prompt-Zeichen anzeigen -- > fuer Insert-Mode und < fuer Normal-Mode. Stell dir vor, du bearbeitest einen langen Befehl und drueckst aus Versehen Escape: Ohne Indikator tippst du weiter, aber die Tasten werden als Vim-Befehle interpretiert statt als Text. Mit dieser Konfiguration aendert sich das Prompt-Zeichen sofort in Farbe und Richtung, sodass du immer weisst, wo du stehst. Das erspart dir frustrierende Fehleingaben und macht den Vim-Modus in der Shell deutlich komfortabler.
# ~/.config/starship.toml
[character]
success_symbol = "[❯](bold green)"
error_symbol = "[❯](bold red)"
vimcmd_symbol = "[❮](bold green)"
vimcmd_visual_symbol = "[❮](bold yellow)"
vimcmd_replace_symbol = "[❮](bold purple)"
vimcmd_replace_one_symbol = "[❮](bold purple)"
# In ~/.zshrc zusätzlich:
# bindkey -v # Vim-mode aktivieren
. Project-Type Badges
Dieses Custom Module erkennt automatisch den Projekttyp anhand charakteristischer Dateien im aktuellen Verzeichnis. Es prueft, ob eine package.json (npm/Node.js), Cargo.toml (Rust), go.mod (Go), requirements.txt (Python) oder ein Dockerfile (Docker) vorhanden ist, und zeigt ein entsprechendes Badge im Prompt an. Das ist besonders nuetzlich, wenn du im Laufe des Tages zwischen vielen verschiedenen Projekten wechselst und auf einen Blick sehen willst, welche Technologie im aktuellen Verzeichnis zum Einsatz kommt. Stell dir vor, du hast in deinem ~/Projects-Ordner zwanzig verschiedene Repositories -- beim Wechsel in ein Verzeichnis siehst du sofort das passende Icon und weisst, ob du npm, cargo oder pip verwenden musst. Das Ergebnis ist ein kleines Badge wie "npm" oder "rust" direkt neben deinem Verzeichnispfad, das dir unnoetige ls-Befehle erspart.
# ~/.config/starship.toml
[custom.project_type]
command = '''
if [[ -f "package.json" ]]; then
echo "📦 npm"
elif [[ -f "Cargo.toml" ]]; then
echo "🦀 rust"
elif [[ -f "go.mod" ]]; then
echo "🐹 go"
elif [[ -f "requirements.txt" ]]; then
echo "🐍 python"
elif [[ -f "Dockerfile" ]]; then
echo "🐳 docker"
fi
'''
when = "true"
format = "[$output]($style) "
style = "bold blue"
. Battery-Level (Laptops)
Das Battery-Modul zeigt den aktuellen Akkustand direkt im Prompt an und warnt dich visuell, wenn der Akku niedrig ist. Fuer Laptop-Nutzer, die oft ohne Ladegeraet arbeiten, ist das ein wichtiges Feature -- du siehst auf einen Blick, ob du noch genug Energie fuer einen laengeren Build oder eine Claude Code Session hast. Die Konfiguration definiert verschiedene Schwellenwerte mit unterschiedlichen Farben: Rot bei unter 10%, Gelb bei unter 30% und Gruen darueaber. Stell dir vor, du sitzt im Cafe und startest einen 20-minuetigen Docker-Build -- ohne Batterie-Anzeige im Prompt wuerdest du vielleicht nicht merken, dass der Akku bei 8% ist, bis der Laptop sich abschaltet. Mit diesem Modul ist der Akkustand staendig sichtbar, und das rote Symbol warnt dich rechtzeitig. Beachte, dass das Modul standardmaessig nur unter einem bestimmten Schwellenwert angezeigt wird, um den Prompt nicht unnoetig zu ueberladen.
# ~/.config/starship.toml
[battery]
full_symbol = "🔋"
charging_symbol = "⚡"
discharging_symbol = "💀"
[[battery.display]]
threshold = 10
style = "bold red"
[[battery.display]]
threshold = 30
style = "bold yellow"
[[battery.display]]
threshold = 100
style = "bold green"
. Custom Git-Workflow
Diese Konfiguration erweitert die Standard-Git-Anzeige im Prompt um detaillierte Informationen zu Commits, Tags und laufenden Git-Operationen wie Rebase oder Merge. Der git_commit-Block zeigt die ersten 7 Zeichen des aktuellen Commit-Hashs sowie Tags an, was besonders nuetzlich ist, wenn du mit Release-Tags arbeitest. Der git_state-Block informiert dich ueber laufende Operationen wie Cherry-Pick, Rebase oder Merge und zeigt sogar den Fortschritt an (z.B. "3 of 7"). Stell dir vor, du fuehrst einen interaktiven Rebase ueber 15 Commits durch und wirst durch einen Konflikt unterbrochen -- ohne diese Anzeige vergisst du leicht, dass der Rebase noch laeuft, und wunderst dich ueber seltsames Git-Verhalten. Mit dieser Konfiguration siehst du sofort "rebasing 5 of 15" im Prompt. Das truncation_symbol am Branch sorgt dafuer, dass sehr lange Branch-Namen nicht den Prompt sprengen, sondern mit "..." abgekuerzt werden.
# ~/.config/starship.toml
[git_branch]
format = "on [$symbol$branch(:$remote_branch)]($style) "
symbol = " "
style = "purple"
truncation_symbol = "…"
[git_commit]
commit_hash_length = 7
format = '[\($hash$tag\)]($style) '
tag_symbol = " 🏷 "
[git_state]
format = '[\($state( $progress_current of $progress_total)\)]($style) '
cherry_pick = "[🍒 PICKING](bold red)"
rebase = "rebasing"
merge = "merging"
revert = "reverting"
. Execution-Time mit Threshold
Die Command-Duration zeigt dir, wie lange der letzte Befehl gedauert hat, und kann bei laengeren Laeufen sogar Desktop-Benachrichtigungen ausloesen. Der min_time-Wert von 500 Millisekunden sorgt dafuer, dass nur Befehle angezeigt werden, die merklich Zeit gebraucht haben -- schnelle Befehle wie ls oder cd werden ignoriert. Im auskommentierten Abschnitt siehst du, wie du zusaetzlich eine macOS-Notification ausloesen kannst, wenn ein Befehl laenger als 10 Sekunden dauert. Stell dir vor, du startest npm run build und wechselst dann in den Browser zum Recherchieren -- nach 45 Sekunden poppt eine Desktop-Notification auf, dass der Build fertig ist. Das ist deutlich effizienter, als staendig ins Terminal zurueckzuschauen. Die Option show_milliseconds = false haelt die Anzeige uebersichtlich, indem nur Sekunden angezeigt werden.
# ~/.config/starship.toml
[cmd_duration]
min_time = 500
format = "took [$duration]($style) "
style = "bold yellow"
show_milliseconds = false
# Notifications für lange Commands (via Hooks)
# In ~/.zshrc:
# autoload -U add-zsh-hook
# slow_command_notify() {
# if [[ $cmd_duration -gt 10000 ]]; then
# osascript -e 'display notification "Command finished" with title "Terminal"'
# fi
# }
# add-zsh-hook precmd slow_command_notify
. Directory-Substitution
Directory-Substitutions ersetzen lange Verzeichnispfade durch kurze, einpraegsame Symbole. Statt ~/Development/project siehst du im Prompt nur das Laptop-Emoji gefolgt vom Projektnamen, was den Prompt deutlich kuerzer und uebersichtlicher macht. Das ist besonders nuetzlich, wenn du tief verschachtelte Verzeichnisstrukturen hast und der Pfad sonst den halben Terminal-Bildschirm einnimmt. Die truncation_length von 5 begrenzt zusaetzlich, wie viele Verzeichnisebenen angezeigt werden. Stell dir vor, du arbeitest in ~/Development/clients/acme-corp/frontend/src/components -- ohne Substitution wuerde dieser Pfad deine gesamte Prompt-Zeile dominieren. Mit der Konfiguration wird ~/Development durch ein kurzes Symbol ersetzt, und die Truncation kuerzt den Rest auf die letzten fuenf Verzeichnisse. Das read_only-Symbol zeigt dir zusaetzlich an, wenn du in einem schreibgeschuetzten Verzeichnis bist.
# ~/.config/starship.toml
[directory]
truncation_length = 5
truncate_to_repo = true
format = "[$path]($style)[$read_only]($read_only_style) "
style = "cyan"
read_only = " 🔒"
[directory.substitutions]
"~/Development" = "💻"
"~/Projects" = "📁"
"~/Documents" = "📄"
"~/Desktop" = "🖥️"
Claude Code Integration
Workflow 1: Git-Branch-Info in Prompt
Wenn Claude Code automatisch Feature-Branches erstellt oder zwischen Branches wechselt, ist es wichtig, jederzeit zu wissen, auf welchem Branch du dich befindest. Ohne diese Information koenntest du versehentlich Aenderungen auf dem falschen Branch machen oder einen Merge in die falsche Richtung starten. Starship zeigt den Branch-Namen automatisch an, sobald du dich in einem Git-Repository befindest. Stell dir vor, Claude Code erstellt den Branch feature/user-auth und wechselt dorthin -- du siehst die Aenderung sofort im Prompt und kannst sicher weiterarbeiten. Das Format-Feld bestimmt, wie der Branch-Name dargestellt wird, inklusive optionalem Symbol.
# Starship zeigt automatisch den Branch, ideal wenn Claude Code Branches erstellt
# In starship.toml:
[git_branch]
format = "[$symbol$branch]($style) "
Workflow 2: Node.js Version im Prompt
Bei Node.js-Projekten ist die verwendete Runtime-Version entscheidend, da unterschiedliche Versionen zu unterschiedlichem Verhalten fuehren koennen. Wenn Claude Code ein neues Projekt anlegt oder Abhaengigkeiten installiert, muss die Node-Version zum Projekt passen. Starship erkennt automatisch, ob du dich in einem Node.js-Projekt befindest und zeigt die aktive Node-Version an. Stell dir vor, du wechselst zwischen einem Legacy-Projekt mit Node 16 und einem neuen Projekt mit Node 20 -- ohne diese Anzeige wuerdest du vielleicht mit der falschen Version arbeiten und schwer nachvollziehbare Fehler bekommen. Das Ergebnis ist eine kleine Versionsanzeige direkt im Prompt, die dir sofort zeigt, welche Node-Version gerade aktiv ist.
# Sofort sehen welche Node-Version aktiv ist
[nodejs]
format = "[$symbol($version)]($style) "
Workflow 3: Command-Dauer anzeigen
Claude Code fuehrt oft laenger laufende Befehle wie Builds, Tests oder Deployments aus. Die Command-Duration zeigt dir nach jedem Befehl, wie lange er gedauert hat, sofern er den Schwellenwert von 2 Sekunden ueberschreitet. Das ist besonders nuetzlich, um Performance-Regressionen zu erkennen -- wenn ein Build ploetzlich 30 statt 10 Sekunden dauert, siehst du das sofort. Stell dir vor, Claude Code fuehrt npm run build aus und der Befehl dauert 45 Sekunden: Die Dauer wird in gelber Schrift direkt nach dem Prompt angezeigt. So kannst du ueber die Zeit verfolgen, ob deine Builds schneller oder langsamer werden, und bei Auffaelligkeiten direkt reagieren.
# Sehen wie lange Claude Code Commands dauern
[cmd_duration]
min_time = 2_000
format = "took [$duration]($style) "
💡 Tipp: Starship zeigt dir automatisch den Git-Status und Branch, sodass du immer weisst in welchem Kontext Claude Code arbeitet.
Troubleshooting
Hier findest du Loesungen fuer die haeufigsten Probleme bei der Nutzung von starship.
Problem: Icons werden nicht angezeigt
Symptom: Zeigt �� statt schöner Icons
# Prompt zeigt: �� master
Ursache: Dein Terminal verwendet eine Schriftart, die die benoetigten Nerd-Font-Symbole nicht enthaelt. Starship nutzt spezielle Unicode-Zeichen, die nur in Nerd Fonts verfuegbar sind.
Lösung: Nerd Font installieren
# macOS
brew tap homebrew/cask-fonts
brew install --cask font-fira-code-nerd-font
# Terminal Font ändern zu "FiraCode Nerd Font"
# Test
echo " " # Sollte Branch-Icon zeigen
Problem: starship sehr langsam
Symptom: Prompt braucht >200ms zum Rendern
time starship prompt
# Output: 0.25s
Ursache: Bestimmte Module wie package oder docker_context fuehren bei jedem Prompt-Render externe Befehle aus, was in grossen Repositories oder bei langsamen Dateisystemen spuerbar wird.
Lösung: Module deaktivieren & Profile
# Debug-Mode
STARSHIP_LOG=trace starship prompt
# Langsame Module identifizieren und deaktivieren
# ~/.config/starship.toml
[package]
disabled = true
[docker_context]
disabled = true
# Scan-Timeout reduzieren
scan_timeout = 10
Problem: Config wird nicht geladen
Symptom: Änderungen in starship.toml haben keine Wirkung
# Config geändert, aber Prompt gleich
Ursache: Starship sucht die Config-Datei standardmaessig unter ~/.config/starship.toml. Liegt die Datei an einem anderen Ort oder enthaelt sie Syntaxfehler, werden die Aenderungen ignoriert.
Lösung: Config-Path & Reload
# Check Config-Location
starship config
# Should be: ~/.config/starship.toml
# Verify Config Syntax
starship config check
# Reload Shell
exec $SHELL
# Oder Environment-Variable
export STARSHIP_CONFIG=~/.config/starship.toml
Problem: Git-Status langsam in großen Repos
Symptom: Prompt-Delay in großen Git-Repos
cd large-repo
# Prompt rendering dauert Sekunden
Ursache: Das git_status-Modul fuehrt git diff und git status im Hintergrund aus. In Repos mit vielen Dateien oder grossen Historien kann das mehrere Sekunden dauern.
Lösung: Git-Status Timeout setzen
# ~/.config/starship.toml
[git_status]
disabled = false
ahead_behind = false # Disable if slow
scan_timeout = 10 # Milliseconds
Problem: Colors sehen falsch aus
Symptom: Farben nicht wie erwartet
# Blue sieht aus wie Green
Ursache: Dein Terminal ist nicht fuer 256 Farben konfiguriert, oder die TERM-Variable ist falsch gesetzt. Starship benoetigt mindestens 256-Color-Unterstuetzung.
Lösung: Terminal-Color-Support prüfen
# Check TERM
echo $TERM
# Should be: xterm-256color
# Set in ~/.bashrc / ~/.zshrc
export TERM=xterm-256color
# Test 256-colors
for i in {0..255}; do
printf "\x1b[38;5;${i}mcolour${i}\x1b[0m\n"
done
Vergleich: starship vs. Alternativen
| Feature | starship | Powerlevel10k | Pure | Agnoster |
|---------|----------|---------------|------|----------|
| Shell-Support | All | zsh | zsh/bash | zsh |
| Performance | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
| Setup-Zeit | 2 min | 5 min | 2 min | 2 min |
| Customization | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ |
| Config-Format | TOML | zsh | zsh | zsh |
| Nerd-Fonts | ✅ | ✅ | ⚠️ | ⚠️ |
| Git-Integration | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
| Cloud-Context | ✅ | ✅ | ❌ | ❌ |
| Maintenance | ✅ Active | ✅ Active | ✅ Active | ⚠️ Less |
Wann welches Tool?
starship:
- Cross-Shell Consistency gewünscht
- Wenn TOML-Config bevorzugt
- Maximum Customization benötigt
- Rust-Ecosystem-Fan
Powerlevel10k:
- Nur zsh verwenden
- Maximum Performance kritisch
- Wizard-Config bevorzugt
- Umfangreiches Feature-Set benötigt
Pure:
- Minimalistisches Design gewünscht
- Einfaches Setup bevorzugt
- Wenig Dependencies
- Subtile Aesthetics
Agnoster:
- Klassisches Powerline-Design
- Bereits Erfahrung damit
- Teil von Oh-My-Zsh
- Keine große Customization benötigt
Links & Ressourcen
Offizielle Dokumentation
- Website: https://starship.rs
- GitHub: https://github.com/starship/starship
- Configuration Docs: https://starship.rs/config/
- Presets: https://starship.rs/presets/
Installation & Setup
- Install Script: https://starship.rs/guide/#-installation
- Getting Started: https://starship.rs/guide/
- FAQ: https://starship.rs/faq/
Community
- Discussions: https://github.com/starship/starship/discussions
- Discord: https://discord.gg/starship
Nerd Fonts
- Nerd Fonts Website: https://www.nerdfonts.com/
- Font-Downloads: https://github.com/ryanoasis/nerd-fonts/releases
Config Examples
- Community Configs: https://starship.rs/presets/
- Dotfiles Examples: https://github.com/search?q=starship.toml
Pro-Tipps
Fortgeschrittene Techniken fuer Power-User, die das Maximum aus starship herausholen wollen.
. Presets als Basis nutzen
Statt von Null anzufangen, lade ein Preset herunter und passe es dann an deine Beduerfnisse an:
# Verschiedene Presets testen
starship preset nerd-font-symbols > ~/.config/starship.toml
starship preset pastel-powerline > ~/.config/starship.toml
starship preset bracketed-segments > ~/.config/starship.toml
# Dann customizen
vim ~/.config/starship.toml
. Config-Validierung
Starship bietet mehrere Diagnose-Befehle, um Konfigurationsfehler und Performance-Engpaesse zu finden:
# Syntax-Check
starship config check
# Print Rendered Prompt
starship print-config
# Explain Module
starship explain
# Timings anzeigen
starship timings
. Multi-Config Setup
Ueber die Environment-Variable STARSHIP_CONFIG kannst du verschiedene Konfigurationen je nach Kontext laden -- etwa fuer Arbeit und persoenliche Projekte:
# Work-Config
export STARSHIP_CONFIG=~/.config/starship-work.toml
# Personal-Config
export STARSHIP_CONFIG=~/.config/starship-personal.toml
# In ~/.zshrc mit Condition:
if [[ $(pwd) == /work/* ]]; then
export STARSHIP_CONFIG=~/.config/starship-work.toml
else
export STARSHIP_CONFIG=~/.config/starship.toml
fi
. Custom Module für jeden Use-Case
Custom Modules sind die flexibelste Moeglichkeit, starship an deine spezifischen Beduerfnisse anzupassen. Du kannst beliebige Shell-Befehle ausfuehren und deren Ausgabe im Prompt anzeigen lassen -- von Projektkontext bis hin zu Deadlines. Das erste Modul liest eine .claude-context-Datei und zeigt deren Inhalt im Prompt an, sodass du bei AI-gestuetzten Projekten sofort siehst, welcher Kontext aktiv ist. Das zweite Modul zeigt eine Projekt-Deadline an, wenn eine .deadline-Datei existiert -- ideal, um bei zeitkritischen Projekten den Ueberblick zu behalten. Stell dir vor, du arbeitest an einem Kundenprojekt mit Deadline am Freitag: Im Prompt siehst du staendig "Deadline: 2026-02-14", was dich daran erinnert, dich auf die wichtigsten Features zu konzentrieren. Die when-Bedingung sorgt dafuer, dass das Modul nur angezeigt wird, wenn die entsprechende Datei auch existiert.
# ~/.config/starship.toml
# Claude Code Context
[custom.claude_context]
command = "cat .claude-context 2>/dev/null || echo ''"
when = "test -f .claude-context"
format = "[🤖 $output]($style) "
style = "bold yellow"
# Project Deadline
[custom.deadline]
command = "cat .deadline 2>/dev/null || echo ''"
when = "test -f .deadline"
format = "[⏰ $output]($style) "
style = "bold red"
. Integration mit tmux
Starship-Module koennen auch in der tmux-Statusleiste angezeigt werden, sodass du wichtige Informationen auch ohne Prompt sehen kannst:
# ~/.tmux.conf
set -g status-right '#(starship module directory)#(starship module git_branch) %H:%M'
# Oder vollständig
set -g status-right '#(starship prompt --no-cursor)'
Zusammenfassung
starship ist der moderne Standard für cross-shell Prompt-Customization:
Kern-Vorteile:
✅ Performance Sub-millisecond Rendering (Rust)
✅ Cross-Shell Works everywhere (bash, zsh, fish, etc.)
✅ Smart Context Zeigt nur relevante Info
✅ Customizable 100% konfigurierbar via TOML
✅ Rich Features Git, Cloud, Languages, Docker, K8s
Typische Use Cases:
- 🎨 Beautiful Terminal Aesthetics
- 💻 Development-Context (Git, Languages)
- ☁️ Cloud/DevOps-Context (K8s, AWS, etc.)
- ⚡ Performance-Focused Prompt
- 🔄 Cross-Shell Consistency
Ergänzt perfekt:
- zsh: Modern Shell + Modern Prompt
- tmux: Terminal-Multiplexer mit starship-Integration
- Nerd Fonts: Icons für Visual-Context
- Claude Code: AI-Context in Prompt
Nächste Schritte:
- 1. Installiere starship:
brew install starship - 2. Aktiviere in Shell:
eval "$(starship init zsh)" - 3. Wähle Preset:
starship preset nerd-font-symbols - 4. Customize ~/.config/starship.toml
- 5. Installiere Nerd Font für Icons
Bottom Line: starship ist unverzichtbar für moderne Terminal-UX. Schnell, schön, informativ, customizable - funktioniert überall.
Weiter zu: [18. yq - YAML Processor](./18-yq.md) Zurück zu: [16. zsh - Modern Shell](./16-zsh.md) Übersicht: [Tools & Extensions](../TOOLS-EXTENSIONS-INDEX.md)