Merge
diff --git a/README.md b/README.md
index d2d02c7..c8412c9 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# Bash it
-'Bash it' is a mash up of my own bash commands and scripts, other bash stuff I have found and a shameless ripoff of oh-my-zsh. :)
+'Bash it' is a mash up of my own bash commands and scripts, other bash stuff I have found and a shameless ripoff of [oh-my-zsh](https://github.com/robbyrussell/oh-my-zsh). :)
Includes some autocompletion tools, theming support, aliases, custom functions, a few stolen pieces from Steve Losh, and more.
@@ -47,4 +47,4 @@
* [List of contributors][contribute]
-[contribute]: https://github.com/revans/bash-it/contributors
\ No newline at end of file
+[contribute]: https://github.com/revans/bash-it/contributors
diff --git a/aliases/general.aliases.bash b/aliases/general.aliases.bash
index 1cb470f..0e05eb0 100644
--- a/aliases/general.aliases.bash
+++ b/aliases/general.aliases.bash
@@ -23,6 +23,8 @@
alias irc="$IRC_CLIENT"
+alias rb="ruby"
+
# Pianobar can be found here: http://github.com/PromyLOPh/pianobar/
alias piano="pianobar"
diff --git a/aliases/git.aliases.bash b/aliases/git.aliases.bash
index 40d8780..45d7d05 100644
--- a/aliases/git.aliases.bash
+++ b/aliases/git.aliases.bash
@@ -16,6 +16,7 @@
alias gdv='git diff -w "$@" | vim -R -'
alias gc='git commit -v'
alias gca='git commit -v -a'
+alias gci='git commit --interactive'
alias gb='git branch'
alias gba='git branch -a'
alias gcount='git shortlog -sn'
@@ -23,6 +24,8 @@
alias gco='git checkout'
alias gexport='git archive --format zip --output'
alias gdel='git branch -D'
+alias gmu='git fetch origin -v; git fetch upstream -v; git merge upstream/master'
+alias gll='git log --graph --pretty=oneline --abbrev-commit'
case $OSTYPE in
linux*)
@@ -55,13 +58,16 @@
echo " gdv = git diff -w \"$@\" | vim -R -"
echo " gc = git commit -v"
echo " gca = git commit -v -a"
+ echo " gci = git commit --interactive"
echo " gb = git branch"
echo " gba = git branch -a"
echo " gcount = git shortlog -sn"
echo " gcp = git cherry-pick"
echo " gco = git checkout"
echo " gexport = git git archive --format zip --output"
- echo " gdel = git branch -D"
- echo " gpo = git push origin"
+ echo " gdel = git branch -D"
+ echo " gpo = git push origin"
+ echo " gmu = git fetch origin -v; git fetch upstream -v; git merge upstream/master"
+ echo " gll = git log --graph --pretty=oneline --abbrev-commit"
echo
}
diff --git a/bash_it.sh b/bash_it.sh
index f0c850c..60bef80 100644
--- a/bash_it.sh
+++ b/bash_it.sh
@@ -47,8 +47,9 @@
unset config_file
-export PS1=$PROMPT
-
+if [[ $PROMPT ]]; then
+ export PS1=$PROMPT
+fi
# Adding Support for other OSes
PREVIEW="less"
diff --git a/completion/ssh.completion.bash b/completion/ssh.completion.bash
new file mode 100644
index 0000000..30fd65d
--- /dev/null
+++ b/completion/ssh.completion.bash
@@ -0,0 +1,23 @@
+#!/bin/bash
+# Bash completion support for ssh.
+
+export COMP_WORDBREAKS=${COMP_WORDBREAKS/\:/}
+
+_sshcomplete() {
+
+ # parse all defined hosts from .ssh/config
+ if [ -r $HOME/.ssh/config ]; then
+ COMPREPLY=($(compgen -W "$(grep ^Host $HOME/.ssh/config | awk '{print $2}' )" -- ${COMP_WORDS[COMP_CWORD]}))
+ fi
+
+ # parse all hosts found in .ssh/known_hosts
+ if [ -r $HOME/.ssh/known_hosts ]; then
+ if grep -v -q -e '^ ssh-rsa' $HOME/.ssh/known_hosts ; then
+ COMPREPLY=( $COMPREPLY $(compgen -W "$( awk '{print $1}' $HOME/.ssh/known_hosts | cut -d, -f 1 | sed -e 's/\[//g' | sed -e 's/\]//g' | cut -d: -f1 | grep -v ssh-rsa)" -- ${COMP_WORDS[COMP_CWORD]} ))
+ fi
+ fi
+
+ return 0
+}
+
+complete -o default -o nospace -F _sshcomplete ssh
diff --git a/lib/appearance.bash b/lib/appearance.bash
index 4b1f568..f723511 100644
--- a/lib/appearance.bash
+++ b/lib/appearance.bash
@@ -8,4 +8,6 @@
export LSCOLORS='Gxfxcxdxdxegedabagacad'
# Load the theme
-source "$BASH/themes/$BASH_THEME/$BASH_THEME.theme.bash"
\ No newline at end of file
+if [[ $BASH_THEME ]]; then
+ source "$BASH/themes/$BASH_THEME/$BASH_THEME.theme.bash"
+fi
\ No newline at end of file
diff --git a/plugins/base.plugin.bash b/plugins/base.plugin.bash
index 9eceaf9..02c0104 100644
--- a/plugins/base.plugin.bash
+++ b/plugins/base.plugin.bash
@@ -30,6 +30,10 @@
ri -T "${1}" | open -f -a $PREVIEW
}
+quiet() {
+ $* &> /dev/null &
+}
+
banish-cookies() {
rm -r ~/.macromedia ~/.adobe
ln -s /dev/null ~/.adobe
@@ -83,4 +87,10 @@
| grep -v "COMPREPLY=()" | sed -e "s/()//"
}
-
+# back up file with timestamp
+# useful for administrators and configs
+buf () {
+ filename=$1
+ filetime=$(date +%Y%m%d_%H%M%S)
+ cp ${filename} ${filename}_${filetime}
+}
diff --git a/plugins/git.plugins.bash b/plugins/git.plugins.bash
index ad21591..5f4cc51 100644
--- a/plugins/git.plugins.bash
+++ b/plugins/git.plugins.bash
@@ -17,4 +17,40 @@
# Adds files to git's exclude file (same as .gitignore)
function local-ignore() {
echo "$1" >> .git/info/exclude
-}
\ No newline at end of file
+}
+
+# get a quick overview for your git repo
+function git_info() {
+ if [ -n "$(git symbolic-ref HEAD 2> /dev/null)" ]; then
+ # print informations
+ echo "git repo overview"
+ echo "-----------------"
+ echo
+
+ # print all remotes and thier details
+ for remote in $(git remote show); do
+ echo $remote:
+ git remote show $remote
+ echo
+ done
+
+ # print status of working repo
+ echo "status:"
+ if [ -n "$(git status -s 2> /dev/null)" ]; then
+ git status -s
+ else
+ echo "working directory is clean"
+ fi
+
+ # print at least 5 last log entries
+ echo
+ echo "log:"
+ git log -5 --oneline
+ echo
+
+ else
+ echo "you're currently not in a git repository"
+
+ fi
+}
+
diff --git a/plugins/hcht.plugin.bash b/plugins/hcht.plugin.bash
new file mode 100644
index 0000000..cdab44f
--- /dev/null
+++ b/plugins/hcht.plugin.bash
@@ -0,0 +1,116 @@
+#!/bin/bash
+# hcht.plugin.bash: the handmade commandline history tool
+# Copyright: (C) 2010 Florian Baumann <flo@noqqe.de>
+# License: GPL-3 <http://www.gnu.org/licenses/gpl-3.0.txt>
+# Date: Dienstag 2010-11-30
+
+### readme
+# basiclly the handmade commandline history tool was made for storing
+# informations. yeah, you're right. sounds a bit boring. many other
+# applications can do this much better. but storing things from commandline?
+#
+# hcht was fitted to work at your terminal.
+# your daily stuff like notices, todos, commands or output from a command.
+# all these things will be stored without complex syntax.
+#
+# once you defined your storing-directory you will be able to easily
+# save all the stuff listed above.
+#
+
+### create a file
+# the basic feature. open a file, do stuff and save.
+#
+# $ hcht evilcommand.hch
+#
+# this will create a new file or edit a existing one.
+# paste your command or notice in your favorite editor
+
+### show all stored informations
+# to get an overview of your storedir:
+#
+# $ hcht
+
+### todo with a whole sentence
+# you can give hcht a bunch of parameters
+#
+# $ hcht this is a long reminder about a anything
+
+### save last executed command
+# lets say you did a great hack at your system and you
+# want to save it without complicated use of coping:
+#
+# $ hcht !!
+#
+# the "!!" will repeat the _last_ command you executed at
+# your terminal. after asking you about a name the hch file
+# will be saved.
+
+### read from stdin
+# hcht is also able to read anything from stdin.
+#
+# $ cat any_important_logfile | hcht anylog
+#
+# "anylog" will be the name of the saved file.
+
+hcht() {
+ # configured?
+ if [ -z $hchtstoredir ]; then
+ echo "ERROR: handmade commandline history tool isn't configured."
+ return 1
+ else
+ hchtstoredir=$(echo $hchtstoredir | sed -e 's/\/$//')
+ fi
+
+ # dir available?
+ if [ ! -d $hchtstoredir ]; then
+ echo "ERROR: No such directory: $hchtstoredir"
+ return 1
+ fi
+
+ # get favorite editor
+ if [ -z $EDITOR ]; then
+ EDITOR=$(which vim || which nano)
+ fi
+
+ # check if stdin-data is present and save content
+ if [ "$(tty)" = "not a tty" ]; then
+ hchname=$(echo $1 | sed -e 's/\ //g')
+ if [ -z $hchname ]; then
+ cat < /dev/stdin >> $hchtstoredir/$(date +%Y%m%d%H%M%S).hch
+ else
+ cat < /dev/stdin >> $hchtstoredir/$hchname.hch
+ fi
+ return 0
+ fi
+
+ # list all hch files if no parameter is given
+ if [ $# -eq 0 ]; then
+ for file in $(ls $hchtstoredir); do
+ echo $file
+ done
+ return 0
+ fi
+
+ # if a *.hch file is given start editing or creating it
+ if [ "$#" -eq "1" ]; then
+ if echo "$1" | grep -q -e ".*.hch$" ; then
+ $EDITOR ${hchtstoredir}/${1}
+ return 0
+ else
+ $EDITOR ${hchtstoredir}/${1}.hch
+ return 0
+ fi
+ fi
+
+ # autocreate a new hch
+ if [ "$#" -gt "1" ]; then
+ echo -n "define a name: " ; read hchname
+ hchname=$(echo $hchname | sed -e 's/\ /_/g')
+ if [ -z "$hchname" ]; then
+ echo "$*" > $hchtstoredir/${1}-$(date +%Y%m%d%H%M%S).hch
+ else
+ echo "$*" > ${hchtstoredir}/${hchname}.hch
+ fi
+ return 0
+ fi
+}
diff --git a/plugins/jekyll.plugins.bash b/plugins/jekyll.plugins.bash
index 9b0d5c1..e87b82d 100644
--- a/plugins/jekyll.plugins.bash
+++ b/plugins/jekyll.plugins.bash
@@ -1,5 +1,31 @@
#!/bin/bash
+editpost() {
+ builtin cd "$JEKYLL_LOCAL_ROOT/_posts"
+
+ COUNTER=1
+ NUMBER="$RANDOM"
+ TMPFILE="/tmp/editpost-$NUMBER"
+
+ for POST in *
+ do
+ DATE=`echo $POST | grep -oE "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}"`
+ TITLE=`cat $POST | grep -oE "title: (.+)"`
+ TITLE=`echo $TITLE | sed 's/title: //'`
+ echo "$COUNTER) $DATE $TITLE" >> "$TMPFILE"
+ POSTS[$COUNTER]=$POST
+ COUNTER=`expr $COUNTER + 1`
+ done
+ less $TMPFILE
+ read -p "Number of post to edit: " POST_TO_EDIT
+ if [ -z "$EDITOR" ]
+ then
+ nano "${POSTS[$POST_TO_EDIT]}"
+ else
+ "$EDITOR" "${POSTS[$POST_TO_EDIT]}"
+ fi
+}
+
newpost() {
# 'builtin cd' into the local jekyll root
@@ -12,7 +38,7 @@
# If the user is using markdown formatting, let them choose what type of post they want. Sort of like Tumblr.
- OPTIONS="Text Quote Image Audio Video"
+ OPTIONS="Text Quote Image Audio Video Link"
if [ $JEKYLL_FORMATTING = "markdown" -o $JEKYLL_FORMATTING = "textile" ]
then
@@ -47,6 +73,12 @@
POST_TYPE="Video"
break
fi
+
+ if [[ $OPTION = "Link" ]]
+ then
+ POST_TYPE="Link"
+ break
+ fi
done
fi
@@ -122,6 +154,15 @@
then
echo "<html><video src=\"/path/to/video\" controls=\"controls\"></video></html>" >> $FNAME
fi
+
+ if [[ $POST_TYPE = "Link" ]]
+ then
+ echo "[link][1]" >> $FNAME
+ echo >> $FNAME
+ echo "> Quote" >> $FNAME
+ echo >> $FNAME
+ echo "[1]: url" >> $FNAME
+ fi
fi
if [[ $JEKYLL_FORMATTING = "textile" ]]
@@ -152,6 +193,13 @@
then
echo "<html><video src=\"/path/to/video\" controls=\"controls\"></video></html>" >> $FNAME
fi
+
+ if [[ $POST_TYPE = "Link" ]]
+ then
+ echo "\"Site\":url" >> $FNAME
+ echo >> $FNAME
+ echo "bq. Quote" >> $FNAME
+ fi
fi
# Open the file in your favorite editor
diff --git a/plugins/python.plugin.bash b/plugins/python.plugin.bash
new file mode 100644
index 0000000..92f50e0
--- /dev/null
+++ b/plugins/python.plugin.bash
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+alias http='python -m SimpleHTTPServer'
+
diff --git a/plugins/z.bash b/plugins/z.bash
new file mode 100644
index 0000000..d8c3cd6
--- /dev/null
+++ b/plugins/z.bash
@@ -0,0 +1,148 @@
+#!/bin/bash
+
+# maintains a jump-list of the directories you actually use
+#
+# INSTALL:
+# * put something like this in your .bashrc:
+# . /path/to/z.sh
+# * cd around for a while to build up the db
+# * PROFIT!!
+#
+# USE:
+# * z foo # goes to most frecent dir matching foo
+# * z foo bar # goes to most frecent dir matching foo and bar
+# * z -r foo # goes to highest ranked dir matching foo
+# * z -t foo # goes to most recently accessed dir matching foo
+# * z -l foo # list all dirs matching foo (by frecency)
+
+z() {
+ local datafile="$HOME/.z"
+ if [ "$1" = "--add" ]; then
+ # add
+ shift
+ # $HOME isn't worth matching
+ [ "$*" = "$HOME" ] && return
+ awk -v p="$*" -v t="$(date +%s)" -F"|" '
+ BEGIN { rank[p] = 1; time[p] = t }
+ $2 >= 1 {
+ if( $1 == p ) {
+ rank[$1] = $2 + 1
+ time[$1] = t
+ } else {
+ rank[$1] = $2
+ time[$1] = $3
+ }
+ count += $2
+ }
+ END {
+ if( count > 1000 ) {
+ for( i in rank ) print i "|" 0.9*rank[i] "|" time[i] # aging
+ } else for( i in rank ) print i "|" rank[i] "|" time[i]
+ }
+ ' "$datafile" 2>/dev/null > "$datafile.tmp"
+ mv -f "$datafile.tmp" "$datafile"
+ elif [ "$1" = "--complete" ]; then
+ # tab completion
+ awk -v q="$2" -F"|" '
+ BEGIN {
+ if( q == tolower(q) ) nocase = 1
+ split(substr(q,3),fnd," ")
+ }
+ {
+ if( system("test -d \"" $1 "\"") ) next
+ if( nocase ) {
+ for( i in fnd ) tolower($1) !~ tolower(fnd[i]) && $1 = ""
+ if( $1 ) print $1
+ } else {
+ for( i in fnd ) $1 !~ fnd[i] && $1 = ""
+ if( $1 ) print $1
+ }
+ }
+ ' "$datafile" 2>/dev/null
+ else
+ # list/go
+ while [ "$1" ]; do case "$1" in
+ -h) echo "z [-h][-l][-r][-t] args" >&2; return;;
+ -l) local list=1;;
+ -r) local typ="rank";;
+ -t) local typ="recent";;
+ --) while [ "$1" ]; do shift; local fnd="$fnd $1";done;;
+ *) local fnd="$fnd $1";;
+ esac; local last=$1; shift; done
+ [ "$fnd" ] || local list=1
+ # if we hit enter on a completion just go there
+ [ -d "$last" ] && cd "$last" && return
+ [ -f "$datafile" ] || return
+ local cd="$(awk -v t="$(date +%s)" -v list="$list" -v typ="$typ" -v q="$fnd" -v tmpfl="$datafile.tmp" -F"|" '
+ function frecent(rank, time) {
+ dx = t-time
+ if( dx < 3600 ) return rank*4
+ if( dx < 86400 ) return rank*2
+ if( dx < 604800 ) return rank/2
+ return rank/4
+ }
+ function output(files, toopen, override) {
+ if( list ) {
+ if( typ == "recent" ) {
+ cmd = "sort -nr >&2"
+ } else cmd = "sort -n >&2"
+ for( i in files ) if( files[i] ) printf "%-10s %s\n", files[i], i | cmd
+ if( override ) printf "%-10s %s\n", "common:", override > "/dev/stderr"
+ } else {
+ if( override ) toopen = override
+ print toopen
+ }
+ }
+ function common(matches, fnd, nc) {
+ for( i in matches ) {
+ if( matches[i] && (!short || length(i) < length(short)) ) short = i
+ }
+ if( short == "/" ) return
+ for( i in matches ) if( matches[i] && i !~ short ) x = 1
+ if( x ) return
+ if( nc ) {
+ for( i in fnd ) if( tolower(short) !~ tolower(fnd[i]) ) x = 1
+ } else for( i in fnd ) if( short !~ fnd[i] ) x = 1
+ if( !x ) return short
+ }
+ BEGIN { split(q, a, " ") }
+ {
+ if( system("test -d \"" $1 "\"") ) next
+ print $0 >> tmpfl
+ if( typ == "rank" ) {
+ f = $2
+ } else if( typ == "recent" ) {
+ f = t-$3
+ } else f = frecent($2, $3)
+ wcase[$1] = nocase[$1] = f
+ for( i in a ) {
+ if( $1 !~ a[i] ) delete wcase[$1]
+ if( tolower($1) !~ tolower(a[i]) ) delete nocase[$1]
+ }
+ if( wcase[$1] > oldf ) {
+ cx = $1
+ oldf = wcase[$1]
+ } else if( nocase[$1] > noldf ) {
+ ncx = $1
+ noldf = nocase[$1]
+ }
+ }
+ END {
+ if( cx ) {
+ output(wcase, cx, common(wcase, a, 0))
+ } else if( ncx ) output(nocase, ncx, common(nocase, a, 1))
+ }
+ ' "$datafile")"
+ if [ $? -gt 0 ]; then
+ rm -f "$datafile.tmp"
+ else
+ mv -f "$datafile.tmp" "$datafile"
+ [ "$cd" ] && cd "$cd"
+ fi
+ fi
+}
+# tab completion
+complete -C 'z --complete "$COMP_LINE"' z
+# populate directory list. avoid clobbering other PROMPT_COMMANDs.
+echo $PROMPT_COMMAND | grep -q "z --add"
+[ $? -gt 0 ] && PROMPT_COMMAND='z --add "$(pwd -P)";'"$PROMPT_COMMAND"
diff --git a/template/bash_profile.template.bash b/template/bash_profile.template.bash
index a98e65c..17853b1 100644
--- a/template/bash_profile.template.bash
+++ b/template/bash_profile.template.bash
@@ -47,5 +47,8 @@
export TODO="t"
+# Set store directory for handmade commandline history tool
+export hchtstoredir="$HOME/.hcht"
+
# Load Bash It
source $BASH/bash_it.sh
diff --git a/themes/base.theme.bash b/themes/base.theme.bash
index 9ae5d0e..e77d1d2 100644
--- a/themes/base.theme.bash
+++ b/themes/base.theme.bash
@@ -50,7 +50,7 @@
}
function git_prompt_info {
- if [[ -n $(git status -s 2> /dev/null) ]]; then
+ if [[ -n $(git status -s 2> /dev/null |grep -v ^# |grep -v "working directory clean") ]]; then
state=${GIT_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
else
state=${GIT_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
@@ -81,4 +81,4 @@
rvm=$(rvm tools identifier) || return
echo -e "$RVM_THEME_PROMPT_PREFIX$rvm$RVM_THEME_PROMPT_SUFFIX"
fi
-}
\ No newline at end of file
+}
diff --git a/themes/minimal/minimal.theme.bash b/themes/minimal/minimal.theme.bash
index 2f9b926..a94c453 100644
--- a/themes/minimal/minimal.theme.bash
+++ b/themes/minimal/minimal.theme.bash
@@ -1,8 +1,18 @@
prompt_setter() {
if [[ $? -eq 0 ]]; then
- PS1="\W "
+ if [ ! $VIMRUNTIME = "" ]
+ then
+ PS1="{vim} \W "
+ else
+ PS1="\W "
+ fi
else
- PS1="${bold_red}\W ${normal}"
+ if [ ! $VIMRUNTIME = "" ]
+ then
+ PS1="{vim} ${bold_red}\W ${normal}"
+ else
+ PS1="${bold_red}\W ${normal}"
+ fi
fi
}
diff --git a/themes/modern/modern.theme.bash b/themes/modern/modern.theme.bash
new file mode 100644
index 0000000..8688f36
--- /dev/null
+++ b/themes/modern/modern.theme.bash
@@ -0,0 +1,47 @@
+SCM_THEME_PROMPT_PREFIX=""
+SCM_THEME_PROMPT_SUFFIX=""
+
+SCM_THEME_PROMPT_DIRTY=' ${bold_red}✗${normal}'
+SCM_THEME_PROMPT_CLEAN=' ${bold_green}✓${normal}'
+SCM_GIT_CHAR='${bold_green}±${normal}'
+SCM_SVN_CHAR='${bold_cyan}⑆${normal}'
+SCM_HG_CHAR='${bold_red}☿${normal}'
+
+PS3=">> "
+
+is_vim_shell() {
+ if [ ! -z "$VIMRUNTIME" ]
+ then
+ echo "[${cyan}vim shell${normal}]"
+ fi
+}
+
+modern_scm_prompt() {
+ CHAR=$(scm_char)
+ if [ $CHAR = $SCM_NONE_CHAR ]
+ then
+ return
+ else
+ echo "[$(scm_char)][$(scm_prompt_info)]"
+ fi
+}
+
+prompt() {
+ if [ $? -ne 0 ]
+ then
+ # Yes, the indenting on these is weird, but it has to be like
+ # this otherwise it won't display properly.
+
+ PS1="${bold_red}┌─${reset_color}$(modern_scm_prompt)[${cyan}\W${normal}]$(is_vim_shell)
+${bold_red}└─▪${normal} "
+ else
+ PS1="┌─$(modern_scm_prompt)[${cyan}\W${normal}]$(is_vim_shell)
+└─▪ "
+ fi
+}
+
+PS2="└─▪ "
+
+
+
+PROMPT_COMMAND=prompt
diff --git a/themes/n0qorg/n0qorg.theme.bash b/themes/n0qorg/n0qorg.theme.bash
new file mode 100644
index 0000000..fcaca43
--- /dev/null
+++ b/themes/n0qorg/n0qorg.theme.bash
@@ -0,0 +1,22 @@
+#!/bin/bash
+# n0qorg theme by Florian Baumann <flo@noqqe.de>
+
+## look-a-like
+# host directory (branch*)»
+# for example:
+# ananas ~/Code/bash-it/themes (master*)»
+PROMPT="${bold_blue}\[\$(hostname)\]${normal} \w${normal} ${bold_white}\[\$(git_prompt_info)\]${normal}» "
+
+## git-theme
+# feel free to change git chars.
+GIT_THEME_PROMPT_DIRTY="${bold_blue}*${bold_white}"
+GIT_THEME_PROMPT_CLEAN=""
+GIT_THEME_PROMPT_PREFIX="${bold_blue}(${bold_white}"
+GIT_THEME_PROMPT_SUFFIX="${bold_blue})"
+
+## alternate chars
+#
+SCM_THEME_PROMPT_DIRTY="*"
+SCM_THEME_PROMPT_CLEAN=""
+SCM_THEME_PROMPT_PREFIX="("
+SCM_THEME_PROMPT_SUFFIX=")"