* Upstream now supports inheriting glyph variants, so we do just that.
Makes the build plans easier to manage.
* After lots of tests, the '@' sign uses a tall three-fold style which
(i) does not give off a faux bold weight, meaning that it does not
have more typographic colour than it ought to, (ii) does not look like
concentric circles at small point sizes the way four-folded variants
do, (iii) is not too short to the point where it might be mistaken for
a regular 'a' or simply be hard to discern, the way the Fira-style
version is, and (iv) has a recognisable shape at all point sizes and
widths.
* All "wide" builds use an 'm' character with three legs of equal
length. Whereas the "narrow" builds have an 'm' with a shorter middle
leg. The relevant part from the README:
Note that the `iosevka-comfy-duo`, `iosevka-comfy-wide`, and
`iosevka-comfy-wide-fixed` use a different style for the `m`
character. Instead of the one with a shorter middle leg, they let
all legs have the same length. The short middle leg in `m` that
we need in the narrow monospaced variants is necessary for
legibility, especially at small point sizes. Otherwise it is a
gimmick, so we remove it in the "wider" builds.
* To keep track of things, this commit marks the release of Iosevka
Comfy version '0.1.0' (even though the project has been viable for
close to two years now).
Done using upstream version 'v15.4.2', commit '76a87155'.
|
||
|---|---|---|
| iosevka-comfy | ||
| iosevka-comfy-duo | ||
| iosevka-comfy-fixed | ||
| iosevka-comfy-wide | ||
| iosevka-comfy-wide-fixed | ||
| iosevka-10pt.png | ||
| iosevka-comfy-10pt.png | ||
| iosevka-comfy-sample-dark.png | ||
| iosevka-comfy-sample-light.png | ||
| LICENSE.md | ||
| private-build-plans.toml | ||
| README.md | ||
Iosevka Comfy
Private build of Iosevka, with a rounded style and open shapes, adjusted metrics, and overrides for almost all individual glyphs in both roman (upright) and italic (slanted) variants.
Details of the typeface
Iosevka Comfy is more vertically compact than the standard upstream configuration. Glyphs are rounder and have tailed ends or serifs only when those are required to both impose a predictable rhythm and keep characters distinct from each other.
The round and open shapes, tailed ends, and earless shoulders, can be discerned in those patterns:
a,o,u(e.g.anonymous);i,t,l(e.g.illicit);j,g,y(e.g.jiggly);b,d(e.g.bidirectional);n,m(e.g.numeral);p,q(e.g.equip);6,9,&.
Considerations for romans and italics
Roman and italic variants are made to look more consistent while retaining their stylistic features. Unlike the default Iosevka style, the upright glyphs do not have a mixture of straight/blocky and curved or serified characters (special exceptions notwithstanding). While the italics do not have calligraphic tendencies that greatly contrast with their counterparts. The differences within each character set and between the variants themselves are nuanced. The intent is to make everything feel part of the same aesthetic. Distinctions are drawn on the premise of contributing to the demands of the design without ever calling attention to themselves (as opposed to sporadic calligraphic glyphs amid an otherwise austere presentation).
For italics, the earless shoulders in glyphs such as n, m, p, q
change slightly to have a sturdier top which helps compensate for the
added slant. Otherwise they would feel more rounded than their roman
counterparts. We do not want that added implicit emphasis of extra
roundedness because the slant is already sufficient: to emphasise the
emphasis is the kind of exaggeration that Iosevka Comfy strives to
eliminate.
The target of small point size
The overall appearance of the typeface is optimised for small point sizes. This informs the choice of certain glyphs that break the established patterns:
-
The
ahas a serified or more blocky end, even though other glyphs have tailed ("pointier") ends. This is because at small point sizes the single storeyacan be mistaken for anoas the tail is too subtle. The serif fixes that. Why single storey? Because a double storey is too blocky at small sizes and thus inconsistent with the open character of the typeface. -
The
Dhas a top and bottom serif and a curved body to disambiguate it from the capitalO(which is more round). At small point sizes,TODOlooks clear whereas with a non-serifDit reads likeTOOO(theDis almost the same as anO). -
Same principle for
Iwhose serifs help one tell it apart froml. -
The
mhas a short middle leg to prevent the letter's lines from visually blending into a box-like shape (as is the case with the default Iosevka at small point sizes). It otherwise exhibits the same rounded/earless patterns.
The target of small point sizes also informs the decision to use squared
punctuation marks and the % sign (the percent looks like ./. instead
of o/o). They look more crisp.
It is important to stress that these decisions are made in light of the target range of point sizes, which is between 8 and 13. If we were to design towards another end, then we would do things differently (the open shapes would not be necessary, the aforementioned exceptions would not be required, punctuation marks could be circular, and so on).
Optimal point sizes for the author are: 8, 10, 11, 13. While "false friends" which increase the height of characters without actually adjusting the line width and height are: 10.5, 12, 13.5. We call them "false friends" because while they appear to have an effect, they do not actually increase the size of the font consistently: they break expectations and make the overall appearance feel more vertically compact than it should be.
Those granted, Iosevka Comfy looks decent at larger point sizes. The author uses it for presentations.
[ For the :height face attribute in GNU Emacs, the value is equal to
the point size × 10. ]
Comparison to base Iosevka
This is a regular Emacs session with the default font set to point size
10 (a :height face attribute of 100).
Variants
Iosevka Comfy comes in five variants, all of which share the same stylistic overrides, as documented above.
-
iosevka-comfyis monospaced and supports ligatures. Apart from ligatures, it allows certain glyphs, such as arrows, to occupy more than one block. -
iosevka-comfy-fixedis strictly monospaced and does not support ligatures. All glyphs are exactly the same width. Use this if you prefer it or if your application (e.g. terminal emulator) does not recogniseiosevka-comfyas a monospaced font. -
iosevka-comfy-duois quasi-proportional and supports ligatures. The naturally wide glyphs, such asm, are allowed to occupy two blocks instead of one. -
iosevka-comfy-wideis the same asiosevka-comfyexcept it is noticeably wider. It also looks taller thaniosevka-comfyeven though both variants fit the same number of lines on a screen. -
iosevka-comfy-wide-fixedsame asiosevka-comfy-widethough it is strictly monospaced and does not support ligatures.
Note that the iosevka-comfy-duo, iosevka-comfy-wide, and
iosevka-comfy-wide-fixed use a different style for the m character.
Instead of the one with a shorter middle leg, they let all legs have the
same length. The short middle leg in m that we need in the narrow
monospaced variants is necessary for legibility, especially at small
point sizes. Otherwise it is a gimmick, so we remove it in the "wider"
builds.
Install on GNU/Linux
Unless you have some exotic system, in which case you know what you are
doing, you can install fonts for your local user by copying the .ttf
files or their directories in ~/.local/share/fonts/. For system-wide
installation, place them in /usr/share/fonts/.
Depending on your system, you may need to delete the tff or
ttf-unhinted builds. Though this is not strictly necessary, as the
system knows which one to pick.
When in doubt, install locally.
Build information
Iosevka Comfy is configured in accordance with the documentation of the
upstream project. This practically means that we define our
private-build-plans.toml, install the npm dependencies, and then
build the .ttf files with something like the following for each
variant:
npm run build -- ttf::iosevka-comfy
It seems that queueing the builds, such as with a for loop, does not
work as intended: the variants are not differentiated from the base
iosevka-comfy build.
The last update to Iosevka Comfy was done on 2022-06-02 using upstream
version v15.4.2, commit 76a87155.
Each file is provided as-is in the hope that it may prove useful, but is otherwise intended only for my private use.



