Pretty, minimal and fast ZSH prompt
Most prompts are cluttered, ugly and slow. We wanted something visually pleasing that stayed out of our way.
gitbranch and whether it's dirty (with a
gitcommits with up/down arrows. (Check is done asynchronously!)
Can be installed with
npm or manually. Requires Git 2.15.2+ and ZSH 5.2+. Older versions of ZSH are known to work, but they are not recommended.
npm install --global pure-prompt
That's it. Skip to Getting started.
brew install pure
If you're not using ZSH from Homebrew (
brew install zsh and
$(brew --prefix)/bin/zsh), you must also add the site-functions to your
mkdir -p "$HOME/.zsh" git clone https://github.com/sindresorhus/pure.git "$HOME/.zsh/pure"
# .zshrc fpath+=($HOME/.zsh/pure)
Initialize the prompt system (if not so already) and choose
# .zshrc autoload -U promptinit; promptinit prompt pure
||The max execution time of a process before its run time is shown when it exits.||
||Prevents Pure from checking whether the current Git remote has been updated.||
||Do not include untracked files in dirtiness check. Mostly useful on large repos (like WebKit).||
||Time in seconds to delay git dirty checking when
||Defines the prompt symbol.||``|
||Defines the prompt symbol used when the
||Defines the git down arrow symbol.||``|
||Defines the git up arrow symbol.||``|
||Defines the git stash symbol.||``|
Showing git stash status as part of the prompt is not activated by default. To activate this you'll need to opt in via
zstyle :prompt:pure:git:stash show yes
You can set Pure to only
git fetch the upstream branch of the current local branch. In some cases, this can result in faster updates for Git arrows, but for most users, it's better to leave this setting disabled. You can enable it with:
zstyle :prompt:pure:git:fetch only_upstream yes
nix-shell integration adds the shell name to the prompt when used from within a nix shell. It is enabled by default, you can disable it with:
zstyle :prompt:pure:environment:nix-shell show no
As explained in ZSH's manual, color values can be:
xterm-256color, see this chart.
default(the terminals 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 the
zsh/nearcolormodule 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 exceeding
git:arrow(cyan) - For
git:stash(cyan) - For
git:branch(242) - The name of the current branch when in a Git repository.
git:branch:cached(red) - The name of the current branch when the data isn't fresh.
git:action(242) - The current action in progress (cherry-pick, rebase, etc.) when in a Git repository.
git:dirty(218) - The asterisk showing the branch is dirty.
host(242) - The hostname when on a remote machine.
path(blue) - The current path, for example,
prompt:error(red) - The
PURE_PROMPT_SYMBOLwhen the previous command has failed.
prompt:success(magenta) - The
PURE_PROMPT_SYMBOLwhen 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 as
virtualenv. 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 Python
virtualenvwhen in use.
The following diagram shows where each color is applied on the prompt:
user host path git:branch git:dirty git:action git:arrow git:stash execution_time [email protected] ~/dev/pure master* rebase-i 42s venv prompt virtualenv (or prompt:continuation)
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 # turn on git stash status zstyle :prompt:pure:git:stash show yes prompt pure
To have commands colorized as seen in the screenshot, install zsh-syntax-highlighting.
.zshrcto disable oh-my-zsh themes.
oh-my-zsh overrides the prompt so Pure must be activated after
Pure is bundled with Prezto. No need to install it.
prompt pure to your
zmodule sindresorhus/pure --source async.zsh --source pure.zsh to your
.zimrc and run
.zshrc file with the following two lines:
zplug mafredri/zsh-async, from:github zplug sindresorhus/pure, use:pure.zsh, from:github, as:theme
.zshrc file with the following two lines (order matters):
zinit ice compile'(pure|async).zsh' pick'async.zsh' src'pure.zsh' zinit light sindresorhus/pure
.zshrc file with the following line:
zi light-mode for @sindresorhus/pure
See the ZI wiki for more.
There are currently no FAQs.
See FAQ Archive for previous FAQs.
|Sindre Sorhus||Mathias Fredriksson|