Last active
April 2, 2020 01:39
-
-
Save onezerodigits/1af72ddc1f1aaf341284d634e8bec748 to your computer and use it in GitHub Desktop.
Minimal prompt layout for 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
# | |
# Nate Theme | |
# a riff of Cobalt2 Theme - https://github.com/wesbos/Cobalt2-iterm | |
# Changes: doesn't use background colors or require powerline fonts | |
# Tested on Mac OS only | |
# I'm using with Operator Mono SSm font and Misterioso iTerm color presets | |
# | |
## | |
### Segment drawing | |
# A few utility functions to make it easy and re-usable to draw segmented prompts | |
CURRENT_BG='NONE' | |
SEGMENT_SEPARATOR='▸︎' | |
# 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%}" | |
# echo $(pwd | sed -e "s,^$HOME,~," | sed "s@\(.\)[^/]*/@\1/@g") | |
# echo $(pwd | sed -e "s,^$HOME,~,") | |
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 | |
# Git: branch/detached head, dirty status | |
prompt_git() { | |
local ref dirty | |
if $(git rev-parse --is-inside-work-tree >/dev/null 2>&1); then | |
ZSH_THEME_GIT_PROMPT_DIRTY='±' | |
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 default yellow | |
else | |
prompt_segment default green | |
fi | |
echo -n "${ref/refs\/heads\// ◎ }$dirty" | |
fi | |
} | |
# Dir: current working directory | |
prompt_dir() { | |
prompt_segment default blue '%3~' | |
} | |
## Main prompt | |
build_prompt() { | |
prompt_dir | |
prompt_git | |
prompt_end | |
} | |
PROMPT='$(build_prompt) ' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment