4 releases (breaking)
| 0.4.0 | Jan 22, 2024 |
|---|---|
| 0.3.0 | Sep 20, 2022 |
| 0.2.0 | Nov 12, 2020 |
| 0.1.0 | Sep 7, 2020 |
#717 in Configuration
63KB
1.5K
SLoC
Overview
CLI to generate a shell prompt.
Font
The default prompt configuration uses symbols from Nerd Fonts and expects one of them to be installed.
Shell support
Only zsh is supported. Please open an issue if support for another shell is desired.
Installation
cargo install eliprompt
Make sure eliprompt is in your PATH and add the following to .zshrc:
eval "$(eliprompt install --shell zsh)"
Configuration
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 type
JSON object with a single field named after its type among:
ElapsedExitCodeGitHeadGitPathHostnameWorkingDirectoryUsernameNewlineSpaceTextExitStatusSymbolOrSequenceSeparatedStyled
Color type
String with a CSS color name (e.g. "red") or a CSS sRGB color (e.g. "#ff1000").
Config type
Root configuration object. JSON object with the following fields:
prompt[optional]:- Type:
BlockProducer - The prompt definition.
- Type:
alternative_prompt[optional]:- Type:
BlockProducerornull - Alternative prompt definition to use when
$TERMislinuxor the environment variableELIPROMPT_ALTERNATIVE_PROMPTis defined.
- Type:
timeout[optional]:- Type:
Duration - Maximum time allocated to build the prompt. If it takes longer, a default prompt will be shown.
- Type:
Duration type
String containing a duration with unit, e.g. "3s" for 3 seconds.
Elapsed type
Shows the duration of the previous command. JSON object with the following fields:
style[optional]:- Type:
Style
- Type:
prefix[optional]:- Type:
String - Text to display before the duration.
- Type:
threshold[optional]:- Type:
Duration - The duration of a command is displayed if and only if it took longer than the threshold.
- Type:
ExitCode type
Shows the exit code of the previous command if it was not zero. JSON object with the following fields:
style[optional]:- Type:
Style
- Type:
prefix[optional]:- Type:
String - Text to display before the exit code.
- Type:
ExitStatusSymbol type
style[optional]:- Type:
Style - Style to use when the exit status is zero.
- Type:
error_style[optional]:- Type:
Style - Style to use when the exit status is not zero.
- Type:
contents:- Type:
String
- Type:
GitHead type
Shows the current git branch. JSON object with the following fields:
style[optional]:- Type:
Style
- Type:
prefix[optional]:- Type:
String - Text to display before the git branch.
- Type:
GitPath type
If 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
- Type:
prefix[optional]:- Type:
String - Text to display before the path.
- Type:
Hostname type
style[optional]:- Type:
Style
- Type:
prefix[optional]:- Type:
String - Text to display before the hostname.
- Type:
Newline type
Adds a newline character.
Or type
List of BlockProducer items. Returns blocks from the first producer that
produces at least one block.
Separated type
separator_style[optional]:- Type:
Style - Style to use for the separator.
- Type:
separator[optional]:- Type:
String - Separator to insert between groups of blocks generated by the producers.
- Type:
producers:- Type: List of
BlockProduceritems
- Type: List of
Sequence type
List of BlockProducer items. Returns blocks from all producers.
Space type
Adds a space character.
Style type
JSON object with the following fields:
Styled type
style[optional]:- Type:
Style - Default style for items that do not specify their foreground or background color.
- Type:
producer:- Type:
BlockProducer - Generator whose blocks the default style is applied to.
- Type:
Text type
style[optional]:- Type:
Style
- Type:
contents:- Type:
String
- Type:
Username type
style[optional]:- Type:
Style
- Type:
prefix[optional]:- Type:
String - Text to display before the username.
- Type:
WorkingDirectory type
Shows the current working directory. JSON object with the following fields:
style[optional]:- Type:
Style
- Type:
home_as_tilde[optional]:- Type:
bool - Indicates if the home directory should be displayed as a tilde.
- Type:
prefix[optional]:- Type:
String - Text to display before the working directory.
- Type:
Example
{
"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"
}
Contribute
All contributions shall be licensed under the MIT license.
Related projects
starship provides more blocks and supports more shells.
Dependencies
~18–32MB
~421K SLoC