CLI to generate a shell prompt.
The default prompt configuration uses symbols from Nerd Fonts and expects one of them to be installed.
Only zsh is supported. Please open an issue if support for another shell is desired.
sh
cargo install eliprompt
Make sure eliprompt is in your PATH and add the following to .zshrc:
sh
eval "$(eliprompt install --shell zsh)"
The prompt is made of blocks. Each block contains the text to display as well as the style (foreground and background colors).
The configuration is stored in ~/.config/eliprompt/config.json. It consists of a JSON object
of type Config. Config and the other JSON types involved are detailed below.
BlockProducer typeJSON object with a single field named after its type among:
- Elapsed
- ExitCode
- GitHead
- GitPath
- Hostname
- WorkingDirectory
- Username
- Newline
- Space
- Text
- ExitStatusSymbol
- Or
- Sequence
- Separated
- Styled
Color typeString with a CSS color name (e.g. "red") or a CSS sRGB color (e.g. "#ff1000").
Config typeRoot configuration object. JSON object with the following fields:
- prompt [optional]:
- Type: BlockProducer
- The prompt definition.
- alternative_prompt [optional]:
- Type: BlockProducer or null
- Alternative prompt definition to use when $TERM is linux or the environment variable
ELIPROMPT_ALTERNATIVE_PROMPT is defined.
- timeout [optional]:
- Type: Duration
- Maximum time allocated to build the prompt. If it takes longer, a default prompt will be shown.
Duration typeString containing a duration with unit, e.g. "3s" for 3 seconds.
Elapsed typeShows the duration of the previous command. JSON object with the following fields:
- style [optional]:
- Type: Style
- prefix [optional]:
- Type: String
- Text to display before the duration.
- threshold [optional]:
- Type: Duration
- The duration of a command is displayed if and only if it took longer than the threshold.
ExitCode typeShows the exit code of the previous command if it was not zero. JSON object with the following
fields:
- style [optional]:
- Type: Style
- prefix [optional]:
- Type: String
- Text to display before the exit code.
ExitStatusSymbol typestyle [optional]:
Styleerror_style [optional]:
Stylecontents:
StringGitHead typeShows the current git branch. JSON object with the following fields:
- style [optional]:
- Type: Style
- prefix [optional]:
- Type: String
- Text to display before the git branch.
GitPath typeIf the current working directory is in a git repository, it is shown relative to the root of the
repository. JSON object with the following fields:
- style [optional]:
- Type: Style
- prefix [optional]:
- Type: String
- Text to display before the path.
Hostname typestyle [optional]:
Styleprefix [optional]:
StringNewline typeAdds a newline character.
Or typeList of BlockProducer items. Returns blocks from the first producer that
produces at least one block.
Separated typeseparator_style [optional]:
Styleseparator [optional]:
Stringproducers:
BlockProducer itemsSequence typeList of BlockProducer items. Returns blocks from all producers.
Space typeAdds a space character.
Style typeJSON object with the following fields:
- foreground [optional]:
- Type: Color or null
- background [optional]:
- Type: Color or null
Styled typestyle [optional]:
Styleproducer:
BlockProducerText typestyle [optional]:
Stylecontents:
StringUsername typestyle [optional]:
Styleprefix [optional]:
StringWorkingDirectory typeShows the current working directory. JSON object with the following fields:
- style [optional]:
- Type: Style
- home_as_tilde [optional]:
- Type: bool
- Indicates if the home directory should be displayed as a tilde.
- prefix [optional]:
- Type: String
- Text to display before the working directory.
json
{
"prompt": {
"Styled": {
"style": {
"foreground": "teal",
"background": "black"
},
"producer": {
"Sequence": [
{
"Separated": {
"separator_style": {},
"separator": " | ",
"producers": [
{
"Separated": {
"separator_style": {},
"separator": "@",
"producers": [
{
"Username": {
"style": {},
"prefix": ""
}
},
{
"Hostname": {
"style": {},
"prefix": ""
}
}
]
}
},
{
"Or": [
{
"GitPath": {
"style": {},
"prefix": ""
}
},
{
"WorkingDirectory": {
"style": {},
"home_as_tilde": true,
"prefix": ""
}
}
]
},
{
"GitHead": {
"style": {},
"prefix": ""
}
},
{
"Elapsed": {
"style": {},
"prefix": "祥",
"threshold": "2s"
}
},
{
"ExitCode": {
"style": {
"foreground": "crimson"
},
"prefix": ""
}
}
]
}
},
{
"Newline": null
},
{
"ExitStatusSymbol": {
"style": {
"foreground": "dodgerblue"
},
"error_style": {
"foreground": "crimson"
},
"contents": "→"
}
},
{
"Space": null
}
]
}
}
},
"alternative_prompt": {
"Styled": {
"style": {
"foreground": "teal"
},
"producer": {
"Sequence": [
{
"Separated": {
"separator_style": {},
"separator": " | ",
"producers": [
{
"Separated": {
"separator_style": {},
"separator": "@",
"producers": [
{
"Username": {
"style": {},
"prefix": ""
}
},
{
"Hostname": {
"style": {},
"prefix": ""
}
}
]
}
},
{
"WorkingDirectory": {
"style": {},
"home_as_tilde": true,
"prefix": ""
}
},
{
"Elapsed": {
"style": {},
"prefix": "",
"threshold": "2s"
}
},
{
"ExitCode": {
"style": {
"foreground": "crimson"
},
"prefix": ""
}
}
]
}
},
{
"Newline": null
},
{
"ExitStatusSymbol": {
"style": {
"foreground": "dodgerblue"
},
"error_style": {
"foreground": "crimson"
},
"contents": "→"
}
},
{
"Space": null
}
]
}
}
},
"timeout": "1s"
}
All contributions shall be licensed under the 0BSD license.
starship provides more blocks and supports more shells.