diff options
36 files changed, 1529 insertions, 122 deletions
| diff --git a/.gitignore b/.gitignore index 8fdfae286..2e8db7341 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ custom/*  !custom/example  !custom/example.zsh  cache +*.swp diff --git a/lib/edit-command-line.zsh b/lib/edit-command-line.zsh new file mode 100644 index 000000000..db2000325 --- /dev/null +++ b/lib/edit-command-line.zsh @@ -0,0 +1,3 @@ +autoload -U edit-command-line +zle -N edit-command-line +bindkey '\C-x\C-e' edit-command-line diff --git a/lib/key-bindings.zsh b/lib/key-bindings.zsh index 9f28d5761..9c2dda35a 100644 --- a/lib/key-bindings.zsh +++ b/lib/key-bindings.zsh @@ -21,6 +21,7 @@ bindkey ' ' magic-space    # also do history expansion on space  bindkey '^[[Z' reverse-menu-complete  # Make the delete key (or Fn + Delete on the Mac) work instead of outputting a ~ +bindkey '^?' backward-delete-char  bindkey "^[[3~" delete-char  bindkey "^[3;5~" delete-char  bindkey "\e[3~" delete-char diff --git a/lib/misc.zsh b/lib/misc.zsh index 4c1743657..88732e664 100644 --- a/lib/misc.zsh +++ b/lib/misc.zsh @@ -10,4 +10,4 @@ setopt long_list_jobs  ## pager  export PAGER=less -export LC_CTYPE=en_US.UTF-8 +export LC_CTYPE=$LANG diff --git a/lib/spectrum.zsh b/lib/spectrum.zsh index 4006a7fe1..2fdf537ef 100644 --- a/lib/spectrum.zsh +++ b/lib/spectrum.zsh @@ -18,3 +18,11 @@ for color in {000..255}; do      FG[$color]="%{[38;5;${color}m%}"      BG[$color]="%{[48;5;${color}m%}"  done + +# Show all 256 colors with color number +function spectrum_ls() { +  for code in {000..255}; do +    print -P -- "$code: %F{$code}Test%f" +  done +} + diff --git a/oh-my-zsh.sh b/oh-my-zsh.sh index dbff1ced9..c4522491b 100644 --- a/oh-my-zsh.sh +++ b/oh-my-zsh.sh @@ -1,3 +1,9 @@ +# Check for updates on initial load... +if [ "$DISABLE_AUTO_UPDATE" != "true" ] +then +  /usr/bin/env zsh $ZSH/tools/check_for_upgrade.sh +fi +  # Initializes Oh My Zsh  # add a function path @@ -28,7 +34,6 @@ done  for config_file ($ZSH/custom/*.zsh) source $config_file  # Load the theme -# Check for updates on initial load...  if [ "$ZSH_THEME" = "random" ]  then    themes=($ZSH/themes/*zsh-theme) @@ -38,14 +43,9 @@ then    source "$RANDOM_THEME"    echo "[oh-my-zsh] Random theme '$RANDOM_THEME' loaded..."  else -  source "$ZSH/themes/$ZSH_THEME.zsh-theme" +  if [ ! "$ZSH_THEME" = ""  ] +  then +    source "$ZSH/themes/$ZSH_THEME.zsh-theme" +  fi  fi - -# Check for updates on initial load... -if [ "$DISABLE_AUTO_UPDATE" = "true" ] -then -  return -else -  /usr/bin/env zsh $ZSH/tools/check_for_upgrade.sh -fi diff --git a/plugins/archlinux/archlinux.plugin.zsh b/plugins/archlinux/archlinux.plugin.zsh new file mode 100644 index 000000000..8ed291fcf --- /dev/null +++ b/plugins/archlinux/archlinux.plugin.zsh @@ -0,0 +1,68 @@ +# Archlinux zsh aliases and functions for zsh + +# Aliases ################################################################### + +# Look for yaourt, and add some useful functions if we have it. +if [[ -x `which yaourt` ]]; then +  upgrade () { +    yaourt -Syu -C +  } +  # Pacman - https://wiki.archlinux.org/index.php/Pacman_Tips +  alias yaupg='sudo yaourt -Syu'        # Synchronize with repositories before upgrading packages that are out of date on the local system. +  alias yain='sudo yaourt -S'           # Install specific package(s) from the repositories +  alias yains='sudo yaourt -U'          # Install specific package not from the repositories but from a file  +  alias yare='sudo yaourt -R'           # Remove the specified package(s), retaining its configuration(s) and required dependencies +  alias yarem='sudo yaourt -Rns'        # Remove the specified package(s), its configuration(s) and unneeded dependencies +  alias yarep='yaourt -Si'              # Display information about a given package in the repositories +  alias yareps='yaourt -Ss'             # Search for package(s) in the repositories +  alias yaloc='yaourt -Qi'              # Display information about a given package in the local database +  alias yalocs='yaourt -Qs'             # Search for package(s) in the local database +  # Additional yaourt alias examples +  alias yaupd='sudo yaourt -Sy && sudo abs'     # Update and refresh the local package and ABS databases against repositories +  alias yainsd='sudo yaourt -S --asdeps'        # Install given package(s) as dependencies of another package +  alias yamir='sudo yaourt -Syy'                # Force refresh of all package lists after updating /etc/pacman.d/mirrorlist +else + upgrade() { +   sudo pacman -Syu + } +fi + +# Pacman - https://wiki.archlinux.org/index.php/Pacman_Tips +alias pacupg='sudo pacman -Syu'        # Synchronize with repositories before upgrading packages that are out of date on the local system. +alias pacin='sudo pacman -S'           # Install specific package(s) from the repositories +alias pacins='sudo pacman -U'          # Install specific package not from the repositories but from a file  +alias pacre='sudo pacman -R'           # Remove the specified package(s), retaining its configuration(s) and required dependencies +alias pacrem='sudo pacman -Rns'        # Remove the specified package(s), its configuration(s) and unneeded dependencies +alias pacrep='pacman -Si'              # Display information about a given package in the repositories +alias pacreps='pacman -Ss'             # Search for package(s) in the repositories +alias pacloc='pacman -Qi'              # Display information about a given package in the local database +alias paclocs='pacman -Qs'             # Search for package(s) in the local database +# Additional pacman alias examples +alias pacupd='sudo pacman -Sy && sudo abs'     # Update and refresh the local package and ABS databases against repositories +alias pacinsd='sudo pacman -S --asdeps'        # Install given package(s) as dependencies of another package +alias pacmir='sudo pacman -Syy'                # Force refresh of all package lists after updating /etc/pacman.d/mirrorlist + +# https://bbs.archlinux.org/viewtopic.php?id=93683 +paclist() { +  sudo pacman -Qei $(pacman -Qu|cut -d" " -f 1)|awk ' BEGIN {FS=":"}/^Name/{printf("\033[1;36m%s\033[1;37m", $2)}/^Description/{print $2}' +} + +alias paclsorphans='sudo pacman -Qdt' +alias pacrmorphans='sudo pacman -Rs $(pacman -Qtdq)' + +pacdisowned() { +  tmp=${TMPDIR-/tmp}/pacman-disowned-$UID-$$ +  db=$tmp/db +  fs=$tmp/fs + +  mkdir "$tmp" +  trap  'rm -rf "$tmp"' EXIT + +  pacman -Qlq | sort -u > "$db" + +  find /bin /etc /lib /sbin /usr \ +      ! -name lost+found \ +        \( -type d -printf '%p/\n' -o -print \) | sort > "$fs" + +  comm -23 "$fs" "$db" +} diff --git a/plugins/bundler/bundler.plugin.zsh b/plugins/bundler/bundler.plugin.zsh index fb40e2cec..e98bb4b46 100644 --- a/plugins/bundler/bundler.plugin.zsh +++ b/plugins/bundler/bundler.plugin.zsh @@ -1,3 +1,36 @@  alias be="bundle exec"  alias bi="bundle install" +alias bl="bundle list"  alias bu="bundle update" + +# The following is based on https://github.com/gma/bundler-exec + +bundled_commands=(cap capify cucumber heroku rackup rails rake rspec ruby shotgun spec spork thin unicorn unicorn_rails) + +## Functions + +_bundler-installed() { +  which bundle > /dev/null 2>&1 +} + +_within-bundled-project() { +  local check_dir=$PWD +  while [ "$(dirname $check_dir)" != "/" ]; do +    [ -f "$check_dir/Gemfile" ] && return +    check_dir="$(dirname $check_dir)" +  done +  false +} + +_run-with-bundler() { +  if _bundler-installed && _within-bundled-project; then +    bundle exec $@ +  else +    $@ +  fi +} + +## Main program +for cmd in $bundled_commands; do +  alias $cmd="_run-with-bundler $cmd" +done diff --git a/plugins/cake/cake.plugin.zsh b/plugins/cake/cake.plugin.zsh new file mode 100644 index 000000000..f968c71d5 --- /dev/null +++ b/plugins/cake/cake.plugin.zsh @@ -0,0 +1,32 @@ +# Set this to 1 if you want to cache the tasks +cache_task_list=1 + +# Cache filename +cache_file='.cake_task_cache' + +_cake_does_target_list_need_generating () { + +	if [ $cache_task_list -eq 0 ]; then +		return 1; +	fi + +	if [ ! -f $cache_file ]; then return 0; +	else +		accurate=$(stat -f%m $cache_file) +		changed=$(stat -f%m Cakefile) +		return $(expr $accurate '>=' $changed) +	fi +} + +_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` +		else +			compadd `cake | sed -e "s/cake \([^ ]*\) .*/\1/" | grep -v '^$'` +		fi +	fi +} + +compdef _cake cake diff --git a/plugins/cloudapp/cloudapp.plugin.zsh b/plugins/cloudapp/cloudapp.plugin.zsh new file mode 100644 index 000000000..99252f690 --- /dev/null +++ b/plugins/cloudapp/cloudapp.plugin.zsh @@ -0,0 +1,2 @@ +#!/bin/zsh +alias cloudapp=$ZSH/plugins/cloudapp/cloudapp.rb diff --git a/plugins/cloudapp/cloudapp.rb b/plugins/cloudapp/cloudapp.rb new file mode 100755 index 000000000..a11cfdb32 --- /dev/null +++ b/plugins/cloudapp/cloudapp.rb @@ -0,0 +1,60 @@ +#!/usr/bin/env ruby +# +# cloudapp +# Zach Holman / @holman +# +# Uploads a file from the command line to CloudApp, drops it into your  +# clipboard (on a Mac, at least). +# +# Example: +# +#   cloudapp drunk-blake.png +# +# This requires Aaron Russell's cloudapp_api gem: +# +#   gem install cloudapp_api +# +# Requires you set your CloudApp credentials in ~/.cloudapp as a simple file of: +# +#   email +#   password + +require 'rubygems' +begin +  require 'cloudapp_api' +rescue LoadError +  puts "You need to install cloudapp_api: gem install cloudapp_api" +  exit!(1) +end + +config_file = "#{ENV['HOME']}/.cloudapp" +unless File.exist?(config_file) +  puts "You need to type your email and password (one per line) into "+ +       "`~/.cloudapp`" +  exit!(1) +end + +email,password = File.read(config_file).split("\n") + +class HTTParty::Response +  # Apparently HTTPOK.ok? IS NOT OKAY WTFFFFFFFFFFUUUUUUUUUUUUUU +  # LETS MONKEY PATCH IT I FEEL OKAY ABOUT IT +  def ok? ; true end +end + +if ARGV[0].nil? +   puts "You need to specify a file to upload." +   exit!(1) +end + +CloudApp.authenticate(email,password) +url = CloudApp::Item.create(:upload, {:file => ARGV[0]}).url + +# Say it for good measure. +puts "Uploaded to #{url}." + +# Get the embed link. +url = "#{url}/#{ARGV[0].split('/').last}" + +# Copy it to your (Mac's) clipboard. +`echo '#{url}' | tr -d "\n" | pbcopy` diff --git a/plugins/django/django.plugin.zsh b/plugins/django/django.plugin.zsh new file mode 100644 index 000000000..1d72a2f2c --- /dev/null +++ b/plugins/django/django.plugin.zsh @@ -0,0 +1,222 @@ +#compdef manage.py + +typeset -ga nul_args +nul_args=( +  '--settings=-[the Python path to a settings module.]:file:_files' +  '--pythonpath=-[a directory to add to the Python path.]::directory:_directories' +  '--traceback[print traceback on exception.]' +  "--version[show program's version number and exit.]" +  {-h,--help}'[show this help message and exit.]' +) + +_managepy-adminindex(){ +  _arguments -s : \ +    $nul_args \ +    '*::directory:_directories' && ret=0 +} + +_managepy-createcachetable(){ +  _arguments -s : \ +    $nul_args && ret=0 +} + +_managepy-dbshell(){ +  _arguments -s : \ +    $nul_args && ret=0 +} + +_managepy-diffsettings(){ +  _arguments -s : \ +    $nul_args && ret=0 +} + +_managepy-dumpdata(){ +  _arguments -s : \ +    '--format=-[specifies the output serialization format for fixtures.]:format:(json yaml xml)' \ +    '--indent=-[specifies the indent level to use when pretty-printing output.]:' \ +    $nul_args \ +    '*::appname:_applist' && ret=0 +} + +_managepy-flush(){ +  _arguments -s : \ +    '--verbosity=-[verbosity level; 0=minimal output, 1=normal output, 2=all output.]:Verbosity:((0\:minimal 1\:normal 2\:all))' \ +    '--noinput[tells Django to NOT prompt the user for input of any kind.]' \ +    $nul_args && ret=0 +} + +_managepy-help(){ +  _arguments -s : \ +    '*:command:_managepy_cmds' \ +    $nul_args && ret=0 +} + +_managepy_cmds(){ +    local line +    local -a cmd +    _call_program help-command ./manage.py help \ +      |& sed -n '/^ /s/[(), ]/ /gp' \ +      | while read -A line; do cmd=($line $cmd) done +    _describe -t managepy-command 'manage.py command' cmd +} + +_managepy-inspectdb(){ +  _arguments -s : \ +    $nul_args && ret=0 +} + +_managepy-loaddata(){ +  _arguments -s : \ +    '--verbosity=-[verbosity level; 0=minimal output, 1=normal output, 2=all output.]:Verbosity:((0\:minimal 1\:normal 2\:all))' \ +    '*::file:_files' \ +    $nul_args && ret=0 +} + +_managepy-reset(){ +  _arguments -s : \ +    '--noinput[tells Django to NOT prompt the user for input of any kind.]' \ +    '*::appname:_applist' \ +    $nul_args && ret=0 +} + +_managepy-runfcgi(){ +  local state +   +  local fcgi_opts +  fcgi_opts=( +    'protocol[fcgi, scgi, ajp, ... (default fcgi)]:protocol:(fcgi scgi ajp)' +    'host[hostname to listen on..]:' +    'port[port to listen on.]:' +    'socket[UNIX socket to listen on.]::file:_files' +    'method[prefork or threaded (default prefork)]:method:(prefork threaded)' +    'maxrequests[number of requests a child handles before it is killed and a new child is forked (0 = no limit).]:' +    'maxspare[max number of spare processes / threads.]:' +    'minspare[min number of spare processes / threads.]:' +    'maxchildren[hard limit number of processes / threads.]:' +    'daemonize[whether to detach from terminal.]:boolean:(False True)' +    'pidfile[write the spawned process-id to this file.]:file:_files' +    'workdir[change to this directory when daemonizing.]:directory:_files' +    'outlog[write stdout to this file.]:file:_files' +    'errlog[write stderr to this file.]:file:_files' +  ) +   +  _arguments -s : \ +    $nul_args \ +    '*: :_values "FCGI Setting" $fcgi_opts' && ret=0 +} + +_managepy-runserver(){ +  _arguments -s : \ +    '--noreload[tells Django to NOT use the auto-reloader.]' \ +    '--adminmedia[specifies the directory from which to serve admin media.]:directory:_files' \ +    $nul_args && ret=0 +} + +_managepy-shell(){ +  _arguments -s : \ +    '--plain[tells Django to use plain Python, not IPython.]' \ +    $nul_args && ret=0 +} + +_managepy-sql(){} +_managepy-sqlall(){} +_managepy-sqlclear(){} +_managepy-sqlcustom(){} +_managepy-sqlflush(){} +_managepy-sqlindexes(){} +_managepy-sqlinitialdata(){} +_managepy-sqlreset(){} +_managepy-sqlsequencereset(){} +_managepy-startapp(){} + +_managepy-syncdb() { +  _arguments -s : \ +    '--verbosity=-[verbosity level; 0=minimal output, 1=normal output, 2=all output.]:Verbosity:((0\:minimal 1\:normal 2\:all))' \ +    '--noinput[tells Django to NOT prompt the user for input of any kind.]' \ +    $nul_args && ret=0 +} + +_managepy-test() { +  _arguments -s : \ +    '--verbosity=-[verbosity level; 0=minimal output, 1=normal output, 2=all output.]:Verbosity:((0\:minimal 1\:normal 2\:all))' \ +    '--noinput[tells Django to NOT prompt the user for input of any kind.]' \ +    '*::appname:_applist' \ +    $nul_args && ret=0 +} + +_managepy-testserver() { +  _arguments -s : \ +    '--verbosity=-[verbosity level; 0=minimal output, 1=normal output, 2=all output.]:Verbosity:((0\:minimal 1\:normal 2\:all))' \ +    '--addrport=-[port number or ipaddr:port to run the server on.]' \ +    '*::fixture:_files' \ +    $nul_args && ret=0 +} + +_managepy-validate() { +  _arguments -s : \ +    $nul_args && ret=0 +} + +_managepy-commands() { +  local -a commands +   +  commands=( +    'adminindex:prints the admin-index template snippet for the given app name(s).' +    'createcachetable:creates the table needed to use the SQL cache backend.' +    'dbshell:runs the command-line client for the current DATABASE_ENGINE.' +    "diffsettings:displays differences between the current settings.py and Django's default settings." +    'dumpdata:Output the contents of the database as a fixture of the given format.' +    'flush:Executes ``sqlflush`` on the current database.' +    'help:manage.py help.' +    'inspectdb:Introspects the database tables in the given database and outputs a Django model module.' +    'loaddata:Installs the named fixture(s) in the database.' +    'reset:Executes ``sqlreset`` for the given app(s) in the current database.' +    'runfcgi:Run this project as a fastcgi (or some other protocol supported by flup) application,' +    'runserver:Starts a lightweight Web server for development.' +    'shell:Runs a Python interactive interpreter.' +    'sql:Prints the CREATE TABLE SQL statements for the given app name(s).' +    'sqlall:Prints the CREATE TABLE, custom SQL and CREATE INDEX SQL statements for the given model module name(s).' +    'sqlclear:Prints the DROP TABLE SQL statements for the given app name(s).' +    'sqlcustom:Prints the custom table modifying SQL statements for the given app name(s).' +    'sqlflush:Returns a list of the SQL statements required to return all tables in the database to the state they were in just after they were installed.' +    'sqlindexes:Prints the CREATE INDEX SQL statements for the given model module name(s).' +    "sqlinitialdata:RENAMED: see 'sqlcustom'" +    'sqlreset:Prints the DROP TABLE SQL, then the CREATE TABLE SQL, for the given app name(s).' +    'sqlsequencereset:Prints the SQL statements for resetting sequences for the given app name(s).' +    "startapp:Creates a Django app directory structure for the given app name in this project's directory." +    "syncdb:Create the database tables for all apps in INSTALLED_APPS whose tables haven't already been created." +    'test:Runs the test suite for the specified applications, or the entire site if no apps are specified.' +    'testserver:Runs a development server with data from the given fixture(s).' +    'validate:Validates all installed models.' +  ) +   +  _describe -t commands 'manage.py command' commands && ret=0 +} + +_applist() { +  local line +  local -a apps +  _call_program help-command "python -c \"import os.path as op, re, django.conf, sys;\\ +                                          bn=op.basename(op.abspath(op.curdir));[sys\\ +                                          .stdout.write(str(re.sub(r'^%s\.(.*?)$' % +                                          bn, r'\1', i)) + '\n') for i in django.conf.settings.\\ +                                          INSTALLED_APPS if re.match(r'^%s' % bn, i)]\"" \ +                             | while read -A line; do apps=($line $apps) done +  _values 'Application' $apps && ret=0 +} + +_managepy() { +  local curcontext=$curcontext ret=1 +   +  if ((CURRENT == 2)); then +    _managepy-commands +  else +    shift words +    (( CURRENT -- )) +    curcontext="${curcontext%:*:*}:managepy-$words[1]:" +    _call_function ret _managepy-$words[1] +  fi +} + +compdef _managepy manage.py +compdef _managepy django diff --git a/plugins/git/git.plugin.zsh b/plugins/git/git.plugin.zsh index bc340e86b..5132b639a 100644 --- a/plugins/git/git.plugin.zsh +++ b/plugins/git/git.plugin.zsh @@ -27,11 +27,15 @@ alias gcp='git cherry-pick'  compdef _git gcp=git-cherry-pick  alias glg='git log --stat --max-count=5'  compdef _git glg=git-log +alias glgg='git log --graph --max-count=5' +compdef _git glgg=git-log  # Git and svn mix  alias git-svn-dcommit-push='git svn dcommit && git push github master:svntrunk'  compdef git-svn-dcommit-push=git +alias gsr='git svn rebase' +alias gsd='git svn dcommit'  #  # Will return the current branch name  # Usage example: git pull origin $(current_branch) diff --git a/plugins/knife/_knife b/plugins/knife/_knife new file mode 100644 index 000000000..7f8c95ee5 --- /dev/null +++ b/plugins/knife/_knife @@ -0,0 +1,174 @@ +#compdef knife + +# These flags should be available everywhere according to man knife +knife_general_flags=( --help --server-url --key --config --editor --format --log_level --logfile --no-editor --user --print-after --version --yes ) + +# knife has a very special syntax, some example calls are: +# knife status +# knife cookbook list +# knife role show ROLENAME +# knife data bag show DATABAGNAME +# knife role show ROLENAME --attribute ATTRIBUTENAME +# knife cookbook show COOKBOOKNAME COOKBOOKVERSION recipes + +# The -Q switch in compadd allow for completions of things like "data bag" without having to go through two rounds of completion and avoids zsh inserting a \ for escaping spaces +_knife() { +  local curcontext="$curcontext" state line +  typeset -A opt_args +  cloudproviders=(bluebox ec2 rackspace slicehost terremark) +  _arguments \ +    '1: :->knifecmd'\ +    '2: :->knifesubcmd'\ +    '3: :->knifesubcmd2' \ +    '4: :->knifesubcmd3' \ +    '5: :->knifesubcmd4' \ +    '6: :->knifesubcmd5' +   +  case $state in +  knifecmd) +    compadd -Q "$@" bootstrap client configure cookbook "cookbook site" "data bag" exec index node recipe role search ssh status windows $cloudproviders +  ;; +  knifesubcmd) +    case $words[2] in +    (bluebox|ec2|rackspace|slicehost|terremark) +      compadd "$@" server images +    ;; +    client) +      compadd -Q "$@" "bulk delete" list create show delete edit reregister +    ;; +    configure) +      compadd "$@" client +    ;; +    cookbook) +      compadd -Q "$@" test list create download delete "metadata from" show "bulk delete" metadata upload +    ;; +    node) +     compadd -Q "$@" "from file" create show edit delete list run_list "bulk delete" +    ;; +    recipe) +     compadd "$@" list +    ;; +    role) +      compadd -Q "$@" "bulk delete" create delete edit "from file" list show +    ;;  +    windows) +      compadd "$@" bootstrap +    ;; +    *) +    _arguments '2:Subsubcommands:($(_knife_options1))' +    esac +   ;; +   knifesubcmd2) +    case $words[3] in +     server) +      compadd "$@" list create delete +    ;; +     images) +      compadd "$@" list +    ;; +     site) +      compadd "$@" vendor show share search download list unshare +    ;; +     (show|delete|edit) +     _arguments '3:Subsubcommands:($(_chef_$words[2]s_remote))' +    ;; +    (upload|test) +     _arguments '3:Subsubcommands:($(_chef_$words[2]s_local) --all)' +    ;; +    list) +     compadd -a "$@" knife_general_flags +    ;; +    bag) +      compadd -Q "$@" show edit list "from file" create delete +    ;; +    *) +      _arguments '3:Subsubcommands:($(_knife_options2))' +    esac +   ;; +   knifesubcmd3) +     case $words[3] in +      show) +       case $words[2] in +       cookbook) +          versioncomp=1 +          _arguments '4:Cookbookversions:($(_cookbook_versions) latest)' +       ;; +       (node|client|role) +         compadd "$@" --attribute +       esac +     esac +     case $words[4] in +     (show|edit) +     _arguments '4:Subsubsubcommands:($(_chef_$words[2]_$words[3]s_remote))' +    ;; +     file) +     _arguments '*:file or directory:_files -g "*.(rb|json)"' +    ;; +      list) +     compadd -a "$@" knife_general_flags +    ;; +        *) +       _arguments '*:Subsubcommands:($(_knife_options3))' +    esac +    ;; +    knifesubcmd4) +      if (( versioncomp > 0 )); then +        compadd "$@" attributes definitions files libraries providers recipes resources templates +      else +       _arguments '*:Subsubcommands:($(_knife_options2))' +      fi +    ;;  +    knifesubcmd5)  +      _arguments '*:Subsubcommands:($(_knife_options3))' +   esac +} + +# Helper functions to provide the argument completion for several depths of commands +_knife_options1() { + ( for line in $( knife $words[2] --help | grep -v "^knife" ); do echo $line | grep "\-\-"; done ) +} + +_knife_options2() { + ( for line in $( knife $words[2] $words[3] --help | grep -v "^knife" ); do echo $line | grep "\-\-"; done ) +} + +_knife_options3() { + ( for line in $( knife $words[2] $words[3] $words[4] --help | grep -v "^knife" ); do echo $line | grep "\-\-"; done ) +} + +# The chef_x_remote functions use knife to get a list of objects of type x on the server +_chef_roles_remote() { + (knife role list | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}') +} + +_chef_clients_remote() { + (knife client list | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}') +} + +_chef_nodes_remote() { + (knife node list | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}') +} + +_chef_cookbooks_remote() { + (knife cookbook list | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}') +} + +_chef_sitecookbooks_remote() { + (knife cookbook site list | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}') +} + +_chef_data_bags_remote() { + (knife data bag list | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}') +} + +# 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) +} + +# This function extracts the available cookbook versions on the chef server +_cookbook_versions() { +  (knife cookbook show $words[4] | grep -v $words[4] | grep -v -E '\]|\[|\{|\}' | sed 's/ //g' | sed 's/"//g') +} + +_knife "$@" diff --git a/plugins/osx/_man-preview b/plugins/osx/_man-preview new file mode 100644 index 000000000..6cc344ad4 --- /dev/null +++ b/plugins/osx/_man-preview @@ -0,0 +1,5 @@ +#compdef man-preview +#autoload + +_man + diff --git a/plugins/osx/osx.plugin.zsh b/plugins/osx/osx.plugin.zsh index a65ca642a..682bb2667 100644 --- a/plugins/osx/osx.plugin.zsh +++ b/plugins/osx/osx.plugin.zsh @@ -1,63 +1,99 @@ -alias showfiles='defaults write com.apple.finder AppleShowAllFiles TRUE; killall Finder' -alias hidefiles='defaults write com.apple.finder AppleShowAllFiles FALSE; killall Finder' +# ------------------------------------------------------------------------------ +#          FILE:  osx.plugin.zsh +#   DESCRIPTION:  oh-my-zsh plugin file. +#        AUTHOR:  Sorin Ionescu (sorin.ionescu@gmail.com) +#       VERSION:  1.0.1 +# ------------------------------------------------------------------------------ -# Recursively delete .DS_Store files -alias rm-dsstore="find . -name '*.DS_Store' -type f -delete" - -function savepath() { -  pwd > ~/.current_path~ -}  function tab() { -savepath -osascript >/dev/null <<EOF -on do_submenu(app_name, menu_name, menu_item, submenu_item) -    -- bring the target application to the front -    tell application app_name -      activate -    end tell -    tell application "System Events" -      tell process app_name -        tell menu bar 1 -          tell menu bar item menu_name -            tell menu menu_name -              tell menu item menu_item -                tell menu menu_item -                  click menu item submenu_item -                end tell -              end tell -            end tell -          end tell -        end tell +  local command="cd \\\"$PWD\\\"" +  (( $# > 0 )) && command="${command}; $*" + +  the_app=$( +    osascript 2>/dev/null <<EOF +      tell application "System Events" +        name of first item of (every process whose frontmost is true)        end tell -    end tell -end do_submenu +EOF +  ) -do_submenu("Terminal", "Shell", "New Tab", 1) +  [[ "$the_app" == 'Terminal' ]] && { +    osascript 2>/dev/null <<EOF +      tell application "System Events" +        tell process "Terminal" to keystroke "t" using command down +        tell application "Terminal" to do script "${command}" in front window +      end tell  EOF -} +  } -function itab() { -savepath -osascript >/dev/null <<EOF -on do_submenu(app_name, menu_name, menu_item) -    -- bring the target application to the front -    tell application app_name -      activate -    end tell -    tell application "System Events" -      tell process app_name -        tell menu bar 1 -          tell menu bar item menu_name -            tell menu menu_name -              click menu item menu_item -            end tell +  [[ "$the_app" == 'iTerm' ]] && { +    osascript 2>/dev/null <<EOF +      tell application "iTerm" +        set current_terminal to current terminal +        tell current_terminal +          launch session "Default Session" +          set current_session to current session +          tell current_session +            write text "${command}"            end tell          end tell        end tell +EOF +  } +} + +function pfd() { +  osascript 2>/dev/null <<EOF +    tell application "Finder" +      return POSIX path of (target of window 1 as alias)      end tell -end do_submenu +EOF +} -do_submenu("iTerm", "Shell", "New Tab") +function pfs() { +  osascript 2>/dev/null <<EOF +    set output to "" +    tell application "Finder" to set the_selection to selection +    set item_count to count the_selection +    repeat with item_index from 1 to count the_selection +      if item_index is less than item_count then set the_delimiter to "\n" +      if item_index is item_count then set the_delimiter to "" +      set output to output & ((item item_index of the_selection as alias)'s POSIX path) & the_delimiter +    end repeat  EOF  } + +function cdf() { +  cd "$(pfd)" +} + +function pushdf() { +  pushd "$(pfd)" +} + +function quick-look() { +  (( $# > 0 )) && qlmanage -p $* &>/dev/null & +} + +function man-preview() { +  man -t "$@" | open -f -a Preview +} + +function trash() { +  local trash_dir="${HOME}/.Trash" +  local temp_ifs=$IFS +  IFS=$'\n' +  for item in "$@"; do +    if [[ -e "$item" ]]; then +      item_name="$(basename $item)" +      if [[ -e "${trash_dir}/${item_name}" ]]; then +        mv -f "$item" "${trash_dir}/${item_name} $(date "+%H-%M-%S")" +      else +        mv -f "$item" "${trash_dir}/" +      fi +    fi +  done +  IFS=$temp_ifs +} + diff --git a/plugins/rails3/rails3.plugin.zsh b/plugins/rails3/rails3.plugin.zsh index f669ef047..f4ee637e6 100644 --- a/plugins/rails3/rails3.plugin.zsh +++ b/plugins/rails3/rails3.plugin.zsh @@ -1,13 +1,5 @@  # 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/$@ @@ -25,6 +17,3 @@ 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/plugins/redis-cli/_redis-cli b/plugins/redis-cli/_redis-cli index 3789add18..1569f2916 100644 --- a/plugins/redis-cli/_redis-cli +++ b/plugins/redis-cli/_redis-cli @@ -51,7 +51,7 @@ _1st_arguments=(    'keys:find all keys matching the given pattern'    'lastsave:get the UNIX timestamp of the last successful save to disk'    'lindex:get an element from a list by its index' -  'linset:insert an element before or after another element in a list' +  'linsert:insert an element before or after another element in a list'    'llen:get the length of a list'    'lpop:remove and get the first element in a list'    'lpush:prepend a value to a list' diff --git a/plugins/ssh-agent/ssh-agent.plugin.zsh b/plugins/ssh-agent/ssh-agent.plugin.zsh index 0efc4546f..c4e92a1fe 100644 --- a/plugins/ssh-agent/ssh-agent.plugin.zsh +++ b/plugins/ssh-agent/ssh-agent.plugin.zsh @@ -1,23 +1,62 @@ -# Based on code from Joseph M. Reagle -# http://www.cygwin.com/ml/cygwin/2001-06/msg00537.html +# +# INSTRUCTIONS +# +#   To enabled agent forwarding support add the following to +#   your .zshrc file: +# +#     zstyle :omz:plugins:ssh-agent agent-forwarding on +# +#   To load multiple identies use the identities style, For +#   example: +# +#     zstyle :omz:plugins:ssh-agent id_rsa id_rsa2 id_github +# +# +# CREDITS +# +#   Based on code from Joseph M. Reagle +#   http://www.cygwin.com/ml/cygwin/2001-06/msg00537.html +# +#   Agent forwarding support based on ideas from +#   Florent Thoumie and Jonas Pfenniger +# -local SSH_ENV=$HOME/.ssh/environment-$HOST +local _plugin__ssh_env=$HOME/.ssh/environment-$HOST +local _plugin__forwarding -function start_agent { -  /usr/bin/env ssh-agent | sed 's/^echo/#echo/' > ${SSH_ENV} -  chmod 600 ${SSH_ENV} -  . ${SSH_ENV} > /dev/null -  /usr/bin/ssh-add; +function _plugin__start_agent() +{ +  local -a identities + +  # start ssh-agent and setup environment +  /usr/bin/env ssh-agent | sed 's/^echo/#echo/' > ${_plugin__ssh_env} +  chmod 600 ${_plugin__ssh_env} +  . ${_plugin__ssh_env} > /dev/null + +  # load identies +  zstyle -a :omz:plugins:ssh-agent identities identities  +  echo starting... +  /usr/bin/ssh-add $HOME/.ssh/${^identities}  } -# Source SSH settings, if applicable +# test if agent-forwarding is enabled +zstyle -b :omz:plugins:ssh-agent agent-forwarding _plugin__forwarding +if [[ ${_plugin__forwarding} == "yes" && -n "$SSH_AUTH_SOCK" ]]; then +  # Add a nifty symlink for screen/tmux if agent forwarding +  [[ -L $SSH_AUTH_SOCK ]] || ln -sf "$SSH_AUTH_SOCK" /tmp/ssh-agent-$USER-screen -if [ -f "${SSH_ENV}" ]; then -  . ${SSH_ENV} > /dev/null +elif [ -f "${_plugin__ssh_env}" ]; then +  # Source SSH settings, if applicable +  . ${_plugin__ssh_env} > /dev/null    ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || { -    start_agent; +    _plugin__start_agent;    }  else -  start_agent; +  _plugin__start_agent;  fi +# tidy up after ourselves +unfunction _plugin__start_agent +unset _plugin__forwarding +unset _plugin__ssh_env + diff --git a/plugins/svn/svn.plugin.zsh b/plugins/svn/svn.plugin.zsh index 45d461306..86050227d 100644 --- a/plugins/svn/svn.plugin.zsh +++ b/plugins/svn/svn.plugin.zsh @@ -13,7 +13,7 @@ function in_svn() {  }  function svn_get_repo_name { -    if [ is_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 [ is_svn ]; then +    if [ in_svn ]; then          svn info 2> /dev/null | sed -n s/Revision:\ //p      fi  }  function svn_dirty_choose { -    if [ is_svn ]; then +    if [ in_svn ]; then          s=$(svn status 2>/dev/null)          if [ $s ]; then               echo $1 @@ -39,4 +39,4 @@ function svn_dirty_choose {  function svn_dirty {      svn_dirty_choose $ZSH_THEME_SVN_PROMPT_DIRTY $ZSH_THEME_SVN_PROMPT_CLEAN -}
\ No newline at end of file +} diff --git a/plugins/taskwarrior/_task b/plugins/taskwarrior/_task new file mode 100644 index 000000000..5bffa9119 --- /dev/null +++ b/plugins/taskwarrior/_task @@ -0,0 +1,280 @@ +#compdef task +# +# zsh completion for taskwarrior +# +# Copyright 2010 - 2011 Johannes Schlatow +# Copyright 2009 P.C. Shyamshankar +# All rights reserved. +# +# This script is part of the taskwarrior project. +# +# This program is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free Software +# Foundation; either version 2 of the License, or (at your option) any later +# version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the +# +#     Free Software Foundation, Inc., +#     51 Franklin Street, Fifth Floor, +#     Boston, MA +#     02110-1301 +#     USA +# +typeset -g _task_cmds _task_projects _task_tags _task_config _task_modifiers +_task_projects=($(task _projects)) +_task_tags=($(task _tags)) +_task_ids=($(task _ids)) +_task_config=($(task _config)) +_task_modifiers=( +	'before' \ +	'after' \ +	'none' \ +	'any' \ +	'is' \ +	'isnt' \ +	'has' \ +	'hasnt' \ +	'startswith' \ +	'endswith' \ +	'word' \ +	'noword' +) +_task_cmds=($(task _commands)) +_task_zshcmds=( ${(f)"$(task _zshcommands)"} ) + + +_task_idCmds=( +	'append' \ +	'prepend' \ +	'annotate' \ +	'denotate' \ +	'edit' \ +	'duplicate' \ +	'info' \ +	'start' \ +	'stop' \ +	'done' +) + +_task_idCmdsDesc=( +	'append:Appends more description to an existing task.' \ +	'prepend:Prepends more description to an existing task.' \ +	'annotate:Adds an annotation to an existing task.' \ +	'denotate:Deletes an annotation of an existing task.' \ +	'edit:Launches an editor to let you modify a task directly.' \ +	'duplicate:Duplicates the specified task, and allows modifications.' \ +	'info:Shows all data, metadata for specified task.' \ +	'start:Marks specified task as started.' \ +	'stop:Removes the start time from a task.' \ +	'done:Marks the specified task as completed.' +) + +_task() { +    _arguments -s -S \ +        "*::task command:_task_commands" +    return 0 +} + +local -a reply args word +word=$'[^\0]#\0' + +# priorities +local -a task_priorities +_regex_words values 'task priorities' \ +	'H:High' \ +	'M:Middle' \ +	'L:Low' +task_priorities=("$reply[@]") + +# projects +local -a task_projects +task_projects=( +	/"$word"/ +	":values:task projects:compadd -a _task_projects" +) + +local -a _task_dates +_regex_words values 'task dates' \ +	'tod*ay:Today' \ +	'yes*terday:Yesterday' \ +	'tom*orrow:Tomorrow' \ +	'sow:Start of week' \ +	'soww:Start of work week' \ +	'socw:Start of calendar week' \ +	'som:Start of month' \ +	'soy:Start of year' \ +	'eow:End of week' \ +	'eoww:End of work week' \ +	'eocw:End of calendar week' \ +	'eom:End of month' \ +	'eoy:End of year' \ +	'mon:Monday' \ +	'tue:Tuesday'\ +	'wed:Wednesday' \ +	'thu:Thursday' \ +	'fri:Friday' \ +	'sat:Saturday' \ +	'sun:Sunday' +_task_dates=("$reply[@]") + +local -a _task_reldates +_regex_words values 'task reldates' \ +	'hrs:n hours' \ +	'day:n days' \ +	'1st:first' \ +	'2nd:second' \ +	'3rd:third' \ +	'th:4th, 5th, etc.' \ +	'wks:weeks' +_task_reldates=("$reply[@]") + +task_dates=( +	\( "$_task_dates[@]" \| +    \( /$'[0-9][0-9]#'/- \( "$_task_reldates[@]" \) \) +	\) +) + +_regex_words values 'task frequencies' \ +	'daily:Every day' \ +	'day:Every day' \ +	'weekdays:Every day skipping weekend days' \ +	'weekly:Every week' \ +	'biweekly:Every two weeks' \ +	'fortnight:Every two weeks' \ +	'quarterly:Every three months' \ +	'semiannual:Every six months' \ +	'annual:Every year' \ +	'yearly:Every year' \ +	'biannual:Every two years' \ +	'biyearly:Every two years' +_task_freqs=("$reply[@]") + +local -a _task_frequencies +_regex_words values 'task frequencies' \ +	'd:days' \ +	'w:weeks' \ +	'q:quarters' \ +	'y:years' +_task_frequencies=("$reply[@]") + +task_freqs=( +	\( "$_task_freqs[@]" \| +     \( /$'[0-9][0-9]#'/- \( "$_task_frequencies[@]" \) \) +	\) +) + +# attributes +local -a task_attributes +_regex_words -t ':' default 'task attributes' \ +	'pro*ject:Project name:$task_projects' \ +	'du*e:Due date:$task_dates' \ +	'wa*it:Date until task becomes pending:$task_dates' \ +	're*cur:Recurrence frequency:$task_freqs' \ +	'pri*ority:priority:$task_priorities' \ +	'un*til:Recurrence end date:$task_dates' \ +	'fg:Foreground color' \ +	'bg:Background color' \ +	'li*mit:Desired number of rows in report' +task_attributes=("$reply[@]") + +args=( +	\( "$task_attributes[@]" \| +	\( /'(project|due|wait|recur|priority|until|fg|bg|limit).'/- \( /$'[^:]#:'/ ":default:modifiers:compadd -S ':' -a _task_modifiers" \) \) \| +	\( /'(rc).'/- \( /$'[^:]#:'/ ":arguments:config:compadd -S ':' -a _task_config" \) \) \| +	\( /'(+|-)'/- \( /"$word"/ ":values:remove tag:compadd -a _task_tags" \) \) \| +	\( /"$word"/ \) +	\) \# +) +_regex_arguments _task_attributes "${args[@]}" + +## task commands + +# default completion +(( $+functions[_task_default] )) || +_task_default() { +	_task_attributes "$@" +} + +# commands expecting an ID +(( $+functions[_task_id] )) || +_task_id() { +	if (( CURRENT < 3 )); then +		# update IDs +		_task_zshids=( ${(f)"$(task _zshids)"} ) +		_describe -t values 'task IDs' _task_zshids +	else +		_task_attributes "$@" +	fi +} + +# merge completion +(( $+functions[_task_merge] )) || +_task_merge() { +	# TODO match URIs in .taskrc +	_files +} + +# push completion +(( $+functions[_task_push] )) || +_task_push() { +	# TODO match URIs in .taskrc +	_files +} + +# pull completion +(( $+functions[_task_pull] )) || +_task_pull() { +	# TODO match URIs in .taskrc +	_files +} + + +# modify (task [0-9]* ...) completion +(( $+functions[_task_modify] )) || +_task_modify() { +	_describe -t commands 'task command' _task_idCmdsDesc +	_task_attributes "$@" +} + +## first level completion => task sub-command completion +(( $+functions[_task_commands] )) || +_task_commands() { +    local cmd ret=1 +	if (( CURRENT == 1 )); then +		# update IDs +		_task_zshids=( ${(f)"$(task _zshids)"} ) + +		_describe -t commands 'task command' _task_zshcmds +		_describe -t values 'task IDs' _task_zshids +		# TODO match more than one ID +	elif [[ $words[1] =~ ^[0-9]*$ ]] then +		 _call_function ret _task_modify +		 return ret +	else +#        local curcontext="${curcontext}" +#        cmd="${_task_cmds[(r)$words[1]:*]%%:*}" +		  cmd="${_task_cmds[(r)$words[1]]}" +		  idCmd="${(M)_task_idCmds[@]:#$words[1]}" +        if (( $#cmd )); then +#            curcontext="${curcontext%:*:*}:task-${cmd}" + +				if (( $#idCmd )); then +					_call_function ret _task_id +				else +					_call_function ret _task_${cmd} || +						_call_function ret _task_default || +							_message "No command remaining." +				fi +        else +            _message "Unknown subcommand ${cmd}" +        fi +        return ret +    fi +} diff --git a/plugins/taskwarrior/taskwarrior.plugin.zsh b/plugins/taskwarrior/taskwarrior.plugin.zsh new file mode 100644 index 000000000..c1830042e --- /dev/null +++ b/plugins/taskwarrior/taskwarrior.plugin.zsh @@ -0,0 +1,21 @@ +################################################################################ +# Author: Pete Clark +# Email: pete[dot]clark[at]gmail[dot]com +# Version: 0.1 (05/24/2011) +# License: WTFPL<http://sam.zoy.org/wtfpl/> +# +# This oh-my-zsh plugin adds smart tab completion for +# TaskWarrior<http://taskwarrior.org/>. It uses the zsh tab completion +# script (_task) distributed with TaskWarrior for the completion definitions. +# +# Typing task[tabtab] will give you a list of current tasks, task 66[tabtab] +# gives a list of available modifications for that task, etc. +################################################################################ + +zstyle ':completion:*:*:task:*' verbose yes +zstyle ':completion:*:*:task:*:descriptions' format '%U%B%d%b%u' + +zstyle ':completion:*:*:task:*' group-name '' + +alias t=task +compdef _task t=task diff --git a/templates/zshrc.zsh-template b/templates/zshrc.zsh-template index 576d45eaa..77f866d52 100644 --- a/templates/zshrc.zsh-template +++ b/templates/zshrc.zsh-template @@ -1,23 +1,23 @@  # Path to your oh-my-zsh configuration. -export ZSH=$HOME/.oh-my-zsh +ZSH=$HOME/.oh-my-zsh  # 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" +ZSH_THEME="robbyrussell"  # Set to this to use case-sensitive completion -# export CASE_SENSITIVE="true" +# CASE_SENSITIVE="true"  # Comment this out to disable weekly auto-update checks -# export DISABLE_AUTO_UPDATE="true" +# DISABLE_AUTO_UPDATE="true"  # Uncomment following line if you want to disable colors in ls -# export DISABLE_LS_COLORS="true" +# DISABLE_LS_COLORS="true"  # Uncomment following line if you want to disable autosetting terminal title. -# export DISABLE_AUTO_TITLE="true" +# DISABLE_AUTO_TITLE="true"  # Which plugins would you like to load? (plugins can be found in ~/.oh-my-zsh/plugins/*)  # Example format: plugins=(rails git textmate ruby lighthouse) diff --git a/themes/blinks.zsh-theme b/themes/blinks.zsh-theme new file mode 100644 index 000000000..3db7012f4 --- /dev/null +++ b/themes/blinks.zsh-theme @@ -0,0 +1,20 @@ +# https://github.com/blinks zsh theme + +function _prompt_char() { +  if $(git rev-parse --is-inside-work-tree >/dev/null 2>&1); then +    echo "%{%F{blue}%}±%{%f%k%b%}" +  else +    echo ' ' +  fi +} + +ZSH_THEME_GIT_PROMPT_PREFIX=" [%{%B%F{blue}%}" +ZSH_THEME_GIT_PROMPT_SUFFIX="%{%f%k%b%K{black}%B%F{green}%}]" +ZSH_THEME_GIT_PROMPT_DIRTY=" %{%F{red}%}*%{%f%k%b%}" +ZSH_THEME_GIT_PROMPT_CLEAN="" + +PROMPT='%{%f%k%b%} +%{%K{black}%B%F{green}%}%n%{%B%F{blue}%}@%{%B%F{cyan}%}%m%{%B%F{green}%} %{%b%F{yellow}%K{black}%}%~%{%B%F{green}%}$(git_prompt_info)%E%{%f%k%b%} +%{%K{black}%}$(_prompt_char)%{%K{black}%} %#%{%f%k%b%} ' + +RPROMPT='!%{%B%F{cyan}%}%!%{%f%k%b%}' diff --git a/themes/dpoggi.zsh-theme b/themes/dpoggi.zsh-theme new file mode 100644 index 000000000..6469a2009 --- /dev/null +++ b/themes/dpoggi.zsh-theme @@ -0,0 +1,14 @@ +if [ $UID -eq 0 ]; then NCOLOR="red"; else NCOLOR="green"; fi +local return_code="%(?..%{$fg[red]%}%? ↵%{$reset_color%})" + +PROMPT='%{$fg[$NCOLOR]%}%n%{$reset_color%}@%{$fg[cyan]%}%m\ +%{$reset_color%}:%{$fg[magenta]%}%~\ +$(git_prompt_info) \ +%{$fg[red]%}%(!.#.»)%{$reset_color%} ' +PROMPT2='%{$fg[red]%}\ %{$reset_color%}' +RPS1='${return_code}' + +ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg[yellow]%}(" +ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[green]%}○%{$reset_color%}" +ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[red]%}⚡%{$reset_color%}" +ZSH_THEME_GIT_PROMPT_SUFFIX="%{$fg[yellow]%})%{$reset_color%}" diff --git a/themes/humza.zsh-theme b/themes/humza.zsh-theme new file mode 100644 index 000000000..107886295 --- /dev/null +++ b/themes/humza.zsh-theme @@ -0,0 +1,26 @@ +# ZSH THEME Preview: https://skitch.com/huyy/rk979/humza.zshtheme + +let TotalBytes=0 +for Bytes in $(ls -l | grep "^-" | awk '{ print $5 }') +do +   let TotalBytes=$TotalBytes+$Bytes +done +		# should it say b, kb, Mb, or Gb +if [ $TotalBytes -lt 1024 ]; then +   TotalSize=$(echo -e "scale=3 \n$TotalBytes \nquit" | bc) +   suffix="b" +elif [ $TotalBytes -lt 1048576 ]; then +   TotalSize=$(echo -e "scale=3 \n$TotalBytes/1024 \nquit" | bc) +   suffix="kb" +elif [ $TotalBytes -lt 1073741824 ]; then +   TotalSize=$(echo -e "scale=3 \n$TotalBytes/1048576 \nquit" | bc) +   suffix="Mb" +else +   TotalSize=$(echo -e "scale=3 \n$TotalBytes/1073741824 \nquit" | bc) +   suffix="Gb" +fi + +PROMPT='%{$reset_color%}%n %{$fg[green]%}{%{$reset_color%}%~%{$fg[green]%}}%{$reset_color%}$(git_prompt_info) greetings, earthling %{$fg[green]%}[%{$reset_color%}%{$TotalSize%}%{$suffix%}%{$fg[green]%}]%{$fg[red]%}$%{$reset_color%} ☞ ' + +ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg[red]%}±(" +ZSH_THEME_GIT_PROMPT_SUFFIX=");%{$reset_color%}" diff --git a/themes/lukerandall.zsh-theme b/themes/lukerandall.zsh-theme index 24a0612b7..f4045bd8e 100644 --- a/themes/lukerandall.zsh-theme +++ b/themes/lukerandall.zsh-theme @@ -3,8 +3,22 @@  local return_code="%(?..%{$fg_bold[red]%}%? ↵%{$reset_color%})" -PROMPT='%{$fg_bold[green]%}%n@%m%{$reset_color%} %{$fg_bold[blue]%}%2~%{$reset_color%} $(git_prompt_info)%{$reset_color%}%B»%b ' +function my_git_prompt_info() { +  ref=$(git symbolic-ref HEAD 2> /dev/null) || return +  GIT_STATUS=$(git_prompt_status) +  [[ -n $GIT_STATUS ]] && GIT_STATUS=" $GIT_STATUS" +  echo "$ZSH_THEME_GIT_PROMPT_PREFIX${ref#refs/heads/}$GIT_STATUS$ZSH_THEME_GIT_PROMPT_SUFFIX" +} + +PROMPT='%{$fg_bold[green]%}%n@%m%{$reset_color%} %{$fg_bold[blue]%}%2~%{$reset_color%} $(my_git_prompt_info)%{$reset_color%}%B»%b '  RPS1="${return_code}"  ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg[yellow]%}("  ZSH_THEME_GIT_PROMPT_SUFFIX=") %{$reset_color%}" +ZSH_THEME_GIT_PROMPT_UNTRACKED="%%" +ZSH_THEME_GIT_PROMPT_ADDED="+" +ZSH_THEME_GIT_PROMPT_MODIFIED="*" +ZSH_THEME_GIT_PROMPT_RENAMED="~" +ZSH_THEME_GIT_PROMPT_DELETED="!" +ZSH_THEME_GIT_PROMPT_UNMERGED="?" + diff --git a/themes/nebirhos.zsh-theme b/themes/nebirhos.zsh-theme new file mode 100644 index 000000000..c49df972e --- /dev/null +++ b/themes/nebirhos.zsh-theme @@ -0,0 +1,17 @@ +# Based on robbyrussell's theme, with host and rvm indicators. Example: +# @host ➜ currentdir rvm:(rubyversion@gemset) git:(branchname) + +# Get the current ruby version in use with RVM: +if [ -e ~/.rvm/bin/rvm-prompt ]; then +    RUBY_PROMPT_="%{$fg_bold[blue]%}rvm:(%{$fg[green]%}\$(~/.rvm/bin/rvm-prompt s i v g)%{$fg_bold[blue]%})%{$reset_color%} " +fi + +# Get the host name (first 4 chars) +HOST_PROMPT_="%{$fg_bold[red]%}@$HOST[0,4] ➜  %{$fg_bold[cyan]%}%c " +GIT_PROMPT="%{$fg_bold[blue]%}\$(git_prompt_info)%{$fg_bold[blue]%} % %{$reset_color%}" +PROMPT="$HOST_PROMPT_$RUBY_PROMPT_$GIT_PROMPT" + +ZSH_THEME_GIT_PROMPT_PREFIX="git:(%{$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/themes/philips.zsh-theme b/themes/philips.zsh-theme index e7ea51a2f..f6e5b324e 100644 --- a/themes/philips.zsh-theme +++ b/themes/philips.zsh-theme @@ -7,8 +7,8 @@ RPROMPT='[%*]'  ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg_bold[blue]%}(%{$fg_no_bold[red]%}%B"  ZSH_THEME_GIT_PROMPT_SUFFIX="%b%{$fg_bold[blue]%})%{$reset_color%} "  ZSH_THEME_GIT_PROMPT_CLEAN="" -ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg_bold[red]%}" +ZSH_THEME_GIT_PROMPT_DIRTY="*"  # 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:' +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:*.patch=00;34:*.o=00;32:*.so=01;35:*.ko=01;31:*.la=00;33' diff --git a/themes/smt.zsh-theme b/themes/smt.zsh-theme new file mode 100644 index 000000000..7a287523e --- /dev/null +++ b/themes/smt.zsh-theme @@ -0,0 +1,91 @@ +# ----------------------------------------------------------------------------- +#          FILE: smt.zsh-theme +#   DESCRIPTION: oh-my-zsh theme file, based on dogenpunk by Matthew Nelson. +#        AUTHOR: Stephen Tudor (stephen@tudorstudio.com +#       VERSION: 0.1 +#    SCREENSHOT: coming soon +# ----------------------------------------------------------------------------- + +MODE_INDICATOR="%{$fg_bold[red]%}❮%{$reset_color%}%{$fg[red]%}❮❮%{$reset_color%}" +local return_status="%{$fg[red]%}%(?..⏎)%{$reset_color%} " + +ZSH_THEME_GIT_PROMPT_PREFIX="|" +ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}" +ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg_bold[red]%}⚡%{$reset_color%}" +ZSH_THEME_GIT_PROMPT_AHEAD="%{$fg_bold[red]%}!%{$reset_color%}" +ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg_bold[green]%}✓%{$reset_color%}" + +ZSH_THEME_GIT_PROMPT_ADDED="%{$fg[green]%} ✚" +ZSH_THEME_GIT_PROMPT_MODIFIED="%{$fg[blue]%} ✹" +ZSH_THEME_GIT_PROMPT_DELETED="%{$fg[red]%} ✖" +ZSH_THEME_GIT_PROMPT_RENAMED="%{$fg[magenta]%} ➜" +ZSH_THEME_GIT_PROMPT_UNMERGED="%{$fg[yellow]%} ═" +ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$fg[cyan]%} ✭" + +# Format for git_prompt_long_sha() and git_prompt_short_sha() +ZSH_THEME_GIT_PROMPT_SHA_BEFORE="➤ %{$fg_bold[yellow]%}" +ZSH_THEME_GIT_PROMPT_SHA_AFTER="%{$reset_color%}" + +function prompt_char() { +  git branch >/dev/null 2>/dev/null && echo "%{$fg[green]%}±%{$reset_color%}" && return +  hg root >/dev/null 2>/dev/null && echo "%{$fg_bold[red]%}☿%{$reset_color%}" && return +  echo "%{$fg[cyan]%}◯%{$reset_color%}" +} + +# Colors vary depending on time lapsed. +ZSH_THEME_GIT_TIME_SINCE_COMMIT_SHORT="%{$fg[green]%}" +ZSH_THEME_GIT_TIME_SHORT_COMMIT_MEDIUM="%{$fg[yellow]%}" +ZSH_THEME_GIT_TIME_SINCE_COMMIT_LONG="%{$fg[red]%}" +ZSH_THEME_GIT_TIME_SINCE_COMMIT_NEUTRAL="%{$fg[cyan]%}" + +# Determine the time since last commit. If branch is clean, +# use a neutral color, otherwise colors will vary according to time. +function git_time_since_commit() { +    if git rev-parse --git-dir > /dev/null 2>&1; then +        # Only proceed if there is actually a commit. +        if [[ $(git log 2>&1 > /dev/null | grep -c "^fatal: bad default revision") == 0 ]]; then +            # Get the last commit. +            last_commit=`git log --pretty=format:'%at' -1 2> /dev/null` +            now=`date +%s` +            seconds_since_last_commit=$((now-last_commit)) + +            # Totals +            MINUTES=$((seconds_since_last_commit / 60)) +            HOURS=$((seconds_since_last_commit/3600)) + +            # Sub-hours and sub-minutes +            DAYS=$((seconds_since_last_commit / 86400)) +            SUB_HOURS=$((HOURS % 24)) +            SUB_MINUTES=$((MINUTES % 60)) + +            if [[ -n $(git status -s 2> /dev/null) ]]; then +                if [ "$MINUTES" -gt 30 ]; then +                    COLOR="$ZSH_THEME_GIT_TIME_SINCE_COMMIT_LONG" +                elif [ "$MINUTES" -gt 10 ]; then +                    COLOR="$ZSH_THEME_GIT_TIME_SHORT_COMMIT_MEDIUM" +                else +                    COLOR="$ZSH_THEME_GIT_TIME_SINCE_COMMIT_SHORT" +                fi +            else +                COLOR="$ZSH_THEME_GIT_TIME_SINCE_COMMIT_NEUTRAL" +            fi + +            if [ "$HOURS" -gt 24 ]; then +                echo "[$COLOR${DAYS}d${SUB_HOURS}h${SUB_MINUTES}m%{$reset_color%}]" +            elif [ "$MINUTES" -gt 60 ]; then +                echo "[$COLOR${HOURS}h${SUB_MINUTES}m%{$reset_color%}]" +            else +                echo "[$COLOR${MINUTES}m%{$reset_color%}]" +            fi +        else +            COLOR="$ZSH_THEME_GIT_TIME_SINCE_COMMIT_NEUTRAL" +            echo "[$COLOR~]" +        fi +    fi +} + +PROMPT=' +%{$fg[blue]%}%m%{$reset_color%} 福 %{$fg[cyan]%}%~ %{$reset_color%}$(git_prompt_short_sha)$(git_prompt_info) +%{$fg[red]%}%!%{$reset_color%} $(prompt_char) : ' + +RPROMPT='${return_status}$(git_time_since_commit)$(git_prompt_status)%{$reset_color%}' diff --git a/themes/sunaku.zsh-theme b/themes/sunaku.zsh-theme new file mode 100644 index 000000000..440fa90b4 --- /dev/null +++ b/themes/sunaku.zsh-theme @@ -0,0 +1,26 @@ +# Git-centric variation of the "fishy" theme. +# See screenshot at http://ompldr.org/vOHcwZg + +ZSH_THEME_GIT_PROMPT_ADDED="%{$fg[green]%}+" +ZSH_THEME_GIT_PROMPT_MODIFIED="%{$fg[magenta]%}!" +ZSH_THEME_GIT_PROMPT_DELETED="%{$fg[red]%}-" +ZSH_THEME_GIT_PROMPT_RENAMED="%{$fg[blue]%}>" +ZSH_THEME_GIT_PROMPT_UNMERGED="%{$fg[cyan]%}#" +ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$fg[yellow]%}?" + +ZSH_THEME_GIT_PROMPT_PREFIX="" +ZSH_THEME_GIT_PROMPT_SUFFIX=" " +ZSH_THEME_GIT_PROMPT_DIRTY="" +ZSH_THEME_GIT_PROMPT_CLEAN="" + +local user_color='green' +test $UID -eq 0 && user_color='red' + +PROMPT='%(?..%{$fg_bold[red]%}exit %? +%{$reset_color%})'\ +'%{$bold_color%}$(git_prompt_status)%{$reset_color%}'\ +'$(git_prompt_info)'\ +'%{$fg[$user_color]%}%~%{$reset_color%}'\ +'%(!.#.>) ' + +PROMPT2='%{$fg[red]%}\ %{$reset_color%}' diff --git a/themes/sunrise.zsh-theme b/themes/sunrise.zsh-theme new file mode 100644 index 000000000..88b371d79 --- /dev/null +++ b/themes/sunrise.zsh-theme @@ -0,0 +1,96 @@ +#------------------------------------------------------------------------------- +# Sunrise theme for oh-my-zsh by Adam Lindberg (eproxus@gmail.com) +# Intended to be used with Solarized: http://ethanschoonover.com/solarized +# (Needs Git plugin for current_branch method) +#------------------------------------------------------------------------------- + +# Color shortcuts +R=$fg[red] +G=$fg[green] +M=$fg[magenta] +RB=$fg_bold[red] +YB=$fg_bold[yellow] +BB=$fg_bold[blue] +RESET=$reset_color + +if [ "$(whoami)" = "root" ]; then +    PROMPTCOLOR="%{$RB%}" PREFIX="-!-"; +else +    PROMPTCOLOR="" PREFIX="---"; +fi + +local return_code="%(?..%{$R%}%? ↵%{$RESET%})" + +# Get the status of the working tree (copied and modified from git.zsh) +custom_git_prompt_status() { +  INDEX=$(git status --porcelain 2> /dev/null) +  STATUS="" +  # Non-staged +  if $(echo "$INDEX" | grep '^?? ' &> /dev/null); then +    STATUS="$ZSH_THEME_GIT_PROMPT_UNTRACKED$STATUS" +  fi +  if $(echo "$INDEX" | grep '^UU ' &> /dev/null); then +    STATUS="$ZSH_THEME_GIT_PROMPT_UNMERGED$STATUS" +  fi +  if $(echo "$INDEX" | grep '^ D ' &> /dev/null); then +    STATUS="$ZSH_THEME_GIT_PROMPT_DELETED$STATUS" +  fi +  if $(echo "$INDEX" | grep '^.M ' &> /dev/null); then +    STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$STATUS" +  elif $(echo "$INDEX" | grep '^AM ' &> /dev/null); then +    STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$STATUS" +  elif $(echo "$INDEX" | grep '^ T ' &> /dev/null); then +    STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$STATUS" +  fi +  # Staged +  if $(echo "$INDEX" | grep '^D  ' &> /dev/null); then +    STATUS="$ZSH_THEME_GIT_PROMPT_STAGED_DELETED$STATUS" +  fi +  if $(echo "$INDEX" | grep '^R' &> /dev/null); then +    STATUS="$ZSH_THEME_GIT_PROMPT_STAGED_RENAMED$STATUS" +  fi +  if $(echo "$INDEX" | grep '^M' &> /dev/null); then +    STATUS="$ZSH_THEME_GIT_PROMPT_STAGED_MODIFIED$STATUS" +  fi +  if $(echo "$INDEX" | grep '^A' &> /dev/null); then +    STATUS="$ZSH_THEME_GIT_PROMPT_STAGED_ADDED$STATUS" +  fi + +  if $(echo -n "$STATUS" | grep '.*' &> /dev/null); then +    STATUS="$ZSH_THEME_GIT_STATUS_PREFIX$STATUS" +  fi + +  echo $STATUS +} + +# get the name of the branch we are on (copied and modified from git.zsh) +function custom_git_prompt() { +  ref=$(git symbolic-ref HEAD 2> /dev/null) || return +  echo "$ZSH_THEME_GIT_PROMPT_PREFIX${ref#refs/heads/}$(parse_git_dirty)$(git_prompt_ahead)$(custom_git_prompt_status)$ZSH_THEME_GIT_PROMPT_SUFFIX" +} + +# %B sets bold text +PROMPT='%B$PREFIX %2~ $(custom_git_prompt)%{$M%}%B»%b%{$RESET%} ' +RPS1="${return_code}" + +ZSH_THEME_GIT_PROMPT_PREFIX="%{$YB%}‹" +ZSH_THEME_GIT_PROMPT_SUFFIX="%{$YB%}›%{$RESET%} " + +ZSH_THEME_GIT_PROMPT_DIRTY="%{$R%}*" +ZSH_THEME_GIT_PROMPT_CLEAN="" + +ZSH_THEME_GIT_PROMPT_AHEAD="%{$BB%}➔" + +ZSH_THEME_GIT_STATUS_PREFIX=" " + +# Staged +ZSH_THEME_GIT_PROMPT_STAGED_ADDED="%{$G%}A" +ZSH_THEME_GIT_PROMPT_STAGED_MODIFIED="%{$G%}M" +ZSH_THEME_GIT_PROMPT_STAGED_RENAMED="%{$G%}R" +ZSH_THEME_GIT_PROMPT_STAGED_DELETED="%{$G%}D" + +# Not-staged +ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$R%}⁇" +ZSH_THEME_GIT_PROMPT_MODIFIED="%{$R%}M" +ZSH_THEME_GIT_PROMPT_DELETED="%{$R%}D" +ZSH_THEME_GIT_PROMPT_UNMERGED="%{$R%}UU" diff --git a/themes/superjarin.zsh-theme b/themes/superjarin.zsh-theme new file mode 100644 index 000000000..16eeb5316 --- /dev/null +++ b/themes/superjarin.zsh-theme @@ -0,0 +1,18 @@ +# Grab the current version of ruby in use (via RVM): [ruby-1.8.7] +JARIN_CURRENT_RUBY_="%{$fg[white]%}[%{$fg[red]%}\$(~/.rvm/bin/rvm-prompt i v)%{$fg[white]%}]%{$reset_color%}" + +# Grab the current filepath, use shortcuts: ~/Desktop +# Append the current git branch, if in a git repository +JARIN_CURRENT_LOCA_="%{$fg_bold[cyan]%}%~\$(git_prompt_info)%{$reset_color%}" +ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg[white]%} <%{$fg[magenta]%}" +ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}" + +# Do nothing if the branch is clean (no changes). +ZSH_THEME_GIT_PROMPT_CLEAN="%{$reset_color%}>" + +# Add a yellow ✗ if the branch is dirty +ZSH_THEME_GIT_PROMPT_DIRTY="%{$reset_color%}> %{$fg[yellow]%}✗" + +# Put it all together! +PROMPT="$JARIN_CURRENT_RUBY_ $JARIN_CURRENT_LOCA_ " + diff --git a/themes/wedisagree.zsh-theme b/themes/wedisagree.zsh-theme new file mode 100644 index 000000000..7cb27934d --- /dev/null +++ b/themes/wedisagree.zsh-theme @@ -0,0 +1,107 @@ +# On a mac with snow leopard, for nicer terminal colours: + +# - Install SIMBL: http://www.culater.net/software/SIMBL/SIMBL.php +# - Download'Terminal-Colours': http://bwaht.net/code/TerminalColours.bundle.zip +# - Place that bundle in ~/Library/Application\ Support/SIMBL/Plugins (create that folder if it doesn't exist) +# - Open Terminal preferences. Go to Settings -> Text -> More +# - Change default colours to your liking. +#  +# Here are the colours from Textmate's Monokai theme: +#  +# Black: 0, 0, 0 +# Red: 229, 34, 34 +# Green: 166, 227, 45 +# Yellow: 252, 149, 30 +# Blue: 196, 141, 255 +# Magenta: 250, 37, 115 +# Cyan: 103, 217, 240 +# White: 242, 242, 242 + +# Thanks to Steve Losh: http://stevelosh.com/blog/2009/03/candy-colored-terminal/ + +# The prompt + +PROMPT='%{$fg[magenta]%}[%c] %{$reset_color%}' + +# The right-hand prompt + +RPROMPT='${time} %{$fg[magenta]%}$(git_prompt_info)%{$reset_color%}$(git_prompt_status)%{$reset_color%}' + +# Add this at the start of RPROMPT to include rvm info showing ruby-version@gemset-name +# %{$fg[yellow]%}$(~/.rvm/bin/rvm-prompt)%{$reset_color%}  + +# local time, color coded by last return code +time_enabled="%(?.%{$fg[green]%}.%{$fg[red]%})%*%{$reset_color%}" +time_disabled="%{$fg[green]%}%*%{$reset_color%}" +time=$time_enabled + +ZSH_THEME_GIT_PROMPT_PREFIX=" ☁  %{$fg[red]%}" +ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}" +ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[yellow]%} ☂" # Ⓓ +ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$fg[cyan]%} ✭" # ⓣ +ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[green]%} ☀" # Ⓞ + +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]%} ♒" # ⓤ ⑊ + +# More symbols to choose from: +# ☀ ✹ ☄ ♆ ♀ ♁ ♐ ♇ ♈ ♉ ♚ ♛ ♜ ♝ ♞ ♟ ♠ ♣ ⚢ ⚲ ⚳ ⚴ ⚥ ⚤ ⚦ ⚒ ⚑ ⚐ ♺ ♻ ♼ ☰ ☱ ☲ ☳ ☴ ☵ ☶ ☷ +# ✡ ✔ ✖ ✚ ✱ ✤ ✦ ❤ ➜ ➟ ➼ ✂ ✎ ✐ ⨀ ⨁ ⨂ ⨍ ⨎ ⨏ ⨷ ⩚ ⩛ ⩡ ⩱ ⩲ ⩵  ⩶ ⨠  +# ⬅ ⬆ ⬇ ⬈ ⬉ ⬊ ⬋ ⬒ ⬓ ⬔ ⬕ ⬖ ⬗ ⬘ ⬙ ⬟  ⬤ 〒 ǀ ǁ ǂ ĭ Ť Ŧ + +# Determine if we are using a gemset. +function rvm_gemset() { +    GEMSET=`rvm gemset list | grep '=>' | cut -b4-` +    if [[ -n $GEMSET ]]; then +        echo "%{$fg[yellow]%}$GEMSET%{$reset_color%}|" +    fi  +} + +# Determine the time since last commit. If branch is clean, +# use a neutral color, otherwise colors will vary according to time. +function git_time_since_commit() { +    if git rev-parse --git-dir > /dev/null 2>&1; then +        # Only proceed if there is actually a commit. +        if [[ $(git log 2>&1 > /dev/null | grep -c "^fatal: bad default revision") == 0 ]]; then +            # Get the last commit. +            last_commit=`git log --pretty=format:'%at' -1 2> /dev/null` +            now=`date +%s` +            seconds_since_last_commit=$((now-last_commit)) + +            # Totals +            MINUTES=$((seconds_since_last_commit / 60)) +            HOURS=$((seconds_since_last_commit/3600)) +            +            # Sub-hours and sub-minutes +            DAYS=$((seconds_since_last_commit / 86400)) +            SUB_HOURS=$((HOURS % 24)) +            SUB_MINUTES=$((MINUTES % 60)) +             +            if [[ -n $(git status -s 2> /dev/null) ]]; then +                if [ "$MINUTES" -gt 30 ]; then +                    COLOR="$ZSH_THEME_GIT_TIME_SINCE_COMMIT_LONG" +                elif [ "$MINUTES" -gt 10 ]; then +                    COLOR="$ZSH_THEME_GIT_TIME_SHORT_COMMIT_MEDIUM" +                else +                    COLOR="$ZSH_THEME_GIT_TIME_SINCE_COMMIT_SHORT" +                fi +            else +                COLOR="$ZSH_THEME_GIT_TIME_SINCE_COMMIT_NEUTRAL" +            fi + +            if [ "$HOURS" -gt 24 ]; then +                echo "($(rvm_gemset)$COLOR${DAYS}d${SUB_HOURS}h${SUB_MINUTES}m%{$reset_color%}|" +            elif [ "$MINUTES" -gt 60 ]; then +                echo "($(rvm_gemset)$COLOR${HOURS}h${SUB_MINUTES}m%{$reset_color%}|" +            else +                echo "($(rvm_gemset)$COLOR${MINUTES}m%{$reset_color%}|" +            fi +        else +            COLOR="$ZSH_THEME_GIT_TIME_SINCE_COMMIT_NEUTRAL" +            echo "($(rvm_gemset)$COLOR~|" +        fi +    fi +}
\ No newline at end of file diff --git a/tools/install.sh b/tools/install.sh index 8ed1403af..aedb706da 100755 --- a/tools/install.sh +++ b/tools/install.sh @@ -1,36 +1,36 @@  if [ -d ~/.oh-my-zsh ]  then -  echo "You already have Oh My Zsh installed. You'll need to remove ~/.oh-my-zsh if you want to install" +  echo "\033[0;33mYou already have Oh My Zsh installed.\033[0m You'll need to remove ~/.oh-my-zsh if you want to install"    exit  fi -echo "Cloning Oh My Zsh..." +echo "\033[0;34mCloning Oh My Zsh...\033[0m"  /usr/bin/env git clone https://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh -echo "Looking for an existing zsh config..." +echo "\033[0;34mLooking for an existing zsh config...\033[0m"  if [ -f ~/.zshrc ] || [ -h ~/.zshrc ]  then -  echo "Found ~/.zshrc. Backing up to ~/.zshrc.pre-oh-my-zsh"; +  echo "\033[0;33mFound ~/.zshrc.\033[0m \033[0;32]Backing up to ~/.zshrc.pre-oh-my-zsh\033[0m";    cp ~/.zshrc ~/.zshrc.pre-oh-my-zsh;    rm ~/.zshrc;  fi -echo "Using the Oh My Zsh template file and adding it to ~/.zshrc" +echo "\033[0;34mUsing the Oh My Zsh template file and adding it to ~/.zshrc\033[0m"  cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc -echo "Copying your current PATH and adding it to the end of ~/.zshrc for you." +echo "\033[0;34mCopying your current PATH and adding it to the end of ~/.zshrc for you.\033[0m"  echo "export PATH=$PATH" >> ~/.zshrc -echo "Time to change your default shell to zsh!" +echo "\033[0;34mTime to change your default shell to zsh!\033[0m"  chsh -s `which zsh` -echo '         __                                     __  ' -echo '  ____  / /_     ____ ___  __  __   ____  _____/ /_ ' -echo ' / __ \/ __ \   / __ `__ \/ / / /  /_  / / ___/ __ \ ' -echo '/ /_/ / / / /  / / / / / / /_/ /    / /_(__  ) / / / ' -echo '\____/_/ /_/  /_/ /_/ /_/\__, /    /___/____/_/ /_/  ' -echo '                        /____/' +echo "\033[0;32m"'         __                                     __   '"\033[0m" +echo "\033[0;32m"'  ____  / /_     ____ ___  __  __   ____  _____/ /_  '"\033[0m" +echo "\033[0;32m"' / __ \/ __ \   / __ `__ \/ / / /  /_  / / ___/ __ \ '"\033[0m" +echo "\033[0;32m"'/ /_/ / / / /  / / / / / / /_/ /    / /_(__  ) / / / '"\033[0m" +echo "\033[0;32m"'\____/_/ /_/  /_/ /_/ /_/\__, /    /___/____/_/ /_/  '"\033[0m" +echo "\033[0;32m"'                        /____/                       '"\033[0m" -echo "\n\n ....is now installed." +echo "\n\n \033[0;32m....is now installed.\033[0m"  /usr/bin/env zsh  source ~/.zshrc diff --git a/tools/upgrade.sh b/tools/upgrade.sh index 6bdd02e38..2b75e5541 100644 --- a/tools/upgrade.sh +++ b/tools/upgrade.sh @@ -1,12 +1,12 @@  current_path=`pwd` -echo "Upgrading Oh My Zsh" +echo "\033[0;34mUpgrading Oh My Zsh\033[0m"  ( cd $ZSH && git pull origin master ) -echo '         __                                     __  ' -echo '  ____  / /_     ____ ___  __  __   ____  _____/ /_ ' -echo ' / __ \/ __ \   / __ `__ \/ / / /  /_  / / ___/ __ \ ' -echo '/ /_/ / / / /  / / / / / / /_/ /    / /_(__  ) / / / ' -echo '\____/_/ /_/  /_/ /_/ /_/\__, /    /___/____/_/ /_/  ' -echo '                        /____/' -echo "Hooray! Oh My Zsh has been updated and/or is at the current version. \nAny new updates will be reflected when you start your next terminal session." -echo "To keep up on the latest, be sure to follow Oh My Zsh on twitter: http://twitter.com/ohmyzsh" -cd $current_path
\ No newline at end of file +echo "\033[0;32m"'         __                                     __   '"\033[0m" +echo "\033[0;32m"'  ____  / /_     ____ ___  __  __   ____  _____/ /_  '"\033[0m" +echo "\033[0;32m"' / __ \/ __ \   / __ `__ \/ / / /  /_  / / ___/ __ \ '"\033[0m" +echo "\033[0;32m"'/ /_/ / / / /  / / / / / / /_/ /    / /_(__  ) / / / '"\033[0m" +echo "\033[0;32m"'\____/_/ /_/  /_/ /_/ /_/\__, /    /___/____/_/ /_/  '"\033[0m" +echo "\033[0;32m"'                        /____/                       '"\033[0m" +echo "\033[0;34mHooray! Oh My Zsh has been updated and/or is at the current version.\033[0m" +echo "\033[0;34mTo keep up on the latest, be sure to follow Oh My Zsh on twitter: \033[1mhttp://twitter.com/ohmyzsh\033[0m" +cd "$current_path" | 
