Need help with pure?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

sindresorhus
9.6K Stars 843 Forks MIT License 340 Commits 28 Opened issues

Description

Pretty, minimal and fast ZSH prompt

Services available

!
?

Need anything else?

Contributors list

Pure

Pretty, minimal and fast ZSH prompt





Overview

Most prompts are cluttered, ugly and slow. We wanted something visually pleasing that stayed out of our way.

Why?

  • Comes with the perfect prompt character. Author went through the whole Unicode range to find it.
  • Shows
    git
    branch and whether it's dirty (with a
    *
    ).
  • Indicates when you have unpushed/unpulled
    git
    commits with up/down arrows. (Check is done asynchronously!)
  • 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.

Install

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

$ npm install --global pure-prompt

That's it. Skip to Getting started.

Manually

  1. Clone this repo somewhere. Here we'll use
    $HOME/.zsh/pure
    .
mkdir -p "$HOME/.zsh"
git clone https://github.com/sindresorhus/pure.git "$HOME/.zsh/pure"
  1. Add the path of the cloned repo to
    $fpath
    in
    $HOME/.zshrc
    .
    sh
    # .zshrc
    fpath+=$HOME/.zsh/pure
    

Getting started

Initialize the prompt system (if not so already) and choose

pure
:
# .zshrc
autoload -U promptinit; promptinit
prompt pure

Options

| 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_GIT_PULL=0
| Prevents Pure from checking whether the current Git remote has been updated. | | |
PURE_GIT_UNTRACKED_DIRTY=0
| Do not include untracked files in dirtiness check. Mostly useful on large repos (like WebKit). | | |
PURE_GIT_DELAY_DIRTY_CHECK
| Time in seconds to delay git dirty checking when
git status
takes > 5 seconds. |
1800
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_GIT_DOWN_ARROW
| Defines the git down arrow symbol. |
| |
PURE_GIT_UP_ARROW
| Defines the git up arrow symbol. |
| |
PURE_GIT_STASH_SYMBOL
| Defines the git stash symbol. |
|

Zstyle options

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
:

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

Colors

As explained in ZSH's manual, color values can be: - A decimal integer corresponding to the color index of your terminal. If your

$TERM
is
xterm-256color
, see this chart. - The name of one of the following nine colors:
black
,
red
,
green
,
yellow
,
blue
,
magenta
,
cyan
,
white
, and
default
(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 the
zsh/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 exceeding
PURE_CMD_MAX_EXEC_TIME
. -
git:arrow
(cyan) - For
PURE_GIT_UP_ARROW
and
PURE_GIT_DOWN_ARROW
. -
git:stash
(cyan) - For
PURE_GIT_STASH_SYMBOL
. -
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,
PWD
. -
prompt:error
(red) - The
PURE_PROMPT_SYMBOL
when the previous command has failed. -
prompt:success
(magenta) - The
PURE_PROMPT_SYMBOL
when the previous command has succeded. -
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. -
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
virtualenv
when 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)

RGB colors

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'

Example

# .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

Tips

In the screenshot you see Pure running in Hyper with the hyper-snazzy theme and Menlo font.

The Tomorrow Night Eighties theme with the Droid Sans Mono font (15pt) is also a nice combination.
Just make sure you have anti-aliasing enabled in your terminal.

To have commands colorized as seen in the screenshot, install zsh-syntax-highlighting.

Integration

oh-my-zsh

  1. Set
    ZSH_THEME=""
    in your
    .zshrc
    to disable oh-my-zsh themes.
  2. Follow the Pure Install instructions.
  3. 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
.

prezto

Pure is bundled with Prezto. No need to install it.

Add

prompt pure
to your
~/.zpreztorc
.

zim

Add

zmodule sindresorhus/pure --source async.zsh --source pure.zsh
to your
.zimrc
and run
zimfw install
.

antigen

Update your

.zshrc
file with the following two lines (order matters). Do not use the
antigen theme
function.
antigen bundle mafredri/zsh-async
antigen bundle sindresorhus/pure

antibody

Update your

.zshrc
file with the following two lines (order matters):
antibody bundle mafredri/zsh-async
antibody bundle sindresorhus/pure

zplug

Update your

.zshrc
file with the following two lines:
zplug mafredri/zsh-async, from:github
zplug sindresorhus/pure, use:pure.zsh, from:github, as:theme

zinit

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 sindresorhus/pure

FAQ

There are currently no FAQs.

See FAQ Archive for previous FAQs.

Ports

Team

Sindre Sorhus

Mathias Fredriksson
Sindre Sorhus Mathias Fredriksson

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.