For years my shell prompt was a Christmas tree. Git branch, git status, dirty flag, language version, exit code, battery, time, the lot. It looked impressive in a screenshot and told me nothing, because when everything is highlighted, nothing is.
I rebuilt it from the other direction this week: what do I actually need to see, every time, without thinking? Four things. Which directory I'm in. Which git branch, and whether it's dirty. The exit code, but only when it's non-zero. And the kube context, but only when one is set, because deleting the wrong namespace because I thought I was on staging is a mistake you make exactly once.
I'm on starship now, and the win is the when conditions. The kube module only renders when there's a context. The exit code only renders on failure. The prompt is blank and quiet on a good day, and it lights up precisely when something is off.
[kubernetes]
disabled = false
format = '[$context](dimmed red) '
[git_status]
disabled = false
[cmd_duration]
min_time = 2000
The cmd_duration line is the sleeper hit. Anything that takes more than two seconds prints how long it took, which has quietly taught me which of my commands are slow without me ever measuring on purpose. A prompt should be a dashboard with one job: show me the thing that's different from normal. Everything else is decoration, and I've got enough of that in my life.