diff options
57 files changed, 1442 insertions, 143 deletions
diff --git a/README.textile b/README.textile index 2dbfbe5a6..eca968089 100644 --- a/README.textile +++ b/README.textile @@ -8,6 +8,14 @@ h2. Setup h3. The automatic installer... (do you trust me?) +You can install this via the command line with either `curl` or `wget`. + +h4. via `curl` + +@curl -L https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh | sh@ + +h4. via `wget` + @wget --no-check-certificate https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh@ h3. The manual way diff --git a/lib/completion.zsh b/lib/completion.zsh index b3cc91822..0e5d480ff 100644 --- a/lib/completion.zsh +++ b/lib/completion.zsh @@ -32,9 +32,11 @@ zstyle ':completion:*:cd:*' tag-order local-directories directory-stack path-dir cdpath=(.) # use /etc/hosts and known_hosts for hostname completion +[ -r /etc/ssh/ssh_known_hosts ] && _global_ssh_hosts=(${${${${(f)"$(</etc/ssh/ssh_known_hosts)"}:#[\|]*}%%\ *}%%,*}) || _ssh_hosts=() [ -r ~/.ssh/known_hosts ] && _ssh_hosts=(${${${${(f)"$(<$HOME/.ssh/known_hosts)"}:#[\|]*}%%\ *}%%,*}) || _ssh_hosts=() [ -r /etc/hosts ] && : ${(A)_etc_hosts:=${(s: :)${(ps:\t:)${${(f)~~"$(</etc/hosts)"}%%\#*}##[:blank:]#[^[:blank:]]#}}} || _etc_hosts=() hosts=( + "$_global_ssh_hosts[@]" "$_ssh_hosts[@]" "$_etc_hosts[@]" `hostname` diff --git a/lib/functions.zsh b/lib/functions.zsh index ef7cc6383..d2dcadd0c 100644 --- a/lib/functions.zsh +++ b/lib/functions.zsh @@ -3,11 +3,11 @@ function zsh_stats() { } function uninstall_oh_my_zsh() { - /bin/sh $ZSH/tools/uninstall.sh + /usr/bin/env ZSH=$ZSH /bin/sh $ZSH/tools/uninstall.sh } function upgrade_oh_my_zsh() { - /bin/sh $ZSH/tools/upgrade.sh + /usr/bin/env ZSH=$ZSH /bin/sh $ZSH/tools/upgrade.sh } function take() { diff --git a/lib/git.zsh b/lib/git.zsh index f04343650..defa062c6 100644 --- a/lib/git.zsh +++ b/lib/git.zsh @@ -6,7 +6,7 @@ function git_prompt_info() { # Checks if working tree is dirty parse_git_dirty() { - if [[ -n $(git status -s 2> /dev/null) ]]; then + if [[ -n $(git status -s --ignore-submodules=dirty 2> /dev/null) ]]; then echo "$ZSH_THEME_GIT_PROMPT_DIRTY" else echo "$ZSH_THEME_GIT_PROMPT_CLEAN" diff --git a/lib/history.zsh b/lib/history.zsh index ca6f57079..876936b87 100644 --- a/lib/history.zsh +++ b/lib/history.zsh @@ -3,14 +3,11 @@ HISTFILE=$HOME/.zsh_history HISTSIZE=10000 SAVEHIST=10000 -setopt hist_ignore_dups # ignore duplication command history list -setopt share_history # share command history data - -setopt hist_verify -setopt inc_append_history +setopt append_history setopt extended_history setopt hist_expire_dups_first +setopt hist_ignore_dups # ignore duplication command history list setopt hist_ignore_space - -setopt SHARE_HISTORY -setopt APPEND_HISTORY +setopt hist_verify +setopt inc_append_history +setopt share_history # share command history data diff --git a/lib/termsupport.zsh b/lib/termsupport.zsh index 22e7f372f..221989502 100644 --- a/lib/termsupport.zsh +++ b/lib/termsupport.zsh @@ -4,7 +4,7 @@ #Limited support for Apple Terminal (Terminal can't set window or tab separately) function title { [ "$DISABLE_AUTO_TITLE" != "true" ] || return - if [[ "$TERM" == screen* ]]; then + if [[ "$TERM" == screen* ]]; then print -Pn "\ek$1:q\e\\" #set screen hardstatus, usually truncated at 20 chars elif [[ "$TERM" == xterm* ]] || [[ $TERM == rxvt* ]] || [[ "$TERM_PROGRAM" == "iTerm.app" ]]; then print -Pn "\e]2;$2:q\a" #set window name @@ -16,14 +16,18 @@ ZSH_THEME_TERM_TAB_TITLE_IDLE="%15<..<%~%<<" #15 char left truncated PWD ZSH_THEME_TERM_TITLE_IDLE="%n@%m: %~" #Appears when you have the prompt -function precmd { +function omz_termsupport_precmd { title $ZSH_THEME_TERM_TAB_TITLE_IDLE $ZSH_THEME_TERM_TITLE_IDLE } #Appears at the beginning of (and during) of command execution -function preexec { +function omz_termsupport_preexec { emulate -L zsh setopt extended_glob local CMD=${1[(wr)^(*=*|sudo|ssh|-*)]} #cmd name only, or if this is sudo or ssh, the next cmd title "$CMD" "%100>...>$2%<<" } + +autoload -U add-zsh-hook +add-zsh-hook precmd omz_termsupport_precmd +add-zsh-hook preexec omz_termsupport_preexec diff --git a/oh-my-zsh.sh b/oh-my-zsh.sh index 6ab2ba35f..aeeaa3daf 100644 --- a/oh-my-zsh.sh +++ b/oh-my-zsh.sh @@ -1,7 +1,7 @@ # Check for updates on initial load... if [ "$DISABLE_AUTO_UPDATE" != "true" ] then - /usr/bin/env zsh $ZSH/tools/check_for_upgrade.sh + /usr/bin/env ZSH=$ZSH zsh $ZSH/tools/check_for_upgrade.sh fi # Initializes Oh My Zsh @@ -13,25 +13,39 @@ fpath=($ZSH/functions $ZSH/completions $fpath) # TIP: Add files you don't want in git to .gitignore for config_file ($ZSH/lib/*.zsh) source $config_file -# Add all defined plugins to fpath +# Set ZSH_CUSTOM to the path where your custom config files +# and plugins exists, or else we will use the default custom/ +if [[ -z "$ZSH_CUSTOM" ]]; then + ZSH_CUSTOM="$ZSH/custom" +fi + +# Add all defined plugins to fpath. This must be done +# before running compinit. plugin=${plugin:=()} -for plugin ($plugins) fpath=($ZSH/plugins/$plugin $fpath) +for plugin ($plugins); do + if [ -f $ZSH_CUSTOM/plugins/$plugin/$plugin.plugin.zsh ]; then + fpath=($ZSH_CUSTOM/plugins/$plugin $fpath) + elif [ -f $ZSH/plugins/$plugin/$plugin.plugin.zsh ]; then + fpath=($ZSH/plugins/$plugin $fpath) + fi +done # Load and run compinit autoload -U compinit compinit -i + # 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/autojump/autojump.plugin.zsh b/plugins/autojump/autojump.plugin.zsh index da0a12765..6f9b80bff 100644 --- a/plugins/autojump/autojump.plugin.zsh +++ b/plugins/autojump/autojump.plugin.zsh @@ -1,3 +1,5 @@ -if [ -f `brew --prefix`/etc/autojump ]; then +if [ -f /opt/local/etc/profile.d/autojump.sh ]; then + . /opt/local/etc/profile.d/autojump.sh +elif [ -f `brew --prefix`/etc/autojump ]; then . `brew --prefix`/etc/autojump fi 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..3c96b8da9 100644 --- a/plugins/bundler/bundler.plugin.zsh +++ b/plugins/bundler/bundler.plugin.zsh @@ -1,12 +1,16 @@ +fpath=($ZSH/plugins/bundler $fpath) +autoload -U compinit +compinit -i + alias be="bundle exec" alias bi="bundle install" alias bl="bundle list" -alias bu="bundle update" alias bp="bundle package" +alias bu="bundle update" # The following is based on https://github.com/gma/bundler-exec -bundled_commands=(cap capify cucumber guard heroku rackup rails rake rspec ruby shotgun spec spork thin unicorn unicorn_rails) +bundled_commands=(cap capify cucumber foreman guard heroku nanoc rackup rails rainbows rake rspec ruby shotgun spec spork thin unicorn unicorn_rails) ## Functions @@ -33,5 +37,10 @@ _run-with-bundler() { ## Main program for cmd in $bundled_commands; do - alias $cmd="_run-with-bundler $cmd" + eval "function bundled_$cmd () { _run-with-bundler $cmd \$@}" + alias $cmd=bundled_$cmd + + if which _$cmd > /dev/null 2>&1; then + compdef _$cmd bundled_$cmd + fi done 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/deb/deb.plugin.zsh b/plugins/deb/deb.plugin.zsh deleted file mode 100644 index 1b35a0646..000000000 --- a/plugins/deb/deb.plugin.zsh +++ /dev/null @@ -1,13 +0,0 @@ -# Aliases -alias as="aptitude -F \"* %p -> %d \n(%v/%V)\" \ - --no-gui --disable-columns search" # search package -alias ad="sudo apt-get update" # update packages lists -alias au="sudo apt-get update && \ - sudo apt-get dselect-upgrade" # upgrade packages -alias ai="sudo apt-get install" # install package -alias ar="sudo apt-get remove --purge && \ - sudo apt-get autoremove --purge" # remove package -alias ap="apt-cache policy" # apt policy -alias av="apt-cache show" # show package info -alias acs="apt-cache search" # search package -alias ac="sudo apt-get clean && sudo apt-get autoclean" # clean apt cache diff --git a/plugins/debian/debian.plugin.zsh b/plugins/debian/debian.plugin.zsh index f8865a412..09771881d 100644 --- a/plugins/debian/debian.plugin.zsh +++ b/plugins/debian/debian.plugin.zsh @@ -1,53 +1,143 @@ -# https://github.com/dbbolton/ +# Authors: +# https://github.com/AlexBio +# https://github.com/dbb # # Debian-related zsh aliases and functions for zsh +# Use aptitude if installed, or apt-get if not. +# You can just set apt_pref='apt-get' to override it. +if [[ -e $( which aptitude ) ]]; then + apt_pref='aptitude' +else + apt_pref='apt-get' +fi + +# Use sudo by default if it's installed +if [[ -e $( which sudo ) ]]; then + use_sudo=1 +fi # Aliases ################################################################### +# These are for more obscure uses of apt-get and aptitude that aren't covered +# below. +alias ag='apt-get' +alias at='aptitude' # Some self-explanatory aliases -alias afs='apt-file search --regexp' +alias acs="apt-cache search" alias aps='aptitude search' -alias apsrc='apt-get source' -alias apv='apt-cache policy' +alias as="aptitude -F \"* %p -> %d \n(%v/%V)\" \ + --no-gui --disable-columns search" # search package -alias apdg='su -c "aptitude update && aptitude safe-upgrade"' -alias apud='su -c "aptitude update"' -alias apug='su -c "aptitude safe-upgrade"' +# apt-file +alias afs='apt-file search --regexp' + +# These are apt-get only +alias asrc='apt-get source' +alias ap='apt-cache policy' + +# superuser operations ###################################################### +if [[ $use_sudo -eq 1 ]]; then +# commands using sudo ####### + alias aac="sudo $apt_pref autoclean" + alias abd="sudo $apt_pref build-dep" + alias ac="sudo $apt_pref clean" + alias ad="sudo $apt_pref update" + alias adg="sudo $apt_pref update && sudo $apt_pref upgrade" + alias adu="sudo $apt_pref update && sudo $apt_pref dist-upgrade" + alias afu='sudo apt-file update' + alias ag="sudo $apt_pref upgrade" + alias ai="sudo $apt_pref install" + alias ap="sudo $apt_pref purge" + alias ar="sudo $apt_pref remove" + + # apt-get only + alias ads="sudo $apt_pref dselect-upgrade" + + # Install all .deb files in the current directory. + # Warning: you will need to put the glob in single quotes if you use: + # glob_subst + alias di='sudo dpkg -i ./*.deb' + + # Remove ALL kernel images and headers EXCEPT the one in use + alias kclean='sudo aptitude remove -P ?and(~i~nlinux-(ima|hea) \ + ?not(~n`uname -r`))' + + +# commands using su ######### +else + alias aac='su -ls "'"$apt_pref"' autoclean" root' + abd() { + cmd="su -lc '$apt_pref build-dep $@' root" + print "$cmd" + eval "$cmd" + } + alias ac='su -ls "'"$apt_pref"' clean" root' + alias ad='su -lc "'"$apt_pref"' update" root' + alias adg='su -lc "'"$apt_pref"' update && aptitude safe-upgrade" root' + alias adu='su -lc "'"$apt_pref"' update && aptitude dist-upgrade" root' + alias afu='su -lc "apt-file update"' + alias ag='su -lc "'"$apt_pref"' safe-upgrade" root' + ai() { + cmd="su -lc 'aptitude -P install $@' root" + print "$cmd" + eval "$cmd" + } + ap() { + cmd="su -lc '$apt_pref -P purge $@' root" + print "$cmd" + eval "$cmd" + } + ar() { + cmd="su -lc '$apt_pref -P remove $@' root" + print "$cmd" + eval "$cmd" + } + + # Install all .deb files in the current directory + # Assumes glob_subst is off + alias di='su -lc "dpkg -i ./*.deb" root' + + # Remove ALL kernel images and headers EXCEPT the one in use + alias kclean='su -lc '\''aptitude remove -P ?and(~i~nlinux-(ima|hea) \ + ?not(~n`uname -r`))'\'' root' +fi + + +# Misc. ##################################################################### # print all installed packages alias allpkgs='aptitude search -F "%p" --disable-columns ~i' -# Install all .deb files in the current directory. -# Warning: you will need to put the glob in single quotes if you use: -# glob_subst -alias di='su -c "dpkg -i ./*.deb"' - # Create a basic .deb package alias mydeb='time dpkg-buildpackage -rfakeroot -us -uc' -# Remove ALL kernel images and headers EXCEPT the one in use -alias kclean='su -c '\''aptitude remove -P ?and(~i~nlinux-(ima|hea) ?not(~n`uname -r`))'\'' root' -# Functions ################################################################# +# Functions ################################################################# # create a simple script that can be used to 'duplicate' a system apt-copy() { - print '#!/bin/sh'"\n" > apt-copy.sh + print '#!/bin/sh'"\n" > apt-copy.sh - list=$(perl -m'AptPkg::Cache' -e '$c=AptPkg::Cache->new; for (keys %$c){ push @a, $_ if $c->{$_}->{'CurrentState'} eq 'Installed';} print "$_ " for sort @a;') + cmd="$apt_pref install " - print 'aptitude install '"$list\n" >> apt-copy.sh + for p in ${(f)"$(aptitude search -F "%p" --disable-columns \~i)"}; { + cmd="${cmd} ${p}" + } - chmod +x apt-copy.sh + print $cmd "\n" >> apt-copy.sh + + chmod +x apt-copy.sh } # Kernel-package building shortcut -dbb-build () { - MAKEFLAGS='' # temporarily unset MAKEFLAGS ( '-j3' will fail ) +kerndeb () { + # temporarily unset MAKEFLAGS ( '-j3' will fail ) + MAKEFLAGS=$( print - $MAKEFLAGS | perl -pe 's/-j\s*[\d]+//g' ) + print '$MAKEFLAGS set to '"'$MAKEFLAGS'" appendage='-custom' # this shows up in $ (uname -r ) revision=$(date +"%Y%m%d") # this shows up in the .deb file name @@ -57,4 +147,3 @@ dbb-build () { "$revision" kernel_image kernel_headers } - diff --git a/plugins/git/git.plugin.zsh b/plugins/git/git.plugin.zsh index 4fcf9425d..c1b382b2c 100644 --- a/plugins/git/git.plugin.zsh +++ b/plugins/git/git.plugin.zsh @@ -17,6 +17,7 @@ alias gca='git commit -v -a' compdef _git gca=git-commit alias gco='git checkout' compdef _git gco=git-checkout +alias gcm='git checkout master' alias gb='git branch' compdef _git gb=git-branch alias gba='git branch -a' @@ -33,6 +34,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..9b0d54602 100644 --- a/plugins/github/github.plugin.zsh +++ b/plugins/github/github.plugin.zsh @@ -1,6 +1,60 @@ -# 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 + +# Functions ################################################################# + +# https://github.com/dbb + + +# empty_gh [NAME_OF_REPO] +# +# Use this when creating a new repo from scratch. +empty_gh() { # [NAME_OF_REPO] + repo = $1 + ghuser=$( git config github.user ) + + mkdir "$repo" + cd "$repo" + git init + touch README + git add README + git commit -m 'Initial commit.' + git remote add origin git@github.com:${ghuser}/${repo}.git + git push -u origin master +} + +# new_gh [DIRECTORY] +# +# Use this when you have a directory that is not yet set up for git. +# This function will add all non-hidden files to git. +new_gh() { # [DIRECTORY] + cd "$1" + ghuser=$( git config github.user ) + + git init + # add all non-dot files + print '.*'"\n"'*~' >> .gitignore + git add ^.* + git commit -m 'Initial commit.' + git remote add origin git@github.com:${ghuser}/${repo}.git + git push -u origin master +} + +# exist_gh [DIRECTORY] +# +# Use this when you have a git repo that's ready to go and you want to add it +# to your GitHub. +exist_gh() { # [DIRECTORY] + cd "$1" + name=$( git config user.name ) + ghuser=$( git config github.user ) + + git remote add origin git@github.com:${ghuser}/${repo}.git + git push -u origin master +} + +# End Functions ############################################################# + 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/grails/grails.plugin.zsh b/plugins/grails/grails.plugin.zsh new file mode 100755 index 000000000..cc6f9c53b --- /dev/null +++ b/plugins/grails/grails.plugin.zsh @@ -0,0 +1,54 @@ +_enumerateGrailsScripts() { + # Default directoryies + directories=($GRAILS_HOME/scripts ~/.grails/scripts ./scripts) + + # Check all of the plugins directories, if they exist + if [ -d plugins ] + then + directories+=(plugins/*/scripts) + fi + + # Enumerate all of the Groovy files + files=() + for dir in $directories; + do + if [ -d $dir ] + then + files+=($dir/[^_]*.groovy) + fi + done + + # Don't try to basename () + if [ ${#files} -eq 0 ]; + then + return + fi + + # - Strip the path + # - Remove all scripts with a leading '_' + # - PackagePlugin_.groovy -> PackagePlugin + # - PackagePlugin -> Package-Plugin + # - Package-Plugin -> package-plugin + basename $files \ + | sed -E -e 's/^_?([^_]+)_?.groovy/\1/'\ + -e 's/([a-z])([A-Z])/\1-\2/g' \ + | tr "[:upper:]" "[:lower:]" \ + | sort \ + | uniq +} + +_grails() { + if (( CURRENT == 2 )); then + scripts=( $(_enumerateGrailsScripts) ) + + if [ ${#scripts} -ne 0 ]; + then + _multi_parts / scripts + return + fi + fi + + _files +} + +compdef _grails grails diff --git a/plugins/knife/_knife b/plugins/knife/_knife index 7f8c95ee5..32ff9fc99 100644 --- a/plugins/knife/_knife +++ b/plugins/knife/_knife @@ -26,7 +26,7 @@ _knife() { case $state in knifecmd) - compadd -Q "$@" bootstrap client configure cookbook "cookbook site" "data bag" exec index node recipe role search ssh status windows $cloudproviders + compadd -Q "$@" bootstrap client configure cookbook "cookbook site" "data bag" exec environment index node recipe role search ssh status windows $cloudproviders ;; knifesubcmd) case $words[2] in @@ -42,6 +42,9 @@ _knife() { cookbook) compadd -Q "$@" test list create download delete "metadata from" show "bulk delete" metadata upload ;; + environment) + compadd -Q "$@" list create delete edit show "from file" + ;; node) compadd -Q "$@" "from file" create show edit delete list run_list "bulk delete" ;; @@ -161,6 +164,10 @@ _chef_data_bags_remote() { (knife data bag list | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}') } +_chef_environments_remote() { + (knife environment list | awk '{print $1}') +} + # The chef_x_local functions use the knife config to find the paths of relevant objects x to be uploaded to the server _chef_cookbooks_local() { (for i in $( grep cookbook_path $HOME/.chef/knife.rb | awk 'BEGIN {FS = "[" }; {print $2}' | sed 's/\,//g' | sed "s/'//g" | sed 's/\(.*\)]/\1/' ); do ls $i; done) 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/nyan/nyan.plugin.zsh b/plugins/nyan/nyan.plugin.zsh new file mode 100644 index 000000000..6321e5f5a --- /dev/null +++ b/plugins/nyan/nyan.plugin.zsh @@ -0,0 +1,5 @@ +if [[ -x `which nc` ]]; then + alias nyan='nc -v miku.acm.uiuc.edu 23' # nyan cat +fi + + diff --git a/plugins/pip/_pip b/plugins/pip/_pip index b58010173..df53ba5ce 100644 --- a/plugins/pip/_pip +++ b/plugins/pip/_pip @@ -3,30 +3,43 @@ # pip zsh completion, based on homebrew completion +_pip_all() { + # we cache the list of packages (originally from the macports plugin) + if (( ! $+piplist )); then + echo -n " (caching package index...)" + piplist=($(pip search * | cut -d ' ' -f 1 | tr '[A-Z]' '[a-z]')) + fi +} + _pip_installed() { - installed_pkgs=(`pip freeze`) + installed_pkgs=(`pip freeze | cut -d '=' -f 1`) } local -a _1st_arguments _1st_arguments=( - 'bundle:Create pybundles (archives containing multiple packages)' - 'freeze:Output all currently installed packages (exact versions) to stdout' - 'help:Show available commands' - 'install:Install packages' - 'search:Search PyPI' - 'uninstall:Uninstall packages' - 'unzip:Unzip individual packages' - 'zip:Zip individual packages' + 'bundle:create pybundles (archives containing multiple packages)' + 'freeze:output all currently installed packages (exact versions) to stdout' + 'help:show available commands' + 'install:install packages' + 'search:search PyPI' + 'uninstall:uninstall packages' + 'unzip:unzip individual packages' + 'zip:zip individual packages' ) local expl -local -a pkgs installed_pkgs +local -a all_pkgs installed_pkgs _arguments \ - '(--version)--version[Show version number of program and exit]' \ - '(-v --verbose)'{-v,--verbose}'[Give more output]' \ - '(-q --quiet)'{-q,--quiet}'[Give less output]' \ - '(-h --help)'{-h,--help}'[Show help]' \ + '(--version)--version[show version number of program and exit]' \ + '(-h --help)'{-h,--help}'[show help]' \ + '(-E --environment)'{-E,--environment}'[virtualenv environment to run pip in]' \ + '(-s --enable-site-packages)'{-s,--enable-site-packages}'[include site-packages in virtualenv]' \ + '(-v --verbose)'{-v,--verbose}'[give more output]' \ + '(-q --quiet)'{-q,--quiet}'[give less output]' \ + '(--log)--log[log file location]' \ + '(--proxy)--proxy[proxy in form user:passwd@proxy.server:port]' \ + '(--timeout)--timeout[socket timeout (default 15s)]' \ '*:: :->subcmds' && return 0 if (( CURRENT == 1 )); then @@ -35,10 +48,25 @@ if (( CURRENT == 1 )); then fi case "$words[1]" in - list) - if [[ "$state" == forms ]]; then - _pip_installed - _requested installed_pkgs expl 'installed packages' compadd -a installed_pkgs + search) + _arguments \ + '(--index)--index[base URL of Python Package Index]' ;; + freeze) + _arguments \ + '(-l --local)'{-l,--local}'[report only virtualenv packages]' ;; + install) + _arguments \ + '(-U --upgrade)'{-U,--upgrade}'[upgrade all packages to the newest available version]' \ + '(-f --find-links)'{-f,--find-links}'[URL for finding packages]' \ + '(--no-deps --no-dependencies)'{--no-deps,--no-dependencies}'[iIgnore package dependencies]' \ + '(--no-install)--no-install[only download packages]' \ + '(--no-download)--no-download[only install downloaded packages]' \ + '(--install-option)--install-option[extra arguments to be supplied to the setup.py]' \ + '1: :->packages' && return 0 + + if [[ "$state" == packages ]]; then + _pip_all + _wanted piplist expl 'packages' compadd -a piplist fi ;; uninstall) _pip_installed 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/rails3/rails3.plugin.zsh b/plugins/rails3/rails3.plugin.zsh index f4ee637e6..792cde2bd 100644 --- a/plugins/rails3/rails3.plugin.zsh +++ b/plugins/rails3/rails3.plugin.zsh @@ -17,3 +17,5 @@ alias rp='_rails_command plugin' alias rs='_rails_command server' alias rsd='_rails_command server --debugger' alias devlog='tail -f log/development.log' +alias rdm='rake db:migrate' +alias rdr='rake db:rollback' diff --git a/plugins/sprunge/sprunge.plugin.zsh b/plugins/sprunge/sprunge.plugin.zsh new file mode 100644 index 000000000..9f9432ac8 --- /dev/null +++ b/plugins/sprunge/sprunge.plugin.zsh @@ -0,0 +1,64 @@ +# Contributed and SLIGHTLY modded by Matt Parnell/ilikenwf <parwok -at- gmail> +# Created by the blogger at the URL below...I don't know where to find his/her name +# Original found at http://www.shellperson.net/sprunge-pastebin-script/ + +usage() { +description | fmt -s >&2 +} + +description() { +cat << HERE + +DESCRIPTION + Upload data and fetch URL from the pastebin http://sprunge.us + +USAGE + $0 filename.txt + $0 text string + $0 < filename.txt + piped_data | $0 + +NOTES +-------------------------------------------------------------------------- +* INPUT METHODS * +$0 can accept piped data, STDIN redirection [<filename.txt], text strings following the command as arguments, or filenames as arguments. Only one of these methods can be used at a time, so please see the note on precedence. Also, note that using a pipe or STDIN redirection will treat tabs as spaces, or disregard them entirely (if they appear at the beginning of a line). So I suggest using a filename as an argument if tabs are important either to the function or readability of the code. + +* PRECEDENCE * +STDIN redirection has precedence, then piped input, then a filename as an argument, and finally text strings as an arguments. + + EXAMPLE: + echo piped | "$0" arguments.txt < stdin_redirection.txt + +In this example, the contents of file_as_stdin_redirection.txt would be uploaded. Both the piped_text and the file_as_argument.txt are ignored. If there is piped input and arguments, the arguments will be ignored, and the piped input uploaded. + +* FILENAMES * +If a filename is misspelled or doesn't have the necessary path description, it will NOT generate an error, but will instead treat it as a text string and upload it. +-------------------------------------------------------------------------- + +HERE +exit +} + +sprunge() { + if [ -t 0 ]; then + echo Running interactively, checking for arguments... >&2 + if [ "$*" ]; then + echo Arguments present... >&2 + if [ -f "$*" ]; then + echo Uploading the contents of "$*"... >&2 + cat "$*" + else + echo Uploading the text: \""$*"\"... >&2 + echo "$*" + fi | curl -F 'sprunge=<-' http://sprunge.us + else + echo No arguments found, printing USAGE and exiting. >&2 + usage + fi + else + echo Using input from a pipe or STDIN redirection... >&2 + while read -r line ; do + echo $line + done | curl -F 'sprunge=<-' http://sprunge.us + fi +} 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/symfony2/symfony2.plugin.zsh b/plugins/symfony2/symfony2.plugin.zsh new file mode 100644 index 000000000..644266841 --- /dev/null +++ b/plugins/symfony2/symfony2.plugin.zsh @@ -0,0 +1,13 @@ +# Symfony2 basic command completion + +_symfony2_get_command_list () { + app/console --no-ansi | sed "1,/Available commands/d" | awk '/^ [a-z]+/ { print $1 }' +} + +_symfony2 () { + if [ -f app/console ]; then + compadd `_symfony2_get_command_list` + fi +} + +compdef _symfony2 app/console
\ No newline at end of file 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/textmate/textmate.plugin.zsh b/plugins/textmate/textmate.plugin.zsh index aa2f75f4f..a11a097f5 100644 --- a/plugins/textmate/textmate.plugin.zsh +++ b/plugins/textmate/textmate.plugin.zsh @@ -1,5 +1,5 @@ alias et='mate .' -alias ett='mate app config lib db public spec test Rakefile Capfile Todo' +alias ett='mate Gemfile app config features lib db public spec test Rakefile Capfile Todo' alias etp='mate app config lib db public spec test vendor/plugins vendor/gems Rakefile Capfile Todo' alias etts='mate app config lib db public script spec test vendor/plugins vendor/gems Rakefile Capfile Todo' 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/plugins/wakeonlan/README b/plugins/wakeonlan/README new file mode 100644 index 000000000..16fdd4587 --- /dev/null +++ b/plugins/wakeonlan/README @@ -0,0 +1,29 @@ +This plugin provides a wrapper around the "wakeonlan" tool available from most +distributions' package repositories, or from the following website: + +http://gsd.di.uminho.pt/jpo/software/wakeonlan/ + +In order to use this wrapper, create the ~/.wakeonlan directory, and place in +that directory one file for each device you would like to be able to wake. Give +the file a name that describes the device, such as its hostname. Each file +should contain a line with the mac address of the target device and the network +broadcast address. + +For instance, there might be a file ~/.wakeonlan/leto with the following +contents: + +00:11:22:33:44:55:66 192.168.0.255 + +To wake that device, use the following command: + +# wake leto + +The available device names will be autocompleted, so: + +# wake <tab> + +...will suggest "leto", along with any other configuration files that were +placed in the ~/.wakeonlan directory. + +For more information regarding the configuration file format, check the +wakeonlan man page. diff --git a/plugins/wakeonlan/_wake b/plugins/wakeonlan/_wake new file mode 100644 index 000000000..4ab10d374 --- /dev/null +++ b/plugins/wakeonlan/_wake @@ -0,0 +1,4 @@ +#compdef wake +#autoload + +_arguments "1:device to wake:_files -W '$HOME/.wakeonlan'" && return 0 diff --git a/plugins/wakeonlan/wakeonlan.plugin.zsh b/plugins/wakeonlan/wakeonlan.plugin.zsh new file mode 100644 index 000000000..6cef7d44a --- /dev/null +++ b/plugins/wakeonlan/wakeonlan.plugin.zsh @@ -0,0 +1,14 @@ +function wake() { + local config_file="$HOME/.wakeonlan/$1" + if [[ ! -f "$config_file" ]]; then + echo "ERROR: There is no configuration file at \"$config_file\"." + return 1 + fi + + if (( ! $+commands[wakeonlan] )); then + echo "ERROR: Can't find \"wakeonlan\". Are you sure it's installed?" + return 1 + fi + + wakeonlan -f "$config_file" +} diff --git a/templates/zshrc.zsh-template b/templates/zshrc.zsh-template index 1ab40aba6..e52553241 100644 --- a/templates/zshrc.zsh-template +++ b/templates/zshrc.zsh-template @@ -7,6 +7,10 @@ ZSH=$HOME/.oh-my-zsh # time that oh-my-zsh is loaded. ZSH_THEME="robbyrussell" +# Example aliases +# alias zshconfig="mate ~/.zshrc" +# alias ohmyzsh="mate ~/.oh-my-zsh" + # Set to this to use case-sensitive completion # CASE_SENSITIVE="true" @@ -23,6 +27,7 @@ ZSH_THEME="robbyrussell" # COMPLETION_WAITING_DOTS="true" # Which plugins would you like to load? (plugins can be found in ~/.oh-my-zsh/plugins/*) +# Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/ # Example format: plugins=(rails git textmate ruby lighthouse) plugins=(git) diff --git a/themes/apple.zsh-theme b/themes/apple.zsh-theme new file mode 100644 index 000000000..275341dc6 --- /dev/null +++ b/themes/apple.zsh-theme @@ -0,0 +1,29 @@ +function toon { + echo -n "" +} + +get_git_dirty() { + git diff --quiet || echo '*' +} + +autoload -Uz vcs_info +autoload -U colors && colors +zstyle ':vcs_info:*' check-for-changes true +zstyle ':vcs_info:*' unstagedstr '%F{red}*' # display this when there are unstaged changes +zstyle ':vcs_info:*' stagedstr '%F{yellow}+' # display this when there are staged changes +zstyle ':vcs_info:*' actionformats \ + '%F{5}%F{5}[%F{2}%b%F{3}|%F{1}%a%c%u%F{5}]%f ' +zstyle ':vcs_info:*' formats \ + '%F{5}%F{5}[%F{2}%b%c%u%F{5}]%f ' +zstyle ':vcs_info:(sv[nk]|bzr):*' branchformat '%b%F{1}:%F{3}%r' +zstyle ':vcs_info:*' enable git cvs svn + +theme_precmd () { + vcs_info +} + +setopt prompt_subst +PROMPT='%{$fg[magenta]%}$(toon)%{$reset_color%} %~/ %{$reset_color%}${vcs_info_msg_0_}%{$reset_color%}' + +autoload -U add-zsh-hook +add-zsh-hook precmd theme_precmd
\ No newline at end of file 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/fino.zsh-theme b/themes/fino.zsh-theme new file mode 100644 index 000000000..17cf59708 --- /dev/null +++ b/themes/fino.zsh-theme @@ -0,0 +1,39 @@ +# Fino theme by Max Masnick (http://max.masnick.me) + +# Use with a dark background and 256-color terminal! +# Meant for people with RVM and git. Tested only on OS X 10.7. + +# You can set your computer name in the ~/.box-name file if you want. + +# Borrowing shamelessly from these oh-my-zsh themes: +# bira +# robbyrussell +# +# Also borrowing from http://stevelosh.com/blog/2010/02/my-extravagant-zsh-prompt/ + +function virtualenv_info { + [ $VIRTUAL_ENV ] && echo '('`basename $VIRTUAL_ENV`') ' +} + +function prompt_char { + git branch >/dev/null 2>/dev/null && echo '±' && return + echo '○' +} + +function box_name { + [ -f ~/.box-name ] && cat ~/.box-name || hostname -s +} + + +local rvm_ruby='‹$(rvm-prompt i v g)›%{$reset_color%}' +local current_dir='${PWD/#$HOME/~}' +local git_info='$(git_prompt_info)' + + +PROMPT="╭─%{$FG[040]%}%n%{$reset_color%} %{$FG[239]%}at%{$reset_color%} %{$FG[033]%}$(box_name)%{$reset_color%} %{$FG[239]%}in%{$reset_color%} %{$terminfo[bold]$FG[226]%}${current_dir}%{$reset_color%}${git_info} %{$FG[239]%}using%{$FG[243]%} ${rvm_ruby} +╰─$(virtualenv_info)$(prompt_char) " + +ZSH_THEME_GIT_PROMPT_PREFIX=" %{$FG[239]%}on%{$reset_color%} %{$fg[255]%}" +ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}" +ZSH_THEME_GIT_PROMPT_DIRTY="%{$FG[202]%}✘✘✘" +ZSH_THEME_GIT_PROMPT_CLEAN="%{$FG[040]%}✔"
\ No newline at end of file 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/gallois.zsh-theme b/themes/gallois.zsh-theme index 259640ba4..f9406dd96 100644 --- a/themes/gallois.zsh-theme +++ b/themes/gallois.zsh-theme @@ -14,6 +14,8 @@ git_custom_status() { #RVM and git settings if [[ -s ~/.rvm/scripts/rvm ]] ; then RPS1='$(git_custom_status)%{$fg[red]%}[`~/.rvm/bin/rvm-prompt`]%{$reset_color%} $EPS1' +else + RPS1='$(git_custom_status) $EPS1' fi PROMPT='%{$fg[cyan]%}[%~% ]%(?.%{$fg[green]%}.%{$fg[red]%})%B$%b ' 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/jonathan.zsh-theme b/themes/jonathan.zsh-theme index add485279..a170a13d0 100644 --- a/themes/jonathan.zsh-theme +++ b/themes/jonathan.zsh-theme @@ -1,19 +1,19 @@ -function precmd { +function theme_precmd { local TERMWIDTH (( TERMWIDTH = ${COLUMNS} - 1 )) ### # Truncate the path if it's too long. - + PR_FILLBAR="" PR_PWDLEN="" - + local promptsize=${#${(%):---(%n@%m:%l)---()--}} local rubyprompt=`rvm_prompt_info` local rubypromptsize=${#${rubyprompt}} local pwdsize=${#${(%):-%~}} - + if [[ "$promptsize + $rubypromptsize + $pwdsize" -gt $TERMWIDTH ]]; then ((PR_PWDLEN=$TERMWIDTH - $promptsize)) else @@ -24,7 +24,7 @@ function precmd { setopt extended_glob -preexec () { +theme_preexec () { if [[ "$TERM" == "screen" ]]; then local CMD=${1[(wr)^(*=*|sudo|-*)]} echo -n "\ek$CMD\e\\" @@ -69,7 +69,7 @@ setprompt () { ### # See if we can use extended characters to look nicer. - + typeset -A altchar set -A altchar ${(s..)terminfo[acsc]} PR_SET_CHARSET="%{$terminfo[enacs]%}" @@ -81,10 +81,10 @@ setprompt () { PR_LRCORNER=${altchar[j]:--} PR_URCORNER=${altchar[k]:--} - + ### # Decide if we need to set titlebar text. - + case $TERM in xterm*) PR_TITLEBAR=$'%{\e]0;%(!.-=*[ROOT]*=- | .)%n@%m:%~ | ${COLUMNS}x${LINES} | %y\a%}' @@ -96,8 +96,8 @@ setprompt () { PR_TITLEBAR='' ;; esac - - + + ### # Decide whether to set a screen title if [[ "$TERM" == "screen" ]]; then @@ -105,8 +105,8 @@ setprompt () { else PR_STITLE='' fi - - + + ### # Finally, the prompt. @@ -135,3 +135,7 @@ $PR_CYAN$PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT$PR_NO_COLOUR ' } setprompt + +autoload -U add-zsh-hook +add-zsh-hook precmd theme_precmd +add-zsh-hook preexec theme_preexec
\ No newline at end of file diff --git a/themes/kolo.zsh-theme b/themes/kolo.zsh-theme index 6e04e1595..e743289c3 100644 --- a/themes/kolo.zsh-theme +++ b/themes/kolo.zsh-theme @@ -7,7 +7,7 @@ zstyle ':vcs_info:*' unstagedstr '%F{yellow}●' zstyle ':vcs_info:*' check-for-changes true zstyle ':vcs_info:(sv[nk]|bzr):*' branchformat '%b%F{1}:%F{11}%r' zstyle ':vcs_info:*' enable git svn -precmd () { +theme_precmd () { if [[ -z $(git ls-files --other --exclude-standard 2> /dev/null) ]] { zstyle ':vcs_info:*' formats ' [%b%c%u%B%F{green}]' } else { @@ -19,3 +19,6 @@ precmd () { setopt prompt_subst PROMPT='%B%F{magenta}%c%B%F{green}${vcs_info_msg_0_}%B%F{magenta} %{$reset_color%}%% ' + +autoload -U add-zsh-hook +add-zsh-hook precmd theme_precmd diff --git a/themes/mh.zsh-theme b/themes/mh.zsh-theme new file mode 100644 index 000000000..34a3765b1 --- /dev/null +++ b/themes/mh.zsh-theme @@ -0,0 +1,24 @@ +# mh theme +# preview: http://cl.ly/1y2x0W0E3t2C0F29043z + +# features: +# path is autoshortened to ~30 characters +# displays git status (if applicable in current folder) +# turns username green if superuser, otherwise it is white + +# if superuser make the username green +if [ $UID -eq 0 ]; then NCOLOR="green"; else NCOLOR="white"; fi + +# prompt +PROMPT='[%{$fg[$NCOLOR]%}%B%n%b%{$reset_color%}:%{$fg[red]%}%30<...<%~%<<%{$reset_color%}]%(!.#.$) ' +RPROMPT='$(git_prompt_info)' + +# git theming +ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg_bold[gray]%}(%{$fg_no_bold[yellow]%}%B" +ZSH_THEME_GIT_PROMPT_SUFFIX="%b%{$fg_bold[gray]%})%{$reset_color%} " +ZSH_THEME_GIT_PROMPT_CLEAN="" +ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg_bold[red]%}✱" + +# LS colors, made with http://geoff.greer.fm/lscolors/ +export LSCOLORS="Gxfxcxdxbxegedabagacad" +export LS_COLORS='no=00:fi=00:di=01;34:ln=00;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=41;33;01:ex=00;32:*.cmd=00;32:*.exe=01;32:*.com=01;32:*.bat=01;32:*.btm=01;32:*.dll=01;32:*.tar=00;31:*.tbz=00;31:*.tgz=00;31:*.rpm=00;31:*.deb=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.lzma=00;31:*.zip=00;31:*.zoo=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.tb2=00;31:*.tz2=00;31:*.tbz2=00;31:*.avi=01;35:*.bmp=01;35:*.fli=01;35:*.gif=01;35:*.jpg=01;35:*.jpeg=01;35:*.mng=01;35:*.mov=01;35:*.mpg=01;35:*.pcx=01;35:*.pbm=01;35:*.pgm=01;35:*.png=01;35:*.ppm=01;35:*.tga=01;35:*.tif=01;35:*.xbm=01;35:*.xpm=01;35:*.dl=01;35:*.gl=01;35:*.wmv=01;35:*.aiff=00;32:*.au=00;32:*.mid=00;32:*.mp3=00;32:*.ogg=00;32:*.voc=00;32:*.wav=00;32:' 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/pygmalion.zsh-theme b/themes/pygmalion.zsh-theme new file mode 100644 index 000000000..cf3bb908f --- /dev/null +++ b/themes/pygmalion.zsh-theme @@ -0,0 +1,9 @@ +# Yay! High voltage and arrows! + +ZSH_THEME_GIT_PROMPT_PREFIX="%{$reset_color%}%{$fg[green]%}" +ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%} " +ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[yellow]%}⚡%{$reset_color%}" +ZSH_THEME_GIT_PROMPT_CLEAN="" + +PROMPT='%{$fg[magenta]%}%n%{$reset_color%}%{$fg[cyan]%}@%{$reset_color%}%{$fg[yellow]%}%m%{$reset_color%}%{$fg[red]%}:%{$reset_color%}%{$fg[cyan]%}%0~%{$reset_color%}%{$fg[red]%}|%{$reset_color%}$(git_prompt_info)%{$fg[cyan]%}⇒%{$reset_color%} ' + diff --git a/themes/rkj-repos.zsh-theme b/themes/rkj-repos.zsh-theme new file mode 100644 index 000000000..318c315bb --- /dev/null +++ b/themes/rkj-repos.zsh-theme @@ -0,0 +1,29 @@ +# user, host, full path, and time/date +# on two lines for easier vgrepping +# entry in a nice long thread on the Arch Linux forums: http://bbs.archlinux.org/viewtopic.php?pid=521888#p521888 + +function hg_prompt_info { + hg prompt --angle-brackets "\ +<hg:%{$fg[magenta]%}<branch>%{$reset_color%}>\ +</%{$fg[yellow]%}<tags|%{$reset_color%}, %{$fg[yellow]%}>%{$reset_color%}>\ +%{$fg[red]%}<status|modified|unknown><update>%{$reset_color%}< +patches: <patches|join( → )|pre_applied(%{$fg[yellow]%})|post_applied(%{$reset_color%})|pre_unapplied(%{$fg_bold[black]%})|post_unapplied(%{$reset_color%})>>" 2>/dev/null +} + +ZSH_THEME_GIT_PROMPT_ADDED="%{$fg[cyan]%}+" +ZSH_THEME_GIT_PROMPT_MODIFIED="%{$fg[yellow]%}✱" +ZSH_THEME_GIT_PROMPT_DELETED="%{$fg[red]%}✗" +ZSH_THEME_GIT_PROMPT_RENAMED="%{$fg[blue]%}➦" +ZSH_THEME_GIT_PROMPT_UNMERGED="%{$fg[magenta]%}✂" +ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$fg[grey]%}✈" + +function mygit() { + ref=$(git symbolic-ref HEAD 2> /dev/null) || return + echo "$ZSH_THEME_GIT_PROMPT_PREFIX${ref#refs/heads/}$( git_prompt_status )%{$reset_color%}$ZSH_THEME_GIT_PROMPT_SUFFIX" +} + +# alternate prompt with git & hg +PROMPT=$'%{\e[0;34m%}%B┌─[%b%{\e[0m%}%{\e[1;32m%}%n%{\e[1;30m%}@%{\e[0m%}%{\e[0;36m%}%m%{\e[0;34m%}%B]%b%{\e[0m%} - %b%{\e[0;34m%}%B[%b%{\e[1;37m%}%~%{\e[0;34m%}%B]%b%{\e[0m%} - %{\e[0;34m%}%B[%b%{\e[0;33m%}'%D{"%Y-%m-%d %I:%M:%S"}%b$'%{\e[0;34m%}%B]%b%{\e[0m%} +%{\e[0;34m%}%B└─%B[%{\e[1;35m%}$%{\e[0;34m%}%B] <$(mygit)$(hg_prompt_info)>%{\e[0m%}%b ' +PS2=$' \e[0;34m%}%B>%{\e[0m%}%b ' + diff --git a/themes/rkj.zsh-theme b/themes/rkj.zsh-theme new file mode 100644 index 000000000..81b701e07 --- /dev/null +++ b/themes/rkj.zsh-theme @@ -0,0 +1,8 @@ +# user, host, full path, and time/date +# on two lines for easier vgrepping +# entry in a nice long thread on the Arch Linux forums: http://bbs.archlinux.org/viewtopic.php?pid=521888#p521888 + +PROMPT=$'%{\e[0;34m%}%B┌─[%b%{\e[0m%}%{\e[1;32m%}%n%{\e[1;30m%}@%{\e[0m%}%{\e[0;36m%}%m%{\e[0;34m%}%B]%b%{\e[0m%} - %b%{\e[0;34m%}%B[%b%{\e[1;37m%}%~%{\e[0;34m%}%B]%b%{\e[0m%} - %{\e[0;34m%}%B[%b%{\e[0;33m%}'%D{"%Y-%m-%d %I:%M:%S"}%b$'%{\e[0;34m%}%B]%b%{\e[0m%} +%{\e[0;34m%}%B└─%B[%{\e[1;35m%}$%{\e[0;34m%}%B]%{\e[0m%}%b ' + + diff --git a/themes/sammy.zsh-theme b/themes/sammy.zsh-theme new file mode 100644 index 000000000..52e6e4bb6 --- /dev/null +++ b/themes/sammy.zsh-theme @@ -0,0 +1,6 @@ +PROMPT='%{$fg[white]%}%c$(git_prompt_info)$ % %{$reset_color%}' + +ZSH_THEME_GIT_PROMPT_PREFIX="(" +ZSH_THEME_GIT_PROMPT_SUFFIX="" +ZSH_THEME_GIT_PROMPT_DIRTY="*)" +ZSH_THEME_GIT_PROMPT_CLEAN=")" diff --git a/themes/suvash.zsh-theme b/themes/suvash.zsh-theme new file mode 100644 index 000000000..f50657db2 --- /dev/null +++ b/themes/suvash.zsh-theme @@ -0,0 +1,23 @@ +function prompt_char { + git branch >/dev/null 2>/dev/null && echo '±' && return + hg root >/dev/null 2>/dev/null && echo 'Hg' && return + echo '○' +} + +function virtualenv_info { + [ $VIRTUAL_ENV ] && echo '('`basename $VIRTUAL_ENV`') ' +} + +function collapse_pwd { + echo $(pwd | sed -e "s,^$HOME,~,") +} + +PROMPT='%{$fg[magenta]%}%n%{$reset_color%} at %{$fg[yellow]%}%m%{$reset_color%} in %{$fg_bold[green]%}${PWD/#$HOME/~}%{$reset_color%}$(git_prompt_info) using %{$reset_color%}%{$fg[red]%}$(~/.rvm/bin/rvm-prompt)%{$reset_color%} +$(virtualenv_info)$(prompt_char) ' + + +ZSH_THEME_GIT_PROMPT_PREFIX=" on %{$fg[magenta]%}" +ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}" +ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[green]%}!" +ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$fg[green]%}?" +ZSH_THEME_GIT_PROMPT_CLEAN="" 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/themes/zhann.zsh-theme b/themes/zhann.zsh-theme new file mode 100644 index 000000000..3dff29c9c --- /dev/null +++ b/themes/zhann.zsh-theme @@ -0,0 +1,7 @@ +PROMPT='%{$fg_bold[green]%}%p %{$fg[cyan]%}%c%{$fg_bold[blue]%}$(git_prompt_info)%{$fg_bold[blue]%} % %{$reset_color%}' +RPROMPT='%{$reset_color%} %{$fg[red]%}$(~/.rvm/bin/rvm-prompt i v g) %{$reset_color%}' + +ZSH_THEME_GIT_PROMPT_PREFIX=" (%{$fg[red]%}" +ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}" +ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[blue]%}) %{$fg[yellow]%}✗%{$reset_color%}" +ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[blue]%})" diff --git a/tools/check_for_upgrade.sh b/tools/check_for_upgrade.sh index e1e4eb99f..524aa509d 100644 --- a/tools/check_for_upgrade.sh +++ b/tools/check_for_upgrade.sh @@ -8,6 +8,12 @@ function _update_zsh_update() { echo "LAST_EPOCH=$(_current_epoch)" > ~/.zsh-update } +function _upgrade_zsh() { + /usr/bin/env ZSH=$ZSH /bin/sh $ZSH/tools/upgrade.sh + # update the zsh file + _update_zsh_update +} + if [ -f ~/.zsh-update ] then . ~/.zsh-update @@ -19,17 +25,21 @@ then epoch_diff=$(($(_current_epoch) - $LAST_EPOCH)) if [ $epoch_diff -gt 6 ] then - echo "[Oh My Zsh] Would you like to check for updates?" - echo "Type Y to update oh-my-zsh: \c" - read line - if [ "$line" = Y ] || [ "$line" = y ] + if [ "$DISABLE_UPDATE_PROMPT" = "true" ] then - /bin/sh $ZSH/tools/upgrade.sh - # update the zsh file - _update_zsh_update + _upgrade_zsh + else + echo "[Oh My Zsh] Would you like to check for updates?" + echo "Type Y to update oh-my-zsh: \c" + read line + if [ "$line" = Y ] || [ "$line" = y ] + then + _upgrade_zsh + fi fi fi else # create the zsh file _update_zsh_update fi + 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 "[0;1;35;95m╺━[0;1;31;91m┓┏[0;1;33;93m━┓[0;1;32;92m╻[0m [0;1;36;96m╻[0m [0;1;35;95m╺┳[0;1;31;91m╸╻[0m [0;1;33;93m╻[0;1;32;92m┏━[0;1;36;96m╸┏[0;1;34;94m┳┓[0;1;35;95m┏━[0;1;31;91m╸[0m [0;1;32;92m┏━[0;1;36;96m╸╻[0m [0;1;34;94m╻[0;1;35;95m┏━[0;1;31;91m┓┏[0;1;33;93m━┓[0;1;32;92m┏━[0;1;36;96m┓┏[0;1;34;94m━╸[0;1;35;95m┏━[0;1;31;91m┓[0m" + echo "[0;1;31;91m┏━[0;1;33;93m┛┗[0;1;32;92m━┓[0;1;36;96m┣━[0;1;34;94m┫[0m [0;1;31;91m┃[0m [0;1;33;93m┣[0;1;32;92m━┫[0;1;36;96m┣╸[0m [0;1;34;94m┃[0;1;35;95m┃┃[0;1;31;91m┣╸[0m [0;1;36;96m┃[0m [0;1;34;94m┣[0;1;35;95m━┫[0;1;31;91m┃[0m [0;1;33;93m┃┃[0m [0;1;32;92m┃[0;1;36;96m┗━[0;1;34;94m┓┣[0;1;35;95m╸[0m [0;1;31;91m┣┳[0;1;33;93m┛[0m" + echo "[0;1;33;93m┗━[0;1;32;92m╸┗[0;1;36;96m━┛[0;1;34;94m╹[0m [0;1;35;95m╹[0m [0;1;33;93m╹[0m [0;1;32;92m╹[0m [0;1;36;96m╹[0;1;34;94m┗━[0;1;35;95m╸╹[0m [0;1;31;91m╹[0;1;33;93m┗━[0;1;32;92m╸[0m [0;1;34;94m┗━[0;1;35;95m╸╹[0m [0;1;31;91m╹[0;1;33;93m┗━[0;1;32;92m┛┗[0;1;36;96m━┛[0;1;34;94m┗━[0;1;35;95m┛┗[0;1;31;91m━╸[0;1;33;93m╹┗[0;1;32;92m╸[0m" + 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 diff --git a/tools/upgrade.sh b/tools/upgrade.sh index 52a8cc4da..6ffe56f4c 100644 --- a/tools/upgrade.sh +++ b/tools/upgrade.sh @@ -1,12 +1,12 @@ current_path=`pwd` -echo -e "\033[0;34mUpgrading Oh My Zsh\033[0m" +printf '\033[0;34m%s\033[0m\n' "Upgrading Oh My Zsh" ( cd $ZSH && git pull origin master ) -echo -e "\033[0;32m"' __ __ '"\033[0m" -echo -e "\033[0;32m"' ____ / /_ ____ ___ __ __ ____ _____/ /_ '"\033[0m" -echo -e "\033[0;32m"' / __ \/ __ \ / __ `__ \/ / / / /_ / / ___/ __ \ '"\033[0m" -echo -e "\033[0;32m"'/ /_/ / / / / / / / / / / /_/ / / /_(__ ) / / / '"\033[0m" -echo -e "\033[0;32m"'\____/_/ /_/ /_/ /_/ /_/\__, / /___/____/_/ /_/ '"\033[0m" -echo -e "\033[0;32m"' /____/ '"\033[0m" -echo -e "\033[0;34mHooray! Oh My Zsh has been updated and/or is at the current version.\033[0m" -echo -e "\033[0;34mTo keep up on the latest, be sure to follow Oh My Zsh on twitter: \033[1mhttp://twitter.com/ohmyzsh\033[0m" +printf '\033[0;32m%s\033[0m\n' ' __ __ ' +printf '\033[0;32m%s\033[0m\n' ' ____ / /_ ____ ___ __ __ ____ _____/ /_ ' +printf '\033[0;32m%s\033[0m\n' ' / __ \/ __ \ / __ `__ \/ / / / /_ / / ___/ __ \ ' +printf '\033[0;32m%s\033[0m\n' '/ /_/ / / / / / / / / / / /_/ / / /_(__ ) / / / ' +printf '\033[0;32m%s\033[0m\n' '\____/_/ /_/ /_/ /_/ /_/\__, / /___/____/_/ /_/ ' +printf '\033[0;32m%s\033[0m\n' ' /____/ ' +printf '\033[0;34m%s\033[0m\n' 'Hooray! Oh My Zsh has been updated and/or is at the current version.' +printf '\033[0;34m%s\033[1m%s\033[0m\n' 'To keep up on the latest, be sure to follow Oh My Zsh on twitter: ' 'http://twitter.com/ohmyzsh' cd "$current_path" |