What the prompt actually is
The prompt is a string the shell prints before each command. Bash stores it in $PS1, zsh in $PROMPT (or $PS1; both work). It is just text with escape codes — your shell evaluates these every time it gets ready for input. That means a great prompt is a few characters of expansion, not a plugin.
The escape codes you'll see most
%n/\u— username%m/\h— short host%~/\w— current dir, with~for home%?/$?— exit code of the last command%F{red}/\[\033[31m\]— color start (zsh / bash)%f/\[\033[0m\]— color reset
If you read someone's .zshrc and see PROMPT='%F{cyan}%n%f@%m %~ %F{red}%(?..%?)%f%# ', that decodes to: cyan username, regular host, working directory, red exit code only when non-zero, then the prompt character.
Multi-line prompts and right-side prompts
You can split the prompt onto two lines so commands always start at the left margin. Set PROMPT to one line ending in $'\n' and a short final glyph. Zsh also exposes RPROMPT, which prints on the right of the same line — perfect for git branch info that doesn't push your typing area around.
Themed prompts you don't write yourself
You don't have to hand-craft escape codes. Powerlevel10k (zsh) and Starship (any shell) generate fast, async, info-rich prompts: git status, Python venv, Node version, Kubernetes context, AWS profile, last-command duration. Write your own only if you enjoy it; otherwise pick Starship and move on.