diff --git a/.gitmodules b/.gitmodules index 7a7a7b5e..cb8f419e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,3 +7,12 @@ [submodule "modules/completion/external"] path = modules/completion/external url = https://github.com/zsh-users/zsh-completions.git +[submodule "modules/prompt/external/powerline"] + path = modules/prompt/external/powerline + url = https://github.com/davidjrice/prezto_powerline.git +[submodule "modules/prompt/external/agnoster"] + path = modules/prompt/external/agnoster + url = https://gist.github.com/3712874.git +[submodule "modules/prompt/functions/pure"] + path = modules/prompt/external/pure + url = https://github.com/sindresorhus/pure.git diff --git a/README.md b/README.md index c9d3fd41..42c68532 100644 --- a/README.md +++ b/README.md @@ -107,7 +107,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. [1]: http://www.zsh.org -[2]: http://i.imgur.com/nBEEZ.png "sorin theme" +[2]: http://i.imgur.com/AzjmpwM.png "sorin theme" [3]: http://git-scm.com [4]: https://github.com [5]: http://gitimmersion.com diff --git a/modules/environment/init.zsh b/modules/environment/init.zsh index 51d26162..76655a6c 100644 --- a/modules/environment/init.zsh +++ b/modules/environment/init.zsh @@ -33,15 +33,6 @@ unsetopt BG_NICE # Don't run all background jobs at a lower priority. unsetopt HUP # Don't kill jobs on shell exit. unsetopt CHECK_JOBS # Don't report on jobs when shell exit. -# -# Grep -# - -if zstyle -t ':prezto:environment:grep' color; then - export GREP_COLOR='37;45' - export GREP_OPTIONS='--color=auto' -fi - # # Termcap # diff --git a/modules/git/functions/git-info b/modules/git/functions/git-info index 8aaa4c32..200b2d25 100644 --- a/modules/git/functions/git-info +++ b/modules/git/functions/git-info @@ -198,7 +198,7 @@ function git-info { # Format stashed. zstyle -s ':prezto:module:git:info:stashed' format 'stashed_format' - if [[ -n "$stashed_format" && -f "$(git-dir)/refs/stash" ]]; then + if [[ -n "$stashed_format" && -f "${git_dir}/refs/stash" ]]; then stashed="$(git stash list 2> /dev/null | wc -l | awk '{print $1}')" if [[ -n "$stashed" ]]; then zformat -f stashed_formatted "$stashed_format" "S:$stashed" diff --git a/modules/gpg/init.zsh b/modules/gpg/init.zsh index 0bb7476c..e644b3a2 100644 --- a/modules/gpg/init.zsh +++ b/modules/gpg/init.zsh @@ -11,7 +11,7 @@ if (( ! $+commands[gpg-agent] )); then fi # Set the default paths to gpg-agent files. -_gpg_agent_conf="$HOME/.gnupg/gpg-agent.conf" +_gpg_agent_conf="${GNUPGHOME:-$HOME/.gnupg}/gpg-agent.conf" _gpg_agent_env="${TMPDIR:-/tmp}/gpg-agent.env" # Start gpg-agent if not started. diff --git a/modules/prompt/README.md b/modules/prompt/README.md index d72c6cf6..dc024977 100644 --- a/modules/prompt/README.md +++ b/modules/prompt/README.md @@ -46,7 +46,7 @@ The most basic example of this function can be seen below. If the `prompt_name_setup` function is customizable via parameters, a help function **should** be defined. The user will access it via `prompt -h name`. -The most basic example of this function can be seen bellow. +The most basic example of this function can be seen below. function prompt_name_help { cat < 0 )); then @@ -91,7 +91,7 @@ a function before you calling it. **Do not register hook functions. They will be registered by the `prompt` function.** -The most basic example of this function can be seen bellow. +The most basic example of this function can be seen below. function prompt_name_precmd { if (( $+functions[git-info] )); then diff --git a/modules/prompt/external/agnoster b/modules/prompt/external/agnoster new file mode 160000 index 00000000..43cb371f --- /dev/null +++ b/modules/prompt/external/agnoster @@ -0,0 +1 @@ +Subproject commit 43cb371f361eecf62e9dac7afc73a1c16edf89c7 diff --git a/modules/prompt/external/powerline b/modules/prompt/external/powerline new file mode 160000 index 00000000..8e811523 --- /dev/null +++ b/modules/prompt/external/powerline @@ -0,0 +1 @@ +Subproject commit 8e81152340c4beb2d941340d1feb2dc29bbcc309 diff --git a/modules/prompt/external/pure b/modules/prompt/external/pure new file mode 160000 index 00000000..2577a4cc --- /dev/null +++ b/modules/prompt/external/pure @@ -0,0 +1 @@ +Subproject commit 2577a4cc078d05c51d9d8e4278b8d16ab348a1b9 diff --git a/modules/prompt/functions/prompt_agnoster_setup b/modules/prompt/functions/prompt_agnoster_setup new file mode 120000 index 00000000..34d8bc6d --- /dev/null +++ b/modules/prompt/functions/prompt_agnoster_setup @@ -0,0 +1 @@ +../external/agnoster/agnoster.zsh-theme \ No newline at end of file diff --git a/modules/prompt/functions/prompt_cloud_setup b/modules/prompt/functions/prompt_cloud_setup new file mode 100644 index 00000000..0267c1e5 --- /dev/null +++ b/modules/prompt/functions/prompt_cloud_setup @@ -0,0 +1,121 @@ +# +# A minimal two-color theme. +# +# Authors: +# Kevin Laude +# +# Features: +# - One line, left aligned. +# - The prompt is prefixed by a character sequence of your choice. +# - Only displays the current directory instead of the full path. +# - Displays the current branch when in a git project (this requires loading +# the git module before prompt in ~/.zpreztorc). +# - Displays a character at the end of the prompt when in a git project with +# "dirty" files. +# +# Usage: +# This prompt's prefix symbol and colors are customizable: +# prompt cloud [] [] [] +# +# In ~/.zpreztorc: +# zstyle ':prezto:module:prompt' theme 'cloud' \ +# [''] \ +# [''] \ +# [''] +# +# If these options are not provided, the symbol defaults to "☁" with colors +# cyan and green. +# +# Screenshots: +# http://i.imgur.com/mJCZ8rE.png +# +# Note: +# This is a port of the oh-my-zsh cloud theme, originally written by Phillip +# Ridlen and Mark Drago +# + +# Load dependencies. +pmodload 'helper' + +function prompt_cloud_precmd { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + + # Get Git repository information. + if (( $+functions[git-info] )); then + git-info + fi +} + +function prompt_cloud_help { + cat <] [] [] + +In ~/.zpreztorc: + zstyle ':prezto:module:prompt' theme 'cloud' [''] [''] [''] + +If these options are not provided, the symbol defaults to ☁ with colors cyan +and green. +EOT +} + +function prompt_cloud_preview { + if (( $# > 0 )); then + prompt_preview_theme 'cloud' "$@" + else + prompt_preview_theme 'cloud' + print + prompt_preview_theme 'cloud' "✯" + print + prompt_preview_theme 'cloud' ">" "yellow" "red" + fi +} + +function prompt_cloud_setup { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(cr percent subst) + + # Set the theme prefix to a cloud or to the user's given characters. + if [[ -n "$1" ]]; then + prefix="$1" + else + prefix='☁' + fi + + # Assign colors. + if [[ -n "$2" ]]; then + primary_color="$2" + else + primary_color='cyan' + fi + + if [[ -n "$3" ]]; then + secondary_color="$3" + else + secondary_color='green' + fi + + # Load required functions. + autoload -Uz add-zsh-hook + + # Add hook for calling git-info before each command. + add-zsh-hook precmd prompt_cloud_precmd + + # Set git-info parameters. + zstyle ':prezto:module:git:info' verbose 'yes' + zstyle ':prezto:module:git:info:dirty' format "%%B%F{$secondary_color}]%f%%b %F{yellow}⚡%f" + zstyle ':prezto:module:git:info:clean' format "%B%F{$secondary_color}]%f%b" + zstyle ':prezto:module:git:info:branch' format "%%B%F{$secondary_color}[%f%%b%%B%F{$primary_color}%b%f%%b" + zstyle ':prezto:module:git:info:keys' format \ + 'prompt' '%b%C%D' \ + 'rprompt' '' + + # Define prompts. + PROMPT='%B%F{$primary_color}${prefix}%f%b %B%F{$secondary_color}%c%f%b $git_info[prompt] ' + RPROMPT='' +} + +prompt_cloud_setup "$@" diff --git a/modules/prompt/functions/prompt_damoekri_setup b/modules/prompt/functions/prompt_damoekri_setup new file mode 100644 index 00000000..58c4d352 --- /dev/null +++ b/modules/prompt/functions/prompt_damoekri_setup @@ -0,0 +1,76 @@ +# +# A simple theme inspired by the Sorin and PeepCode themes. +# +# Authors: +# Daniel Møller Kristensen +# +# Screenshots: +# http://i.imgur.com/AX9HnPF.png +# + +# Load dependencies. +pmodload 'helper' + +function prompt_damoekri_pwd { + local pwd="${PWD/#$HOME/~}" + + if [[ "$pwd" == (#m)[/~] ]]; then + _prompt_damoekri_pwd="$MATCH" + unset MATCH + else + _prompt_damoekri_pwd="${${${${(@j:/:M)${(@s:/:)pwd}##.#?}:h}%/}//\%/%%}/${${pwd:t}//\%/%%}" + fi +} + +function prompt_damoekri_precmd { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + + # Format PWD. + prompt_damoekri_pwd + + # Get Git repository information. + if (( $+functions[git-info] )); then + git-info + fi + + # Get Ruby version information. + if (( $+functions[ruby-info] )); then + ruby-info + fi +} + +function prompt_damoekri_setup { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(cr percent subst) + + # Load required functions. + autoload -Uz add-zsh-hook + + # Add hook for calling git-info and ruby-info before each command. + add-zsh-hook precmd prompt_damoekri_precmd + + # Set editor-info parameters. + zstyle ':prezto:module:editor:info:keymap:primary' format ' %F{green}»%f' + + # Set git-info parameters. + zstyle ':prezto:module:git:info' verbose 'yes' + zstyle ':prezto:module:git:info:action' format ':%F{magenta}%s%f' + zstyle ':prezto:module:git:info:branch' format '%F{blue}%b%f' + zstyle ':prezto:module:git:info:clean' format ' %F{green}✔%f' + zstyle ':prezto:module:git:info:dirty' format ' %F{red}✗%f' + zstyle ':prezto:module:git:info:commit' format '%F{blue}%.7c%f' + zstyle ':prezto:module:git:info:position' format '%F{blue}%p%f' + zstyle ':prezto:module:git:info:keys' format \ + 'rprompt' ' $(coalesce "%b" "%p" "%c")%s%C%D' + + # Set ruby-info parameters. + zstyle ':prezto:module:ruby:info:version' format ' %F{yellow}%v%f' + + # Define prompts. + PROMPT='%F{cyan}${_prompt_damoekri_pwd}%f${editor_info[keymap]} ' + RPROMPT='${git_info:+${(e)git_info[rprompt]}}${ruby_info:+${ruby_info[version]}}' +} + +prompt_damoekri_setup "$@" diff --git a/modules/prompt/functions/prompt_giddie_setup b/modules/prompt/functions/prompt_giddie_setup new file mode 100644 index 00000000..5a14ffe0 --- /dev/null +++ b/modules/prompt/functions/prompt_giddie_setup @@ -0,0 +1,76 @@ +# +# A colorful, friendly, multiline theme with some handy features. +# +# Authors: +# Paul Gideon Dann +# Sorin Ionescu +# +# Features: +# - Simple VCS branch, staged, and unstaged indication. +# - Prompt character is different in a VCS repository. +# - Last command exit status is displayed when non-zero. +# +# Screenshots: +# http://i.imgur.com/rCo3S.png +# + +function +vi-set_novcs_prompt_symbol { + _prompt_giddie_symbol=')' +} + +function +vi-set_vcs_prompt_symbol { + _prompt_giddie_symbol='±' +} + +function +vi-git_precmd { + # Check for untracked files, since vcs_info does not. + if [[ -n $(git ls-files --other --exclude-standard 2> /dev/null) ]]; then + hook_com[unstaged]+='%F{green}?%f' + fi +} + +function prompt_giddie_precmd { + # Replace '/home/' with '~'. + _prompt_giddie_pwd="${PWD/#$HOME/~}" + vcs_info +} + +function prompt_giddie_setup { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(cr percent subst) + + # Load required functions. + autoload -Uz vcs_info + autoload -Uz add-zsh-hook + + # Add hook to set up prompt parameters before each command. + add-zsh-hook precmd prompt_giddie_precmd + + # Set editor-info parameters. + zstyle ':prezto:module:editor:info:completing' format '%F{green}...%f' + zstyle ':prezto:module:editor:info:keymap:alternate' format '%F{yellow}--- COMMAND ---%f' + + # Set vcs_info parameters. + zstyle ':vcs_info:*' check-for-changes true + zstyle ':vcs_info:*' formats ' on %F{magenta}%b%f%c%u' + zstyle ':vcs_info:*' actionformats ' on %F{magenta}%b%f%c%u %F{yellow}(%a)%f' + zstyle ':vcs_info:*' stagedstr '%F{green}+%f' + zstyle ':vcs_info:*' unstagedstr '%F{green}!%f' + + # Set vcs_info hooks. + # NOTE: Prior to Zsh v4.3.12, there are no static hooks, no vcs_info_hookadd + # function, and no 'no-vcs' hook. + zstyle ':vcs_info:*+start-up:*' hooks set_novcs_prompt_symbol + zstyle ':vcs_info:git*+set-message:*' hooks set_vcs_prompt_symbol git_precmd + zstyle ':vcs_info:*+set-message:*' hooks set_vcs_prompt_symbol + + # Define prompts. + PROMPT='%(?..%F{red}%B-> [%?]%b%f +)%F{magenta}%n%f@%F{yellow}%m%f|%F{green}${_prompt_giddie_pwd}%f${vcs_info_msg_0_} +%F{blue}${_prompt_giddie_symbol}%f ' + RPROMPT='${editor_info[keymap]}' + SPROMPT='zsh: correct %F{magenta}%R%f to %F{green}%r%f [nyae]? ' +} + +prompt_giddie_setup "$@" diff --git a/modules/prompt/functions/prompt_kylewest_setup b/modules/prompt/functions/prompt_kylewest_setup new file mode 100644 index 00000000..0c229a57 --- /dev/null +++ b/modules/prompt/functions/prompt_kylewest_setup @@ -0,0 +1,65 @@ +# +# A single line theme with Git information on the left and Ruby on the right. +# +# Authors: +# Kyle West +# Sorin Ionescu +# +# Features: +# - Indicates dirty Git repository. +# - Indicates the Ruby version. +# - Indicates vi modes. +# +# Screenshots: +# http://i.imgur.com/dCwhynn.png +# + +function prompt_kylewest_precmd { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + + # Get Git repository information. + if (( $+functions[git-info] )); then + git-info + fi + + # Get Ruby information. + if (( $+functions[ruby-info] )); then + ruby-info + fi +} + +function prompt_kylewest_setup { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(cr percent subst) + + # Load required functions. + autoload -Uz add-zsh-hook + + # Add hook for calling git-info before each command. + add-zsh-hook precmd prompt_kylewest_precmd + + # Set editor-info parameters. + zstyle ':prezto:module:editor:info:completing' format '%B%F{red}...%f%b' + zstyle ':prezto:module:editor:info:keymap:primary' format "%B%F{green}❯%f%b" + zstyle ':prezto:module:editor:info:keymap:alternate' format "%B%F{magenta}❮%f%b" + + # Set git-info parameters. + zstyle ':prezto:module:git:info' verbose 'no' + zstyle ':prezto:module:git:info:branch' format '%F{yellow}%b%f' + zstyle ':prezto:module:git:info:dirty' format '%B%F{red}!%f%b' + zstyle ':prezto:module:git:info:indexed' format ' ' + zstyle ':prezto:module:git:info:unindexed' format ' ' + zstyle ':prezto:module:git:info:untracked' format ' ' + zstyle ':prezto:module:git:info:keys' format 'prompt' '- %b%D ' + + # Set ruby-info parameters. + zstyle ':prezto:module:ruby:info:version' format '%F{blue}[%v]%f' + + # Define prompts. + PROMPT='%F{cyan}%c%f ${git_info[prompt]}${editor_info[keymap]} ' + RPROMPT='${ruby_info[version]}' +} + +prompt_kylewest_setup "$@" diff --git a/modules/prompt/functions/prompt_minimal_setup b/modules/prompt/functions/prompt_minimal_setup index 218efb2a..8c07e70e 100644 --- a/modules/prompt/functions/prompt_minimal_setup +++ b/modules/prompt/functions/prompt_minimal_setup @@ -9,7 +9,7 @@ # http://i.imgur.com/zLZNK.png # -function +vi-git-status() { +function +vi-git_status { # Check for untracked files or updated submodules since vcs_info does not. if [[ -n $(git ls-files --other --exclude-standard 2> /dev/null) ]]; then hook_com[unstaged]='%F{red}●%f' @@ -40,7 +40,7 @@ function prompt_minimal_setup { zstyle ':vcs_info:*' formats ' - [%b%c%u]' zstyle ':vcs_info:*' actionformats " - [%b%c%u|%F{cyan}%a%f]" zstyle ':vcs_info:(sv[nk]|bzr):*' branchformat '%b|%F{cyan}%r%f' - zstyle ':vcs_info:git*+set-message:*' hooks git-status + zstyle ':vcs_info:git*+set-message:*' hooks git_status # Define prompts. PROMPT='%2~${vcs_info_msg_0_} » ' diff --git a/modules/prompt/functions/prompt_paradox_setup b/modules/prompt/functions/prompt_paradox_setup new file mode 100644 index 00000000..f98377de --- /dev/null +++ b/modules/prompt/functions/prompt_paradox_setup @@ -0,0 +1,154 @@ +# +# A two-line, Powerline-inspired theme that displays contextual information. +# +# This theme requires a patched Powerline font, get them from +# https://github.com/Lokaltog/powerline-fonts. +# +# Authors: +# Isaac Wolkerstorfer +# Jeff Sandberg +# Sorin Ionescu +# +# Screenshots: +# http://i.imgur.com/0XIWX.png +# + +# Load dependencies. +pmodload 'helper' + +# Define variables. +_prompt_paradox_current_bg='NONE' +_prompt_paradox_segment_separator='⮀' +_prompt_paradox_start_time=$SECONDS + +function prompt_paradox_start_segment { + local bg fg + [[ -n "$1" ]] && bg="%K{$1}" || bg="%k" + [[ -n "$2" ]] && fg="%F{$2}" || fg="%f" + if [[ "$_prompt_paradox_current_bg" != 'NONE' && "$1" != "$_prompt_paradox_current_bg" ]]; then + print -n " $bg%F{$_prompt_paradox_current_bg}$_prompt_paradox_segment_separator$fg " + else + print -n "$bg$fg " + fi + _prompt_paradox_current_bg="$1" + [[ -n "$3" ]] && print -n "$3" +} + +function prompt_paradox_end_segment { + if [[ -n "$_prompt_paradox_current_bg" ]]; then + print -n " %k%F{$_prompt_paradox_current_bg}$_prompt_paradox_segment_separator" + else + print -n "%k" + fi + print -n "%f" + _prompt_paradox_current_bg='' +} + +function prompt_paradox_build_prompt { + prompt_paradox_start_segment black default '%(?::%F{red}✘ )%(!:%F{yellow}⚡ :)%(1j:%F{cyan}⚙ :)%F{blue}%n%F{red}@%F{green}%m%f' + prompt_paradox_start_segment blue black '$_prompt_paradox_pwd' + + if [[ -n "$git_info" ]]; then + prompt_paradox_start_segment green black '${(e)git_info[ref]}${(e)git_info[status]}' + fi + + prompt_paradox_end_segment +} + +function prompt_paradox_pwd { + local pwd="${PWD/#$HOME/~}" + + if [[ "$pwd" == (#m)[/~] ]]; then + _prompt_paradox_pwd="$MATCH" + unset MATCH + else + _prompt_paradox_pwd="${${${${(@j:/:M)${(@s:/:)pwd}##.#?}:h}%/}//\%/%%}/${${pwd:t}//\%/%%}" + fi +} + +function prompt_paradox_print_elapsed_time { + local end_time=$(( SECONDS - _prompt_paradox_start_time )) + local hours minutes seconds remainder + + if (( end_time >= 3600 )); then + hours=$(( end_time / 3600 )) + remainder=$(( end_time % 3600 )) + minutes=$(( remainder / 60 )) + seconds=$(( remainder % 60 )) + print -P "%B%F{red}>>> elapsed time ${hours}h${minutes}m${seconds}s%b" + elif (( end_time >= 60 )); then + minutes=$(( end_time / 60 )) + seconds=$(( end_time % 60 )) + print -P "%B%F{yellow}>>> elapsed time ${minutes}m${seconds}s%b" + elif (( end_time > 10 )); then + print -P "%B%F{green}>>> elapsed time ${end_time}s%b" + fi +} + +function prompt_paradox_precmd { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + + # Format PWD. + prompt_paradox_pwd + + # Get Git repository information. + if (( $+functions[git-info] )); then + git-info + fi + + # Calculate and print the elapsed time. + prompt_paradox_print_elapsed_time +} + +function prompt_paradox_preexec { + _prompt_paradox_start_time="$SECONDS" +} + +function prompt_paradox_setup { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(cr percent subst) + + # Load required functions. + autoload -Uz add-zsh-hook + + # Add hook for calling git-info before each command. + add-zsh-hook preexec prompt_paradox_preexec + add-zsh-hook precmd prompt_paradox_precmd + + # Set editor-info parameters. + zstyle ':prezto:module:editor:info:completing' format '%B%F{red}...%f%b' + zstyle ':prezto:module:editor:info:keymap:primary' format '%B%F{blue}❯%f%b' + zstyle ':prezto:module:editor:info:keymap:primary:overwrite' format '%F{red}♺%f' + zstyle ':prezto:module:editor:info:keymap:alternate' format '%B%F{red}❮%f%b' + + # Set git-info parameters. + zstyle ':prezto:module:git:info' verbose 'yes' + zstyle ':prezto:module:git:info:action' format ' ⁝ %s' + zstyle ':prezto:module:git:info:added' format ' ✚' + zstyle ':prezto:module:git:info:ahead' format ' ⬆' + zstyle ':prezto:module:git:info:behind' format ' ⬇' + zstyle ':prezto:module:git:info:branch' format '⭠ %b' + zstyle ':prezto:module:git:info:commit' format '➦ %.7c' + zstyle ':prezto:module:git:info:deleted' format ' ✖' + zstyle ':prezto:module:git:info:dirty' format ' ⁝' + zstyle ':prezto:module:git:info:modified' format ' ✱' + zstyle ':prezto:module:git:info:position' format '%p' + zstyle ':prezto:module:git:info:renamed' format ' ➙' + zstyle ':prezto:module:git:info:stashed' format ' S' + zstyle ':prezto:module:git:info:unmerged' format ' ═' + zstyle ':prezto:module:git:info:untracked' format ' ?' + zstyle ':prezto:module:git:info:keys' format \ + 'ref' '$(coalesce "%b" "%p" "%c")' \ + 'status' '%s%D%A%B%S%a%d%m%r%U%u' + + # Define prompts. + PROMPT=' +${(e)$(prompt_paradox_build_prompt)} + ${editor_info[keymap]} ' + RPROMPT='%F{blue}[%F{green}%D{%H:%M:%S}%F{blue}]%f' + SPROMPT='zsh: correct %F{red}%R%f to %F{green}%r%f [nyae]? ' +} + +prompt_paradox_setup "$@" diff --git a/modules/prompt/functions/prompt_peepcode_setup b/modules/prompt/functions/prompt_peepcode_setup index a83710ef..c70fb9a7 100644 --- a/modules/prompt/functions/prompt_peepcode_setup +++ b/modules/prompt/functions/prompt_peepcode_setup @@ -10,16 +10,13 @@ # http://i.imgur.com/LhgmW.png # -function +vi-git-status() { - # Check for untracked files or updated submodules since vcs_info does not. - if [[ -n $(git ls-files --other --exclude-standard 2> /dev/null) ]]; then - hook_com[unstaged]=' %F{8}✗%f' - fi -} - function prompt_peepcode_precmd { - vcs_info + # Get Git repository information. + if (( $+functions[git-info] )); then + git-info + fi + # Get Ruby information. if (( $+functions[ruby-info] )); then ruby-info fi @@ -34,18 +31,19 @@ function prompt_peepcode_setup { autoload -Uz add-zsh-hook autoload -Uz vcs_info - # Add hook for calling vcs_info before each command. + # Add a hook for calling info functions before each command. add-zsh-hook precmd prompt_peepcode_precmd - # Set vcs_info parameters. - zstyle ':vcs_info:*' enable git - zstyle ':vcs_info:*' check-for-changes true - zstyle ':vcs_info:*' get-revision true - zstyle ':vcs_info:*' use-simple true - zstyle ':vcs_info:*' unstagedstr ' %F{8}✗%f' - zstyle ':vcs_info:*' formats ' %F{8}%b%f %F{white}%.7i%f%u' - zstyle ':vcs_info:*' actionformats ' %F{8}%b%f %F{white}%.7i%f +%a%u' - zstyle ':vcs_info:git*+set-message:*' hooks git-status + # Set git-info parameters. + zstyle ':prezto:module:git:info' verbose 'no' + zstyle ':prezto:module:git:info:action' format ' +%s' + zstyle ':prezto:module:git:info:branch' format ' %F{8}%b%f' + zstyle ':prezto:module:git:info:commit' format ' %F{white}%.7c%f' + zstyle ':prezto:module:git:info:indexed' format ' ' + zstyle ':prezto:module:git:info:unindexed' format ' ' + zstyle ':prezto:module:git:info:untracked' format ' ' + zstyle ':prezto:module:git:info:dirty' format ' %F{8}✗%f' + zstyle ':prezto:module:git:info:keys' format 'rprompt' '%b%c%s%D' # Set ruby-info parameters. zstyle ':prezto:module:ruby:info:version' format ' %F{white}%v%f' @@ -54,7 +52,7 @@ function prompt_peepcode_setup { PROMPT=" %~ %(?.%F{green}${1:-☻ }%f.%F{red}${1:-☻ }%f) " -RPROMPT='${ruby_info[version]}${vcs_info_msg_0_}' +RPROMPT='${ruby_info[version]}${git_info[rprompt]}' } diff --git a/modules/prompt/functions/prompt_powerline_setup b/modules/prompt/functions/prompt_powerline_setup new file mode 120000 index 00000000..3715d75b --- /dev/null +++ b/modules/prompt/functions/prompt_powerline_setup @@ -0,0 +1 @@ +../external/powerline/prompt_powerline_setup \ No newline at end of file diff --git a/modules/prompt/functions/prompt_pure_setup b/modules/prompt/functions/prompt_pure_setup deleted file mode 100644 index 30eb2bd8..00000000 --- a/modules/prompt/functions/prompt_pure_setup +++ /dev/null @@ -1,124 +0,0 @@ -# Pure -# by Sindre Sorhus -# https://github.com/sindresorhus/pure -# MIT License - -# For my own and others sanity -# git: -# %b => current branch -# %a => current action (rebase/merge) -# prompt: -# %F => color dict -# %f => reset color -# %~ => current path -# %* => time -# %n => username -# %m => shortname host -# %(?..) => prompt conditional - %(condition.true.false) - - -# turns seconds into human readable time -# 165392 => 1d 21h 56m 32s -prompt_pure_human_time() { - local tmp=$1 - local days=$(( tmp / 60 / 60 / 24 )) - local hours=$(( tmp / 60 / 60 % 24 )) - local minutes=$(( tmp / 60 % 60 )) - local seconds=$(( tmp % 60 )) - (( $days > 0 )) && echo -n "${days}d " - (( $hours > 0 )) && echo -n "${hours}h " - (( $minutes > 0 )) && echo -n "${minutes}m " - echo "${seconds}s" -} - -# fastest possible way to check if repo is dirty -prompt_pure_git_dirty() { -# check if we're in a git repo - command git rev-parse --is-inside-work-tree &>/dev/null || return -# check if it's dirty - [[ "$PURE_GIT_UNTRACKED_DIRTY" == 0 ]] && local umode="-uno" || local umode="-unormal" - command test -n "$(git status --porcelain --ignore-submodules ${umode})" - - (($? == 0)) && echo '*' -} - -# displays the exec time of the last command if set threshold was exceeded -prompt_pure_cmd_exec_time() { - local stop=$EPOCHSECONDS - local start=${cmd_timestamp:-$stop} - integer elapsed=$stop-$start - (($elapsed > ${PURE_CMD_MAX_EXEC_TIME:=5})) && prompt_pure_human_time $elapsed -} - -prompt_pure_preexec() { - cmd_timestamp=$EPOCHSECONDS - -# shows the current dir and executed command in the title when a process is active - print -Pn "\e]0;" - echo -nE "$PWD:t: $2" - print -Pn "\a" -} - -# string length ignoring ansi escapes -prompt_pure_string_length() { - echo ${#${(S%%)1//(\%([KF1]|)\{*\}|\%[Bbkf])}} -} - -prompt_pure_precmd() { -# shows the full path in the title - print -Pn '\e]0;%~\a' - -# git info - vcs_info - - local prompt_pure_preprompt="\n%F{blue}%~%F{242}$vcs_info_msg_0_`prompt_pure_git_dirty` $prompt_pure_username%f %F{yellow}`prompt_pure_cmd_exec_time`%f" - print -P $prompt_pure_preprompt - -# check async if there is anything to pull - (( ${PURE_GIT_PULL:-1} )) && { -# check if we're in a git repo - command git rev-parse --is-inside-work-tree &>/dev/null && -# make sure working tree is not $HOME - [[ "$(command git rev-parse --show-toplevel)" != "$HOME" ]] && -# check check if there is anything to pull - command git fetch &>/dev/null && -# check if there is an upstream configured for this branch - command git rev-parse --abbrev-ref @'{u}' &>/dev/null && { - local arrows='' - (( $(command git rev-list --right-only --count HEAD...@'{u}' 2>/dev/null) > 0 )) && arrows='⇣' - (( $(command git rev-list --left-only --count HEAD...@'{u}' 2>/dev/null) > 0 )) && arrows+='⇡' - print -Pn "\e7\e[A\e[1G\e[`prompt_pure_string_length $prompt_pure_preprompt`C%F{cyan}${arrows}%f\e8" - } - } &! - -# reset value since `preexec` isn't always triggered - unset cmd_timestamp -} - - -prompt_pure_setup() { -# prevent percentage showing up -# if output doesn't end with a newline - export PROMPT_EOL_MARK='' - - prompt_opts=(cr subst percent) - - zmodload zsh/datetime - autoload -Uz add-zsh-hook - autoload -Uz vcs_info - - add-zsh-hook precmd prompt_pure_precmd - add-zsh-hook preexec prompt_pure_preexec - - zstyle ':vcs_info:*' enable git - zstyle ':vcs_info:git*' formats ' %b' - zstyle ':vcs_info:git*' actionformats ' %b|%a' - -# show username@host if logged in through SSH - [[ "$SSH_CONNECTION" != '' ]] && prompt_pure_username='%n@%m ' - -# prompt turns red if the previous command didn't exit with 0 - PROMPT='%(?.%F{magenta}.%F{red})❯%f ' -} - -prompt_pure_setup "$@" diff --git a/modules/prompt/functions/prompt_pure_setup b/modules/prompt/functions/prompt_pure_setup new file mode 120000 index 00000000..1480fcfd --- /dev/null +++ b/modules/prompt/functions/prompt_pure_setup @@ -0,0 +1 @@ +../external/pure/pure.zsh \ No newline at end of file diff --git a/modules/prompt/functions/prompt_skwp_setup b/modules/prompt/functions/prompt_skwp_setup new file mode 100644 index 00000000..abe9e265 --- /dev/null +++ b/modules/prompt/functions/prompt_skwp_setup @@ -0,0 +1,75 @@ +# +# A single line theme with Git information on the left and Ruby on the right. +# +# Authors: +# Steve Losh +# Bart Trojanowski +# Brian Carper +# steeef +# Sorin Ionescu +# Yan Pritzker +# +# Screenshots: +# http://i.imgur.com/gLgVp6Y.png +# + +function prompt_skwp_precmd { + # Get Git repository information. + if (( $+functions[git-info] )); then + git-info + fi + + # Get Ruby information. + if (( $+functions[ruby-info] )); then + ruby-info + fi +} + +function prompt_skwp_setup { + setopt LOCAL_OPTIONS + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(cr percent subst) + + # Load required functions. + autoload -Uz add-zsh-hook + + # Add hook to set up prompt parameters before each command. + add-zsh-hook precmd prompt_skwp_precmd + + # Use extended color pallete if available. + if [[ $TERM = *256color* || $TERM = *rxvt* ]]; then + _prompt_skwp_colors=( + "%F{81}" # Turquoise + "%F{166}" # Orange + "%F{135}" # Purple + "%F{161}" # Hotpink + "%F{118}" # Limegreen + ) + else + _prompt_skwp_colors=( + "%F{cyan}" + "%F{yellow}" + "%F{magenta}" + "%F{red}" + "%F{green}" + ) + fi + + # Set git-info parameters. + zstyle ':prezto:module:git:info' verbose 'yes' + zstyle ':prezto:module:git:info:branch' format "${_prompt_skwp_colors[1]}%b%f" + zstyle ':prezto:module:git:info:added' format "${_prompt_skwp_colors[5]}●%f" + zstyle ':prezto:module:git:info:deleted' format "${_prompt_skwp_colors[2]}●%f" + zstyle ':prezto:module:git:info:modified' format "${_prompt_skwp_colors[4]}●%f" + zstyle ':prezto:module:git:info:untracked' format "${_prompt_skwp_colors[3]}●%f" + zstyle ':prezto:module:git:info:keys' format 'prompt' '(%b%d%a%m%u)' + + # Set ruby-info parameters. + zstyle ':prezto:module:ruby:info:version' format '[%v]' + + # Define prompts. + PROMPT="${_prompt_skwp_colors[3]}%n%f@${_prompt_skwp_colors[2]}%m%f ${_prompt_skwp_colors[5]}%~%f "'$git_info[prompt]'"$ " + RPROMPT='%F{blue}${ruby_info[version]}' +} + +prompt_skwp_setup "$@" diff --git a/modules/prompt/functions/prompt_smiley_setup b/modules/prompt/functions/prompt_smiley_setup new file mode 100644 index 00000000..7679abe1 --- /dev/null +++ b/modules/prompt/functions/prompt_smiley_setup @@ -0,0 +1,65 @@ +# +# A simple theme that displays: +# - Python virtual environment. +# - Git branch. +# - Git state. +# - Last command exit state (smiley/X). +# +# Authors: +# Nadav Shatz +# +# Screenshots: +# http://i.imgur.com/ijycV6n.png +# + +# Load dependencies. +pmodload 'helper' + +function prompt_smiley_precmd { + unsetopt XTRACE KSH_ARRAYS + + # Get Git repository information. + if (( $+functions[git-info] )); then + git-info + fi + + # Get Python environment information. + if (( $+functions[python-info] )); then + python-info + fi + + # Get Ruby version information. + if (( $+functions[ruby-info] )); then + ruby-info + fi +} + +function prompt_smiley_setup { + unsetopt XTRACE KSH_ARRAYS + prompt_opts=(percent subst) + + # Add hook for calling git-info before each command. + add-zsh-hook precmd prompt_smiley_precmd + + # Set editor-info parameters. + zstyle ':prezto:module:editor:info:completing' format '%B%F{red}...%f%b' + + # Set python-info parameters. + zstyle ':prezto:module:python:info:virtualenv' format '%F{yellow}[%v]%f ' + + # Set ruby-info parameters. + zstyle ':prezto:module:ruby:info:version' format '%F{yellow}[%v]%f ' + + # Set git-info parameters. + zstyle ':prezto:module:git:info' verbose 'yes' + zstyle ':prezto:module:git:info:branch' format '%F{blue}%b%f' + zstyle ':prezto:module:git:info:dirty' format '%%B%F{red} ±%f%%b' + zstyle ':prezto:module:git:info:keys' format 'prompt' '(%b%D)' + + # Define prompts. + PROMPT='$python_info[virtualenv]$ruby_info[version]${git_info[prompt]} %B%c%b %(?:%F{green}ツ%f:%F{red}✖%f) ' + RPROMPT='${editor_info[overwrite]}${VIM:+" %B%F{green}V%f%b"}' + SPROMPT='zsh: correct %F{red}%R%f to %F{green}%r%f [nyae]? ' +} + +prompt_smiley_setup "$@" diff --git a/modules/prompt/functions/prompt_sorin_setup b/modules/prompt/functions/prompt_sorin_setup index c05fc420..508dc80d 100644 --- a/modules/prompt/functions/prompt_sorin_setup +++ b/modules/prompt/functions/prompt_sorin_setup @@ -5,7 +5,7 @@ # Sorin Ionescu # # Screenshots: -# http://i.imgur.com/nBEEZ.png +# http://i.imgur.com/AzjmpwM.png # # Load dependencies. @@ -72,8 +72,8 @@ function prompt_sorin_setup { 'rprompt' '%A%B%S%a%d%m%r%U%u' # Define prompts. - PROMPT='%F{cyan}${_prompt_sorin_pwd}%f${git_info:+${(e)git_info[prompt]}}%(!. %B%F{red}#%f%b.)${editor_info[keymap]} ' - RPROMPT='${editor_info[overwrite]}%(?:: %F{red}⏎%f)${VIM:+" %B%F{green}V%f%b"}${git_info[rprompt]}' + PROMPT='${SSH_TTY:+"%F{red}%n%f@%F{yellow}%m%f "}%F{cyan}${_prompt_sorin_pwd}%f${git_info:+${(e)git_info[prompt]}}%(!. %B%F{red}#%f%b.)${editor_info[keymap]} ' + RPROMPT='${editor_info[overwrite]}%(?:: %F{red}⏎%f)${VIM:+" %B%F{green}V%f%b"}${INSIDE_EMACS:+" %B%F{green}E%f%b"}${git_info[rprompt]}' SPROMPT='zsh: correct %F{red}%R%f to %F{green}%r%f [nyae]? ' } diff --git a/modules/prompt/init.zsh b/modules/prompt/init.zsh index d976615a..0ec007c4 100644 --- a/modules/prompt/init.zsh +++ b/modules/prompt/init.zsh @@ -10,9 +10,9 @@ autoload -Uz promptinit && promptinit # Load the prompt theme. zstyle -a ':prezto:module:prompt' theme 'prompt_argv' -if (( $#prompt_argv > 0 )); then - prompt "$prompt_argv[@]" -else +if [[ "$TERM" == (dumb|linux|*bsd*) ]] || (( $#prompt_argv < 1 )); then prompt 'off' +else + prompt "$prompt_argv[@]" fi unset prompt_argv diff --git a/modules/ruby/init.zsh b/modules/ruby/init.zsh index 174d1858..fd707d00 100644 --- a/modules/ruby/init.zsh +++ b/modules/ruby/init.zsh @@ -28,6 +28,9 @@ elif (( $+commands[chruby-exec] )); then source "${commands[chruby-exec]:h:h}/share/chruby/chruby.sh" if zstyle -t ':prezto:module:ruby:chruby' auto-switch; then source "${commands[chruby-exec]:h:h}/share/chruby/auto.sh" + + # If a default Ruby is set, switch to it. + chruby_auto fi # Prepend local gems bin directories to PATH. diff --git a/modules/ssh/README.md b/modules/ssh/README.md index 45bd2bd2..7324ae9a 100644 --- a/modules/ssh/README.md +++ b/modules/ssh/README.md @@ -4,7 +4,8 @@ SSH Provides for an easier use of [SSH][1] by setting up [ssh-agent][2]. This module is disabled on Mac OS X due to custom Apple SSH support rendering it -unnecessary. +unnecessary. Use `ssh-add -K` to store identities in Keychain; they will be +added to `ssh-agent` automatically and persist between reboots. Settings -------- diff --git a/modules/tmux/README.md b/modules/tmux/README.md index 9a15be09..b2f6bc8d 100644 --- a/modules/tmux/README.md +++ b/modules/tmux/README.md @@ -30,6 +30,15 @@ in *tmux.conf*: set-option -g destroy-unattached [on | off] +#### iTerm2 Integration + +[iTerm2][6] offers significant integration with tmux. This can be enabled by +adding the following line to *zpreztorc*: + + zstyle ':prezto:module:tmux:iterm' integrate 'yes' + +Read [iTerm2 and tmux Integration][7] for more information. + Aliases ------- @@ -64,3 +73,5 @@ Authors [3]: https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard [4]: https://github.com/mxcl/homebrew [5]: https://github.com/sorin-ionescu/prezto/issues +[6]: http://iterm2.com +[7]: https://code.google.com/p/iterm2/wiki/TmuxIntegration diff --git a/modules/tmux/init.zsh b/modules/tmux/init.zsh index 29b547f3..070abcaf 100644 --- a/modules/tmux/init.zsh +++ b/modules/tmux/init.zsh @@ -17,6 +17,12 @@ fi # Auto Start # +if ([[ "$TERM_PROGRAM" = 'iTerm.app' ]] && \ + zstyle -t ':prezto:module:tmux:iterm' integrate \ +); then + _tmux_iterm_integration='-CC' +fi + if [[ -z "$TMUX" && -z "$EMACS" && -z "$VIM" ]] && ( \ ( [[ -n "$SSH_TTY" ]] && zstyle -t ':prezto:module:tmux:auto-start' remote ) || ( [[ -z "$SSH_TTY" ]] && zstyle -t ':prezto:module:tmux:auto-start' local ) \ @@ -32,12 +38,12 @@ if [[ -z "$TMUX" && -z "$EMACS" && -z "$VIM" ]] && ( \ fi # Attach to the 'prezto' session or to the last session used. - exec tmux attach-session + exec tmux $_tmux_iterm_integration attach-session fi # # Aliases # -alias tmuxa='tmux attach-session' +alias tmuxa="tmux $_tmux_iterm_integration new-session -A" alias tmuxl='tmux list-sessions' diff --git a/modules/utility/init.zsh b/modules/utility/init.zsh index 102ae5a1..c9ef94d1 100644 --- a/modules/utility/init.zsh +++ b/modules/utility/init.zsh @@ -102,6 +102,12 @@ alias lc='lt -c' # Lists sorted by date, most recent last, shows change alias lu='lt -u' # Lists sorted by date, most recent last, shows access time. alias sl='ls' # I often screw this up. +# Grep +if zstyle -t ':prezto:module:utility:grep' color; then + export GREP_COLOR='37;45' + alias grep="$aliases[grep] --color=auto" +fi + # Mac OS X Everywhere if [[ "$OSTYPE" == darwin* ]]; then alias o='open' diff --git a/runcoms/zlogin b/runcoms/zlogin index 9911de58..30549f33 100644 --- a/runcoms/zlogin +++ b/runcoms/zlogin @@ -17,7 +17,7 @@ # Print a random, hopefully interesting, adage. if (( $+commands[fortune] )); then if [[ -t 0 || -t 1 ]]; then - fortune -a + fortune -s print fi fi diff --git a/runcoms/zpreztorc b/runcoms/zpreztorc index a54fdb02..4778944c 100644 --- a/runcoms/zpreztorc +++ b/runcoms/zpreztorc @@ -152,3 +152,6 @@ zstyle ':prezto:module:prompt' theme 'sorin' # Auto start a session when Zsh is launched in a SSH connection. # zstyle ':prezto:module:tmux:auto-start' remote 'yes' + +# Integrate with iTerm2. +# zstyle ':prezto:module:tmux:iterm' integrate 'yes'