Clean, modular ZSH theme
Blox is a minimal and fast ZSH theme that shows you what you need. It consists of blocks, and you can play with the order and change everything; it comes with some pre-defined blocks, but you can create your own or even modify them.
This theme was tested on all the following methods, but it should be compatible with almost every zsh framework / plugin manager.
Simply add the following into your ~/.zshrc
antigen bundle yardnsm/blox-zsh-theme
zgen load yardnsm/blox-zsh-theme
antibody bundle yardnsm/blox-zsh-theme
- Symlink (or copy)
blox.zsh
to~/.oh-my-zsh/custom/themes/blox.zsh-theme
. - Set
ZSH_THEME="blox"
in your.zshrc
file.
-
Get the file
blox.zsh
; Either:- Clone this repo
- ... or add it as a submodule.
- Just download
blox.zsh
.
-
source
it in your~/.zshrc
:source PATH_FOR_BLOX.zsh
The main idea of this theme is dividing the prompt into blocks. The blocks are modular and they could be arranged and modified. Each block has its options, which can also be customized. In addition, each block has its own helper function so you can use them when you're building your own blocks.
The following sections describe the built-in blocks and their customizing options.
Variable | Default | Meaning |
---|---|---|
BLOX_CONF__BLOCK_PREFIX |
'[' |
A block's prefix. Some blocks may use it. |
BLOX_CONF__BLOCK_SUFFIX |
']' |
A block's suffix. Some blocks may use it. |
BLOX_CONF__BLOCK_SEPARATOR |
' ' |
The character used to separate blocks. |
BLOX_CONF__PROMPT_PREFIX |
'\n' |
The prompt's prefix (the default adds a newline between prompts). |
BLOX_CONF__ONELINE |
false |
When setting to true , the lower segments will be disabled |
BLOX_CONF__UNIFIED_PROMPT |
false |
Set the to true , the entire rendered result will be assigned to $PROMPT . Otherwise, it'll render the upper segments separately (we recommend leaving it as false as it may solve some resizing issue, see #2) |
Displays the current working directory.
Variable | Default | Meaning |
---|---|---|
BLOX_BLOCK__CWD_COLOR |
'blue' |
This block's color |
BLOX_BLOCK__CWD_TRUNC |
3 |
Number of folders of cwd to show in prompt (0 to show all) |
The prompt's symbol.
Variable | Default | Meaning |
---|---|---|
BLOX_BLOCK__SYMBOL_COLOR |
'cyan' |
The symbol's color |
BLOX_BLOCK__SYMBOL_EXIT_COLOR |
'red' |
The symbol's color when last command didn't exit with 0 |
BLOX_BLOCK__SYMBOL_SYMBOL |
'❯' |
The symbol |
BLOX_BLOCK__SYMBOL_EXIT_SYMBOL |
'❯' |
The symbol when last command didn't exit with 0 |
BLOX_BLOCK__SYMBOL_ALTERNATE |
'◇' |
Alternate symbol (used as PROMPT2 ) |
Shows git info.
Variable | Default | Meaning |
---|---|---|
BLOX_BLOCK__GIT_BRANCH_COLOR |
'242' (grey) |
Branch name color |
BLOX_BLOCK__GIT_COMMIT_SHOW |
true |
Show the commit hash |
BLOX_BLOCK__GIT_COMMIT_COLOR |
'magenta' |
Commit hash color |
BLOX_BLOCK__GIT_CLEAN_COLOR |
'green' |
Clean branch indicator color |
BLOX_BLOCK__GIT_CLEAN_SYMBOL |
'✔︎' |
Clean branch indicator symbol |
BLOX_BLOCK__GIT_DIRTY_COLOR |
'red' |
Dirty branch indicator color |
BLOX_BLOCK__GIT_DIRTY_SYMBOL |
'✘' |
Dirty branch indicator symbol |
BLOX_BLOCK__GIT_STASHED_COLOR |
'cyan' |
Stashed files indicator color |
BLOX_BLOCK__GIT_STASHED_SYMBOL |
'\$' |
Stashed files indicator symbol |
BLOX_BLOCK__GIT_UNPULLED_COLOR |
'red' |
Behind of remote indicator color |
BLOX_BLOCK__GIT_UNPULLED_SYMBOL |
'⇣' |
Behind of remote indicator symbol |
BLOX_BLOCK__GIT_UNPUSHED_COLOR |
'blue' |
Ahead of remote indicator color |
BLOX_BLOCK__GIT_UNPUSHED_SYMBOL |
'⇡' |
Ahead of remote indicator symbol |
Shows host info (user@machine).
Variable | Default | Meaning |
---|---|---|
BLOX_BLOCK__HOST_USER_SHOW_ALWAYS |
false |
If false, the username will be shown only if $LOGNAME is different from the current logged user. |
BLOX_BLOCK__HOST_USER_COLOR |
'yellow' |
User info color |
BLOX_BLOCK__HOST_USER_ROOT_COLOR |
'red' |
The color to show when the logged user is root. |
BLOX_BLOCK__HOST_MACHINE_SHOW_ALWAYS |
false |
If false, the working machine name is shown only in SSH session. |
BLOX_BLOCK__HOST_MACHINE_COLOR |
'cyan' |
The machine name color |
Shows indicator if there are background jobs running.
Variable | Default | Meaning |
---|---|---|
BLOX_BLOCK__BGJOBS_SYMBOL |
'*' |
The indicator to show |
BLOX_BLOCK__BGJOBS_COLOR |
'magenta' |
The block's color |
Shows the time in HH:mm
format
Variable | Default | Meaning |
---|---|---|
BLOX_BLOCK__TIME_COLOR |
'white' |
The block's color |
Shows nodejs version if there is a package.json
file in the working directory.
Variable | Default | Meaning |
---|---|---|
BLOX_BLOCK__NODEJS_SYMBOL |
'⬢' |
The indicator to show |
BLOX_BLOCK__NODEJS_COLOR |
'green' |
The block's color |
Display the python version being used by pyenv.
Variable | Default | Meaning |
---|---|---|
BLOX_BLOCK__PYENV_COLOR |
'green' |
The block's color |
Display the name of the currently used virtualenv.
Variable | Default | Meaning |
---|---|---|
BLOX_BLOCK__VIRTUALENV_COLOR |
'green' |
The block's color |
Display the last command's execute time.
Variable | Default | Meaning |
---|---|---|
BLOX_BLOCK__EXEC_TIME_MIN_ELAPSED |
5 |
The minimum number of seconds for showing the block |
BLOX_BLOCK__EXEC_TIME_PERSIST |
false |
If enabled, the timestamp wont be cleared up until next execution. Can be useful when needed to re-draw the prompt. |
BLOX_BLOCK__EXEC_TIME_COLOR |
'yellow' |
The block's color |
Displays the current AWS profile (from the $AWS_PROFILE
env variable).
Variable | Default | Meaning |
---|---|---|
BLOX_BLOCK__AWSPROFILE_COLOR |
'172' (orange) |
This block's color |
The prompt consists of 4 segments: upper left, upper right, lower left and lower right. You can set the value of each segment by simply change it's value. The value of a segment is an array of strings representing the block's name.
BLOX_CONF__ONELINE
. This will disable the lower segments!
Variable | Default |
---|---|
BLOX_SEG__UPPER_LEFT |
( host cwd git exec_time ) |
BLOX_SEG__UPPER_RIGHT |
( bgjobs nodejs pyenv virtualenv time ) |
BLOX_SEG__LOWER_LEFT |
( symbol ) |
BLOX_SEG__LOWER_RIGHT |
( ) |
A block is just a simple function that echo
s the result. Some built-in blocks have their own helper
functions you can use when building your blocks (check the source code for more info).
The function name should match the naming convention of blox_block__<name>
. For example:
function blox_block__helloworld() {
echo "${BLOX_CONF__BLOCK_PREFIX}hello world${BLOX_CONF__BLOCK_SUFFIX}"
}
And add the block to the prompt:
BLOX_SEG__LOWER_RIGHT+=( helloworld )
Now you have a "hello world" block in the lower right segment of your prompt! So useful.
$fg[...]
) within %{…%}
(see this link for
more details). If the error is consistent, you can adjust the spacing:
Variable | Default | Meaning |
---|---|---|
BLOX_SEG__ADJUST_SPACING_WIDTH |
0 |
Will be subtracted from the calculated spacing length |
MIT © Yarden Sod-Moriah