pure README

The project's README from github.com/sindresorhus/pure. As one markdown file: README.md.

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?

Install

Can be installed with npm (not yarn) 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.

If prompt -l does not list pure, add this to your .zshrc before promptinit:

fpath+=("$(npm root -g)/pure-prompt")

Homebrew

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 fpath in $HOME/.zshrc:

fpath+=("$(brew --prefix)/share/zsh/site-functions")

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.
# .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 Prevents Pure from checking whether the current Git remote has been updated. 1
PURE_GIT_UNTRACKED_DIRTY Do not include untracked files in dirtiness check. Mostly useful on large repos (like WebKit). 1
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_SUSPENDED_JOBS_SYMBOL Defines the symbol that indicates that jobs are running in the background. Set to empty to disable. ✦
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. Set to empty to disable. ≡

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

Node.js version display shows the current major node version when inside a directory tree containing a package.json. It is not enabled by default. You can enable it with:

zstyle :prompt:pure:environment:node_version show yes

You can change the symbol shown before the Node.js version (default ⬢) with:

zstyle :prompt:pure:environment:node_version symbol ⬡

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

Virtualenv integration shows the current Python virtualenv or Conda environment name. It is enabled by default, you can disable it with:

zstyle :prompt:pure:environment:virtualenv show no

Git integration is enabled by default, you can disable it with:

zstyle :prompt:pure:git show no

Detailed dirty indicators differentiate between unstaged (*), staged (+), and untracked (?) changes instead of showing a single *. It is not enabled by default. You can enable it with:

zstyle :prompt:pure:git:dirty detailed yes

Path separator dimming makes / characters in the path visually dimmer to help distinguish path components. It is not enabled by default. You can enable it with:

zstyle :prompt:pure:path:separator dim yes

Hostname display is enabled by default when in an SSH session or container. You can disable it while still showing the username with:

zstyle :prompt:pure:host show no

Automatic terminal title management can be disabled if you want to set your own tab or window titles:

zstyle :prompt:pure:title show no

Customization

Pure supports a hook function for adding custom content to the prompt. Define a function called prompt_pure_precustom in your .zshrc (after prompt pure) to set custom prefix and suffix segments on the preprompt line:

The function is called each time the prompt renders (including async redraws), so avoid slow commands. For expensive operations, cache the result in a precmd hook and read the cached value in prompt_pure_precustom.

# .zshrc

# Cache expensive calls in precmd (runs once per command, not on async redraws).
my_kube_context=
my_precmd() {
	my_kube_context=$(kubectl config current-context 2>/dev/null)
}
add-zsh-hook precmd my_precmd

prompt_pure_precustom() {
	psvar[22]=$my_kube_context
	psvar[23]=$(date +%H:%M)
}

The colors can be customized with zstyle:

zstyle :prompt:pure:custom:prefix color cyan
zstyle :prompt:pure:custom:suffix color yellow

Colors

As explained in ZSH's manual, color values can be:

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:

The following diagram shows where each color is applied on the prompt:

┌──────────────────────────────────────────────────────────────────────── custom:prefix
│      ┌─────────────────────────────────────────────────────────────────── suspended_jobs
│      │ ┌───────────────────────────────────────────────────────────────── user
│      │ │      ┌────────────────────────────────────────────────────────── host
│      │ │      │           ┌────────────────────────────────────────────── path
│      │ │      │           │          ┌─────────────────────────────────── git:branch
│      │ │      │           │          │   ┌────────────────────────────── git:dirty
│      │ │      │           │          │   │ ┌──────────────────────────── git:action
│      │ │      │           │          │   │ │        ┌─────────────────── git:arrow
│      │ │      │           │          │   │ │        │ ┌───────────────── git:stash
│      │ │      │           │          │   │ │        │ │ ┌─────────────── node_version
│      │ │      │           │          │   │ │        │ │ │   ┌─────────── execution_time
│      │ │      │           │          │   │ │        │ │ │   │   ┌────── custom:suffix
│      │ │      │           │          │   │ │        │ │ │   │   │
prefix ✦ zaphod@heartofgold ~/dev/pure main* rebase-i ⇡ ≡ ⬢22 42s suffix
venv ❯
│    │
│    └───────────────────────────────────────────────────────────────────── prompt
└────────────────────────────────────────────────────────────────────────── virtualenv (or prompt:continuation)

