Custom colors in oh-my-zsh themes
So, I was trying to configure my custom zsh theme. I wanted something minimal like displaying the current user, a shortened path and the git info of a directory (if there is).
After a few hours of tinkering, I pretty much got what I wanted but the only thing I didn't like was the colors available.
I wasn't sure which file to look for that contains the fg_bold
and fg
.
I did try doing a ripgrep: rg fg_bold
hoping that I would find a list of available colors. But all I found were .zsh-theme
files that were using a fixed set of colors. Magenta, green, blue, yellow, cyan were the ones I found.
I wasn't satisfied with the colors available and I did some trial and error by doing $fg_bold[orange]
, $fg[pink]
, etc. But I had no luck.
I did some google search about defining custom colors in zsh and it led me to this GitHub issue: https://github.com/ohmyzsh/ohmyzsh/issues/1101#issuecomment-5450278
It seems that oh-my-zsh uses Spectrum
under the hood. The source code can be found under ~/.oh-my-zsh/lib/spectrum.zsh
.
Upon checking the source code, I tried running spectrum_ls
on my terminal and I was amazed by the output :asto
I can now use custom colors on my custom zsh theme via $FG[<0-255>]
e.g. $FG[021]
So, that's it! I just wanted to share how I managed to define custom colors in my zsh setup.
I mainly use Python and Javascript so I did add a few customizations like displaying the node and python version of the current environment.
I made a minimal version of the theme I was working on for those who might be interested: https://github.com/yujinyuz/dotfiles/blob/master/zsh/themes/jpro-minimal.zsh-theme
You can check out the documentation on adding themes to oh-my-zsh: https://github.com/ohmyzsh/ohmyzsh/wiki/Customization#overriding-and-adding-themes
Thanks for reading! It was a great experience writing my first article here on dev.to after being a member for about 2 years now 😅
Top comments (9)
Thanks for the tip! How can I make a custom color bold? I tried it with
$FG_BOLD[<#>]
but it doesn't seem to work.try
%{$fg_bold[blue]%}
You can do it as follows:
%B$FG[<#>]
Nice! is there a way I can use this to costumize the Git coloring?
Are you talking about the ones in ~/.gitconfig ? I think you could use It
no I meant the theme colors used by oh-my-zsh when working on git stuff. but in the meantime I finally found the answers :) you can change that in the theme or in .zshrc with the following values (in my case of using powerlevel9k) and edit the color numbers(which are also using the spectrum color schemes):
POWERLEVEL9K_VCS_CLEAN_BACKGROUND=2
POWERLEVEL9K_VCS_MODIFIED_BACKGROUND=3
POWERLEVEL9K_VCS_UNTRACKED_BACKGROUND=2
POWERLEVEL9K_VCS_CONFLICTED_BACKGROUND=3
POWERLEVEL9K_VCS_LOADING_BACKGROUND=8
That's awesome! Others might find this useful. Thanks for sharing that as well :)
no problem :)
Thank you very much for the tips.