Pretty, minimal and fast ZSH prompt. Even much pure and minimal now
Most prompts are cluttered, ugly and slow. We wanted something visually pleasing that stayed out of our way.
- Comes with the perfect prompt character. Author went through the whole Unicode range to find it.
- Prompt character turns red if the last command didn't exit with
0
. - Command execution time will be displayed if it exceeds the set threshold.
- Username and host only displayed when in an SSH session or a container.
- Shows the current path in the title and the current folder & command when a process is running.
- Support VI-mode indication by reverse prompt symbol (Zsh 5.3+).
- Makes an excellent starting point for your own custom prompt.
- Remove useless zsh subprocess per each instance (async workers)
- Debloat the code that executes every time you open a terminal window
- The prompt must only tell you where you are now. It's not a fancy git tool
┌─────────────────────────────────────────────────── user
│ ┌──────────────────────────────────────────── host
│ │ ┌──────────────────────────────── path
│ │ │ ┌───────────────────── git:branch
│ │ │ │ ┌────────────── execution_time
│ │ │ │ │
zaphod@heartofgold ~/dev/pure master 42s
venv ❯
│ │
│ └────────────────────────────────────────────── prompt
└─────────────────────────────────────────────────── virtualenv (or prompt:continuation)
- Clone this repo somewhere. Here we'll use
$HOME/.config/zsh/pure
.
mkdir -p "$HOME/.config/zsh"
git clone https://github.com/ivan-volnov/pure.git "$HOME/.config/zsh/pure"
- Add the path of the cloned repo to
$fpath
in$HOME/.zshrc
.
# .zshrc
fpath+=($HOME/.config/zsh/pure)
Initialize the prompt system (if not so already) and choose pure
:
# .zshrc
autoload -U promptinit; promptinit
prompt pure
Option | Description | Default value |
---|---|---|
PURE_CMD_MAX_EXEC_TIME |
The max execution time of a process before its run time is shown when it exits. | 5 seconds |
PURE_PROMPT_SYMBOL |
Defines the prompt symbol. | ❯ |
PURE_PROMPT_VICMD_SYMBOL |
Defines the prompt symbol used when the vicmd keymap is active (VI-mode). |
❮ |
PURE_PREPEND_NEW_LINE |
Add a new line before the prompt. | 1 |
As explained in ZSH's manual, color values can be:
- A decimal integer corresponding to the color index of your terminal. If your
$TERM
isxterm-256color
, see this chart. - The name of one of the following nine colors:
black
,red
,green
,yellow
,blue
,magenta
,cyan
,white
, anddefault
(the terminal’s default foreground) #
followed by an RGB triplet in hexadecimal format, for example#424242
. Only if your terminal supports 24-bit colors (true color) or when thezsh/nearcolor
module is loaded.
Colors can be changed by using zstyle
with a pattern of the form :prompt:pure:$color_name
and style color
. The color names, their default, and what part they affect are:
execution_time
(yellow) - The execution time of the last command when exceedingPURE_CMD_MAX_EXEC_TIME
.git:branch
(242) - The name of the current branch when in a Git repository.host
(242) - The hostname when on a remote machine.path
(blue) - The current path, for example,PWD
.prompt:error
(red) - ThePURE_PROMPT_SYMBOL
when the previous command has failed.prompt:success
(magenta) - ThePURE_PROMPT_SYMBOL
when the previous command has succeeded.prompt:continuation
(242) - The color for showing the state of the parser in the continuation prompt (PS2). It's the pink part in this screenshot, it appears in the same spot asvirtualenv
. You could for example matching both colors so that Pure has a uniform look.suspended_jobs
(red) - The✦
symbol indicates that jobs are running in the background.user
(242) - The username when on remote machine.user:root
(default) - The username when the user is root.virtualenv
(242) - The name of the Pythonvirtualenv
when in use.
There are two ways to use RGB colors with the hexadecimal format. The correct way is to use a terminal that support 24-bit colors and enable this feature as explained in the terminal's documentation.
If you can't use such terminal, the module zsh/nearcolor
can be useful. It will map any hexadecimal color to the nearest color in the 88 or 256 color palettes of your terminal, but without using the first 16 colors, since their values can be modified by the user. Keep in mind that when using this module you won't be able to display true RGB colors. It only allows you to specify colors in a more convenient way. The following is an example on how to use this module:
# .zshrc
zmodload zsh/nearcolor
zstyle :prompt:pure:path color '#FF0000'
# .zshrc
autoload -U promptinit; promptinit
# optionally define some options
PURE_CMD_MAX_EXEC_TIME=10
# change the path color
zstyle :prompt:pure:path color white
# change the color for both `prompt:success` and `prompt:error`
zstyle ':prompt:pure:prompt:*' color cyan
prompt pure
- Set
ZSH_THEME=""
in your.zshrc
to disable oh-my-zsh themes. - Follow the Pure Install instructions.
- Do not enable the following (incompatible) plugins:
vi-mode
,virtualenv
.
NOTE: oh-my-zsh
overrides the prompt so Pure must be activated after source $ZSH/oh-my-zsh.sh
.
Add zmodule ivan-volnov/pure --source async.zsh --source pure.zsh
to your .zimrc
and run zimfw install
.
Update your .zshrc
file with the following two lines:
zplug mafredri/zsh-async, from:github
zplug ivan-volnov/pure, use:pure.zsh, from:github, as:theme
Update your .zshrc
file with the following two lines (order matters):
zinit ice compile'(pure|async).zsh' pick'async.zsh' src'pure.zsh'
zinit light ivan-volnov/pure