1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
|
# Iosevka Comfy
IMAGES HERE: <https://protesilaos.com/emacs/iosevka-comfy-pictures>.
Customised build of the [Iosevka
typeface](https://github.com/be5invis/Iosevka), with a consistent
rounded style and overrides for almost all individual glyphs in both
roman (upright) and italic (slanted) variants.
+ Git repo on SourceHut: <https://git.sr.ht/~protesilaos/iosevka-comfy>
- Mirrors:
+ GitHub: <https://github.com/protesilaos/iosevka-comfy>
+ GitLab: <https://gitlab.com/protesilaos/iosevka-comfy>
+ Mailing list: <https://lists.sr.ht/~protesilaos/general-issues>
+ Sample pictures: <https://protesilaos.com/emacs/iosevka-comfy-pictures>
+ Backronym: Iosevka ... Could Only Modify a Font, Yes
## Principles of the design
Iosevka Comfy optimises for inter-glyph and inter-style consistency
within the overarching constraint of usability at small point sizes.
The shapes are round and are designed in concert to both impose a
predictable rhythm and keep characters distinct from each other.
Roman and italic styles are made to look more consistent than the
default upstream Iosevka while retaining their unique 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 style set and between the styles themselves are more 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 in light of usability, without ever calling attention to
themselves (as opposed to sporadic calligraphic glyphs amid an otherwise
austere presentation which seem to say "look how pretty I am!").
To achieve consistency between roman and italic styles we remove
elements of roundedness in the latter's glyphs to make them look a bit
sturdier. Otherwise they would feel more rounded than their roman
counterparts given the added slant. 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.
## Variants
```
| Family | Shapes | Spacing | Style | Ligatures |
|---------------------------------+--------+---------+------------+-----------|
| Iosevka Comfy | Sans | Compact | Monospaced | Yes |
| Iosevka Comfy Fixed | Sans | Compact | Monospaced | No |
| Iosevka Comfy Duo | Sans | Compact | Duospaced | Yes |
|---------------------------------+--------+---------+------------+-----------|
| Iosevka Comfy Motion | Slab | Compact | Monospaced | Yes |
| Iosevka Comfy Motion Fixed | Slab | Compact | Monospaced | No |
| Iosevka Comfy Motion Duo | Slab | Compact | Duospaced | Yes |
|---------------------------------+--------+---------+------------+-----------|
| Iosevka Comfy Wide | Sans | Wide | Monospaced | Yes |
| Iosevka Comfy Wide Fixed | Sans | Wide | Monospaced | No |
| Iosevka Comfy Wide Duo | Sans | Wide | Duospaced | Yes |
|---------------------------------+--------+---------+------------+-----------|
| Iosevka Comfy Wide Motion | Slab | Wide | Monospaced | Yes |
| Iosevka Comfy Wide Motion Fixed | Slab | Wide | Monospaced | No |
| Iosevka Comfy Wide Motion Duo | Slab | Wide | Duospaced | Yes |
```
Iosevka Comfy comes in four sets of three: two sans-serif and two
serif supersets. The triplets in each set follow the naming scheme
`NAME{,-fixed,-duo}`. The base name is monospaced and supports
ligatures. The "fixed" one is strictly monospaced so as to work with
all terminal emulators: it does not support ligatures or any wider
glyphs. And the "duo" is quasi-proportionately spaced, while
supporting ligatures.
Here "quasi-proportional" means that certain glyphs are allowed to
occupy their natural width, instead of being strictly monospaced,
while other remain monospaced. This combination results in a style
that feels like fixed spacing but reads like variable spacing.
1. The **compact, sans-serif** set:
- `iosevka-comfy` is monospaced and supports ligatures. Apart from
ligatures, it allows certain special glyphs, such as arrows, to
occupy more than one block.
- `iosevka-comfy-fixed` is like `iosevka-comfy` albeit strictly
monospaced and thus 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 recognise
`iosevka-comfy` as a monospaced font.
- `iosevka-comfy-duo` is quasi-proportional and supports ligatures. The
naturally narrow glyphs, such as `i`, are allowed to occupy their
natural width instead of one space.
2. The **compact, serif** set:
- `iosevka-comfy-motion` is monospaced and supports ligatures. It is
like `iosevka-comfy` but with lots of small tweaks that add serifs
and tailed ends to relevant glyphs. Put simply, it is the serified
counterpart of `iosevka-comfy`.
- `iosevka-comfy-motion-fixed` is the serif equivalent of the
aforementioned `iosevka-comfy-fixed`.
- `iosevka-comfy-motion-duo` is the serif equivalent of
`iosevka-comfy-duo`.
3. The **wide, sans-serif** set:
- `iosevka-comfy-wide` is the same as `iosevka-comfy` except it is
noticeably wider. It also looks taller than `iosevka-comfy` even
though both variants fit the same number of lines on a screen.
- `iosevka-comfy-wide-fixed` is the "wide" counterpart of the
`iosevka-comfy-fixed` family.
- `iosevka-comfy-wide-duo` is the "wide" counterpart of the
`iosevka-comfy-duo` family.
4. The **wide, serif** set:
- `iosevka-comfy-wide-motion` is the same as `iosevka-comfy-motion`
except it is noticeably wider. It also looks taller than
`iosevka-comfy-motion` even though both variants fit the same
number of lines on a screen.
- `iosevka-comfy-wide-motion-fixed` is the "wide" counterpart of the
`iosevka-comfy-motion-fixed` family.
- `iosevka-comfy-wide-motion-duo` is the "wide" counterpart of the
`iosevka-comfy-motion-duo` family.
## 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 `ttf` or
`ttf-unhinted` builds. Though this is not strictly necessary, as the
system knows which one to pick.
When in doubt, install locally.
**Perform a shallow clone** of this repository to speed things up:
```sh
git clone --depth 1 https://git.sr.ht/~protesilaos/iosevka-comfy
```
## Build information
Iosevka Comfy is configured in accordance with the documentation of
the upstream project. This practically means that (i) [we clone the
official repo](https://github.com/be5invis/iosevka), (ii) define our
`private-build-plans.toml` at its root, (iii) install the `npm`
dependencies, and (iv) build the `.ttf` files with something like the
following for each variant (run from the root of the project):
```sh
npm run build -- ttf::iosevka-comfy
```
Or this loop:
```sh
for i in iosevka-comfy{,-motion,-wide,-wide-motion}{,-fixed,-duo} ; do npm run build -- ttf::$i ; done
```
The last update to Iosevka Comfy was done on 2023-05-15 using upstream
version `v21.1.2`, commit `7ef24b8d`.
Each file is provided as-is in the hope that it may prove useful, but
is otherwise intended only for my private use.
|