summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--oh-my-zsh.sh13
-rw-r--r--plugins/bundler/_bundler82
-rw-r--r--plugins/bundler/bundler.plugin.zsh4
-rw-r--r--plugins/cake/cake.plugin.zsh22
-rw-r--r--plugins/git/git.plugin.zsh2
-rw-r--r--plugins/github/github.plugin.zsh5
-rw-r--r--plugins/gnu-utils/gnu-utils.plugin.zsh80
-rw-r--r--plugins/gradle/gradle.plugin.zsh119
-rw-r--r--plugins/mercurial/mercurial.plugin.zsh14
-rw-r--r--plugins/npm/_npm19
-rw-r--r--plugins/npm/npm.plugin.zsh1
-rw-r--r--plugins/python/python.plugin.zsh5
-rw-r--r--plugins/svn/svn.plugin.zsh8
-rw-r--r--plugins/terminitor/_terminitor38
-rw-r--r--plugins/vundle/vundle.plugin.zsh23
-rw-r--r--themes/crunch.zsh-theme37
-rw-r--r--themes/fox.zsh-theme8
-rw-r--r--themes/gnzh.zsh-theme54
-rw-r--r--themes/norm.zsh-theme4
-rw-r--r--themes/wuffers.zsh-theme5
-rwxr-xr-xtools/require_tool.sh161
-rwxr-xr-xtools/theme_chooser.sh96
22 files changed, 762 insertions, 38 deletions
diff --git a/oh-my-zsh.sh b/oh-my-zsh.sh
index c4522491b..3865abe17 100644
--- a/oh-my-zsh.sh
+++ b/oh-my-zsh.sh
@@ -21,17 +21,24 @@ for plugin ($plugins) fpath=($ZSH/plugins/$plugin $fpath)
autoload -U compinit
compinit -i
+# Set ZSH_CUSTOM to the path where your custom config files
+# and plugins exists, or else we will use the default custom/
+if [ "$ZSH_CUSTOM" = "" ]
+then
+ ZSH_CUSTOM="$ZSH/custom"
+fi
+
# Load all of the plugins that were defined in ~/.zshrc
for plugin ($plugins); do
- if [ -f $ZSH/custom/plugins/$plugin/$plugin.plugin.zsh ]; then
- source $ZSH/custom/plugins/$plugin/$plugin.plugin.zsh
+ if [ -f $ZSH_CUSTOM/plugins/$plugin/$plugin.plugin.zsh ]; then
+ source $ZSH_CUSTOM/plugins/$plugin/$plugin.plugin.zsh
elif [ -f $ZSH/plugins/$plugin/$plugin.plugin.zsh ]; then
source $ZSH/plugins/$plugin/$plugin.plugin.zsh
fi
done
# Load all of your custom configurations from custom/
-for config_file ($ZSH/custom/*.zsh) source $config_file
+for config_file ($ZSH_CUSTOM/*.zsh) source $config_file
# Load the theme
if [ "$ZSH_THEME" = "random" ]
diff --git a/plugins/bundler/_bundler b/plugins/bundler/_bundler
new file mode 100644
index 000000000..5d22cac9a
--- /dev/null
+++ b/plugins/bundler/_bundler
@@ -0,0 +1,82 @@
+#compdef bundle
+
+local curcontext="$curcontext" state line _gems _opts ret=1
+
+_arguments -C -A "-v" -A "--version" \
+ '(- 1 *)'{-v,--version}'[display version information]' \
+ '1: :->cmds' \
+ '*:: :->args' && ret=0
+
+case $state in
+ cmds)
+ _values "bundle command" \
+ "install[Install the gems specified by the Gemfile or Gemfile.lock]" \
+ "update[Update dependencies to their latest versions]" \
+ "package[Package the .gem files required by your application]" \
+ "exec[Execute a script in the context of the current bundle]" \
+ "config[Specify and read configuration options for bundler]" \
+ "check[Determine whether the requirements for your application are installed]" \
+ "list[Show all of the gems in the current bundle]" \
+ "show[Show the source location of a particular gem in the bundle]" \
+ "console[Start an IRB session in the context of the current bundle]" \
+ "open[Open an installed gem in the editor]" \
+ "viz[Generate a visual representation of your dependencies]" \
+ "init[Generate a simple Gemfile, placed in the current directory]" \
+ "gem[Create a simple gem, suitable for development with bundler]" \
+ "help[Describe available tasks or one specific task]"
+ ret=0
+ ;;
+ args)
+ case $line[1] in
+ help)
+ _values 'commands' \
+ 'install' \
+ 'update' \
+ 'package' \
+ 'exec' \
+ 'config' \
+ 'check' \
+ 'list' \
+ 'show' \
+ 'console' \
+ 'open' \
+ 'viz' \
+ 'init' \
+ 'gem' \
+ 'help' && ret=0
+ ;;
+ install)
+ _arguments \
+ '(--no-color)--no-color[disable colorization in output]' \
+ '(--local)--local[do not attempt to connect to rubygems.org]' \
+ '(--quiet)--quiet[only output warnings and errors]' \
+ '(--gemfile)--gemfile=-[use the specified gemfile instead of Gemfile]:gemfile' \
+ '(--system)--system[install to the system location]' \
+ '(--deployment)--deployment[install using defaults tuned for deployment environments]' \
+ '(--frozen)--frozen[do not allow the Gemfile.lock to be updated after this install]' \
+ '(--path)--path=-[specify a different path than the system default]:path:_files' \
+ '(--binstubs)--binstubs=-[generate bin stubs for bundled gems to ./bin]:directory:_files' \
+ '(--without)--without=-[exclude gems that are part of the specified named group]:groups'
+ ret=0
+ ;;
+ exec)
+ _normal && ret=0
+ ;;
+ (open|show)
+ _gems=( $(bundle show 2> /dev/null | sed -e '/^ \*/!d; s/^ \* \([^ ]*\) .*/\1/') )
+ if [[ $_gems != "" ]]; then
+ _values 'gems' $_gems && ret=0
+ fi
+ ;;
+ *)
+ _opts=( $(bundle help $line[1] | sed -e '/^ \[-/!d; s/^ \[\(-[^=]*\)=.*/\1/') )
+ _opts+=( $(bundle help $line[1] | sed -e '/^ -/!d; s/^ \(-.\), \[\(-[^=]*\)=.*/\1 \2/') )
+ if [[ $_opts != "" ]]; then
+ _values 'options' $_opts && ret=0
+ fi
+ ;;
+ esac
+ ;;
+esac
+
+return ret
diff --git a/plugins/bundler/bundler.plugin.zsh b/plugins/bundler/bundler.plugin.zsh
index a6c116407..dd69f68b1 100644
--- a/plugins/bundler/bundler.plugin.zsh
+++ b/plugins/bundler/bundler.plugin.zsh
@@ -1,3 +1,7 @@
+fpath=($ZSH/plugins/bundler $fpath)
+autoload -U compinit
+compinit -i
+
alias be="bundle exec"
alias bi="bundle install"
alias bl="bundle list"
diff --git a/plugins/cake/cake.plugin.zsh b/plugins/cake/cake.plugin.zsh
index f968c71d5..1d0d196ee 100644
--- a/plugins/cake/cake.plugin.zsh
+++ b/plugins/cake/cake.plugin.zsh
@@ -1,18 +1,22 @@
# Set this to 1 if you want to cache the tasks
-cache_task_list=1
+_cake_cache_task_list=1
# Cache filename
-cache_file='.cake_task_cache'
+_cake_task_cache_file='.cake_task_cache'
+
+_cake_get_target_list () {
+ cake | grep '^cake ' | sed -e "s/cake \([^ ]*\) .*/\1/" | grep -v '^$'
+}
_cake_does_target_list_need_generating () {
- if [ $cache_task_list -eq 0 ]; then
+ if [ ${_cake_cache_task_list} -eq 0 ]; then
return 1;
fi
- if [ ! -f $cache_file ]; then return 0;
+ if [ ! -f ${_cake_task_cache_file} ]; then return 0;
else
- accurate=$(stat -f%m $cache_file)
+ accurate=$(stat -f%m $_cake_task_cache_file)
changed=$(stat -f%m Cakefile)
return $(expr $accurate '>=' $changed)
fi
@@ -21,12 +25,12 @@ _cake_does_target_list_need_generating () {
_cake () {
if [ -f Cakefile ]; then
if _cake_does_target_list_need_generating; then
- cake | sed -e "s/cake \([^ ]*\) .*/\1/" | grep -v '^$' > $cache_file
- compadd `cat $cache_file`
+ _cake_get_target_list > ${_cake_task_cache_file}
+ compadd `cat ${_cake_task_cache_file}`
else
- compadd `cake | sed -e "s/cake \([^ ]*\) .*/\1/" | grep -v '^$'`
+ compadd `_cake_get_target_list`
fi
fi
}
-compdef _cake cake
+compdef _cake cake \ No newline at end of file
diff --git a/plugins/git/git.plugin.zsh b/plugins/git/git.plugin.zsh
index 4fcf9425d..183c56c1c 100644
--- a/plugins/git/git.plugin.zsh
+++ b/plugins/git/git.plugin.zsh
@@ -33,6 +33,8 @@ alias gss='git status -s'
compdef _git gss=git-status
alias ga='git add'
compdef _git ga=git-add
+alias gm='git merge'
+compdef _git gm=git-merge
# Git and svn mix
alias git-svn-dcommit-push='git svn dcommit && git push github master:svntrunk'
diff --git a/plugins/github/github.plugin.zsh b/plugins/github/github.plugin.zsh
index 1eb338113..b50ac4d85 100644
--- a/plugins/github/github.plugin.zsh
+++ b/plugins/github/github.plugin.zsh
@@ -1,6 +1,5 @@
-# hub alias from defunkt
-# https://github.com/defunkt/hub
-if [ "$commands[(I)hub]" ]; then
+# Setup hub function for git, if it is available; http://github.com/defunkt/hub
+if [ "$commands[(I)hub]" ] && [ "$commands[(I)ruby]" ]; then
# eval `hub alias -s zsh`
function git(){hub "$@"}
fi
diff --git a/plugins/gnu-utils/gnu-utils.plugin.zsh b/plugins/gnu-utils/gnu-utils.plugin.zsh
new file mode 100644
index 000000000..e59265d66
--- /dev/null
+++ b/plugins/gnu-utils/gnu-utils.plugin.zsh
@@ -0,0 +1,80 @@
+# ------------------------------------------------------------------------------
+# FILE: gnu-utils.plugin.zsh
+# DESCRIPTION: oh-my-zsh plugin file.
+# AUTHOR: Sorin Ionescu (sorin.ionescu@gmail.com)
+# VERSION: 1.0.0
+# ------------------------------------------------------------------------------
+
+
+if [[ -x "${commands[gwhoami]}" ]]; then
+ __gnu_utils() {
+ emulate -L zsh
+ local gcmds
+ local gcmd
+ local cmd
+ local prefix
+
+ # coreutils
+ gcmds=('g[' 'gbase64' 'gbasename' 'gcat' 'gchcon' 'gchgrp' 'gchmod'
+ 'gchown' 'gchroot' 'gcksum' 'gcomm' 'gcp' 'gcsplit' 'gcut' 'gdate'
+ 'gdd' 'gdf' 'gdir' 'gdircolors' 'gdirname' 'gdu' 'gecho' 'genv' 'gexpand'
+ 'gexpr' 'gfactor' 'gfalse' 'gfmt' 'gfold' 'ggroups' 'ghead' 'ghostid'
+ 'gid' 'ginstall' 'gjoin' 'gkill' 'glink' 'gln' 'glogname' 'gls' 'gmd5sum'
+ 'gmkdir' 'gmkfifo' 'gmknod' 'gmktemp' 'gmv' 'gnice' 'gnl' 'gnohup' 'gnproc'
+ 'god' 'gpaste' 'gpathchk' 'gpinky' 'gpr' 'gprintenv' 'gprintf' 'gptx' 'gpwd'
+ 'greadlink' 'grm' 'grmdir' 'gruncon' 'gseq' 'gsha1sum' 'gsha224sum'
+ 'gsha256sum' 'gsha384sum' 'gsha512sum' 'gshred' 'gshuf' 'gsleep' 'gsort'
+ 'gsplit' 'gstat' 'gstty' 'gsum' 'gsync' 'gtac' 'gtail' 'gtee' 'gtest'
+ 'gtimeout' 'gtouch' 'gtr' 'gtrue' 'gtruncate' 'gtsort' 'gtty' 'guname'
+ 'gunexpand' 'guniq' 'gunlink' 'guptime' 'gusers' 'gvdir' 'gwc' 'gwho'
+ 'gwhoami' 'gyes')
+
+ # Not part of coreutils, installed separately.
+ gcmds+=('gsed' 'gtar' 'gtime')
+
+ for gcmd in "${gcmds[@]}"; do
+ #
+ # This method allows for builtin commands to be primary but it's
+ # lost if hash -r or rehash -f is executed. Thus, those two
+ # functions have to be wrapped.
+ #
+ (( ${+commands[$gcmd]} )) && hash ${gcmd[2,-1]}=${commands[$gcmd]}
+
+ #
+ # This method generates wrapper functions.
+ # It will override shell builtins.
+ #
+ # (( ${+commands[$gcmd]} )) && \
+ # eval "function $gcmd[2,-1]() { \"${prefix}/${gcmd//"["/"\\["}\" \"\$@\"; }"
+
+ #
+ # This method is inflexible since the aliases are at risk of being
+ # overriden resulting in the BSD coreutils being called.
+ #
+ # (( ${+commands[$gcmd]} )) && \
+ # alias "$gcmd[2,-1]"="${prefix}/${gcmd//"["/"\\["}"
+ done
+
+ return 0
+ }
+ __gnu_utils;
+
+ function hash() {
+ if [[ "$*" =~ "-(r|f)" ]]; then
+ builtin hash "$@"
+ __gnu_utils
+ else
+ builtin hash "$@"
+ fi
+ }
+
+ function rehash() {
+ if [[ "$*" =~ "-f" ]]; then
+ builtin rehash "$@"
+ __gnu_utils
+ else
+ builtin rehash "$@"
+ fi
+ }
+fi
+
diff --git a/plugins/gradle/gradle.plugin.zsh b/plugins/gradle/gradle.plugin.zsh
new file mode 100644
index 000000000..fc4c78c50
--- /dev/null
+++ b/plugins/gradle/gradle.plugin.zsh
@@ -0,0 +1,119 @@
+#!zsh
+##############################################################################
+# A descriptive listing of core Gradle commands
+############################################################################
+function _gradle_core_commands() {
+ local ret=1 state
+ _arguments ':subcommand:->subcommand' && ret=0
+
+ case $state in
+ subcommand)
+ subcommands=(
+ "properties:Display all project properties"
+ "tasks:Calculate and display all tasks"
+ "dependencies:Calculate and display all dependencies"
+ "projects:Discover and display all sub-projects"
+ "build:Build the project"
+ "help:Display help"
+ )
+ _describe -t subcommands 'gradle subcommands' subcommands && ret=0
+ esac
+
+ return ret
+}
+
+function _gradle_arguments() {
+ _arguments -C \
+ '-a[Do not rebuild project dependencies]' \
+ '-h[Help]' \
+ '-D[System property]' \
+ '-d[Log at the debug level]' \
+ '--gui[Launches the Gradle GUI app]' \
+ '--stop[Stop the Gradle daemon]' \
+ '--daemon[Use the Gradle daemon]' \
+ '--no-daemon[Do not use the Gradle daemon]' \
+ '--no-opt[Do not perform any task optimization]' \
+ '-i[Log at the info level]' \
+ '-m[Dry run]' \
+ '-P[Set a project property]' \
+ '--profile[Profile the build time]' \
+ '-q[Log at the quiet level (only show errors)]' \
+ '-v[Print the Gradle version info]' \
+ '-x[Specify a task to be excluded]' \
+ '*::command:->command' \
+ && return 0
+}
+
+
+##############################################################################
+# Are we in a directory containing a build.gradle file?
+############################################################################
+function in_gradle() {
+ if [[ -f build.gradle ]]; then
+ echo 1
+ fi
+}
+
+############################################################################
+# Define the stat_cmd command based on platform behavior
+##########################################################################
+stat -f%m . > /dev/null 2>&1
+if [ "$?" = 0 ]; then
+ stat_cmd=(stat -f%m)
+else
+ stat_cmd=(stat -L --format=%Y)
+fi
+
+############################################################################## Examine the build.gradle file to see if its
+# timestamp has changed, and if so, regen
+# the .gradle_tasks cache file
+############################################################################
+_gradle_does_task_list_need_generating () {
+ if [ ! -f .gradletasknamecache ]; then return 0;
+ else
+ accurate=$($stat_cmd .gradletasknamecache)
+ changed=$($stat_cmd build.gradle)
+ return $(expr $accurate '>=' $changed)
+ fi
+}
+
+
+##############################################################################
+# Discover the gradle tasks by running "gradle tasks --all"
+############################################################################
+_gradle_tasks () {
+ if [ in_gradle ]; then
+ _gradle_arguments
+ if _gradle_does_task_list_need_generating; then
+ gradle tasks --all | grep "^[ ]*[a-zA-Z0-9]*\ -\ " | sed "s/ - .*$//" | sed "s/[\ ]*//" > .gradletasknamecache
+ fi
+ compadd -X "==== Gradle Tasks ====" `cat .gradletasknamecache`
+ fi
+}
+
+_gradlew_tasks () {
+ if [ in_gradle ]; then
+ _gradle_arguments
+ if _gradle_does_task_list_need_generating; then
+ gradlew tasks --all | grep "^[ ]*[a-zA-Z0-9]*\ -\ " | sed "s/ - .*$//" | sed "s/[\ ]*//" > .gradletasknamecache
+ fi
+ compadd -X "==== Gradlew Tasks ====" `cat .gradletasknamecache`
+ fi
+}
+
+
+##############################################################################
+# Register the completions against the gradle and gradlew commands
+############################################################################
+compdef _gradle_tasks gradle
+compdef _gradlew_tasks gradlew
+
+
+##############################################################################
+# Open questions for future improvements:
+# 1) Should 'gradle tasks' use --all or just the regular set?
+# 2) Should gradlew use the same approach as gradle?
+# 3) Should only the " - " be replaced with a colon so it can work
+# with the richer descriptive method of _arguments?
+# gradle tasks | grep "^[a-zA-Z0-9]*\ -\ " | sed "s/ - /\:/"
+#############################################################################
diff --git a/plugins/mercurial/mercurial.plugin.zsh b/plugins/mercurial/mercurial.plugin.zsh
new file mode 100644
index 000000000..2988f0a46
--- /dev/null
+++ b/plugins/mercurial/mercurial.plugin.zsh
@@ -0,0 +1,14 @@
+
+# Mercurial
+alias hgc='hg commit -v'
+alias hgb='hg branch -v'
+alias hgba='hg branches'
+alias hgco='hg checkout'
+alias hgd='hg diff'
+alias hged='hg diffmerge'
+# pull and update
+alias hgl='hg pull -u -v'
+alias hgp='hg push -v'
+alias hgs='hg status -v'
+# this is the 'git commit --amend' equivalent
+alias hgca='hg qimport -r tip ; hg qrefresh -e ; hg qfinish tip'
diff --git a/plugins/npm/_npm b/plugins/npm/_npm
deleted file mode 100644
index 24b536188..000000000
--- a/plugins/npm/_npm
+++ /dev/null
@@ -1,19 +0,0 @@
-#compdef npm
-
-# Node Package Manager 0.3.15 completion, letting npm do all the completion work
-
-_npm() {
- compadd -- $(_npm_complete $words)
-}
-
-# We want to show all errors of any substance, but never the "npm (not )ok" one.
-# (Also doesn't consider "ERR! no match found" worth breaking the terminal for.)
-_npm_complete() {
- local ask_npm
- ask_npm=(npm completion --color false --loglevel error -- $@)
- { _call_program npm $ask_npm 2>&1 >&3 \
- | egrep -v '^(npm (not |)ok|ERR! no match found)$' >&2; \
- } 3>&1
-}
-
-_npm "$@"
diff --git a/plugins/npm/npm.plugin.zsh b/plugins/npm/npm.plugin.zsh
new file mode 100644
index 000000000..c3eb91d31
--- /dev/null
+++ b/plugins/npm/npm.plugin.zsh
@@ -0,0 +1 @@
+eval "$(npm completion 2>/dev/null)"
diff --git a/plugins/python/python.plugin.zsh b/plugins/python/python.plugin.zsh
new file mode 100644
index 000000000..3ea34d718
--- /dev/null
+++ b/plugins/python/python.plugin.zsh
@@ -0,0 +1,5 @@
+# Find python file
+alias pyfind='find . -name "*.py"'
+
+# Remove python compiled byte-code
+alias pyclean='find . -type f -name "*.py[co]" -exec rm -f \{\} \;'
diff --git a/plugins/svn/svn.plugin.zsh b/plugins/svn/svn.plugin.zsh
index 53a8a513a..e2cf96ca3 100644
--- a/plugins/svn/svn.plugin.zsh
+++ b/plugins/svn/svn.plugin.zsh
@@ -1,5 +1,5 @@
function svn_prompt_info {
- if [ in_svn ]; then
+ if [ $(in_svn) ]; then
echo "$ZSH_PROMPT_BASE_COLOR$ZSH_THEME_SVN_PROMPT_PREFIX\
$ZSH_THEME_REPO_NAME_COLOR$(svn_get_repo_name)$ZSH_PROMPT_BASE_COLOR$ZSH_THEME_SVN_PROMPT_SUFFIX$ZSH_PROMPT_BASE_COLOR$(svn_dirty)$ZSH_PROMPT_BASE_COLOR"
fi
@@ -13,7 +13,7 @@ function in_svn() {
}
function svn_get_repo_name {
- if [ in_svn ]; then
+ if [ $(in_svn) ]; then
svn info | sed -n 's/Repository\ Root:\ .*\///p' | read SVN_ROOT
svn info | sed -n "s/URL:\ .*$SVN_ROOT\///p" | sed "s/\/.*$//"
@@ -21,13 +21,13 @@ function svn_get_repo_name {
}
function svn_get_rev_nr {
- if [ in_svn ]; then
+ if [ $(in_svn) ]; then
svn info 2> /dev/null | sed -n s/Revision:\ //p
fi
}
function svn_dirty_choose {
- if [ in_svn ]; then
+ if [ $(in_svn) ]; then
s=$(svn status|grep -E '^\s*[ACDIM!?L]' 2>/dev/null)
if [ $s ]; then
echo $1
diff --git a/plugins/terminitor/_terminitor b/plugins/terminitor/_terminitor
new file mode 100644
index 000000000..1ce87c3ad
--- /dev/null
+++ b/plugins/terminitor/_terminitor
@@ -0,0 +1,38 @@
+#compdef terminitor
+#autoload
+
+# terminitor zsh completion
+
+_terminitor_available_scripts() {
+ scripts=(`for SCRIPT in ~/.config/terminitor/*.term ; do basename $SCRIPT .term ; done`)
+}
+
+local -a _1st_arguments
+_1st_arguments=(
+ 'create:create a Termfile in directory'
+ 'delete:delete terminitor script'
+ 'edit:open termitor script'
+ 'fetch:clone the designated repo and run setup'
+ 'help:Describe available tasks or one specific task'
+ 'init:create initial root terminitor folder'
+ 'list:lists all terminitor scripts'
+ 'setup:execute setup in the terminitor script'
+ 'start:runs the terminitor script'
+ 'update:update Terminitor to new global path(.config/.terminitor)'
+)
+
+local expl
+
+_arguments \
+ '*:: :->subcmds' && return 0
+
+if (( CURRENT == 1 )); then
+ _describe -t commands "terminitor task" _1st_arguments
+ return
+fi
+
+case "$words[1]" in
+ start|edit|delete|setup)
+ _terminitor_available_scripts
+ _wanted scripts expl 'installed scripts' compadd -a scripts ;;
+esac
diff --git a/plugins/vundle/vundle.plugin.zsh b/plugins/vundle/vundle.plugin.zsh
new file mode 100644
index 000000000..005a58476
--- /dev/null
+++ b/plugins/vundle/vundle.plugin.zsh
@@ -0,0 +1,23 @@
+function vundle-init () {
+ if [ ! -d ~/.vim/bundle/vundle/ ]
+ then
+ mkdir -p ~/.vim/bundle/vundle/
+ fi
+
+ if [ ! -d ~/.vim/bundle/vundle/.git/ ]
+ then
+ git clone http://github.com/gmarik/vundle.git ~/.vim/bundle/vundle
+ echo "\n\tRead about vim configuration for vundle at https://github.com/gmarik/vundle\n"
+ fi
+}
+
+function vundle () {
+ vundle-init
+ vim -c "execute \"BundleInstall\" | q | q"
+}
+
+
+function vundle-update () {
+ vundle-init
+ vim -c "execute \"BundleInstall!\" | q | q"
+}
diff --git a/themes/crunch.zsh-theme b/themes/crunch.zsh-theme
new file mode 100644
index 000000000..2473cd230
--- /dev/null
+++ b/themes/crunch.zsh-theme
@@ -0,0 +1,37 @@
+# CRUNCH - created from Steve Eley's cat waxing.
+# Initially hacked from the Dallas theme. Thanks, Dallas Reedy.
+#
+# This theme assumes you do most of your oh-my-zsh'ed "colorful" work at a single machine,
+# and eschews the standard space-consuming user and hostname info. Instead, only the
+# things that vary in my own workflow are shown:
+#
+# * The time (not the date)
+# * The RVM version and gemset (omitting the 'ruby' name if it's MRI)
+# * The current directory
+# * The Git branch and its 'dirty' state
+#
+# Colors are at the top so you can mess with those separately if you like.
+# For the most part I stuck with Dallas's.
+
+CRUNCH_BRACKET_COLOR="%{$fg[white]%}"
+CRUNCH_TIME_COLOR="%{$fg[yellow]%}"
+CRUNCH_RVM_COLOR="%{$fg[magenta]%}"
+CRUNCH_DIR_COLOR="%{$fg[cyan]%}"
+CRUNCH_GIT_BRANCH_COLOR="%{$fg[green]%}"
+CRUNCH_GIT_CLEAN_COLOR="%{$fg[green]%}"
+CRUNCH_GIT_DIRTY_COLOR="%{$fg[red]%}"
+
+# These Git variables are used by the oh-my-zsh git_prompt_info helper:
+ZSH_THEME_GIT_PROMPT_PREFIX="$CRUNCH_BRACKET_COLOR:$CRUNCH_GIT_BRANCH_COLOR"
+ZSH_THEME_GIT_PROMPT_SUFFIX=""
+ZSH_THEME_GIT_PROMPT_CLEAN=" $CRUNCH_GIT_CLEAN_COLOR✓"
+ZSH_THEME_GIT_PROMPT_DIRTY=" $CRUNCH_GIT_DIRTY_COLOR✗"
+
+# Our elements:
+CRUNCH_TIME_="$CRUNCH_BRACKET_COLOR{$CRUNCH_TIME_COLOR%T$CRUNCH_BRACKET_COLOR}%{$reset_color%}"
+CRUNCH_RVM_="$CRUNCH_BRACKET_COLOR"["$CRUNCH_RVM_COLOR\${\$(~/.rvm/bin/rvm-prompt i v g)#ruby-}$CRUNCH_BRACKET_COLOR"]"%{$reset_color%}"
+CRUNCH_DIR_="$CRUNCH_DIR_COLOR%~\$(git_prompt_info) "
+CRUNCH_PROMPT="$CRUNCH_BRACKET_COLOR➭ "
+
+# Put it all together!
+PROMPT="$CRUNCH_TIME_$CRUNCH_RVM_$CRUNCH_DIR_$CRUNCH_PROMPT%{$reset_color%}"
diff --git a/themes/fox.zsh-theme b/themes/fox.zsh-theme
new file mode 100644
index 000000000..1959853cf
--- /dev/null
+++ b/themes/fox.zsh-theme
@@ -0,0 +1,8 @@
+#fox theme
+PROMPT='%{$fg[cyan]%}┌[%{$fg_bold[white]%}%n%{$reset_color%}%{$fg[cyan]%}☮%{$fg_bold[white]%}%M%{$reset_color%}%{$fg[cyan]%}]%{$fg[white]%}-%{$fg[cyan]%}(%{$fg_bold[white]%}%~%{$reset_color%}%{$fg[cyan]%})$(git_prompt_info)
+└> % %{$reset_color%}'
+
+ZSH_THEME_GIT_PROMPT_PREFIX="-[%{$reset_color%}%{$fg[white]%}git://%{$fg_bold[white]%}"
+ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}%{$fg[cyan]%}]-"
+ZSH_THEME_GIT_PROMPT_DIRTY=" %{$fg[red]%}✗%{$reset_color%}"
+ZSH_THEME_GIT_PROMPT_CLEAN=" %{$fg[green]%}✔%{$reset_color%}"
diff --git a/themes/gnzh.zsh-theme b/themes/gnzh.zsh-theme
new file mode 100644
index 000000000..3c6b8a409
--- /dev/null
+++ b/themes/gnzh.zsh-theme
@@ -0,0 +1,54 @@
+# ZSH Theme - Preview: http://dl.dropbox.com/u/4109351/pics/gnzh-zsh-theme.png
+# Based on bira theme
+
+# load some modules
+autoload -U colors zsh/terminfo # Used in the colour alias below
+colors
+setopt prompt_subst
+
+# make some aliases for the colours: (coud use normal escap.seq's too)
+for color in RED GREEN YELLOW BLUE MAGENTA CYAN WHITE; do
+ eval PR_$color='%{$fg[${(L)color}]%}'
+done
+eval PR_NO_COLOR="%{$terminfo[sgr0]%}"
+eval PR_BOLD="%{$terminfo[bold]%}"
+
+# Check the UID
+if [[ $UID -ge 1000 ]]; then # normal user
+ eval PR_USER='${PR_GREEN}%n${PR_NO_COLOR}'
+ eval PR_USER_OP='${PR_GREEN}%#${PR_NO_COLOR}'
+ local PR_PROMPT='$PR_NO_COLOR➤ $PR_NO_COLOR'
+elif [[ $UID -eq 0 ]]; then # root
+ eval PR_USER='${PR_RED}%n${PR_NO_COLOR}'
+ eval PR_USER_OP='${PR_RED}%#${PR_NO_COLOR}'
+ local PR_PROMPT='$PR_RED➤ $PR_NO_COLOR'
+fi
+
+# Check if we are on SSH or not
+if [[ -n "$SSH_CLIENT" || -n "$SSH2_CLIENT" ]]; then
+ eval PR_HOST='${PR_YELLOW}%M${PR_NO_COLOR}' #SSH
+else
+ eval PR_HOST='${PR_GREEN}%M${PR_NO_COLOR}' # no SSH
+fi
+
+local return_code="%(?..%{$PR_RED%}%? ↵%{$PR_NO_COLOR%})"
+
+local user_host='${PR_USER}${PR_CYAN}@${PR_HOST}'
+local current_dir='%{$PR_BOLD$PR_BLUE%}%~%{$PR_NO_COLOR%}'
+local rvm_ruby=''
+if which rvm-prompt &> /dev/null; then
+ rvm_ruby='%{$PR_RED%}‹$(rvm-prompt i v g s)›%{$PR_NO_COLOR%}'
+else
+ if which rbenv &> /dev/null; then
+ rvm_ruby='%{$PR_RED%}‹$(rbenv version | sed -e "s/ (set.*$//")›%{$PR_NO_COLOR%}'
+ fi
+fi
+local git_branch='$(git_prompt_info)%{$PR_NO_COLOR%}'
+
+#PROMPT="${user_host} ${current_dir} ${rvm_ruby} ${git_branch}$PR_PROMPT "
+PROMPT="╭─${user_host} ${current_dir} ${rvm_ruby} ${git_branch}
+╰─$PR_PROMPT "
+RPS1="${return_code}"
+
+ZSH_THEME_GIT_PROMPT_PREFIX="%{$PR_YELLOW%}‹"
+ZSH_THEME_GIT_PROMPT_SUFFIX="› %{$PR_NO_COLOR%}"
diff --git a/themes/norm.zsh-theme b/themes/norm.zsh-theme
new file mode 100644
index 000000000..5f0ad03ee
--- /dev/null
+++ b/themes/norm.zsh-theme
@@ -0,0 +1,4 @@
+PROMPT='%{$fg[yellow]%}λ %{$fg[green]%}%c %{$fg[yellow]%}→ $(git_prompt_info)%{$reset_color%}'
+
+ZSH_THEME_GIT_PROMPT_PREFIX="λ %{$fg[blue]%}git %{$fg[red]%}"
+ZSH_THEME_GIT_PROMPT_SUFFIX="%{$fg[yellow]%} → %{$reset_color%}"
diff --git a/themes/wuffers.zsh-theme b/themes/wuffers.zsh-theme
new file mode 100644
index 000000000..182d8a34f
--- /dev/null
+++ b/themes/wuffers.zsh-theme
@@ -0,0 +1,5 @@
+ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg_bold[blue]%}["
+ZSH_THEME_GIT_PROMPT_SUFFIX="]%{$reset_color%} "
+ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg_bold[red]%} x%{$fg_bold[blue]%}"
+
+PROMPT='%{$(git_prompt_info)%}%{$fg_bold[green]%}{%{$(rvm current)%}}%{$reset_color%} %{$fg[cyan]%}%c%{$reset_color%} '
diff --git a/tools/require_tool.sh b/tools/require_tool.sh
new file mode 100755
index 000000000..1fa77f77a
--- /dev/null
+++ b/tools/require_tool.sh
@@ -0,0 +1,161 @@
+__require_tool_version_compare ()
+{
+ (
+ # Locally ignore failures, otherwise we'll exit whenever $1 and $2
+ # are not equal!
+ set +e
+
+awk_strverscmp='
+ # Use only awk features that work with 7th edition Unix awk (1978).
+ # My, what an old awk you have, Mr. Solaris!
+ END {
+ while (length(v1) || length(v2)) {
+ # Set d1 to be the next thing to compare from v1, and likewise for d2.
+ # Normally this is a single character, but if v1 and v2 contain digits,
+ # compare them as integers and fractions as strverscmp does.
+ if (v1 ~ /^[0-9]/ && v2 ~ /^[0-9]/) {
+ # Split v1 and v2 into their leading digit string components d1 and d2,
+ # and advance v1 and v2 past the leading digit strings.
+ for (len1 = 1; substr(v1, len1 + 1) ~ /^[0-9]/; len1++) continue
+ for (len2 = 1; substr(v2, len2 + 1) ~ /^[0-9]/; len2++) continue
+ d1 = substr(v1, 1, len1); v1 = substr(v1, len1 + 1)
+ d2 = substr(v2, 1, len2); v2 = substr(v2, len2 + 1)
+ if (d1 ~ /^0/) {
+ if (d2 ~ /^0/) {
+ # Compare two fractions.
+ while (d1 ~ /^0/ && d2 ~ /^0/) {
+ d1 = substr(d1, 2); len1--
+ d2 = substr(d2, 2); len2--
+ }
+ if (len1 != len2 && ! (len1 && len2 && substr(d1, 1, 1) == substr(d2, 1, 1))) {
+ # The two components differ in length, and the common prefix
+ # contains only leading zeros. Consider the longer to be less.
+ d1 = -len1
+ d2 = -len2
+ } else {
+ # Otherwise, compare as strings.
+ d1 = "x" d1
+ d2 = "x" d2
+ }
+ } else {
+ # A fraction is less than an integer.
+ exit 1
+ }
+ } else {
+ if (d2 ~ /^0/) {
+ # An integer is greater than a fraction.
+ exit 2
+ } else {
+ # Compare two integers.
+ d1 += 0
+ d2 += 0
+ }
+ }
+ } else {
+ # The normal case, without worrying about digits.
+ if (v1 == "") d1 = v1; else { d1 = substr(v1, 1, 1); v1 = substr(v1,2) }
+ if (v2 == "") d2 = v2; else { d2 = substr(v2, 1, 1); v2 = substr(v2,2) }
+ }
+ if (d1 < d2) exit 1
+ if (d1 > d2) exit 2
+ }
+ }
+'
+ awk "$awk_strverscmp" v1="$1" v2="$2" /dev/null
+ case $? in
+ 1) echo '<';;
+ 0) echo '=';;
+ 2) echo '>';;
+ esac
+ )
+}
+
+
+__require_tool_fatal ()
+{
+ echo $@ >/dev/stderr
+ return 1
+}
+
+# Usage: require_tool program version
+# Returns: 0 if $1 version if greater equals than $2, 1 otherwise.
+# In case of error, message is written on error output.
+#
+# Example: require_tool gcc 4.6
+# Use GCC environment variable if defined instead of lookup for the tool
+# in the environment.
+require_tool ()
+{
+ envvar_name=$(echo $1 | tr '[:lower:]' '[:upper:]')
+ tool=$(printenv $envvar_name || echo $1)
+ local version=$($tool --version 2>/dev/null| \
+ sed -n 's/.*[^0-9.]\([0-9]*\.[0-9.]*\).*/\1/p;q')
+ if test x"$version" = x ; then
+ echo "$tool is required" >/dev/stderr
+ return 1
+ fi
+ case $(__require_tool_version_compare "$2" "$version") in
+ '>')
+ echo "$1 $2 or better is required: this is $tool $version" >/dev/stderr
+ return 1
+ ;;
+ esac
+}
+
+usage() {
+ cat <<EOF
+NAME
+ require_tool.sh - Ensure version of a tool is greater than the one expected
+
+SYNOPSYS
+ require_tool.sh [ -h ]
+ [ --help ]
+ [ TOOL MIN_VERSION ]
+
+DESCRIPTION
+ TOOL is the name or path of the program to check. If the name is specified, its
+ path is deduced from PATH environment variable. If environment variable TOOL
+ (in upper-case characters) is defined, considers its value as path to the tool.
+
+ MIN_VERSION is a string representing the minimum required version.
+
+BEHAVIOR
+ * locate path to the program.
+ * execute $ TOOL_PATH --version
+ * extract version from standard output.
+ * compare this version to the expected one.
+
+OPTIONS
+ -h --help
+ Display this message and exit 0
+
+ERRORS
+ if program is not found or its version is prior to expected version,
+ a message is written to error output.
+
+EXIT VALUE
+ returns 0 if program version if greater equals than expected version,
+ returns 1 otherwise.
+
+EXAMPLE
+ $ require_tool.sh emacs 23
+ $ CC=g++ require_tool.sh cc 4.6
+ $ require_tool.sh zsh 4.5
+
+EOF
+}
+
+for arg in $@; do
+ case $arg in
+ -h|--help)
+ usage
+ exit 0
+ ;;
+ esac
+done
+if [ $# -gt 2 ] ; then
+ echo "ERROR: expecting 2 parameters. Please see option --help"
+ exit 1
+fi
+
+require_tool $@
diff --git a/tools/theme_chooser.sh b/tools/theme_chooser.sh
new file mode 100755
index 000000000..4d7047444
--- /dev/null
+++ b/tools/theme_chooser.sh
@@ -0,0 +1,96 @@
+#!/bin/zsh
+
+# Zsh Theme Chooser by fox (fox91 at anche dot no)
+# This program is free software. It comes without any warranty, to
+# the extent permitted by applicable law. You can redistribute it
+# and/or modify it under the terms of the Do What The Fuck You Want
+# To Public License, Version 2, as published by Sam Hocevar. See
+# http://sam.zoy.org/wtfpl/COPYING for more details.
+
+THEMES_DIR="$ZSH/themes"
+FAVLIST="${HOME}/.zsh_favlist"
+source $ZSH/oh-my-zsh.sh
+
+function noyes() {
+ read "a?$1 [y/N] "
+ if [[ $a == "N" || $a == "n" || $a = "" ]]; then
+ return 0
+ fi
+ return 1
+}
+
+function theme_preview() {
+ THEME=$1
+ THEME_NAME=`echo $THEME | sed s/\.zsh-theme$//`
+ print "$fg[blue]${(l.((${COLUMNS}-${#THEME_NAME}-5))..─.)}$reset_color $THEME_NAME $fg[blue]───$reset_color"
+ source "$THEMES_DIR/$THEME"
+ print -P $PROMPT
+}
+
+function banner() {
+ echo
+ echo "╺━┓┏━┓╻ ╻ ╺┳╸╻ ╻┏━╸┏┳┓┏━╸ ┏━╸╻ ╻┏━┓┏━┓┏━┓┏━╸┏━┓"
+ echo "┏━┛┗━┓┣━┫ ┃ ┣━┫┣╸ ┃┃┃┣╸ ┃ ┣━┫┃ ┃┃ ┃┗━┓┣╸ ┣┳┛"
+ echo "┗━╸┗━┛╹ ╹ ╹ ╹ ╹┗━╸╹ ╹┗━╸ ┗━╸╹ ╹┗━┛┗━┛┗━┛┗━╸╹┗╸"
+ echo
+}
+
+function usage() {
+ echo "Usage: $0 [options] [theme]"
+ echo
+ echo "Options"
+ echo " -l List available themes"
+ echo " -s Show all themes"
+ echo " -h Get this help message"
+ exit 1
+}
+
+function list_themes() {
+ for THEME in $(ls $THEMES_DIR); do
+ THEME_NAME=`echo $THEME | sed s/\.zsh-theme$//`
+ echo $THEME_NAME
+ done
+}
+
+function insert_favlist() {
+ if grep -q "$THEME_NAME" $FAVLIST 2> /dev/null ; then
+ echo "Already in favlist"
+ else
+ echo $THEME_NAME >> $FAVLIST
+ echo "Saved to favlist"
+ fi
+
+}
+
+function theme_chooser() {
+ for THEME in $(ls $THEMES_DIR); do
+ echo
+ theme_preview $THEME
+ echo
+ if [[ -z $1 ]]; then
+ noyes "Do you want to add it to your favourite list ($FAVLIST)?" || \
+ insert_favlist $THEME_NAME
+ echo
+ fi
+ done
+}
+
+while getopts ":lhs" Option
+do
+ case $Option in
+ l ) list_themes ;;
+ s ) theme_chooser 0 ;;
+ h ) usage ;;
+ * ) usage ;; # Default.
+ esac
+done
+
+if [[ -z $Option ]]; then
+ if [[ -z $1 ]]; then
+ banner
+ echo
+ theme_chooser
+ else
+ theme_preview $1".zsh-theme"
+ fi
+fi