Intro

There is a font that I’m currently obsessed with: Berkeley Mono Font. Berkeley Mono is a great and aesthetic font for software engineers. As they claimed:

“By software engineers, for software engineers.”

Berkeley Mono Font

You can check it out here https://neil.computer/notes/introducing-berkeley-mono and here https://berkeleygraphics.com/typefaces/berkeley-mono.

Problem

However there is a problem: I can’t use this font in my IDE since there is a no icons (devicons, codicons etc.) comes by default.

Berkeley Mono Font

As you can see there are only ugly bold colorful columns instead of icons.

Solution

The solution is manually patching Berkeley Mono Font with Nerds Fonts Patcher to add these icons.

Nerd Fonts adds ~9K icons after patching.

Nerd Fonts Icons

You can customize these icon list with flags from patch script.

Patch

There are a lot methods to patch fonts, but I’m going to use docker way.

General command for patching from docker is:

$ docker run --rm -v /path/to/fonts:/in -v /path/for/output:/out nerdfonts/patcher [OPTIONS]

You can see all OPTIONS here:

OPTIONS
usage: font-patcher [-h] [-v] [-s] [-l] [-q] [-w] [-c] [--careful]
                    [--removeligs] [--postprocess [POSTPROCESS]]
                    [--configfile [CONFIGFILE]] [--custom [CUSTOM]]
                    [-ext [EXTENSION]] [-out [OUTPUTDIR]]
                    [--glyphdir [GLYPHDIR]] [--makegroups]
                    [--variable-width-glyphs]
                    [--progressbars | --no-progressbars] [--also-windows]
                    [--fontawesome] [--fontawesomeextension] [--fontlogos]
                    [--octicons] [--codicons] [--powersymbols] [--pomicons]
                    [--powerline] [--powerlineextra] [--material] [--weather]
                    font

Nerd Fonts Font Patcher: patches a given font with programming and development related glyphs

* Website: https://www.nerdfonts.com
* Version: 2.2.2
* Development Website: https://github.com/ryanoasis/nerd-fonts
* Changelog: https://github.com/ryanoasis/nerd-fonts/blob/-/changelog.md

positional arguments:
  font                  The path to the font to patch (e.g., Inconsolata.otf)

options:
  -h, --help            show this help message and exit
  -v, --version         show program's version number and exit
  -s, --mono, --use-single-width-glyphs
                        Whether to generate the glyphs as single-width not double-width (default is double-width)
  -l, --adjust-line-height
                        Whether to adjust line heights (attempt to center powerline separators more evenly)
  -q, --quiet, --shutup
                        Do not generate verbose output
  -w, --windows         Limit the internal font name to 31 characters (for Windows compatibility)
  -c, --complete        Add all available Glyphs
  --careful             Do not overwrite existing glyphs if detected
  --removeligs, --removeligatures
                        Removes ligatures specificed in JSON configuration file
  --postprocess [POSTPROCESS]
                        Specify a Script for Post Processing
  --configfile [CONFIGFILE]
                        Specify a file path for JSON configuration file (see sample: src/config.sample.json)
  --custom [CUSTOM]     Specify a custom symbol font. All new glyphs will be copied, with no scaling applied.
  -ext [EXTENSION], --extension [EXTENSION]
                        Change font file type to create (e.g., ttf, otf)
  -out [OUTPUTDIR], --outputdir [OUTPUTDIR]
                        The directory to output the patched font file to
  --glyphdir [GLYPHDIR]
                        Path to glyphs to be used for patching
  --makegroups          Use alternative method to name patched fonts (experimental)
  --variable-width-glyphs
                        Do not adjust advance width (no "overhang")
  --progressbars        Show percentage completion progress bars per Glyph Set
  --no-progressbars     Don't show percentage completion progress bars per Glyph Set
  --also-windows        Create two fonts, the normal and the --windows version

Symbol Fonts:
  --fontawesome         Add Font Awesome Glyphs (http://fontawesome.io/)
  --fontawesomeextension
                        Add Font Awesome Extension Glyphs (https://andrelzgava.github.io/font-awesome-extension/)
  --fontlogos, --fontlinux
                        Add Font Logos Glyphs (https://github.com/Lukas-W/font-logos)
  --octicons            Add Octicons Glyphs (https://octicons.github.com)
  --codicons            Add Codicons Glyphs (https://github.com/microsoft/vscode-codicons)
  --powersymbols        Add IEC Power Symbols (https://unicodepowersymbol.com/)
  --pomicons            Add Pomicon Glyphs (https://github.com/gabrielelana/pomicons)
  --powerline           Add Powerline Glyphs
  --powerlineextra      Add Powerline Glyphs (https://github.com/ryanoasis/powerline-extra-symbols)
  --material, --materialdesignicons, --mdi
                        Add Material Design Icons (https://github.com/templarian/MaterialDesign)
  --weather, --weathericons
                        Add Weather Icons (https://github.com/erikflowers/weather-icons)

Note

If you don’t add any flag/option, you’d probably not get the desired icons. This was the case I was pondering and trying to solve for a while.

Info

  • My nerdfonts/patcher image hash is 97a878c9721e934d02802e9eaa14b593d49b90bdf52585e0def2fe7f1a75f014.
  • Patch script version is 2.2.2

In order to get all icons run below command:

docker run --rm \
	-v /tmp/berkeley-mono/origin:/in \
	-v /tmp/berkeley-mono/patched:/out \
	nerdfonts/patcher \
	--progressbars \
	--mono \
	--adjust-line-height \
    --fontawesome \
    --fontawesomeextension \
    --fontlogos \
    --octicons \
    --codicons \
    --powersymbols \
    --pomicons \
    --powerline \
    --powerlineextra \
    --material \
    --weather

Don’t forget to modify the paths according to your current ones.

After the command completed, copy patched fonts into your OS’s font directory.

If MacOS, it’s ~/Library/Fonts:

$ cp /tmp/berkeley-mono/patched/*.ttf ~/Library/Fonts

If it’s Debian/Ubuntu, use local directory ${XDG_DATA_HOME}/fonts.

# $XDG_DATA_HOME is ~/.local/share
# More info: https://wiki.archlinux.org/title/XDG_Base_Directory
$ cp /tmp/berkeley-mono/patched/*.ttf ${XDG_DATA_HOME}/fonts

# Reset/Rebuild the font cache
$ fc-cache -f -v

Info

You may see over the internet the local font directory is ~/.fonts. However for newer versions of OS you can place them under ~/.local/share/fonts. I don’t want polluted ~/ - $HOME directory.

If you want the font system-wide available, use the global font directory which is /usr/local/share/font.

If it’s Windows -hell no, I don’t know :)

The final version of patched Berkeley Mono font should look like below:

Berkeley Mono Patched Font

Now it’s completely great font for developing.

All done!