A bitmap programming font optimized for coziness.
Cozette is a 6x13px (bounding box; average 5px character width, 3px descent, 10px ascent, 8px cap height) bitmap font based on Dina, which itself is based on Proggy. It's also heavily inspired by Creep. I absolutely adore Creep, and was using it up until I got a higher-DPI screen for which it was slightly too small. That prompted me to make the bitmap font I always wished existed: Cozette; a small-but-not-tiny bitmap font with great coverage of all the glyphs you might encounter in the terminal:
I'm intentionally putting the emphasis on "you" - although Cozette already has all the glyphs I've seen in my CLI tools so far, you might find it's missing a glyph you wish it had. If that's the case, please file an issue! It's an important goal for Cozette to be a useful bitmap alternative to Nerd Fonts.
A nicer character map that includes the codepoints can be found at the bottom of this README!
Cozette is distributed in three main variants: normal and hi-dpi (upscaled 2x) bitmaps
(.bdf
, .otb
, .psf
, and .fnt
), and vectors (.ttf
).
Font scaling varies wildly from system to system, and sometimes even from
program to program and font format to format. On my system (Linux), cozette.otb
looks right at 13pts; cozette_hidpi.otb
looks right at 26pts and downscales
quite elegantly to 10pts; CozetteVector
doesn't look right at any size (technically,
it will look right specifically at 9.4pts on a 100dpi screen on Linux, but pixel-perfect
bitmap fonts are a massive headache, treated differently by every OS, that I'm not quite sure how to solve)
Bitmap fonts are, effectively, just that - bitmaps. They scale terribly, but look nice and sharp (and pixel-perfect) at one specific point size. Vector fonts scale well, but in this case, might look ugly at smaller point sizes because of antialiasing issues and the like.
The vector formats (CozetteVector
) are provided as a compatibility feature.
Rendering of vectorized bitmap-like fonts is terrible on virtually all operating systems.
If Cozette looks awful on your system, you probably have a vector version.
Please use the bitmap formats (.otb
) if you can.
Issues with vector formats will almost certainly not be fixed or addressed; Cozette is a bitmap font first and foremost, and building a bitmap font that builds from a single source and looks good both in its intended, bitmap font as well as as the auto-vectorized format, on every OS, seems to be an unsolved problem.
The preferred format is .otb
(for bitmaps) or .ttf
(for CozetteVector). To install the font, just throw it in your fonts directory
(you probably want to follow your distro's instructions). On Ubuntu you might need to
specifically enable bitmap fonts.
If you're on Arch, ifreund made an AUR package for the .otb! Install it using your AUR helper of choice:
$ yay -S cozette-otb
Or, if you're not using an AUR helper:
$ git clone https://aur.archlinux.org/cozette-otb.git
$ cd cozette-otb
$ makepkg -si
Download the .dfont
and install it with Font Book .app
. Both the bitmap
Cozette.dfont
and the vector CozetteVector.dfont
should work.
Grab CozetteVector.ttf
. If you want to get the bitmap versions to work,
follow the instructions from here.
laxul made a port for the .otb
!
pkg install cozette
cd /usr/ports/x11-fonts/cozette; make install clean
You know what you're doing.
dmenu
(and reportedly some other applications, like urxvt
) seems slightly
fucky when it comes to dealing with font spacing. I cannot tell if this is an
issue with Cozette specifically or with the font rendering in those
applications, but they seem to pull the font spacing from your system's default
monospace font for whatever reason. If setting Cozette as your system default
is not an option (I don't recommend it, a lot of applications have problems
with bitmap fonts), try using Cozette-<size>
as the font name, ie.
Cozette-8
.
VSCode and a lot of other GUI applications don't support bitmap fonts, so you will want to use CozetteVector there. In applications that do support bitmap fonts, you will want to use the normal, bitmap Cozette (unless it's too small for you, in which case, CozetteVector scales better).
4e554c4c made an AUR package for kitty
patched to support bitmap fonts.
if you like bitmap fonts, kitty is not for you.
According to its author, kitty
doesn't, and never will, support bitmap fonts.
If you really want to get Cozette working, you can try the AUR package mentioned above, or apply the patch there yourself.
If that doesn't work, you can try the trick from here; if you
explicitly set Cozette(Vector)'s spacing
to 100, and scalable
to true
in fontconfig
, kitty
should accept it.
You can also make Cozette work flawlessly by uninstalling kitty
and using a terminal emulator for which not rendering fonts isn't a design principle - I cannot recommend alacritty enough. it's excellent, has worked flawlessly for me for quite some time, and both configuring and getting bitmap fonts to work in it is a breeze.
(The support was discussed in slavfox/Cozette#18. Many thanks to all the participants there, especially to to Luflosi, who brought up flipping the allow_bitmapped_fonts
flag in their fork, and to 4e554c4c, who made the AUR package.)
Check the CHANGELOG for the latest news!
Here's where Cozette is so far, in the rough order the features are going to be implemented:
characters.png
up to
date)POWERLEVEL9K_MODE
to nerdfont-complete
)Cozette is, intentionally, a very small font. If neither the base nor the HiDpi version fit your needs, you might want to look at some other bitmap fonts with extra glyphs. A couple of my favorites are Tamzen and Envypn. You might also find the Tecate/bitmap-fonts repo useful.
For easy copy-pasting, the character map is provided in text form in img/charmap.txt. If you just want to see how the glyphs look in Cozette, here is a screenshot of it:
If you want to build Cozette yourself, you'll need FontForge and Java. Once you
have that, just clone this repo, open Cozette/Cozette.sfd
in FontForge,
and go to File → Generate Fonts....
To run the build scripts I use to prepare releases, first install Python (at least 3.8)
and pipenv. For generating the images, you will also need xorg-mkfontscale
and xterm
.
Then, install the dependencies and run build.py fonts
:
$ pipenv install
$ pipenv run python build.py fonts
Then install the generated fonts, and run
$ pipenv run python build.py images
Running
$ pipenv run python build.py changelog
will output the changelog between your local version and the last tag.
Massive thanks to ym1234 for helping me figure out how to make the font tables behave nicely.
Cozette includes contributions from:
Cozette is licensed MIT 💜
Cozette's builds use bdfscale by philj56, Bits'N'Picas by Kreative Software.