Skip to content
/ pure Public
forked from sindresorhus/pure

Pretty, minimal and fast ZSH prompt

License

Notifications You must be signed in to change notification settings

zenjoy/pure

 
 

Repository files navigation

Pure

Pretty, minimal and fast ZSH prompt

This is a fork of sindresorhus/pure, as used in our dotfiles. It takes many of the good ideas from the Spaceship prompt and brings it to the speed and elegance of the Pure prompt.

  • Show the current time
  • Battery percentage when running low
  • Truncating the directory tree for long paths or in Git repos
  • Git Stash status (based on the work in sindresorhus#462)
  • Ruby version
  • Node.js version
  • Go version
  • Terraform workspace
  • Kubernetes context
  • Docker Compose container status

All checks are done asynchronously.

In the screenshot Pure is running in iTerm2 with the iterm2-snazzy colors and FiraCode Nerd Font from https://nerdfonts.com/.

Other features

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

brew install pure

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=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.
PURE_PROMPT_BATTERY_SHOW Show battery section or not (true, false, always or charged) true
PURE_PROMPT_BATTERY_WARNING_THRESHOLD Battery level below which battery section will be shown in yellow 20
PURE_PROMPT_BATTERY_THRESHOLD Battery level below which battery section will be shown in red 10
PURE_PROMPT_BATTERY_SYMBOL_CHARGING Character to be shown if battery is charging
PURE_PROMPT_BATTERY_SYMBOL_DISCHARGING Character to be shown if battery is discharging
PURE_PROMPT_BATTERY_SYMBOL_FULL Character to be shown if battery is full
PURE_PROMPT_KUBECONTEXT_SHOW Show the active kubectl context or not true
PURE_PROMPT_KUBECONTEXT_NAMESPACE_SHOW Should namespace be also displayed true
PURE_PROMPT_KUBECONTEXT_SYMBOL Character to be shown before Kubectl context \ue7b2
PURE_PROMPT_KUBECONTEXT_COLOR Color of Kubectl context section 208
PURE_PROMPT_TERRAFORM_SHOW Show the active Terraform workspace in directories that contain .terraform/environment file. true
PURE_PROMPT_TERRAFORM_SYMBOL Character to be shown before Terraform workspace \uf9fd
PURE_PROMPT_TERRAFORM_COLOR Color of Terraform workspace section 105
PURE_PROMPT_RUBY_SHOW Show Ruby version in directories that contain Gemfile, Rakefile, or any .rb file. true
PURE_PROMPT_RUBY_SYMBOL Character to be shown before Ruby version \ue21e
PURE_PROMPT_RUBY_COLOR Color of Ruby version section 196
PURE_PROMPT_NODE_SHOW Show Node.js version in directories with package.json, node_modules folder, or any .js file. true
PURE_PROMPT_NODE_SYMBOL Character to be shown before Node.js version \uf898
PURE_PROMPT_NODE_COLOR Color of Node.js version section green
PURE_PROMPT_GOLANG_SHOW Show Go version in $GOPATH or in directories with go.mod, Godeps, glide.yaml, or any .go file. true
PURE_PROMPT_GOLANG_SYMBOL Character to be shown before Golang version \ue627
PURE_PROMPT_GOLANG_COLOR Color of Golang version section cyan
PURE_PROMPT_DOCKERCOMPOSE_SHOW Show the state of Docker containers in directories containing a docker-compose.yml file. true
PURE_PROMPT_DOCKERCOMPOSE_SYMBOL Character to be shown before Terraform workspace \uf308
PURE_PROMPT_DOCKERCOMPOSE_COLOR Color of Docker Compose section 32

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

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

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 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 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
│      │           │          │     │ │        │ │ │
zaphod@heartofgold ~/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

Integration

  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.

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

Add prompt pure to your ~/.zpreztorc.

Add zmodule zenjoy/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 zenjoy/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 zenjoy/pure

About

Pretty, minimal and fast ZSH prompt

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Shell 100.0%