Skip to content
dots
Esc
↑↓navigate↵open⌘Jpreview
On this page

Starship

The cross-shell prompt — a minimal left prompt, a clock on the right, and a cyberdream palette.

Starship renders the prompt in fish, bash, and zsh from one config file.

Source (repo) Target
dot_config/starship.toml ~/.config/starship.toml

The file is not a template and applies on every role. starship is in .chezmoidata/packages.yaml for pacman and Homebrew and is installed by .chezmoiscripts/run_onchange_before_10-packages.sh.tmpl.

Shell integration

Shell Init
fish conf.d/40-tools.fish runs starship init fish, then config.fish runs it again and calls enable_transience
bash eval "$(starship init bash)" in ~/.bashrc
zsh eval "$(starship init zsh)" in ~/.zshrc

With transience in fish, past prompts in the scrollback collapse to the output of starship_transient_prompt_func (starship module character, the ❯ alone) and starship_transient_rprompt_func (starship module time). See fish.

Layout

"$schema" = 'https://starship.rs/config-schema.json'
palette = "cyberdream"

format = """
$username\
$hostname\
$directory\
$git_branch\
$git_state\
$git_status\
$cmd_duration\
$python\
$character"""

right_format = """$time"""

The left prompt is a single line with no line break before $character. Only the nine listed modules can appear; every other starship module is left out of format. $username and $hostname keep their defaults, so they appear only over SSH or as root.

Modules

Module Format Style Notes
directory default blue
git_branch [$branch]($style) bright-black Branch name only, no symbol or “on”
git_state \([$state( $progress_current/$progress_total)]($style)\) bright-black For example (REBASING 2/5)
git_status [[(*$conflicted$untracked$modified$staged$renamed$deleted)](218) ($ahead_behind$stashed)]($style) cyan See below
cmd_duration [$duration]($style) yellow Default threshold
python [$virtualenv]($style) bright-black detect_extensions = [], detect_files = []
time [$time]($style) bright-black disabled = false, time_format = '%-I:%M %p' (for example 3:07 PM)
character default Symbols below

git_status. The conflicted, untracked, modified, staged, renamed, and deleted symbols are all set to a zero-width space. Any dirty state therefore shows a single * in 256-color 218 (pink) instead of per-state counts. stashed is ≡. ahead_behind keeps starship’s default arrows and is drawn in cyan.

python. With both detect lists empty, the module does not trigger on .py files or pyproject.toml. It shows only the name of an active virtualenv.

Prompt character

State Symbol
Last command succeeded ❯ in purple
Last command failed ❯ in red
Vi normal mode (fish) ❮ in green

fish runs in vi mode (key bindings), so vimcmd_symbol appears there. zsh uses the emacs keymap and never shows it.

Palette

palette = "cyberdream" selects the [palettes.cyberdream] table, colors from cyberdream.nvim. Every named color in the module styles resolves through this table.

Name Normal bright-* dim-*
black #1e2124 #4a4d4f #1c1f22
red #ff6e5e #ff8b7e #d05c50
green #5eff6c #7eff89 #4fd05b
yellow #f1ff5e #f3ff7e #c5d050
blue #5ea1ff #7eb3ff #4f85d1
purple #bd5eff #ff7ef3 #d050c6
cyan #5ef1ff #7ef3ff #4fc5d1
white #ffffff #ffffff #d0d0d1

bright-black (#4a4d4f) is the muted gray used for the branch, git state, virtualenv, and clock. The dim-* entries are defined but no module uses them.

Was this page helpful?