* `prompt_pure_git_delay_dirty_check` holds the (finish) timestamp of the last dirty check (if the dirty check took more than 2 seconds); renamed to `prompt_pure_git_last_dirty_check_timestamp`. * Local variable `dirty_check` holds the elapsed time in seconds since the last dirty check (if the timestamp is set); renamed to `time_since_last_dirty_check`.
Pure
Pretty, minimal and fast ZSH prompt
Overview
Most prompts are cluttered, ugly and slow. I wanted something visually pleasing that stayed out of my way.
Why?
- Comes with the perfect prompt character.
Author went through the whole Unicode range to find it. - Shows
gitbranch and whether it's dirty (with a*). - Indicates when you have unpushed/unpulled
gitcommits 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.
- Shows the current path in the title and the current folder & command when a process is running.
- Makes an excellent starting point for your own custom prompt.
Install
Can be installed with npm or manually. Requires git 2.0.0+ and ZSH 5.0.0+.
npm
$ npm install --global pure-prompt
That's it. Skip to Getting started.
Manually
- Either…
- Clone this repo
- add it as a submodule, or
- just download
pure.zsh
-
Symlink
pure.zshto somewhere in$fpathwith the nameprompt_pure_setup. -
Symlink
async.zshin$fpathwith the nameasync.
Example
$ ln -s "$PWD/pure.zsh" /usr/local/share/zsh/site-functions/prompt_pure_setup
$ ln -s "$PWD/async.zsh" /usr/local/share/zsh/site-functions/async
Run echo $fpath to see possible locations.
For a user-specific installation (which would not require escalated privileges), simply add a directory to $fpath for that user:
# .zshenv or .zshrc
fpath=( "$HOME/.zfunctions" $fpath )
Then install the theme there:
$ ln -s "$PWD/pure.zsh" "$HOME/.zfunctions/prompt_pure_setup"
$ ln -s "$PWD/async.zsh" "$HOME/.zfunctions/async"
Getting started
Initialize the prompt system (if not so already) and choose pure:
# .zshrc
autoload -U promptinit && promptinit
prompt pure
Options
PURE_CMD_MAX_EXEC_TIME
The max execution time of a process before its run time is shown when it exits. Defaults to 5 seconds.
PURE_GIT_PULL
Set PURE_GIT_PULL=0 to prevent Pure from checking whether the current Git remote has been updated.
PURE_GIT_UNTRACKED_DIRTY
Set PURE_GIT_UNTRACKED_DIRTY=0 to not include untracked files in dirtiness check. Only really useful on extremely huge repos like the WebKit repo.
PURE_GIT_DELAY_DIRTY_CHECK
Time in seconds to delay git dirty checking for large repositories (git status takes > 2 seconds). The check is performed asynchronously, this is to save CPU. Defaults to 1800 seconds.
PURE_PROMPT_SYMBOL
Defines the prompt symbol. The default value is ❯.
Example
# .zshrc
autoload -U promptinit && promptinit
# optionally define some options
PURE_CMD_MAX_EXEC_TIME=10
prompt pure
Tips
Tomorrow Night Eighties theme with the Droid Sans Mono font (15pt) is a beautiful combination, as seen in the screenshot above. 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
- Symlink (or copy)
pure.zshto~/.oh-my-zsh/custom/pure.zsh-theme - Symlink (or copy)
async.zshto~/.oh-my-zsh/custom/async.zsh - Add
ZSH_THEME="pure"to your.zshrcfile.
prezto
Set zstyle ':prezto:module:prompt' theme 'pure' in ~/.zpreztorc.
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
FAQ
I am stuck in a shell loop in my terminal that ask me to authenticate. What should I do ?
This is a known issue.
Using git pull when you get the username prompt should help you to break the loop by giving you a real prompt for this. This has been fixed in git 2.3
I am seeing the error zpty: can't open pseudo terminal: bad file descriptor.
This is a known issue. zsh/zpty requires either legacy bsd ptys or access to /dev/ptmx. Here are some known solutions.
Gentoo
sudo sh -c "echo 'SANDBOX_WRITE=\"/dev/ptmx\"' > /etc/sandbox.d/10zsh"
sudo emerge -1 zsh
FreeBSD 10.1
On a default setup, running the command kldload pty should do the trick. If you have a custom kernel, you might need to add device pty to the configuration file (example).
Team
| Sindre Sorhus | Mathias Fredriksson |
License
MIT © Sindre Sorhus
