Skip to content

Instantly share code, notes, and snippets.

@timchenkomo
Forked from meritt/meritt.zsh-theme
Created November 29, 2020 09:28
Show Gist options
  • Select an option

  • Save timchenkomo/0399e76a3b57de9de5bd179990225a11 to your computer and use it in GitHub Desktop.

Select an option

Save timchenkomo/0399e76a3b57de9de5bd179990225a11 to your computer and use it in GitHub Desktop.

Revisions

  1. @meritt meritt revised this gist Apr 8, 2015. No changes.
  2. @meritt meritt revised this gist Apr 8, 2015. No changes.
  3. @meritt meritt created this gist Apr 8, 2015.
    141 changes: 141 additions & 0 deletions meritt.zsh-theme
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,141 @@
    # vim:ft=zsh ts=2 sw=2 sts=2
    #
    # Based on Agnoster's Theme — https://gist.github.com/3712874
    # A Powerline-inspired theme for ZSH
    #
    # [Powerline-patched font](https://github.com/Lokaltog/powerline-fonts)
    # [Solarized theme](https://github.com/altercation/solarized/)
    # [iTerm 2](http://www.iterm2.com/)

    ### Segment drawing
    # A few utility functions to make it easy and re-usable to draw segmented prompts

    CURRENT_BG='NONE'
    SEGMENT_SEPARATOR=''

    RESET="%{$reset_color%}"
    SOLAR_YELLOW="$FG[136]"
    SOLAR_ORANGE="$FG[166]"
    SOLAR_GREEN="$FG[064]"
    SOLAR_WHITE="$FG[254]"

    ZSH_THEME_NVM_PROMPT_PREFIX=""
    ZSH_THEME_NVM_PROMPT_SUFFIX=""

    # Begin a segment
    # Takes two arguments, background and foreground. Both can be omitted,
    # rendering default background/foreground.
    prompt_segment() {
    local bg fg
    [[ -n $1 ]] && bg="%K{$1}" || bg="%k"
    [[ -n $2 ]] && fg="%F{$2}" || fg="%f"
    if [[ $CURRENT_BG != 'NONE' && $1 != $CURRENT_BG ]]; then
    echo -n " %{$bg%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR%{$fg%} "
    else
    echo -n "%{$bg%}%{$fg%} "
    fi
    CURRENT_BG=$1
    [[ -n $3 ]] && echo -n $3
    }

    # End the prompt, closing any open segments
    prompt_end() {
    if [[ -n $CURRENT_BG ]]; then
    echo -n " %{%k%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR"
    else
    echo -n "%{%k%}"
    fi
    echo -n "%{%f%}"
    CURRENT_BG=''
    }

    ### Prompt components
    # Each component will draw itself, and hide itself if no information needs to be shown

    # Context: user@hostname (who am I and where am I)
    prompt_context() {
    local user=`whoami`

    if [[ "$user" != "$DEFAULT_USER" || -n "$SSH_CLIENT" ]]; then
    prompt_segment black default "%(!.%{%F{yellow}%}.)$SOLAR_ORANGE$user$SOLAR_WHITE@$SOLAR_YELLOW%m"
    fi
    }

    # Git: branch/detached head, dirty status
    prompt_git() {
    local ref dirty mode repo_path
    repo_path=$(git rev-parse --git-dir 2>/dev/null)

    if $(git rev-parse --is-inside-work-tree >/dev/null 2>&1); then
    dirty=$(parse_git_dirty)
    ref=$(git symbolic-ref HEAD 2> /dev/null) || ref="$(git show-ref --head -s --abbrev |head -n1 2> /dev/null)"
    if [[ -n $dirty ]]; then
    prompt_segment yellow black
    else
    prompt_segment green black
    fi

    if [[ -e "${repo_path}/BISECT_LOG" ]]; then
    mode=" <B>"
    elif [[ -e "${repo_path}/MERGE_HEAD" ]]; then
    mode=" >M<"
    elif [[ -e "${repo_path}/rebase" || -e "${repo_path}/rebase-apply" || -e "${repo_path}/rebase-merge" || -e "${repo_path}/../.dotest" ]]; then
    mode=" >R>"
    fi

    setopt promptsubst
    autoload -Uz vcs_info

    zstyle ':vcs_info:*' enable git
    zstyle ':vcs_info:*' get-revision true
    zstyle ':vcs_info:*' check-for-changes true
    zstyle ':vcs_info:*' stagedstr ''
    zstyle ':vcs_info:git:*' unstagedstr ''
    zstyle ':vcs_info:*' formats ' %u%c'
    zstyle ':vcs_info:*' actionformats ' %u%c'
    vcs_info
    echo -n "${ref/refs\/heads\// }${vcs_info_msg_0_%% }${mode}"
    fi
    }

    # Dir: current working directory
    prompt_dir() {
    prompt_segment blue black '%~'
    }

    # Virtualenv: current working virtualenv
    prompt_virtualenv() {
    local virtualenv_path="$VIRTUAL_ENV"
    if [[ -n $virtualenv_path && -n $VIRTUAL_ENV_DISABLE_PROMPT ]]; then
    prompt_segment blue black "(`basename $virtualenv_path`)"
    fi
    }

    # Status:
    # - was there an error
    # - am I root
    # - are there background jobs?
    prompt_status() {
    local symbols
    symbols=()
    [[ $RETVAL -ne 0 ]] && symbols+="%{%F{red}%}✘"
    [[ $UID -eq 0 ]] && symbols+="%{%F{yellow}%}⚡"
    [[ $(jobs -l | wc -l) -gt 0 ]] && symbols+="%{%F{cyan}%}⚙"

    [[ -n "$symbols" ]] && prompt_segment black default "$symbols"
    }

    ## Main prompt
    build_prompt() {
    RETVAL=$?
    prompt_status
    prompt_virtualenv
    prompt_context
    prompt_dir
    prompt_git
    prompt_end
    }

    PROMPT="%{%f%b%k%}$(build_prompt) "

    RPROMPT='$SOLAR_GREEN$(nvm_prompt_info)$RESET'