Created
December 23, 2025 18:49
-
-
Save telnet2/affe231f01922b1b0ec28a2702fff0f9 to your computer and use it in GitHub Desktop.
Sorinx theme setup for prezto
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # | |
| # A custom theme based on Sorin that displays git info on the left prompt. | |
| # | |
| # Authors: | |
| # Sorin Ionescu <sorin.ionescu@gmail.com> | |
| # Joohwi Lee (sorinx customization) | |
| # | |
| # Screenshots: | |
| # http://i.imgur.com/nrGV6pg.png | |
| # | |
| # | |
| # 16 Terminal Colors | |
| # -- --------------- | |
| # 0 black | |
| # 1 red | |
| # 2 green | |
| # 3 yellow | |
| # 4 blue | |
| # 5 magenta | |
| # 6 cyan | |
| # 7 white | |
| # 8 bright black | |
| # 9 bright red | |
| # 10 bright green | |
| # 11 bright yellow | |
| # 12 bright blue | |
| # 13 bright magenta | |
| # 14 bright cyan | |
| # 15 bright white | |
| # | |
| # Load dependencies. | |
| pmodload 'helper' | |
| function prompt_sorinx_async_callback { | |
| case $1 in | |
| prompt_sorinx_async_git) | |
| # We can safely split on ':' because it isn't allowed in ref names. | |
| IFS=':' read _git_target _git_post_target <<<"$3" | |
| # The target actually contains 3 space separated possibilities, so we need to | |
| # make sure we grab the first one. | |
| _git_target=$(coalesce ${(@)${(z)_git_target}}) | |
| if [[ -z "$_git_target" ]]; then | |
| # No git target detected, flush the git fragment and redisplay the prompt. | |
| if [[ -n "$_prompt_sorinx_git" ]]; then | |
| _prompt_sorinx_git='' | |
| zle && zle reset-prompt | |
| fi | |
| else | |
| # Git target detected, update the git fragment and redisplay the prompt. | |
| _prompt_sorinx_git=" [${_git_target}${_git_post_target}]" | |
| zle && zle reset-prompt | |
| fi | |
| ;; | |
| "[async]") | |
| # Code is 1 for corrupted worker output and 2 for dead worker. | |
| if [[ $2 -eq 2 ]]; then | |
| # Our worker died unexpectedly. | |
| typeset -g prompt_prezto_async_init=0 | |
| fi | |
| ;; | |
| esac | |
| } | |
| function prompt_sorinx_async_git { | |
| cd -q "$1" | |
| if (( $+functions[git-info] )); then | |
| git-info | |
| print ${git_info[status]} | |
| fi | |
| } | |
| function prompt_sorinx_async_tasks { | |
| # Initialize async worker. This needs to be done here and not in | |
| # prompt_sorinx_setup so the git formatting can be overridden by other prompts. | |
| if (( !${prompt_prezto_async_init:-0} )); then | |
| async_start_worker prompt_sorinx -n | |
| async_register_callback prompt_sorinx prompt_sorinx_async_callback | |
| typeset -g prompt_prezto_async_init=1 | |
| fi | |
| # Kill the old process of slow commands if it is still running. | |
| async_flush_jobs prompt_sorinx | |
| # Compute slow commands in the background. | |
| async_job prompt_sorinx prompt_sorinx_async_git "$PWD" | |
| } | |
| function prompt_sorinx_precmd { | |
| setopt LOCAL_OPTIONS | |
| unsetopt XTRACE KSH_ARRAYS | |
| # Format PWD. | |
| _prompt_sorinx_pwd=$(prompt-pwd) | |
| # Handle updating git data. We also clear the git prompt data if we're in a | |
| # different git root now. | |
| if (( $+functions[git-dir] )); then | |
| local new_git_root="$(git-dir 2> /dev/null)" | |
| if [[ $new_git_root != $_sorinx_cur_git_root ]]; then | |
| _prompt_sorinx_git='' | |
| _sorinx_cur_git_root=$new_git_root | |
| fi | |
| fi | |
| # Run python info (this should be fast and not require any async) | |
| if (( $+functions[python-info] )); then | |
| python-info | |
| fi | |
| prompt_sorinx_async_tasks | |
| } | |
| function prompt_sorinx_setup { | |
| setopt LOCAL_OPTIONS | |
| unsetopt XTRACE KSH_ARRAYS | |
| prompt_opts=(cr percent sp subst) | |
| # Load required functions. | |
| autoload -Uz add-zsh-hook | |
| autoload -Uz async && async | |
| # Add hook for calling git-info before each command. | |
| add-zsh-hook precmd prompt_sorinx_precmd | |
| # Tell prezto we can manage this prompt | |
| zstyle ':prezto:module:prompt' managed 'yes' | |
| # Set editor-info parameters. | |
| zstyle ':prezto:module:editor:info:completing' format '%B%F{7}...%f%b' | |
| zstyle ':prezto:module:editor:info:keymap:primary' format ' %B%F{1}❯%F{3}❯%F{2}❯%f%b' | |
| zstyle ':prezto:module:editor:info:keymap:primary:overwrite' format ' %F{3}♺%f' | |
| zstyle ':prezto:module:editor:info:keymap:alternate' format ' %B%F{2}❮%F{3}❮%F{1}❮%f%b' | |
| # Set git-info parameters. | |
| zstyle ':prezto:module:git:info' verbose 'yes' | |
| zstyle ':prezto:module:git:info:action' format '%F{7}:%f%%B%F{9}%s%f%%b' | |
| zstyle ':prezto:module:git:info:added' format ' %%B%F{2}✚%f%%b' | |
| zstyle ':prezto:module:git:info:ahead' format ' %%B%F{13}⬆%f%%b' | |
| zstyle ':prezto:module:git:info:behind' format ' %%B%F{13}⬇%f%%b' | |
| zstyle ':prezto:module:git:info:branch' format ' %%B%F{2}%b%f%%b' | |
| zstyle ':prezto:module:git:info:commit' format ' %%B%F{3}%.7c%f%%b' | |
| zstyle ':prezto:module:git:info:deleted' format ' %%B%F{1}✖%f%%b' | |
| zstyle ':prezto:module:git:info:modified' format ' %%B%F{4}✱%f%%b' | |
| zstyle ':prezto:module:git:info:position' format ' %%B%F{13}%p%f%%b' | |
| zstyle ':prezto:module:git:info:renamed' format ' %%B%F{5}➜%f%%b' | |
| zstyle ':prezto:module:git:info:stashed' format ' %%B%F{6}✭%f%%b' | |
| zstyle ':prezto:module:git:info:unmerged' format ' %%B%F{3}═%f%%b' | |
| zstyle ':prezto:module:git:info:untracked' format ' %%B%F{7}◼%f%%b' | |
| zstyle ':prezto:module:git:info:keys' format \ | |
| 'status' '%b %p %c:%s%A%B%S%a%d%m%r%U%u' | |
| # Set python-info parameters. | |
| zstyle ':prezto:module:python:info:virtualenv' format '%f%F{3}(%v)%F{7} ' | |
| # Get the async worker set up. | |
| _sorinx_cur_git_root='' | |
| _prompt_sorinx_git='' | |
| _prompt_sorinx_pwd='' | |
| # Set up non-zero return value display | |
| local show_return="✘ " | |
| # Default is to show the return value | |
| if zstyle -T ':prezto:module:prompt' show-return-val; then | |
| show_return+='%? ' | |
| fi | |
| # Define prompts. | |
| # Git info and RPROMPT info are displayed on the left prompt. | |
| # Format: [virtualenv] path [git info] [error] [vim] [overwrite] ❯❯❯ | |
| PROMPT='${python_info[virtualenv]}${SSH_TTY:+"%F{9}%n%f%F{7}@%f%F{3}%m%f "}%F{4}${_prompt_sorinx_pwd}%(!. %B%F{1}#%f%b.)${_prompt_sorinx_git}%(?:: [%F{1}' | |
| PROMPT+=${show_return} | |
| PROMPT+='%f])${VIM:+" [%B%F{6}V%f%b]"}${editor_info[overwrite]:+" [${editor_info[overwrite]}]"}${editor_info[keymap]} ' | |
| RPROMPT='' | |
| SPROMPT='zsh: correct %F{1}%R%f to %F{2}%r%f [nyae]? ' | |
| } | |
| function prompt_sorinx_preview { | |
| local +h PROMPT='' | |
| local +h RPROMPT='' | |
| local +h SPROMPT='' | |
| editor-info 2> /dev/null | |
| prompt_preview_theme 'sorinx' | |
| } | |
| prompt_sorinx_setup "$@" | |
| # vim: ft=zsh |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/bash | |
| # | |
| # Install the sorinx theme for prezto | |
| # | |
| SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" | |
| ZHOME="${ZDOTDIR:-$HOME}/.zprezto" | |
| ZPREZTORC="${ZDOTDIR:-$HOME}/.zpreztorc" | |
| # Check if zprezto is installed | |
| if [ ! -d "${ZHOME}" ]; then | |
| echo "Error: zprezto not found at ${ZHOME}" | |
| exit 1 | |
| fi | |
| # Copy the theme file | |
| echo "Installing sorinx theme..." | |
| cp "${SCRIPT_DIR}/prompt_sorinx_setup" "${ZHOME}/modules/prompt/functions/" | |
| # Update .zpreztorc to use sorinx theme | |
| if [ -f "${ZPREZTORC}" ]; then | |
| if grep -q "theme 'sorin'" "${ZPREZTORC}"; then | |
| echo "Updating .zpreztorc to use sorinx theme..." | |
| sed -i.bak "s/theme 'sorin'/theme 'sorinx'/" "${ZPREZTORC}" | |
| rm -f "${ZPREZTORC}.bak" | |
| elif grep -q "theme 'sorinx'" "${ZPREZTORC}"; then | |
| echo ".zpreztorc already using sorinx theme" | |
| else | |
| echo "Warning: Could not find theme setting in .zpreztorc" | |
| echo "Please manually add: zstyle ':prezto:module:prompt' theme 'sorinx'" | |
| fi | |
| else | |
| echo "Warning: .zpreztorc not found at ${ZPREZTORC}" | |
| fi | |
| echo "Done. Restart your shell or run 'exec zsh' to apply changes." |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment