summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rw-r--r--oh-my-zsh.sh14
-rw-r--r--plugins/git-flow/git-flow.plugin.zsh332
-rw-r--r--plugins/lein/lein.plugin.zsh27
-rw-r--r--plugins/rails3/rails3.plugin.zsh34
-rw-r--r--templates/zshrc.zsh-template4
6 files changed, 404 insertions, 10 deletions
diff --git a/.gitignore b/.gitignore
index 8d19d100c..4b555067e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,4 +2,5 @@ locals.zsh
log/.zsh_history
projects.zsh
custom/*
-!custom/example.zsh \ No newline at end of file
+!custom/example.zsh
+cache
diff --git a/oh-my-zsh.sh b/oh-my-zsh.sh
index bf108afce..3ea88e924 100644
--- a/oh-my-zsh.sh
+++ b/oh-my-zsh.sh
@@ -26,7 +26,19 @@ done
for config_file ($ZSH/custom/*.zsh) source $config_file
# Load the theme
-source "$ZSH/themes/$ZSH_THEME.zsh-theme"
+# Check for updates on initial load...
+if [ "$ZSH_THEME" = "random" ]
+then
+ themes=($ZSH/themes/*zsh-theme)
+ N=${#themes[@]}
+ ((N=RANDOM%N))
+ RANDOM_THEME=${themes[$N]}
+ source "$RANDOM_THEME"
+ echo "[oh-my-zsh] Random theme '$RANDOM_THEME' loaded..."
+else
+ source "$ZSH/themes/$ZSH_THEME.zsh-theme"
+fi
+
# Check for updates on initial load...
if [ "$DISABLE_AUTO_UPDATE" = "true" ]
diff --git a/plugins/git-flow/git-flow.plugin.zsh b/plugins/git-flow/git-flow.plugin.zsh
new file mode 100644
index 000000000..270bcbe38
--- /dev/null
+++ b/plugins/git-flow/git-flow.plugin.zsh
@@ -0,0 +1,332 @@
+#!zsh
+#
+# Installation
+# ------------
+#
+# To achieve git-flow completion nirvana:
+#
+# 0. Update your zsh's git-completion module to the newest verion.
+# From here. http://zsh.git.sourceforge.net/git/gitweb.cgi?p=zsh/zsh;a=blob_plain;f=Completion/Unix/Command/_git;hb=HEAD
+#
+# 1. Install this file. Either:
+#
+# a. Place it in your .zshrc:
+#
+# b. Or, copy it somewhere (e.g. ~/.git-flow-completion.zsh) and put the following line in
+# your .zshrc:
+#
+# source ~/.git-flow-completion.zsh
+#
+# c. Or, use this file as a oh-my-zsh plugin.
+#
+
+_git-flow ()
+{
+ local curcontext="$curcontext" state line
+ typeset -A opt_args
+
+ _arguments -C \
+ ':command:->command' \
+ '*::options:->options'
+
+ case $state in
+ (command)
+
+ local -a subcommands
+ subcommands=(
+ 'init:Initialize a new git repo with support for the branching model.'
+ 'feature:Manage your feature branches.'
+ 'release:Manage your release branches.'
+ 'hotfix:Manage your hotfix branches.'
+ 'support:Manage your support branches.'
+ 'version:Shows version information.'
+ )
+ _describe -t commands 'git flow' subcommands
+ ;;
+
+ (options)
+ case $line[1] in
+
+ (init)
+ _arguments \
+ -f'[Force setting of gitflow branches, even if already configured]'
+ ;;
+
+ (version)
+ ;;
+
+ (hotfix)
+ __git-flow-hotfix
+ ;;
+
+ (release)
+ __git-flow-release
+ ;;
+
+ (feature)
+ __git-flow-feature
+ ;;
+ esac
+ ;;
+ esac
+}
+
+__git-flow-release ()
+{
+ local curcontext="$curcontext" state line
+ typeset -A opt_args
+
+ _arguments -C \
+ ':command:->command' \
+ '*::options:->options'
+
+ case $state in
+ (command)
+
+ local -a subcommands
+ subcommands=(
+ 'start:Start a new release branch.'
+ 'finish:Finish a release branch.'
+ 'list:List all your release branches. (Alias to `git flow release`)'
+ )
+ _describe -t commands 'git flow release' subcommands
+ _arguments \
+ -v'[Verbose (more) output]'
+ ;;
+
+ (options)
+ case $line[1] in
+
+ (start)
+ _arguments \
+ -F'[Fetch from origin before performing finish]'\
+ ':version:__git_flow_version_list'
+ ;;
+
+ (finish)
+ _arguments \
+ -F'[Fetch from origin before performing finish]' \
+ -s'[Sign the release tag cryptographically]'\
+ -u'[Use the given GPG-key for the digital signature (implies -s)]'\
+ -m'[Use the given tag message]'\
+ -p'[Push to $ORIGIN after performing finish]'\
+ ':version:__git_flow_version_list'
+ ;;
+
+ *)
+ _arguments \
+ -v'[Verbose (more) output]'
+ ;;
+ esac
+ ;;
+ esac
+}
+
+__git-flow-hotfix ()
+{
+ local curcontext="$curcontext" state line
+ typeset -A opt_args
+
+ _arguments -C \
+ ':command:->command' \
+ '*::options:->options'
+
+ case $state in
+ (command)
+
+ local -a subcommands
+ subcommands=(
+ 'start:Start a new hotfix branch.'
+ 'finish:Finish a hotfix branch.'
+ 'list:List all your hotfix branches. (Alias to `git flow hotfix`)'
+ )
+ _describe -t commands 'git flow hotfix' subcommands
+ _arguments \
+ -v'[Verbose (more) output]'
+ ;;
+
+ (options)
+ case $line[1] in
+
+ (start)
+ _arguments \
+ -F'[Fetch from origin before performing finish]'\
+ ':hotfix:__git_flow_version_list'\
+ ':branch-name:__git_branch_names'
+ ;;
+
+ (finish)
+ _arguments \
+ -F'[Fetch from origin before performing finish]' \
+ -s'[Sign the release tag cryptographically]'\
+ -u'[Use the given GPG-key for the digital signature (implies -s)]'\
+ -m'[Use the given tag message]'\
+ -p'[Push to $ORIGIN after performing finish]'\
+ ':hotfix:__git_flow_hotfix_list'
+ ;;
+
+ *)
+ _arguments \
+ -v'[Verbose (more) output]'
+ ;;
+ esac
+ ;;
+ esac
+}
+
+__git-flow-feature ()
+{
+ local curcontext="$curcontext" state line
+ typeset -A opt_args
+
+ _arguments -C \
+ ':command:->command' \
+ '*::options:->options'
+
+ case $state in
+ (command)
+
+ local -a subcommands
+ subcommands=(
+ 'start:Start a new feature branch.'
+ 'finish:Finish a feature branch.'
+ 'list:List all your feature branches. (Alias to `git flow feature`)'
+ 'publish: public'
+ 'track: track'
+ 'diff: diff'
+ 'rebase: rebase'
+ 'checkout: checkout'
+ 'pull: pull'
+ )
+ _describe -t commands 'git flow feature' subcommands
+ _arguments \
+ -v'[Verbose (more) output]'
+ ;;
+
+ (options)
+ case $line[1] in
+
+ (start)
+ _arguments \
+ -F'[Fetch from origin before performing finish]'\
+ ':feature:__git_flow_feature_list'\
+ ':branch-name:__git_branch_names'
+ ;;
+
+ (finish)
+ _arguments \
+ -F'[Fetch from origin before performing finish]' \
+ -r'[Rebase instead of merge]'\
+ ':feature:__git_flow_feature_list'
+ ;;
+
+ (publish)
+ _arguments \
+ ':feature:__git_flow_feature_list'\
+ ;;
+
+ (track)
+ _arguments \
+ ':feature:__git_flow_feature_list'\
+ ;;
+
+ (diff)
+ _arguments \
+ ':branch:__git_branch_names'\
+ ;;
+
+ (rebase)
+ _arguments \
+ -i'[Do an interactive rebase]' \
+ ':branch:__git_branch_names'
+ ;;
+
+ (checkout)
+ _arguments \
+ ':branch:__git_flow_feature_list'\
+ ;;
+
+ (pull)
+ _arguments \
+ ':remote:__git_remotes'\
+ ':branch:__git_branch_names'
+ ;;
+
+ *)
+ _arguments \
+ -v'[Verbose (more) output]'
+ ;;
+ esac
+ ;;
+ esac
+}
+
+__git_flow_version_list ()
+{
+ local expl
+ declare -a versions
+
+ versions=(${${(f)"$(_call_program versions git flow release list 2> /dev/null | tr -d ' |*')"}})
+ __git_command_successful || return
+
+ _wanted versions expl 'version' compadd $versions
+}
+
+__git_flow_feature_list ()
+{
+ local expl
+ declare -a features
+
+ features=(${${(f)"$(_call_program features git flow feature list 2> /dev/null | tr -d ' |*')"}})
+ __git_command_successful || return
+
+ _wanted features expl 'feature' compadd $features
+}
+
+__git_remotes () {
+ local expl gitdir remotes
+
+ gitdir=$(_call_program gitdir git rev-parse --git-dir 2>/dev/null)
+ __git_command_successful || return
+
+ remotes=(${${(f)"$(_call_program remotes git config --get-regexp '"^remote\..*\.url$"')"}//#(#b)remote.(*).url */$match[1]})
+ __git_command_successful || return
+
+ # TODO: Should combine the two instead of either or.
+ if (( $#remotes > 0 )); then
+ _wanted remotes expl remote compadd $* - $remotes
+ else
+ _wanted remotes expl remote _files $* - -W "($gitdir/remotes)" -g "$gitdir/remotes/*"
+ fi
+}
+
+__git_flow_hotfix_list ()
+{
+ local expl
+ declare -a hotfixes
+
+ hotfixes=(${${(f)"$(_call_program hotfixes git flow hotfix list 2> /dev/null | tr -d ' |*')"}})
+ __git_command_successful || return
+
+ _wanted hotfixes expl 'hotfix' compadd $hotfixes
+}
+
+__git_branch_names () {
+ local expl
+ declare -a branch_names
+
+ branch_names=(${${(f)"$(_call_program branchrefs git for-each-ref --format='"%(refname)"' refs/heads 2>/dev/null)"}#refs/heads/})
+ __git_command_successful || return
+
+ _wanted branch-names expl branch-name compadd $* - $branch_names
+}
+
+__git_command_successful () {
+ if (( ${#pipestatus:#0} > 0 )); then
+ _message 'not a git repository'
+ return 1
+ fi
+ return 0
+}
+
+zstyle ':completion:*:*:git:*' user-commands flow:'description for foo' \ No newline at end of file
diff --git a/plugins/lein/lein.plugin.zsh b/plugins/lein/lein.plugin.zsh
new file mode 100644
index 000000000..19af3556a
--- /dev/null
+++ b/plugins/lein/lein.plugin.zsh
@@ -0,0 +1,27 @@
+function _lein_commands() {
+ local ret=1 state
+ _arguments ':subcommand:->subcommand' && ret=0
+
+ case $state in
+ subcommand)
+ subcommands=(
+ "clean:remove compiled files and dependencies from project"
+ "compile:ahead-of-time compile the project"
+ "deps:download and install all dependencies"
+ "help:display a list of tasks or help for a given task"
+ "install:install the project and its dependencies in your local repository"
+ "jar:create a jar file containing the compiled .class files"
+ "new:create a new project skeleton"
+ "pom:write a pom.xml file to disk for maven interop"
+ "test:run the project's tests"
+ "uberjar:Create a jar including the contents of each of deps"
+ "upgrade:upgrade leiningen to the latest stable release"
+ "version:print leiningen's version"
+ )
+ _describe -t subcommands 'leiningen subcommands' subcommands && ret=0
+ esac
+
+ return ret
+}
+
+compdef _lein_commands lein
diff --git a/plugins/rails3/rails3.plugin.zsh b/plugins/rails3/rails3.plugin.zsh
index 6bf2ba088..f669ef047 100644
--- a/plugins/rails3/rails3.plugin.zsh
+++ b/plugins/rails3/rails3.plugin.zsh
@@ -1,10 +1,30 @@
-alias rs='ruby script/rails server'
-alias rg='ruby script/rails generate'
-alias rd='ruby script/rails destroy'
-alias rp='ruby script/rails plugin'
+# Rails 3 aliases, backwards-compatible with Rails 2.
+
+function _bundle_command {
+ if command -v bundle && [ -e "Gemfile" ]; then
+ bundle exec $@
+ else
+ $@
+ fi
+}
+
+function _rails_command () {
+ if [ -e "script/server" ]; then
+ ruby script/$@
+ else
+ ruby script/rails $@
+ fi
+}
+
+alias rc='_rails_command console'
+alias rd='_rails_command destroy'
+alias rdb='_rails_command dbconsole'
alias rdbm='rake db:migrate db:test:clone'
-alias rdbmr='rake db:migrate && rake db:migrate:redo'
-alias rc='ruby script/rails console'
-alias rd='ruby script/rails server --debugger'
+alias rg='_rails_command generate'
+alias rp='_rails_command plugin'
+alias rs='_rails_command server'
+alias rsd='_rails_command server --debugger'
alias devlog='tail -f log/development.log'
+alias rspec='_bundle_command rspec'
+alias cuke='_bundle_command cucumber'
diff --git a/templates/zshrc.zsh-template b/templates/zshrc.zsh-template
index 506daa9a2..576d45eaa 100644
--- a/templates/zshrc.zsh-template
+++ b/templates/zshrc.zsh-template
@@ -1,8 +1,10 @@
# Path to your oh-my-zsh configuration.
export ZSH=$HOME/.oh-my-zsh
-# Set to the name theme to load.
+# Set name of the theme to load.
# Look in ~/.oh-my-zsh/themes/
+# Optionally, if you set this to "random", it'll load a random theme each
+# time that oh-my-zsh is loaded.
export ZSH_THEME="robbyrussell"
# Set to this to use case-sensitive completion