mirror of
https://github.com/protesilaos/iosevka-comfy.git
synced 2026-09-10 07:16:16 -04:00
197 lines
8.1 KiB
Markdown
197 lines
8.1 KiB
Markdown
# Iosevka Comfy
|
|
|
|
[ As of 2025-02-04, the Iosevka Comfy project is discontinued. The
|
|
main reason is that "Iosevka" is a reserved name. See my Aporetic
|
|
fonts instead: <https://github.com/protesilaos/aporetic>. ]
|
|
|
|
* * *
|
|
|
|
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 repositories:
|
|
+ GitHub: <https://github.com/protesilaos/iosevka-comfy>
|
|
+ GitLab: <https://gitlab.com/protesilaos/iosevka-comfy>
|
|
+ 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 Duo | Sans | Compact | Duospaced | Yes |
|
|
| Iosevka Comfy Fixed | Sans | Compact | Monospaced | No |
|
|
|---------------------------------+--------+---------+------------+-----------|
|
|
| Iosevka Comfy Motion | Slab | Compact | Monospaced | Yes |
|
|
| Iosevka Comfy Motion Duo | Slab | Compact | Duospaced | Yes |
|
|
| Iosevka Comfy Motion Fixed | Slab | Compact | Monospaced | No |
|
|
|---------------------------------+--------+---------+------------+-----------|
|
|
| Iosevka Comfy Wide | Sans | Wide | Monospaced | Yes |
|
|
| Iosevka Comfy Wide Duo | Sans | Wide | Duospaced | Yes |
|
|
| Iosevka Comfy Wide Fixed | Sans | Wide | Monospaced | No |
|
|
|---------------------------------+--------+---------+------------+-----------|
|
|
| Iosevka Comfy Wide Motion | Slab | Wide | Monospaced | Yes |
|
|
| Iosevka Comfy Wide Motion Duo | Slab | Wide | Duospaced | Yes |
|
|
| Iosevka Comfy Wide Motion Fixed | Slab | Wide | Monospaced | No |
|
|
```
|
|
|
|
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.
|
|
|
|
All fonts have upright and slanted variants and are available in the
|
|
following weights:
|
|
|
|
```
|
|
| Name | Code |
|
|
|-----------+------|
|
|
| light | 300 |
|
|
| semilight | 350 |
|
|
| regular | 400 |
|
|
| medium | 500 |
|
|
| semibold | 600 |
|
|
| bold | 700 |
|
|
| extrabold | 800 |
|
|
```
|
|
|
|
## 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://github.com/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 2024-10-19 using upstream
|
|
commit `6850d2a` (post `v31.9.1`).
|
|
|
|
Each file is provided as-is in the hope that it may prove useful, but
|
|
is otherwise intended only for my private use.
|