From: Oleg Broytman Date: Wed, 24 Feb 2016 10:22:23 +0000 (+0300) Subject: Add .bash_prompt X-Git-Url: https://git.phdru.name/?p=dotfiles.git;a=commitdiff_plain;h=2e749f9dce34dcf50b15857c9d92da9aab6e2bc5 Add .bash_prompt Downloaded from https://github.com/necolas/dotfiles/blob/master/shell/bash_prompt --- diff --git a/.bash_prompt b/.bash_prompt new file mode 100644 index 0000000..5b5c80f --- /dev/null +++ b/.bash_prompt @@ -0,0 +1,146 @@ +#!/bin/bash + +# bash_prompt; adapted from +# https://github.com/necolas/dotfiles/blob/master/shell/bash_prompt + +# Example: +# nicolas@host: ~/.dotfiles on master [+!?$] +# $ + +# Screenshot: http://i.imgur.com/DSJ1G.png +# iTerm2 prefs: import Solarized theme (disable bright colors for bold text) +# Color ref: http://vim.wikia.com/wiki/Xterm256_color_names_for_console_Vim +# More tips: http://www.cyberciti.biz/tips/howto-linux-unix-bash-shell-setup-prompt.html + +prompt_git() { + local s="" + local branchName="" + + # check if the current directory is in a git repository + if [ $(git rev-parse --is-inside-work-tree &>/dev/null; printf "%s" $?) == 0 ]; then + + # check if the current directory is in .git before running git checks + if [ "$(git rev-parse --is-inside-git-dir 2> /dev/null)" == "false" ]; then + + # ensure index is up to date + git update-index --really-refresh -q &>/dev/null + + # check for uncommitted changes in the index + if ! $(git diff --quiet --ignore-submodules --cached); then + s="$s+"; + fi + + # check for unstaged changes + if ! $(git diff-files --quiet --ignore-submodules --); then + s="$s!"; + fi + + # check for untracked files + if [ -n "$(git ls-files --others --exclude-standard)" ]; then + s="$s?"; + fi + + # check for stashed files + if $(git rev-parse --verify refs/stash &>/dev/null); then + s="$s$"; + fi + + fi + + # get the short symbolic ref + # if HEAD isn't a symbolic ref, get the short SHA + # otherwise, just give up + branchName="$(git symbolic-ref --quiet --short HEAD 2> /dev/null || \ + git rev-parse --short HEAD 2> /dev/null || \ + printf "(unknown)")" + + [ -n "$s" ] && s=" [$s]" + + printf "%s" "$1$branchName$s" + else + return + fi +} + +set_prompts() { + local black="" + local blue="" + local bold="" + local cyan="" + local green="" + local orange="" + local purple="" + local red="" + local reset="" + local white="" + local yellow="" + + local hostStyle="" + local userStyle="" + + if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then + tput sgr0 # reset colors + + bold=$(tput bold) + reset=$(tput sgr0) + + # Solarized colors + # (https://github.com/altercation/solarized/tree/master/iterm2-colors-solarized#the-values) + black=$(tput setaf 0) + blue=$(tput setaf 33) + cyan=$(tput setaf 37) + green=$(tput setaf 64) + orange=$(tput setaf 166) + purple=$(tput setaf 125) + red=$(tput setaf 124) + white=$(tput setaf 15) + yellow=$(tput setaf 136) + else + bold="" + reset="\e[0m" + + black="\e[1;30m" + blue="\e[1;34m" + cyan="\e[1;36m" + green="\e[1;32m" + orange="\e[1;33m" + purple="\e[1;35m" + red="\e[1;31m" + white="\e[1;37m" + yellow="\e[1;33m" + fi + + # build the prompt + + # logged in as root + if [[ "$USER" == "root" ]]; then + userStyle="\[$bold$red\]" + else + userStyle="\[$orange\]" + fi + + # connected via ssh + if [[ "$SSH_TTY" ]]; then + hostStyle="\[$bold$red\]" + else + hostStyle="\[$yellow\]" + fi + + # set the terminal title to the current working directory + PS1="\[\033]0;\w\007\]" + + PS1+="\n" # newline + PS1+="\[$userStyle\]\u" # username + PS1+="\[$reset$white\]@" + PS1+="\[$hostStyle\]\h" # host + PS1+="\[$reset$white\]: " + PS1+="\[$green\]\w" # working directory + PS1+="\$(prompt_git \"$white on $cyan\")" # git repository details + PS1+="\n" + PS1+="\[$reset$white\]\$ \[$reset\]" # $ (and reset color) + + export PS1 +} + +set_prompts +unset set_prompts