29fb24487cce4e61bdc24a9a0308f04a739a3d1f

Author
Sébastien <seb@Macbook.local>
Committer
Sébastien <seb@Macbook.local>
Date

Message

Merge remote-tracking branch 'upstream/master'

Diff

This diff is truncated to protect this page.

  1diff --git a/.gitignore b/.gitignore
  2index 2e8db7341894fdf0940c0c37995e93e1b3b0d9fa..51a5ee6c396f012ae162d0d63006d4d8e765b92f 100644
  3--- a/.gitignore
  4+++ b/.gitignore
  5@@ -4,5 +4,6 @@ projects.zsh
  6 custom/*
  7 !custom/example
  8 !custom/example.zsh
  9-cache
 10 *.swp
 11+!custom/example.zshcache
 12+cache/
 13diff --git a/README.textile b/README.textile
 14index bf6776665fa72c8025dc64ff72d7a38d36e0380a..a38e2d7cf83748f562590b4eb9383a827bc8d16f 100644
 15--- a/README.textile
 16+++ b/README.textile
 17@@ -1,5 +1,6 @@
 18 A handful of functions, auto-complete helpers, and stuff that makes you shout...
 19 
 20+
 21 bq. "OH MY ZSHELL!"
 22 
 23 h2. Setup
 24@@ -68,9 +69,13 @@ h2. Help out!
 25 
 26 I'm far from being a zsh-expert and suspect there are many ways to improve. If you have ideas on how to make the configuration easier to maintain (and faster), don't hesitate to fork and send pull requests!
 27 
 28-h3. Send us your theme!
 29+h3. (Don't) Send us your theme! (for now)
 30+
 31+-I'm hoping to collect a bunch of themes for our command prompts. You can see existing ones in the @themes/@ directory.-
 32+
 33+We have enough themes for the time being. Please fork the project and add on in there, you can let people know how to grab it from there. 
 34+
 35 
 36-I'm hoping to collect a bunch of themes for our command prompts. You can see existing ones in the @themes/@ directory.
 37 
 38 h2. Contributors
 39 
 40diff --git a/lib/completion.zsh b/lib/completion.zsh
 41index 2deb5dac02cd38c415aeb65c4466ad0338bcd421..ce59d02fa0122e763a40d93044d9eec09ebc4bfc 100644
 42--- a/lib/completion.zsh
 43+++ b/lib/completion.zsh
 44@@ -49,7 +49,7 @@ zstyle ':completion:*' users off
 45 
 46 # Use caching so that commands like apt and dpkg complete are useable
 47 zstyle ':completion::complete:*' use-cache 1
 48-zstyle ':completion::complete:*' cache-path ~/.oh-my-zsh/cache/
 49+zstyle ':completion::complete:*' cache-path $ZSH/cache/
 50 
 51 # Don't complete uninteresting users
 52 zstyle ':completion:*:*:*:users' ignored-patterns \
 53diff --git a/lib/directories.zsh b/lib/directories.zsh
 54index bb114f61531a2086ebf16d9266d519dba592c0be..a787db9ebda2664163bebd1a42ce4727801eef61 100644
 55--- a/lib/directories.zsh
 56+++ b/lib/directories.zsh
 57@@ -36,9 +36,9 @@ cd () {
 58 
 59 alias md='mkdir -p'
 60 alias rd=rmdir
 61-alias d='dirs -v'
 62+alias d='dirs -v | head -10'
 63 
 64 # mkdir & cd to it
 65 function mcd() { 
 66   mkdir -p "$1" && cd "$1"; 
 67-}
 68+}
 69diff --git a/lib/key-bindings.zsh b/lib/key-bindings.zsh
 70index 5c1b90bfa94d4a3e9497383e0c6eac9f7a4ed07f..5f499f3e8a56fcfcf24df504994dc3859670f53a 100644
 71--- a/lib/key-bindings.zsh
 72+++ b/lib/key-bindings.zsh
 73@@ -3,7 +3,6 @@
 74 bindkey -e
 75 bindkey '\ew' kill-region
 76 bindkey -s '\el' "ls\n"
 77-bindkey -s '\e.' "..\n"
 78 bindkey '^r' history-incremental-search-backward
 79 bindkey "^[[5~" up-line-or-history
 80 bindkey "^[[6~" down-line-or-history
 81diff --git a/lib/misc.zsh b/lib/misc.zsh
 82index 88732e664e1fc4ec3c5cb8e8e04ccc2ba9761dba..0f7e7e9254959f01d6186c16f147764e9645e8b2 100644
 83--- a/lib/misc.zsh
 84+++ b/lib/misc.zsh
 85@@ -9,5 +9,5 @@ bindkey "^[m" copy-prev-shell-word
 86 setopt long_list_jobs
 87 
 88 ## pager
 89-export PAGER=less
 90+export PAGER="less -R"
 91 export LC_CTYPE=$LANG
 92diff --git a/lib/termsupport.zsh b/lib/termsupport.zsh
 93index 221989502360e4182d14489765578b5ee9ff5491..e26fef6d30d8a3f46e1fa4862c20626815743891 100644
 94--- a/lib/termsupport.zsh
 95+++ b/lib/termsupport.zsh
 96@@ -3,7 +3,9 @@
 97 #Fully support screen, iterm, and probably most modern xterm and rxvt
 98 #Limited support for Apple Terminal (Terminal can't set window or tab separately)
 99 function title {
100-  [ "$DISABLE_AUTO_TITLE" != "true" ] || return
101+  if [[ "$DISABLE_AUTO_TITLE" == "true" ]] || [[ "$EMACS" == *term* ]]; then
102+    return
103+  fi
104   if [[ "$TERM" == screen* ]]; then
105     print -Pn "\ek$1:q\e\\" #set screen hardstatus, usually truncated at 20 chars
106   elif [[ "$TERM" == xterm* ]] || [[ $TERM == rxvt* ]] || [[ "$TERM_PROGRAM" == "iTerm.app" ]]; then
107diff --git a/oh-my-zsh.sh b/oh-my-zsh.sh
108index c2b6049cbcba4db8963673e6093690d6f1721b0e..ddef1ad6cf280b2c4ce53af32a77f8e493bab7fc 100644
109--- a/oh-my-zsh.sh
110+++ b/oh-my-zsh.sh
111@@ -51,7 +51,7 @@ for plugin ($plugins); do
112 done
113 
114 # Load all of your custom configurations from custom/
115-for config_file ($ZSH_CUSTOM/*.zsh(.N)) source $config_file
116+for config_file ($ZSH_CUSTOM/*.zsh(N)) source $config_file
117 
118 # Load the theme
119 if [ "$ZSH_THEME" = "random" ]
120diff --git a/plugins/bundler/bundler.plugin.zsh b/plugins/bundler/bundler.plugin.zsh
121index 2b80b76e679a37f29ef2559b5f6f1bf44a0aff5c..1ca48089e17848c3fadaa76b23566b801bd19e24 100644
122--- a/plugins/bundler/bundler.plugin.zsh
123+++ b/plugins/bundler/bundler.plugin.zsh
124@@ -6,7 +6,7 @@ alias bu="bundle update"
125 
126 # The following is based on https://github.com/gma/bundler-exec
127 
128-bundled_commands=(annotate cap capify cucumber ey foreman guard middleman nanoc rackup rainbows rails rake rspec ruby shotgun spec spork thin thor unicorn unicorn_rails)
129+bundled_commands=(annotate cap capify cucumber foreman guard middleman nanoc rackup rainbows rails rake rspec ruby shotgun spec spork thin thor unicorn unicorn_rails)
130 
131 ## Functions
132 
133diff --git a/plugins/dircycle/dircycle.plugin.zsh b/plugins/dircycle/dircycle.plugin.zsh
134new file mode 100644
135index 0000000000000000000000000000000000000000..46a0ab268796c897de82a82c6108641446fb596c
136--- /dev/null
137+++ b/plugins/dircycle/dircycle.plugin.zsh
138@@ -0,0 +1,10 @@
139+##
140+# dircycle plugin: enables cycling through the directory
141+# stack using Ctrl+Shift+Left/Right
142+
143+eval "insert-cycledleft () { zle push-line; LBUFFER='pushd -q +1'; zle accept-line }"
144+zle -N insert-cycledleft
145+bindkey "\e[1;6D" insert-cycledleft
146+eval "insert-cycledright () { zle push-line; LBUFFER='pushd -q -0'; zle accept-line }"
147+zle -N insert-cycledright
148+bindkey "\e[1;6C" insert-cycledright
149diff --git a/plugins/dirpersist/dirpersist.plugin.zsh b/plugins/dirpersist/dirpersist.plugin.zsh
150index 6a2b289a2881abeeee97a47fb40dfffeb07c6077..0f6d9f435a5c318d6bd7674c4154d8ad9eb18184 100644
151--- a/plugins/dirpersist/dirpersist.plugin.zsh
152+++ b/plugins/dirpersist/dirpersist.plugin.zsh
153@@ -12,7 +12,7 @@ dirpersistinstall () {
154     if grep 'dirpersiststore' ~/.zlogout > /dev/null; then
155     else
156         if read -q \?"Would you like to set up your .zlogout file for use with dirspersist? (y/n) "; then
157-            echo "# Store dirs stack\n# See ~/.oh-my-zsh/plugins/dirspersist.plugin.zsh\ndirpersiststore" >> ~/.zlogout
158+            echo "# Store dirs stack\n# See $ZSH/plugins/dirspersist.plugin.zsh\ndirpersiststore" >> ~/.zlogout
159         else
160             echo "If you don't want this message to appear, remove dirspersist from \$plugins"
161         fi
162diff --git a/plugins/encode64/encode64.plugin.zsh b/plugins/encode64/encode64.plugin.zsh
163new file mode 100644
164index 0000000000000000000000000000000000000000..cfb7c6a18305c7b67507743b3b0977f4b4b3a047
165--- /dev/null
166+++ b/plugins/encode64/encode64.plugin.zsh
167@@ -0,0 +1,2 @@
168+encode64(){ echo -n $1 | base64 }
169+decode64(){ echo -n $1 | base64 -D }
170diff --git a/plugins/git-flow/git-flow.plugin.zsh b/plugins/git-flow/git-flow.plugin.zsh
171index 270bcbe389b79224d4725e45be39abb4c3823829..71b343884a5428660c92ce86ca63823d4337f8c7 100644
172--- a/plugins/git-flow/git-flow.plugin.zsh
173+++ b/plugins/git-flow/git-flow.plugin.zsh
174@@ -110,6 +110,8 @@ __git-flow-release ()
175 						-u'[Use the given GPG-key for the digital signature (implies -s)]'\
176 						-m'[Use the given tag message]'\
177 						-p'[Push to $ORIGIN after performing finish]'\
178+						-k'[Keep branch after performing finish]'\
179+						-n"[Don't tag this release]"\
180 						':version:__git_flow_version_list'
181 				;;
182 
183@@ -162,6 +164,8 @@ __git-flow-hotfix ()
184 						-u'[Use the given GPG-key for the digital signature (implies -s)]'\
185 						-m'[Use the given tag message]'\
186 						-p'[Push to $ORIGIN after performing finish]'\
187+						-k'[Keep branch after performing finish]'\
188+						-n"[Don't tag this release]"\
189 						':hotfix:__git_flow_hotfix_list'
190 				;;
191 
192diff --git a/plugins/git/git.plugin.zsh b/plugins/git/git.plugin.zsh
193index e1d68250885a7e29e286e30b469fc17e9ae5cc3b..d3d3f702a362c6ebe24109369da2e6d1a8652464 100644
194--- a/plugins/git/git.plugin.zsh
195+++ b/plugins/git/git.plugin.zsh
196@@ -54,10 +54,16 @@ function current_branch() {
197   echo ${ref#refs/heads/}
198 }
199 
200+function current_repository() {
201+
202+  ref=$(git symbolic-ref HEAD 2> /dev/null) || return
203+  echo $(git remote -v | cut -d':' -f 2)
204+}
205+
206 # these aliases take advantage of the previous function
207 alias ggpull='git pull origin $(current_branch)'
208 compdef ggpull=git
209 alias ggpush='git push origin $(current_branch)'
210 compdef ggpush=git
211 alias ggpnp='git pull origin $(current_branch) && git push origin $(current_branch)'
212-compdef ggpnp=git
213+compdef ggpnp=git
214diff --git a/plugins/jruby/jruby.plugin.zsh b/plugins/jruby/jruby.plugin.zsh
215new file mode 100755
216index 0000000000000000000000000000000000000000..bb7975b1071c2966f68bbf354123982f8397db32
217--- /dev/null
218+++ b/plugins/jruby/jruby.plugin.zsh
219@@ -0,0 +1,4 @@
220+# Aliases
221+alias jrspec='jruby --debug -S rspec --debug'
222+alias jprofile='jruby --profile.api -S rspec'
223+alias jexec='jruby -S'
224diff --git a/plugins/mvn/mvn.plugin.zsh b/plugins/mvn/mvn.plugin.zsh
225new file mode 100644
226index 0000000000000000000000000000000000000000..e8af2f49d5d2f87daeae99b23d59fecdc7b44d26
227--- /dev/null
228+++ b/plugins/mvn/mvn.plugin.zsh
229@@ -0,0 +1,6 @@
230+function listMavenCompletions { 
231+	 reply=(
232diff --git a/plugins/rails3/rails3.plugin.zsh b/plugins/rails3/rails3.plugin.zsh
233index d4c7df6548740c9c34c3729b34c03a4e7b9b5ecf..237d0594bf8964707cfa2935b8f09f26fb095646 100644
234--- a/plugins/rails3/rails3.plugin.zsh
235+++ b/plugins/rails3/rails3.plugin.zsh
236@@ -13,6 +13,7 @@ alias rd='_rails_command destroy'
237 alias rdb='_rails_command dbconsole'
238 alias rdbm='rake db:migrate db:test:clone'
239 alias rg='_rails_command generate'
240+alias rgm='_rails_command generate migration'
241 alias rp='_rails_command plugin'
242 alias ru='_rails_command runner'
243 alias rs='_rails_command server'
244diff --git a/plugins/rbenv/rbenv.plugin.zsh b/plugins/rbenv/rbenv.plugin.zsh
245index ae37404cd8328ab621cb4f8ab804cc143efbe9c0..a62dd560209e7a63b782e3043e4300bbbd07a252 100644
246--- a/plugins/rbenv/rbenv.plugin.zsh
247+++ b/plugins/rbenv/rbenv.plugin.zsh
248@@ -1,5 +1,18 @@
249+_homebrew-installed() {
250+  type brew &> /dev/null
251+}
252+
253+_rbenv-from-homebrew-installed() {
254+  brew --prefix rbenv &> /dev/null
255+}
256+
257 FOUND_RBENV=0
258-for rbenvdir in "$HOME/.rbenv" "/usr/local/rbenv" "/opt/rbenv" ; do
259+rbenvdirs=("$HOME/.rbenv" "/usr/local/rbenv" "/opt/rbenv")
260+if _homebrew-installed && _rbenv-from-homebrew-installed ; then
261+    rbenvdirs=($(brew --prefix rbenv) "${rbenvdirs[@]}")
262+fi
263+
264+for rbenvdir in "${rbenvdirs[@]}" ; do
265   if [ -d $rbenvdir/bin -a $FOUND_RBENV -eq 0 ] ; then
266     FOUND_RBENV=1
267     export RBENV_ROOT=$rbenvdir
268diff --git a/plugins/screen/screen.plugin.zsh b/plugins/screen/screen.plugin.zsh
269new file mode 100644
270index 0000000000000000000000000000000000000000..98178e807cce8d2f9363c0dda5d53bbc8466456d
271--- /dev/null
272+++ b/plugins/screen/screen.plugin.zsh
273@@ -0,0 +1,54 @@
274+# if using GNU screen, let the zsh tell screen what the title and hardstatus
275+# of the tab window should be.
276+if [[ $TERM == "screen" ]]; then
277+  if [[ $_GET_PATH == '' ]]; then
278+    _GET_PATH='echo $PWD | sed "s/^\/Users\//~/;s/^\/home\//~/;s/^~$USER/~/"'
279+  fi
280+  if [[ $_GET_HOST == '' ]]; then
281+    _GET_HOST='echo $HOST | sed "s/\..*//"'
282+  fi
283+
284+  # use the current user as the prefix of the current tab title 
285+  TAB_TITLE_PREFIX='"`'$_GET_HOST'`:`'$_GET_PATH' | sed "s:..*/::"`$PROMPT_CHAR"'
286+  # when at the shell prompt, show a truncated version of the current path (with
287+  # standard ~ replacement) as the rest of the title.
288+  TAB_TITLE_PROMPT='$SHELL:t'
289+  # when running a command, show the title of the command as the rest of the
290+  # title (truncate to drop the path to the command)
291+  TAB_TITLE_EXEC='$cmd[1]:t'
292+
293+  # use the current path (with standard ~ replacement) in square brackets as the
294+  # prefix of the tab window hardstatus.
295+  TAB_HARDSTATUS_PREFIX='"[`'$_GET_PATH'`] "'
296+  # when at the shell prompt, use the shell name (truncated to remove the path to
297+  # the shell) as the rest of the title
298+  TAB_HARDSTATUS_PROMPT='$SHELL:t'
299+  # when running a command, show the command name and arguments as the rest of
300+  # the title
301+  TAB_HARDSTATUS_EXEC='$cmd'
302+
303+  # tell GNU screen what the tab window title ($1) and the hardstatus($2) should be
304+  function screen_set()
305+  {
306+    # set the tab window title (%t) for screen
307+    print -nR $'\033k'$1$'\033'\\\
308+
309+    # set hardstatus of tab window (%h) for screen
310+    print -nR $'\033]0;'$2$'\a'
311+  }
312+  # called by zsh before executing a command
313+  function preexec()
314+  {
315+    local -a cmd; cmd=(${(z)1}) # the command string
316+    eval "tab_title=$TAB_TITLE_PREFIX:$TAB_TITLE_EXEC"
317+    eval "tab_hardstatus=$TAB_HARDSTATUS_PREFIX:$TAB_HARDSTATUS_EXEC"
318+    screen_set $tab_title $tab_hardstatus
319+  }
320+  # called by zsh before showing the prompt
321+  function precmd()
322+  {
323+    eval "tab_title=$TAB_TITLE_PREFIX:$TAB_TITLE_PROMPT"
324+    eval "tab_hardstatus=$TAB_HARDSTATUS_PREFIX:$TAB_HARDSTATUS_PROMPT"
325+    screen_set $tab_title $tab_hardstatus
326+  }
327+fi
328diff --git a/plugins/suse/suse.plugin.zsh b/plugins/suse/suse.plugin.zsh
329new file mode 100644
330index 0000000000000000000000000000000000000000..d46286948dc873f4284d3fd4b83f41fbb7205846
331--- /dev/null
332+++ b/plugins/suse/suse.plugin.zsh
333@@ -0,0 +1,7 @@
334+alias zi='sudo zypper install'
335+alias zrf='sudo zypper refresh'
336+alias zs='zypper search'
337+alias zup='sudo zypper dist-upgrade'
338+alias zrm='sudo zypper remove'
339+alias zp='sudo zypper patch'
340+alias zps='sudo zypper ps'
341diff --git a/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh b/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh
342new file mode 100644
343index 0000000000000000000000000000000000000000..a93c8e8633351f5e31904d2c3d681043ced94739
344--- /dev/null
345+++ b/plugins/virtualenvwrapper/virtualenvwrapper.plugin.zsh
346@@ -0,0 +1,46 @@
347+WRAPPER_FOUND=0
348+for wrapsource in "/usr/local/bin/virtualenvwrapper.sh" "/etc/bash_completion.d/virtualenvwrapper" ; do
349+  if [[ -e $wrapsource ]] ; then
350+    WRAPPER_FOUND=1
351+    source $wrapsource
352+
353+    if [[ ! $DISABLE_VENV_CD -eq 1 ]]; then
354+      # Automatically activate Git projects' virtual environments based on the
355+      # directory name of the project. Virtual environment name can be overridden
356+      # by placing a .venv file in the project root with a virtualenv name in it
357+      function workon_cwd {
358+          # Check that this is a Git repo
359+          PROJECT_ROOT=`git rev-parse --show-toplevel 2> /dev/null`
360+          if (( $? == 0 )); then
361+              # Check for virtualenv name override
362+              ENV_NAME=`basename "$PROJECT_ROOT"`
363+              if [[ -f "$PROJECT_ROOT/.venv" ]]; then
364+                  ENV_NAME=`cat "$PROJECT_ROOT/.venv"`
365+              fi
366+              # Activate the environment only if it is not already active
367+              if [[ "$VIRTUAL_ENV" != "$WORKON_HOME/$ENV_NAME" ]]; then
368+                  if [[ -e "$WORKON_HOME/$ENV_NAME/bin/activate" ]]; then
369+                      workon "$ENV_NAME" && export CD_VIRTUAL_ENV="$ENV_NAME"
370+                  fi
371+              fi
372+          elif [ $CD_VIRTUAL_ENV ]; then
373+              # We've just left the repo, deactivate the environment
374+              # Note: this only happens if the virtualenv was activated automatically
375+              deactivate && unset CD_VIRTUAL_ENV
376+          fi
377+          unset PROJECT_ROOT
378+      }
379+
380+      # New cd function that does the virtualenv magic
381+      function cd {
382+          builtin cd "$@" && workon_cwd
383+      }
384+    fi
385+
386+    break
387+  fi
388+done
389+
390+if [ $WRAPPER_FOUND -eq 0 ] ; then
391+  print "zsh virtualenvwrapper plugin: Couldn't activate virtualenvwrapper. Please run \`pip install virtualenvwrapper\`."
392+fi
393diff --git a/plugins/yum/yum.plugin.zsh b/plugins/yum/yum.plugin.zsh
394index d6ba7ed62c91fb9aac9c71e4a0fcbb35aa10cf37..69abfc4cec8c6d9586e2b9f991ffe4322c10027d 100644
395--- a/plugins/yum/yum.plugin.zsh
396+++ b/plugins/yum/yum.plugin.zsh
397@@ -3,10 +3,14 @@
398 alias ys="yum search"                       # search package
399 alias yp="yum info"                         # show package info
400 alias yl="yum list"                         # list packages
401+alias ygl="yum grouplist"                   # list package groups
402 alias yli="yum list installed"              # print all installed packages
403+alias ymc="yum makecache"                   # rebuilds the yum package list
404 
405 alias yu="sudo yum update"                  # upgrate packages
406 alias yi="sudo yum install"                 # install package
407+alias ygi="sudo yum groupinstall"           # install package group
408 alias yr="sudo yum remove"                  # remove package
409+alias ygr="sudo yum groupremove"            # remove pagage group
410 alias yrl="sudo yum remove --remove-leaves" # remove package and leaves
411-alias yc="sudo yum clean all"               # clean cache
412+alias yc="sudo yum clean all"               # clean cache
413diff --git a/themes/nebirhos.zsh-theme b/themes/nebirhos.zsh-theme
414index c5864d9b8d81641dafea787ef6b4af4573890525..a5a226b69b93e8e81d2479a158a6e182fc8b4d10 100644
415--- a/themes/nebirhos.zsh-theme
416+++ b/themes/nebirhos.zsh-theme
417@@ -6,7 +6,7 @@ if [ -e ~/.rvm/bin/rvm-prompt ]; then
418     RUBY_PROMPT_="%{$fg_bold[blue]%}rvm:(%{$fg[green]%}\$(~/.rvm/bin/rvm-prompt s i v g)%{$fg_bold[blue]%})%{$reset_color%} "
419 else
420   if which rbenv &> /dev/null; then
421-    RUBY_PROMPT_="%{$fg_bold[blue]%}rvm:(%{$fg[green]%}\$(rbenv version | sed -e 's/ (set.*$//')%{$fg_bold[blue]%})%{$reset_color%} "
422+    RUBY_PROMPT_="%{$fg_bold[blue]%}rbenv:(%{$fg[green]%}\$(rbenv version | sed -e 's/ (set.*$//')%{$fg_bold[blue]%})%{$reset_color%} "
423   fi
424 fi
425 
426diff --git a/themes/steeef.zsh-theme b/themes/steeef.zsh-theme
427index a2583b0287d7cd0ec8f07c7d5fff2863d0b2adf5..312229e9f345d026cbc372eea13b4436ca470eb6 100644
428--- a/themes/steeef.zsh-theme
429+++ b/themes/steeef.zsh-theme
430@@ -81,7 +81,7 @@ add-zsh-hook chpwd steeef_chpwd
431 function steeef_precmd {
432     if [[ -n "$PR_GIT_UPDATE" ]] ; then
433         # check for untracked files or updated submodules, since vcs_info doesn't
434-        if [[ ! -z $(git ls-files --other --exclude-standard 2> /dev/null) ]]; then
435+        if git ls-files --other --exclude-standard --directory 2> /dev/null | grep -q "."; then
436             PR_GIT_UPDATE=1
437             FMT_BRANCH="(%{$turquoise%}%b%u%c%{$hotpink%}●${PR_RST})"
438         else
439diff --git a/themes/terminalparty.zsh-theme b/themes/terminalparty.zsh-theme
440index 73653aca84810765406c8666620a6c380e27f92f..216ce37eb4e682d7e0e999f779b84875a629a379 100644
441--- a/themes/terminalparty.zsh-theme
442+++ b/themes/terminalparty.zsh-theme
443@@ -2,7 +2,7 @@ PROMPT='%{$fg[green]%} %% '
444 # RPS1='%{$fg[blue]%}%~%{$reset_color%} '
445 RPS1='%{$fg[white]%}%2~$(git_prompt_info) %{$fg_bold[blue]%}%m%{$reset_color%}'
446 
447-ZSH_THEME_GIT_PROMPT_PREFIX=" (%{$fg[yellow]%}"
448+ZSH_THEME_GIT_PROMPT_PREFIX=" %{$fg[yellow]%}("
449 ZSH_THEME_GIT_PROMPT_SUFFIX=")%{$reset_color%}"
450 ZSH_THEME_GIT_PROMPT_CLEAN=""
451 ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[red]%} ⚡%{$fg[yellow]%}"
452diff --git a/tools/install.sh b/tools/install.sh
453index aedb706dae1c96a71b8ec31fb2f038cc3e7a9fa3..b080be3a115c4d9b6feaa3368bbd7e1c9451e84e 100755
454--- a/tools/install.sh
455+++ b/tools/install.sh
456@@ -5,7 +5,10 @@ then
457 fi
458 
459 echo "\033[0;34mCloning Oh My Zsh...\033[0m"
460-/usr/bin/env git clone https://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
461+hash git >/dev/null && /usr/bin/env git clone https://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh || {
462+  echo "git not installed"
463+  exit
464+}
465 
466 echo "\033[0;34mLooking for an existing zsh config...\033[0m"
467 if [ -f ~/.zshrc ] || [ -h ~/.zshrc ]