# ------------------------------------------------------------------------------ # FILE: ashleydev.theme.zsh # DESCRIPTION: oh-my-zsh prompt theme, shows vi mode, last shell return code, # and verbose git info. # AUTHOR: Ashley Dev (the.ashley.dev+zsh-theme@gmail.com) # VERSION: 3.0 # SCREENSHOT: http://i.imgur.com/Yw1KG.png # http://i.imgur.com/wx6MU.png # ------------------------------------------------------------------------------ # NOTE: make sure to add 'git' to your list of oh-my-zsh plugins (in your # ~/.zshrc), otherwise the git prompt info will not be shown. #-------------------- Colors ---------------------- # Colors ('_C' for color): if [[ "$DISABLE_COLOR" != "true" ]]; then # Reset formating: local R="%{$terminfo[sgr0]%}" # git prompt info colors: local _Cerror_="%{$fg[yellow]%}" # bad (empty) .git/ directory local _Cbranch_new_repo_="%{$fg_bold[default]%}" # branch color of new repo local _Cbranch_clean_="%{$fg_no_bold[green]%}" # branch color when clean local _Cbranch_dirty_="%{$fg_no_bold[red]%}" # branch color when dirty local _Crebase_="%{$bold_color$fg[yellow]%}" # rebase info local _Cindex_="%{$bold_color$fg[red]%}" # index info local _Cuntracked_clean_="" # untracked files state when clean local _Cuntracked_dirty_="%{$fg_bold[red]%}" # untracked files state when dirty local _Cupstream_="%{${fg[cyan]}%}" # upstream info local _Cstash_="" # stash state # PROMPT colors: local _Cuser_root_="%{$fg_bold[yellow]$bg[red]%}" local _Chost_root_="%{$fg[red]%}" local _Cpath_root_="%{$fg_bold[white]%}" local _Cuser_="%{$fg_bold[cyan]%}" local _Chost_="%{$fg_bold[blue]%}" local _Cpath_="%{$fg_bold[white]%}" local _Cjobs_="%{$fg[blue]%}" # RPROMPT colors: local _Cdate_="%{$fg[green]%}" local _Creturn_code_="%{$fg[red]%}" local _Cvi_mode_="%{$fg_bold[cyan]%}" fi #-------------------- PROMPT definition: ---------------------- # local user_="%(!.$_Cuser_root_.$_Cuser_)%n$R" local host_="%(!.$_Chost_root_.$_Chost_)%m$R" local path_="%(!.$_Cpath_root_.$_Cpath_)%~$R" local jobs_="%(1j.$_Cjobs_%j$R.)" PROMPT='$user_$host_$path_ $GIT_PROMPT_INFO$jobs_# ' local date_format_='%D{%a %b %d}, %*' local date_="${_Cdate_}[$date_format_]$R" local return_code_="%(?..$_Creturn_code_%? ↵ )$R" RPROMPT='$return_code_$date_' # use the vi-mode oh-my-zsh plugin to get this: MODE_INDICATOR="${_Cvi_mode_}-- CMD MODE -- $R" #-------------------- Git prompt info format: ---------------------- git_prompt_info () { local dir_="$(git_prompt__git_dir)" if [ -z "$dir_" ]; then GIT_PROMPT_INFO='' return fi git_prompt__stash local stash_=$GIT_PROMPT_STASH_STATE_DIRTY git_prompt__upstream local upstream_=$GIT_PROMPT_UPSTREAM_STATE git_prompt__branch local branch_=$GIT_PROMPT_BRANCH git_prompt__rebase_info local rebase_=$GIT_PROMPT_REBASE_INFO git_prompt__dirty_state local work_=$GIT_PROMPT_DIRTY_STATE_WORKTREE_DIRTY local index_=$GIT_PROMPT_DIRTY_STATE_INDEX_DIRTY local untracked_=$GIT_PROMPT_DIRTY_STATE_WORKTREE_UNTRACKED local freshy_=$GIT_PROMPT_DIRTY_STATE_FRESH_REPO if [ -z "$branch_$index_$work_$untracked_" ]; then if [ -n "$dir_" ]; then GIT_PROMPT_INFO="$R$_Cerror_(Error: bad ./$dir_ dir)$R" return fi fi if [ "$stash_" = 'yes' ]; then stash_="$_Cstash_\$$R" else stash_="" fi if [ -n "$upstream_" ]; then upstream_="$_Cupstream_$upstream_$R" fi if [ "$index_" = "yes" ]; then index_="$_Cindex_+$R" else index_="" fi if [ -n "$branch_" ]; then if [ "$freshy_" = "yes" ]; then # this is a fresh repo, nothing here... branch_="$_Cbranch_new_repo_$branch_$R" elif [ "$work_" = 'yes' ]; then branch_="$_Cbranch_dirty_$branch_$R" elif [ "$work_" = 'no' ]; then branch_="$_Cbranch_clean_$branch_$R" fi fi if [ -n "$rebase_" ]; then rebase_="$_Crebase_$rebase_$R" fi local _prompt="$branch_$rebase_$index_$stash_$upstream_" # add ( ) around _prompt: if [ "$untracked_" = "yes" ]; then _prompt="$_Cuntracked_dirty_($_prompt$_Cuntracked_dirty_)" elif [ "$untracked_" = "no" ]; then _prompt="$_Cuntracked_clean_($_prompt$_Cuntracked_clean_)" else _prompt="($_prompt)" fi GIT_PROMPT_INFO="$R$_prompt$R" }