Add ligatures to any coding font!
This script copies the ligatures (glyphs and rendering information) from Fira Code into any other TrueType or OpenType font. (Note that the ligatures are scale-corrected, but otherwise copied as is from Fira Code; it doesn't create new ligature graphics based on the font you're modifying.)
This repo contains a Fontforge python script that you can use to add the Fira Code ligatures to any font, as well as submodules for some popular coding fonts and another script for ligaturizing all of them at once.
Pre-ligaturized versions are available under releases.
This Repo: You'll need the repo and its submodules, so
git clone with
Using the Fonts: See the FiraCode README for a list of supported editors.
Script: This script requires FontForge python bindings. For Debian/Ubuntu they are available in
python-fontforge package. For OpenSUSE and NixOS, they are included in the
fontforge package. For macOS, they are available via brew (
brew install fontforge).
Using the Script
Use automatic mode to easily convert 1 or more font(s).
- Put the font(s) you want into
ligatures.pyto disable any ligatures you don't want, and/or enable any (non-ligature) characters you want from Fira Code in addition to the ligatures.
build.pyto add your new font(s) to the
prefixed_fontslist. It supports globbing, so if (e.g.) you want to ligaturize all the different weights of FooFont you can add
'FooFont*'to the list.
- Retrieve the ligaturized fonts from
- The output fonts will be renamed with the prefix "Liga".
Move/copy the font you want to ligaturize into
fonts/(or somewhere else convenient).
ligatures.pyto disable any ligatures you don't want.
Run the script:
$ fontforge -lang py -script ligaturize.py path/to/input/font.ttf --output-dir=path/to/output/dir/ \ --output-name='Name of Ligaturized Font'
$ fontforge -lang py -script ligaturize.py fonts/Cousine-Regular.ttf --output-dir='fonts/output/' \ --output-name='Ligaturized Cousine'
Which will produce
The font weight will be inherited from the original file; the font name will be replaced with whatever you specified in
--output-name. You can also use
--prefix instead, in which case the original name will be preserved and whatever you put in
--prefix will be prepended to it.
ligatures.py supports some additional command line options to (e.g.) change which font ligatures are copied from or enable copying of individual character glyphs; run
fontforge -lang=py ligaturize.py --help to list them.
This script was originally written by IlyaSkriblovsky for adding ligatures to DejaVuSans Mono (dv-code-font). Navid Rojiani made a few changes to generalize the script so that it works for any font. ToxicFrog has made a large number of contributions.
Contributions always welcome! Please submit a Pull Request, or create an Issue if you have an idea for a feature/enhancement (or bug).
For more awesome programming fonts with ligatures, check out: