Skip to content

Commit 9d7d1ce

Browse files
committed
feat(font): add no-ligature variant
- apps like Xcode lack settings to disable font ligatures - add NL build plan and update CI to patch and package the new variant
1 parent f1fc3cd commit 9d7d1ce

3 files changed

Lines changed: 108 additions & 39 deletions

File tree

.github/workflows/build-font.yml

Lines changed: 57 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ jobs:
4545
cp private-build-plans.toml iosevka-src/
4646
cd iosevka-src
4747
npm install
48-
npm run build -- contents::IoskeleyMono contents::IoskeleyMonoTerm
48+
npm run build -- contents::IoskeleyMono contents::IoskeleyMonoTerm contents::IoskeleyMonoNL
4949
5050
- name: Verify build output
5151
run: |
@@ -57,6 +57,10 @@ jobs:
5757
echo "IoskeleyMonoTerm build output not found!"
5858
exit 1
5959
fi
60+
if [ ! -d "iosevka-src/dist/IoskeleyMonoNL/TTF" ]; then
61+
echo "IoskeleyMonoNL build output not found!"
62+
exit 1
63+
fi
6064
6165
- name: Download Nerd Fonts patcher
6266
run: |
@@ -73,8 +77,10 @@ jobs:
7377
run: |
7478
mkdir -p patched-fonts/Normal patched-fonts/SemiCondensed patched-fonts/Condensed
7579
mkdir -p patched-fonts-term/Normal patched-fonts-term/SemiCondensed patched-fonts-term/Condensed
80+
mkdir -p patched-fonts-nl/Normal patched-fonts-nl/SemiCondensed patched-fonts-nl/Condensed
7681
DIST="iosevka-src/dist/IoskeleyMono/TTF"
7782
DIST_TERM="iosevka-src/dist/IoskeleyMonoTerm/TTF"
83+
DIST_NL="iosevka-src/dist/IoskeleyMonoNL/TTF"
7884
PATCHER="nerd-fonts-patcher/font-patcher"
7985
8086
for font in "$DIST"/IoskeleyMono-SemiCondensed*.ttf; do
@@ -105,6 +111,20 @@ jobs:
105111
fontforge -script "$PATCHER" "$font" --complete --careful --outputdir patched-fonts-term/Normal
106112
done
107113
114+
for font in "$DIST_NL"/IoskeleyMonoNL-SemiCondensed*.ttf; do
115+
fontforge -script "$PATCHER" "$font" --complete --careful --outputdir patched-fonts-nl/SemiCondensed
116+
done
117+
118+
for font in "$DIST_NL"/IoskeleyMonoNL-Condensed*.ttf; do
119+
[[ "$font" == *SemiCondensed* ]] && continue
120+
fontforge -script "$PATCHER" "$font" --complete --careful --outputdir patched-fonts-nl/Condensed
121+
done
122+
123+
for font in "$DIST_NL"/IoskeleyMonoNL-*.ttf; do
124+
[[ "$font" == *Condensed* ]] && continue
125+
fontforge -script "$PATCHER" "$font" --complete --careful --outputdir patched-fonts-nl/Normal
126+
done
127+
108128
- name: Package release archives
109129
run: |
110130
DIST="iosevka-src/dist/IoskeleyMono"
@@ -147,13 +167,36 @@ jobs:
147167
148168
cd pkg-term && zip -r ../IoskeleyMono-Term.zip . && cd ..
149169
170+
# ── IoskeleyMono-NL.zip — all widths, no ligatures ────────────────
171+
DIST_NL="iosevka-src/dist/IoskeleyMonoNL"
172+
mkdir -p pkg-nl/Normal/Hinted pkg-nl/Normal/Unhinted
173+
mkdir -p pkg-nl/SemiCondensed/Hinted pkg-nl/SemiCondensed/Unhinted
174+
mkdir -p pkg-nl/Condensed/Hinted pkg-nl/Condensed/Unhinted
175+
176+
cp "$DIST_NL"/TTF/IoskeleyMonoNL-SemiCondensed*.ttf pkg-nl/SemiCondensed/Hinted/
177+
cp "$DIST_NL"/TTF-Unhinted/IoskeleyMonoNL-SemiCondensed*.ttf pkg-nl/SemiCondensed/Unhinted/
178+
179+
for f in "$DIST_NL"/TTF/IoskeleyMonoNL-Condensed*.ttf; do [[ "$f" == *SemiCondensed* ]] && continue; cp "$f" pkg-nl/Condensed/Hinted/; done
180+
for f in "$DIST_NL"/TTF-Unhinted/IoskeleyMonoNL-Condensed*.ttf; do [[ "$f" == *SemiCondensed* ]] && continue; cp "$f" pkg-nl/Condensed/Unhinted/; done
181+
for f in "$DIST_NL"/TTF/IoskeleyMonoNL-*.ttf; do [[ "$f" == *Condensed* ]] && continue; cp "$f" pkg-nl/Normal/Hinted/; done
182+
for f in "$DIST_NL"/TTF-Unhinted/IoskeleyMonoNL-*.ttf; do [[ "$f" == *Condensed* ]] && continue; cp "$f" pkg-nl/Normal/Unhinted/; done
183+
184+
cd pkg-nl && zip -r ../IoskeleyMono-NL.zip . && cd ..
185+
150186
# ── IoskeleyMono-Term-NerdFont.zip — term spacing + Nerd Font ─────
151187
mkdir -p pkg-term-nf/Normal pkg-term-nf/SemiCondensed pkg-term-nf/Condensed
152188
cp patched-fonts-term/Normal/*.ttf pkg-term-nf/Normal/
153189
cp patched-fonts-term/SemiCondensed/*.ttf pkg-term-nf/SemiCondensed/
154190
cp patched-fonts-term/Condensed/*.ttf pkg-term-nf/Condensed/
155191
cd pkg-term-nf && zip -r ../IoskeleyMono-Term-NerdFont.zip . && cd ..
156192
193+
# ── IoskeleyMono-NL-NerdFont.zip — no ligatures + Nerd Font ───────
194+
mkdir -p pkg-nl-nf/Normal pkg-nl-nf/SemiCondensed pkg-nl-nf/Condensed
195+
cp patched-fonts-nl/Normal/*.ttf pkg-nl-nf/Normal/
196+
cp patched-fonts-nl/SemiCondensed/*.ttf pkg-nl-nf/SemiCondensed/
197+
cp patched-fonts-nl/Condensed/*.ttf pkg-nl-nf/Condensed/
198+
cd pkg-nl-nf && zip -r ../IoskeleyMono-NL-NerdFont.zip . && cd ..
199+
157200
- name: Package Web archive
158201
run: |
159202
cd iosevka-src/dist/IoskeleyMono
@@ -177,55 +220,30 @@ jobs:
177220
body: |
178221
## Ioskeley Mono ${{ steps.vars.outputs.tag }}
179222
180-
A free, open-source alternative to [Berkeley Mono](https://berkeleygraphics.com/typefaces/berkeley-mono/) — built on [Iosevka](https://github.com/be5invis/Iosevka).
181-
10 weights · 3 widths · Upright & Italic · Nerd Font patched
223+
<!-- What's new in this release -->
182224
183225
---
184226
185-
### Which file do I need?
227+
### Downloads
186228
187229
| Situation | Download |
188230
|---|---|
189-
| Editor / IDE (VS Code, JetBrains, Zed…) | `IoskeleyMono.zip` |
190-
| Terminal with icons (Neovim, Starship…) | `IoskeleyMono-NerdFont.zip` |
191-
| Arrows or box-drawing look wrong in my terminal | `IoskeleyMono-Term.zip` |
192-
| Terminal with icons _and_ rendering issues | `IoskeleyMono-Term-NerdFont.zip` |
193-
| Web / CSS (`@font-face`) | `IoskeleyMono-Web.zip` |
194-
195-
> **Not sure?** Download `IoskeleyMono.zip` and start with the `Normal/Hinted/` folder.
196-
197-
---
198-
199-
### Inside each TTF zip
200-
201-
```
202-
Normal/
203-
Hinted/ ← standard-DPI screens (most Windows setups)
204-
Unhinted/ ← high-DPI / Retina (macOS, Linux HiDPI)
205-
SemiCondensed/
206-
Hinted/
207-
Unhinted/
208-
Condensed/
209-
Hinted/
210-
Unhinted/
211-
```
212-
213-
Install all fonts in your chosen folder — your OS will expose the full weight axis (Thin → Black) automatically.
214-
215-
---
216-
217-
### About the Term variant
218-
219-
`IoskeleyMono-Term` uses `spacing = "term"`, which constrains every glyph to its cell boundary. Use it if arrows (`→ ← ↑ ↓`), box-drawing characters, or ligatures render incorrectly in your terminal emulator (known affected: kitty, Ghostty). The glyph design is identical to the standard variant.
220-
221-
---
222-
223-
Found a bug or have an idea? This is just a config on top of Iosevka — PRs and issues are welcome.
231+
| Editor / IDE | `IoskeleyMono.zip` |
232+
| Terminal with icons | `IoskeleyMono-NerdFont.zip` |
233+
| Terminal rendering issues | `IoskeleyMono-Term.zip` |
234+
| Terminal icons + rendering issues | `IoskeleyMono-Term-NerdFont.zip` |
235+
| App that can't disable ligatures | `IoskeleyMono-NL.zip` |
236+
| Same + Nerd Font icons | `IoskeleyMono-NL-NerdFont.zip` |
237+
| Web | `IoskeleyMono-Web.zip` |
238+
239+
Not sure which to pick? [See the README](https://github.com/ahatem/IoskeleyMono#which-file-do-i-need).
224240
files: |
225241
IoskeleyMono.zip
226242
IoskeleyMono-NerdFont.zip
227243
IoskeleyMono-Term.zip
228244
IoskeleyMono-Term-NerdFont.zip
245+
IoskeleyMono-NL.zip
246+
IoskeleyMono-NL-NerdFont.zip
229247
IoskeleyMono-Web.zip
230248
env:
231249
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ Download the latest release from the [Releases page](https://github.com/ahatem/I
3333
| Terminal with icons (Neovim, Starship…) | `IoskeleyMono-NerdFont.zip` |
3434
| Arrows or box-drawing look wrong in my terminal | `IoskeleyMono-Term.zip` |
3535
| Terminal with icons _and_ rendering issues | `IoskeleyMono-Term-NerdFont.zip` |
36+
| App that can't disable ligatures (Xcode…) | `IoskeleyMono-NL.zip` |
37+
| Same, but also need Nerd Font icons | `IoskeleyMono-NL-NerdFont.zip` |
3638
| Web / CSS (`@font-face`) | `IoskeleyMono-Web.zip` |
3739

3840
> **Not sure?** Start with `IoskeleyMono.zip`.
@@ -68,6 +70,10 @@ Install all fonts in your chosen folder — your OS will expose the full weight
6870

6971
`Ioskeley Mono Term` uses `spacing = "term"`, which constrains every glyph to its cell boundary. Use it if arrows (`→ ← ↑ ↓`), box-drawing characters, or ligatures render incorrectly in your terminal (known affected: kitty, Ghostty). The glyph design is identical to the standard variant — it's purely a spacing change.
7072

73+
### About the NL variant
74+
75+
`Ioskeley Mono NL` has all ligature substitutions disabled. Use it in apps that can't toggle ligatures off themselves (e.g. Xcode). Everything else — weights, widths, glyph shapes, metrics — is identical to the standard variant.
76+
7177
---
7278

7379
## Weights

private-build-plans.toml

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,51 @@ essRatioQuestion = 1.03
223223
archDepth = 152
224224
smallArchDepth = 157
225225

226+
# ============================================================
227+
# NL VARIANT (No Ligatures)
228+
# Identical to IoskeleyMono except ligature substitutions are
229+
# disabled — for apps that cannot toggle ligatures themselves
230+
# (e.g. Xcode).
231+
# ============================================================
232+
233+
[buildPlans.IoskeleyMonoNL]
234+
family = "Ioskeley Mono NL"
235+
spacing = "normal"
236+
serifs = "sans"
237+
noCvSs = true
238+
noLigation = true
239+
exportGlyphNames = false
240+
241+
weights.inherits = "buildPlans.IoskeleyMono"
242+
widths.inherits = "buildPlans.IoskeleyMono"
243+
slopes.inherits = "buildPlans.IoskeleyMono"
244+
245+
[buildPlans.IoskeleyMonoNL.variants]
246+
inherits = "buildPlans.IoskeleyMono"
247+
248+
[buildPlans.IoskeleyMonoNL.metricOverride]
249+
xHeight = 520
250+
cap = 690
251+
ascender = 740
252+
sb = 85
253+
254+
accentWidth = 182
255+
accentClearance = 76
256+
accentHeight = 162
257+
accentStackOffset = 208
258+
259+
leading = 1250
260+
parenSize = 860
261+
dotSize = 'blend(weight, [100, 110], [400, 125], [900, 150])'
262+
periodSize = 140
263+
264+
essRatio = 1.03
265+
essRatioUpper = 1.03
266+
essRatioLower = 1.03
267+
essRatioQuestion = 1.03
268+
archDepth = 152
269+
smallArchDepth = 157
270+
226271
# ============================================================
227272
# TERM VARIANT
228273
# Identical to IoskeleyMono except spacing = "term", which

0 commit comments

Comments
 (0)