Preview

Run prompt_pure_preview to display a sample prompt with all components rendered in their current colors. This is useful for testing color customizations.

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.

AI coding agents

Most AI coding agents (Claude Code, Codex, …) run commands in a non-interactive shell where Pure's prompt never renders, so its git work never runs there anyway. Agents that render the prompt in an interactive terminal do run it, but you can skip it since git fetch can stall in a sandbox and no human sees the prompt. You can gate git integration on the agent marker environment variables in your .zshrc:

# Just an example. Add whichever markers apply to the agents you use.
# Pull requests to expand this list will not be accepted.
if [[ -n $AI_AGENT$CLAUDECODE$CURSOR_AGENT$GEMINI_CLI$OPENCODE ]]; then
	zstyle :prompt:pure:git show no
fi

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.

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

zi

Update your .zshrc file with the following line:

zi light-mode for @sindresorhus/pure

See the ZI wiki for more.

FAQ

Prompt is corrupted when using tab completion

If the prompt displays incorrectly during tab completion (ghost characters, misaligned cursor), your shell is likely missing a UTF-8 locale. Pure uses Unicode characters (like ❯) that require UTF-8 to calculate display width correctly. Add this to your .zshrc:

export LANG=en_US.UTF-8

See FAQ Archive for previous FAQs.

Ports

Team

Sindre Sorhus Mathias Fredriksson
Sindre Sorhus Mathias Fredriksson

pure (sindresorhus/pure)

Searching Database…

14.4K ·GitHub
Что это такое?Pure — это красивая, минималистичная и быстрая тема приглашения командной строки для ZSH. Она показывает ветку и статус git, время выполнения команды и другой контекст, не загромождая терминал.
Это тема для ZSH или отдельное приложение?Это тема приглашения для ZSH (несколько файлов сценариев .zsh, которые вы загружаете в оболочку), а не приложение.
Как её установить и активировать?Установите через npm, Homebrew или вручную, клонировав репозиторий и добавив его в $fpath. Затем выполните prompt init и `prompt pure` в вашем .zshrc.
Что нужно установить перед установкой?Нужны Git 2.15.2+ и ZSH 5.2+ (более старые версии ZSH в основном работают, но не рекомендуются).
Может ли проверка статуса git когда-нибудь замедлить работу или работать некорректно?Проверки git выполняются асинхронно, поэтому они не должны блокировать ввод текста. Но получение данных может зависать в песочницах и контейнерах, а если локаль не UTF-8, юникодный символ приглашения может испортить отображение при автодополнении по Tab.
Работает ли она с oh-my-zsh, Prezto или другими фреймворками ZSH?Да — есть готовые инструкции по интеграции с oh-my-zsh, Prezto (включён по умолчанию), zim, zplug, zinit и zi.
Можно ли использовать её через SSH или внутри контейнера?Да, и это как раз то, для чего она задумана: имя пользователя и имя хоста скрыты локально и отображаются автоматически только в сеансе SSH или в контейнере.
Влияет ли она на ИИ-агентов для программирования, например Claude Code или Codex?Большинство агентов выполняют команды в неинтерактивной оболочке, где приглашение не отображается, поэтому его проверки git там никогда не срабатывают. Кроме того, интеграцию с git можно отключить через переменную окружения-маркер агента в .zshrc.
Можно ли настроить цвета и символы?Да, любой символ (символ приглашения, стрелки git, символ stash) и любой цвет (ветка git, путь, пользователь, virtualenv и т. д.) можно переопределить через настройки zstyle. Это включает полноцветный режим RGB (24 бита) на поддерживающих терминалах.
Показывает ли она что-нибудь о средах Node.js или Python?Она может по желанию показывать текущую основную версию Node.js в каталогах с package.json. По умолчанию она показывает активное окружение Python virtualenv или Conda.
Есть ли порты Pure для других оболочек?Да — существуют порты от сообщества для Fish, Bash, PowerShell, а также переписанные версии на Rust и Go, плюс несколько форков ZSH с дополнительными возможностями.
Size
0.8 MB
Stars
14.4K
Age
14y
Commits · 90 Days