protesilaos.iosevka-comfy/README.md

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.