Bash prompt with colors, git statuses, and git branches.
Providing a unique symbol for every combination of a dirty, unpulled, and unpushed
Forked from a gist by gf3.
Do you like
Support us with a monthly donation and help us continue our activities or spread word on Twitter
Become a sponsor and get your logo on our README on GitHub with a link to your site. Become a sponsor
One line install (requires
(cd /tmp && ([[ -d sexy-bash-prompt ]] || git clone --depth 1 --config core.autocrlf=false https://github.com/twolfson/sexy-bash-prompt) && cd sexy-bash-prompt && make install) && source ~/.bashrc
My colors don't look as advertised
If you are seeing a screen like this:
TERM environment variable may never have been configured. Run the script below to prefix our prompt with a
cat > /tmp/.bash_prompt_term <<EOF #!/usr/bin/env bash # Determine what type of terminal we are using for \`tput\` if [[ \$COLORTERM = gnome-* && \$TERM = xterm ]] && infocmp gnome-256color >/dev/null 2>&1; then export TERM=gnome-256color elif [[ \$TERM != dumb ]] && infocmp xterm-256color >/dev/null 2>&1; then export TERM=xterm-256color fi EOF chmod +x /tmp/.bash_prompt_term cat ~/.bash_prompt >> /tmp/.bash_prompt_term cp /tmp/.bash_prompt_term ~/.bash_prompt rm /tmp/.bash_prompt_term
# Clone the repository git clone --depth 1 --config core.autocrlf=false https://github.com/twolfson/sexy-bash-prompt # Cloning into 'sexy-bash-prompt'... # ... # Resolving deltas: 100% (13/13), done. # Go into the directory cd sexy-bash-prompt # Install the script make install # # Copying .bash_prompt to ~/.bash_prompt # cp -f ".bash_prompt" "/home/todd/.bash_prompt" # ./install.bash # # twolfson/sexy-bash-prompt installation complete! # Rerun your ~/.bashrc source ~/.bashrc # todd at Euclid in ~/github/sexy-bash-prompt on master # Your PS1 should now look like this!
Behavior can be customized with the following environment variables:
PROMPT_SHOW_ERROR_ONCE- If enabled (default), then will only show error color once per command execution
bashpersists a non-zero exit code across missing commands (e.g. comment line only, keyboard interrupt, empty command)
- Setting this to
1(default) means show error status once,
0means always show same error status until a new command is executed
Colors can be customized by editing
.bash_prompt directly, or by setting the following environment variables:
PROMPT_USER_COLOR- Color for username (e.g.
PROMPT_PREPOSITION_COLOR- Color for 'at', 'in', 'on'
PROMPT_DEVICE_COLOR- Color for machine name (e.g.
PROMPT_DIR_COLOR- Color for directory (e.g.
PROMPT_GIT_STATUS_COLOR- Color for git branch and symbol (e.g.
PROMPT_GIT_PROGRESS_COLOR- Color for in progress git actions (e.g.
PROMPT_SYMBOL_COLOR- Color for prompt symbol by default or on success (e.g.
PROMPT_SYMBOL_ERROR_COLOR- Color for prompt symbol on error (e.g.
You can set colors via
tput or ANSI escape codes. For example:
# Inside your `.bashrc` or `.bash_profile` PROMPT_USER_COLOR="$(tput bold)$(tput setaf 9)" # BOLD RED source ~/.bash_prompt
Similarly, symbols can be customized with the following environment variables:
PROMPT_SYNCED_SYMBOL- Symbol for clean and synced branch (e.g. empty string)
PROMPT_DIRTY_SYNCED_SYMBOL- Symbol for dirty and synced branch (e.g.
PROMPT_UNPUSHED_SYMBOL- Symbol for unpushed branch (e.g.
PROMPT_DIRTY_UNPUSHED_SYMBOL- Symbol for dirty and unpushed branch (e.g.
PROMPT_UNPULLED_SYMBOL- Symbol for unpulled branch (e.g.
PROMPT_DIRTY_UNPULLED_SYMBOL- Symbol for dirty and unpulled branch (e.g.
PROMPT_UNPUSHED_UNPULLED_SYMBOL- Symbol for unpushed and unpulled branch (e.g.
PROMPT_DIRTY_UNPUSHED_UNPULLED_SYMBOL- Symbol for dirty, unpushed, and unpulled branch (e.g.
PROMPT_SYMBOL- Symbol given after each prompt (e.g.
- By default, this is
$for normal users and
- By default, this is
# Inside your `.bashrc` or `.bash_profile` PROMPT_UNPUSHED_SYMBOL="↑" source ~/.bash_prompt
In some situations, the default symbol set can be drawn incorrectly (e.g. as diamonds). To remedy that, a simpler set of symbols can be used:
PROMPT_SYNCED_SYMBOL="" PROMPT_DIRTY_SYNCED_SYMBOL="*" PROMPT_UNPUSHED_SYMBOL="↑" PROMPT_DIRTY_UNPUSHED_SYMBOL="*↑" PROMPT_UNPULLED_SYMBOL="↓" PROMPT_DIRTY_UNPULLED_SYMBOL="*↓" PROMPT_UNPUSHED_UNPULLED_SYMBOL="*↑↓" PROMPT_DIRTY_UNPUSHED_UNPULLED_SYMBOL="*↑↓"
How does it work?
bash provides a special set of variables for your prompts.
PS1 is the one used by default. The install script adds a command to
~/.bashrc, a file that is run every time a new terminal opens. Inside of the new command, we run our script and set your
PS1 which runs some
git commands to determine its current state and outputs them as a string.
Linux and Mac OSX are supported platforms.
Windows is supported to the best of my abilities. However, there have been font issues with using PuTTY.
sexy-bash-prompt, perform the following steps:
- During installation, we may have added a
. ~/.bashrcinvocation to
- Feel free to remove this if it's no longer necessary
In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Test via
Copyright (c) 2013 Todd Wolfson
Licensed under the MIT license.