Awesome MySQL Shell Prompt
A month ago, I wrote a blog on how you can configure the MySQL Shell prompt to suit your needs. One thing I did not go into details with are the prompt templates prompt_256pl.json
and prompt_256pl+aw.json
. Common for both of these templates is that they require custom fonts to work.
In the two file names, pl stands for the PowerLine fonts and aw for the Awesome font. These fonts add symbols that are useful to create rich prompts, not only for MySQL Shell, but also for Bash, zsh, vim, etc. The symbols include an angle separator, a lock (that in MySQL Shell is used to symbolize an TLS/SSL connection), and so on.
This blog will show you how to install the necessary fonts to get an awesome MySQL Shell prompt on Oracle Linux 7, Red Hat Enterprise Linux (RHEL) 7, and CentOS 7. For other Linux distributions, the steps are the same or similar.
Specifying the Prompt Template
Before diving into installing the necessary fonts, let's recall from the previous blog, how you choose how the prompt should look. Two ways to specify the prompt are:
- Set the
MYSQLSH_PROMPT_THEME
environment variable to the path to the file with the required template. For theprompt_256pl+aw.json
template using the el7 MySQL Shell RPM, the full path is/usr/share/mysqlsh/prompt/prompt_256pl+aw.json
. This method is useful while testing. - Copy the
prompt_256pl+aw.json
file to~/.mysqlsh/prompt.json
. This way MySQL Shell will automatically pick up the new prompt definition. This is very useful when you have decided on your preferred prompt.
Awesome Terminal Fonts
If you want to use the prompt_256pl+aw.json
template, then you will need to install the awesome font. One option is to use the patching-strategy branch of gabrielelana's awesome-terminal-fonts project on GitHub. The steps to install the required font for the user are:
shell$ git clone https://github.com/gabrielelana/awesome-terminal-fonts.git
Cloning into 'awesome-terminal-fonts'...
remote: Counting objects: 329, done.
remote: Total 329 (delta 0), reused 0 (delta 0), pack-reused 329
Receiving objects: 100% (329/329), 2.77 MiB | 1.12 MiB/s, done.
Resolving deltas: 100% (186/186), done.
shell$ cd awesome-terminal-fonts
shell$ git checkout patching-strategy
Branch patching-strategy set up to track remote branch patching-strategy from origin.
Switched to a new branch 'patching-strategy'
shell$ mkdir -p ~/.local/share/fonts/
shell$ cp patched/SourceCodePro+Powerline+Awesome+Regular.* ~/.local/share/fonts/
shell$ fc-cache -fv ~/.local/share/fonts/
/home/myuser/.local/share/fonts: caching, new cache contents: 1 fonts, 0 dirs
/home/myuser/.local/share/fonts: caching, new cache contents: 1 fonts, 0 dirs
/var/cache/fontconfig: not cleaning unwritable cache directory
/home/myuser/.cache/fontconfig: cleaning cache directory
/home/myuser/.fontconfig: not cleaning non-existent cache directory
fc-cache: succeeded
This installs just the font required for MySQL Shell. You can however choose to install all of the fonts if you like.
It is necessary to restart the desktop environment for the fonts to be available. The resulting prompt (when logged in a default schema has been set) looks like:
Personally I am not entirely keen on how the separator looks, so I install another font to replace the separator.
Powerline Font
The Powerline fonts serve a similar purpose as the awesome font, but they are missing some of the symbols used by the prompt_256pl+aw.json
template. It does however include the separator used by the template, and I personally prefer it over the Awesome Terminal Font separator. If you choose the prompt_256pl.json
template, you can just install the Powerline Fonts and skip the Awesome Terminal Font.
The installation instructions in the manual are quite good. However, they assume you want to use the fonts for more than just MySQL Shell. For MySQL Shell the following steps are enough:
shell$ wget --directory-prefix="${HOME}/.local/share/fonts" \
https://github.com/powerline/powerline/raw/develop/font/PowerlineSymbols.otf
...
2018-09-03 20:40:31 (6.51 MB/s) - ‘/home/myuser/.local/share/fonts/PowerlineSymbols.otf’ saved [2264/2264]
shell$ fc-cache -vf ~/.local/share/fonts/
/home/myuser/.local/share/fonts: caching, new cache contents: 2 fonts, 0 dirs
/home/myuser/.local/share/fonts: caching, new cache contents: 2 fonts, 0 dirs
/var/cache/fontconfig: not cleaning unwritable cache directory
/home/myuser/.cache/fontconfig: cleaning cache directory
/home/myuser/.fontconfig: not cleaning non-existent cache directory
fc-cache: succeeded
shell$ wget --directory-prefix="${HOME}/.config/fontconfig/conf.d" \
https://github.com/powerline/powerline/raw/develop/font/10-powerline-symbols.conf
...
2018-09-03 20:41:45 (5.87 MB/s) - ‘/home/myuser/.config/fontconfig/conf.d/10-powerline-symbols.conf’ saved [2713/2713]
After restarting the desktop environment, the prompt looks like this:
Fantasque Awesome Powerline
A third option is the Fantasque Awesome Powerline fonts which as the name suggest include all the fonts needed for the prompt_256pl+aw.json
template.
The steps to install the Fantasque Awesome Powerline fonts are familiar by now. The fonts can be downloaded using the ztomer's GitHub repository and installed using the fc-cache
command:
shell$ git clone https://github.com/ztomer/fantasque_awesome_powerline.git
Cloning into 'fantasque_awesome_powerline'...
remote: Counting objects: 10, done.
remote: Total 10 (delta 0), reused 0 (delta 0), pack-reused 9
Unpacking objects: 100% (10/10), done.
shell$ cd fantasque_awesome_powerline
shell$ mkdir -p ~/.local/share/fonts
shell$ cp *.ttf ~/.local/share/fonts/
shell$ fc-cache -fv ~/.local/share/fonts/
/home/myuser/.local/share/fonts: caching, new cache contents: 3 fonts, 0 dirs
/home/myuser/.local/share/fonts: caching, new cache contents: 3 fonts, 0 dirs
/var/cache/fontconfig: not cleaning unwritable cache directory
/home/myuser/.cache/fontconfig: cleaning cache directory
/home/myuser/.fontconfig: not cleaning non-existent cache directory
fc-cache: succeeded
Then restart and the font is ready. The resulting prompt is very similar to the previous and is arguable simpler to install as it is just one source:
You can of course also choose to play with the other symbols in the Powerline and Awesome Terminal fonts and make your own custom MySQL Shell prompt configuration file. Whichever is your preferred prompt, have fun playing with it.
0 Comments on “Awesome MySQL Shell Prompt”