Note that this repo has a 30+ GB commit history. If you only want the current files and future changes, you can avoid downloading so much by cloning the repo with a --depth
limit. Example:
git clone --depth 1 https://github.com/be5invis/Iosevka.git
To build Iosevka you should:
- Ensure that
nodejs
(≥ 14.0.0) andttfautohint
are present, and accessible fromPATH
. - Run
npm install
. This command will install all the NPM dependencies, and will also validate whether external dependencies are present. npm run build -- contents::iosevka
.
You will find TTFs, as well as WOFF(2) web fonts and one Webfont CSS in the dist/
directory.
A Docker container handling the build environment for you can be found here.
To pull it from Docker Hub and start a standard build of the latest released version, run
docker run -it -v $(pwd):/build avivace/iosevka-build
If you are using Powershell, run
docker run -it -v ${pwd}:/build avivace/iosevka-build
Fonts files will be placed in the dist
folder.
You can provide private-build.plans.toml
for a customized build and/or specify the desired release appending -e FONT_VERSION=X.X.X
. to the Docker command.
To create a custom build, you need:
-
Create
private-build-plans.toml
file if absent. -
Add a build plan into
private-build-plans.toml
. The configurable properties are described in the following sections. -
Run
npm run build -- contents::<your plan name>
and the built fonts would be available indist/
. Aside fromcontents::<plan>
, other options are:contents::<plan>
: Everything (TTF + webfont, hinted + unhinted);ttf::<plan>
: TTF only;ttf-unhinted::<plan>
: Unhinted TTF only;webfont::<plan>
: Web fonts only (CSS + WOFF2);webfont-unhinted::<plan>
: Unhinted web fonts only (CSS + WOFF2);woff2::<plan>
: WOFF2 only.woff2-unhinted::<plan>
: Unhinted WOFF2 only.
--jCmd=<number of concurrent jobs>
.
Configuration of build plans are organized under [buildPlans.<plan name>]
sections in the private-build-plans.toml
. You can use the Customizer to create the build plan, and/or manually edit them, following the instructions below.
Inside the plan, top-level properties include:
family
: String, defines the family name of your custom variant.spacing
: Optional, String, denotes the spacing of the custom variant. Valid values include:normal
: The normal monospace font.quasi-proportional
: The font will become quasi-proportional.quasi-proportional-extension-only
: The font will become quasi-proportional, but will not shrink narrow letters (likei
). Only wide letters (likeM
) will get expanded.term
: Make the symbols' width suitable for terminal emulators. Arrows and geometric symbols will become narrower.fontconfig-mono
: Applyterm
spacing changes and further apply changes to be compatible with FontConfig's Mono spacing, which recognizes a font as monospace if and only if its every non-combining characters having the same width. The changes include:- Completely remove wide glyphs. All non-combining glyphs will be exactly the same width.
- As a consequence, the following characters will be removed:
U+27F5
LONG LEFTWARDS ARROWU+27F6
LONG RIGHTWARDS ARROWU+27FB
LONG LEFTWARDS ARROW FROM BARU+27FC
LONG RIGHTWARDS ARROW FROM BAR
- As a consequence, the following characters will be removed:
- Remove
NWID
andWWID
features typographic features
- Completely remove wide glyphs. All non-combining glyphs will be exactly the same width.
fixed
: Applyfontconfig-mono
changes and further remove ligations.
serifs
: Optional, String, configures style of serifs.- When set to
slab
, the font will be converted into slab-serif. - Otherwise the font will be sans-serif.
- When set to
no-cv-ss
: Optional, Boolean, disablescv##
andss##
OpenType features.no-ligation
: Optional, Boolean, disables ligations.export-glyph-names
: Optional, Boolean, whether to export glyph names into the fonts. Setting this totrue
will increase file footprint, however this is necessary for ligature support in Kitty.webfont-formats
: Optional, Array of String. Controls the formats needed to be exported into the webfont CSS. Valid options are'ttf'
and'woff2'
, or including both.
Build plan could have 5 optional subsections: ligations
, variants
, weights
, widths
and slopes
.
Subsection ligations
is used to customize the ligation set assigned to calt
OpenType feature. Properties include:
-
inherits
: Optional, String, defines the inherited ligation set. When absent, the ligation set will not inherit any other sets. Valid values are:--default-center-ops--
: Default ligation set would be assigned to undefined.--c-center-ops--
: Default ligation set would be assigned to undefined.--default-equality-inequality--
: Default ligation set would be assigned to undefined.--c-equality-inequality--
: Default ligation set would be assigned to undefined.--raku-equality-inequality--
: Default ligation set would be assigned to undefined.--ml-equality-inequality--
: Default ligation set would be assigned to undefined.--fstar-equality-inequality--
: Default ligation set would be assigned to undefined.--haskell-equality-inequality--
: Default ligation set would be assigned to undefined.--matlab-equality-inequality--
: Default ligation set would be assigned to undefined.--verilog-equality-inequality--
: Default ligation set would be assigned to undefined.--wolfram-equality-inequality--
: Default ligation set would be assigned to undefined.--erlang-equality-inequality--
: Default ligation set would be assigned to undefined.--default-kern--
: Default ligation set would be assigned to undefined.default-calt
: Inherit default ligation set.dlig
: Default ligation set would be assigned to Discretionary ligatures.clike
: Default ligation set would be assigned to C-Like.javascript
: Default ligation set would be assigned to JavaScript.php
: Default ligation set would be assigned to PHP.julia
: Default ligation set would be assigned to Julia.raku
: Default ligation set would be assigned to Raku.ml
: Default ligation set would be assigned to ML.fsharp
: Default ligation set would be assigned to F#.fstar
: Default ligation set would be assigned to F*.haskell
: Default ligation set would be assigned to Haskell.idris
: Default ligation set would be assigned to Idris.elm
: Default ligation set would be assigned to Elm.purescript
: Default ligation set would be assigned to PureScript.swift
: Default ligation set would be assigned to Swift.dafny
: Default ligation set would be assigned to Dafny.coq
: Default ligation set would be assigned to Coq.matlab
: Default ligation set would be assigned to Matlab.verilog
: Default ligation set would be assigned to Verilog.wolfram
: Default ligation set would be assigned to Wolfram Language (Mathematica).erlang
: Default ligation set would be assigned to Erlang Language.
-
disables
andenables
: Optional, String Array, Cherry-picking ligation groups to be disabled or enabled. Valid values include:center-ops
: Vertically align some of the operators (like*
) to the center position it is before or after a "center" operator (like+
).center-op-trigger-plus-minus-l
: Plus (+
) and Minus (-
) will trigger other operator characters at left to be centered.center-op-trigger-plus-minus-r
: Plus (+
) and Minus (-
) will trigger other operator characters at right to be centered.center-op-trigger-equal-l
: Equal (=
) will trigger other operator characters at left to be centered.center-op-trigger-equal-r
: Equal (=
) will trigger other operator characters at right to be centered.center-op-trigger-bar-l
: Bars (|
) will trigger other operator characters at left to be centered.center-op-trigger-bar-r
: Bars (|
) will trigger other operator characters at right to be centered.center-op-trigger-angle-inside
: Less (<
) and Greater (>
) will trigger other operator characters at inside to be centered.center-op-trigger-angle-outside
: Less (<
) and Greater (>
) will trigger other operator characters at outside to be centered.center-op-influence-dot
: Treat dot (.
) as operator and perform chained centering.center-op-influence-colon
: Treat colon (:
) as operator and perform chained centering.arrow-l
: Enable ligation set that forms left-pointing arrows.arrow-r
: Enable ligation set that forms right-pointing arrows.counter-arrow-l
: Enable ligation that produces left-pointing counter-arrows.counter-arrow-r
: Enable ligation that produces right-pointing counter-arrows.trig
: Enable ligation for<|
,|>
,<||
, and other bar-and-angle-bracket symbols.eqeqeq
: Enable special ligation for===
with triple lines.eqeq
: Enable ligation for==
and===
.lteq
: Enable ligation for<=
as less-than-or-equal sign.eqlt
: Enable ligation for=<
as less-than-or-equal sign.gteq
: Enable ligation for>=
as greater-than-or-equal sign.lteq-separate
: Display<=
as separate shape.eqlt-separate
: Display=<
as separate shape.gteq-separate
: Display>=
as separate shape.exeqeqeq
: Enable special ligation for!===
with triple lines.exeqeq
: Enable special ligation for!==
with triple lines.eqexeq
: Enable special ligation for=!=
with triple lines.eqexeq-dl
: Enable special ligation for=!=
with double lines.exeq
: Enable ligation for!=
and!==
.tildeeq
: Enable ligation for~=
as inequality.eqslasheq
: Enable special triple-line ligation for=/=
as inequality.slasheq
: Enable ligation for/=
and=/=
as inequality.ltgt-ne
: Enable ligation for<>
as inequality.ltgt-diamond
: Enable ligation for<>
as diamond.ltgt-diamond-tag
: Enable ligation for<>
as diamond-shaped empty HTML/XML tag.ltgt-slash-tag
: Enable ligation for</
,/>
and</>
.brst
: Center asterisk in(*
and*)
.slash-asterisk
: Shift asterisk in/*
and*/
.plusplus
: Enable ligation for++
and further plus-chaining.kern-dotty
: Move connecting dotty punctuations closer, like for::
,:::
and...
.kern-bars
: Move consecutive bars closer, like for||
,|||
and//
.logic
: Enable ligation for/\
and\/
.llgg
: Enable ligation for<<
,>>
and other angle-bracket chaining.llggeq
: Enable ligation for<<=
,>>=
as shift operator.html-comment
: Enable ligation for<!--
and<!---
.colon-greater-as-colon-arrow
: Transform:>
into:
and a narrow arrow.brace-bar
: Enable ligation for{|
and|}
.brack-bar
: Enable ligation for[|
and|]
.connected-underscore
: Make contiguous underscores (like__
) connected.connected-number-sign
: Make contiguous number signs (like##
) connected.connected-tilde-as-wave
: Make contiguous ASCII tildes (like~~
) connected as a wave line.connected-hyphen
: Make contiguous hyphen-minuses (like--
) connected as a straight solid line.
Subsection variants
is used to configure character variants in the font. Properties include:
-
inherits
: Optional, String, defines the inherited stylistic set. Valid options include:ss01
: Set character variant to “Andale Mono Style”.ss02
: Set character variant to “Anonymous Pro Style”.ss03
: Set character variant to “Consolas Style”.ss04
: Set character variant to “Menlo Style”.ss05
: Set character variant to “Fira Mono Style”.ss06
: Set character variant to “Liberation Mono Style”.ss07
: Set character variant to “Monaco Style”.ss08
: Set character variant to “Pragmata Pro Style”.ss09
: Set character variant to “Source Code Pro Style”.ss10
: Set character variant to “Envy Code R Style”.ss11
: Set character variant to “X Window Style”.ss12
: Set character variant to “Ubuntu Mono Style”.ss13
: Set character variant to “Lucida Style”.ss14
: Set character variant to “JetBrains Mono Style”.ss15
: Set character variant to “IBM Plex Mono Style”.ss16
: Set character variant to “PT Mono Style”.ss17
: Set character variant to “Recursive Mono Style”.ss18
: Set character variant to “Input Mono Style”.ss20
: Set character variant to “Curly Style”.
-
design
,upright
,italic
, andoblique
: Optional, Dictionary, defines styles for individual characters. The choices are organized in key-value pairs, assigning a variant to a character group. Alternatively, you could assign numbers tocv##
tags, like what you did when using OpenType in CSS. Assignments underdesign
will be applied to all the slopes, andupright
,italic
, andoblique
will apply to corresponded slopes.In addition, style selector for default digit form also uses these dictionaries.
The valid combinations include:
- Default digit form:
digit-form = 'lining'
Lining (default) digit-form = 'old-style'
Old-style - APL form:
apl-form = 'none'
Disable APL-specific forms (default) apl-form = 'enable'
Enable harmonized alternate forms APL operators - Styles for
A
: - Styles for
B
: - Styles for
C
: - Styles for
D
: - Styles for
E
: - Styles for
F
: - Styles for
G
: - Styles for
H
: - Styles for
I
:capital-i = 'serifed'
,cv09 = 1
I with standard (long) serifs (default) capital-i = 'serifless'
,cv09 = 2
I without serifs, like a straight bar capital-i = 'short-serifed'
,cv09 = 3
I with short serifs - Styles for
J
: - Styles for
K
: - Styles for
L
: - Styles for
M
: - Styles for
N
: - Styles for
P
: - Styles for
Q
: - Styles for
R
: - Styles for
S
: - Styles for
T
:capital-t = 'serifless'
,cv19 = 1
Serifless T (default for Sans) capital-t = 'motion-serifed'
,cv19 = 2
Motion-Serifed T capital-t = 'serifed'
,cv19 = 3
Serifed T (default for Slab) - Styles for
U
: - Styles for
V
: - Styles for
W
: - Styles for
X
: - Styles for
Y
: - Styles for
Z
: - Styles for
a
: - Styles for
b
: - Styles for
c
: - Styles for
d
: - Styles for
e
:e = 'flat-crossbar'
,cv30 = 1
e
with flat crossbar (default for Upright)e = 'rounded'
,cv30 = 2
e
with more rounded shape (default for Italic) - Styles for
f
: - Styles for
g
: - Styles for
h
: - Styles for
i
: - Styles for
j
: - Styles for
k
: - Styles for
l
: - Styles for
m
: - Styles for
n
: - Styles for
p
: - Styles for
q
: - Styles for
r
: - Styles for
s
: - Styles for
t
: - Styles for
u
: - Styles for
v
: - Styles for
w
: - Styles for
x
: - Styles for
y
: - Styles for
z
: - Styles for
ſ
(Long-S): - Styles for
ß
(Eszet): - Styles for
ð
(Lowercase Eth (ð
)):lower-eth = 'straight-bar'
,cv53 = 1
Lowercase Eth ( ð
) with a straight barlower-eth = 'curly-bar'
,cv53 = 2
Lowercase Eth ( ð
) with a curly bar (default) - Styles for
þ
(Lowercase Thorn (þ
)): - Styles for
α
(Greek lower Alpha): - Styles for
Γ
(Greek capital Gamma): - Styles for
Δ
(Greek capital Delta (Δ
)):capital-delta = 'straight'
,cv57 = 1
Standard, straight Greek capital Delta ( Δ
) (default)capital-delta = 'curly'
,cv57 = 2
Slightly curly Greek capital Delta ( Δ
), like Iosevka 2.x - Styles for
δ
(Greek lower Delta):lower-delta = 'rounded'
,cv58 = 1
Greek lower Delta ( δ
) with rounded top (default)lower-delta = 'flat-top'
,cv58 = 2
Greek lower Delta ( δ
) with flat top - Styles for
ι
(Greek lower Iota): - Styles for
Λ
(Greek capital Lambda (Λ
)): - Styles for
λ
(Greek small Lambda): - Styles for
μ
(Greek small Mu): - Styles for
ξ
(Greek lower Xi):lower-xi = 'rounded'
,cv63 = 1
Greek lower Xi ( ξ
) with rounded toplower-xi = 'flat-top'
,cv63 = 2
Greek lower Xi ( ξ
) with flat top (default) - Styles for
χ
(Greek lower Chi): - Styles for
Ж
(Cyrillic Capital Zhe): - Styles for
ж
(Cyrillic Zhe): - Styles for
З
(Cyrillic Capital Ze): - Styles for
з
(Cyrillic Lower Ze): - Styles for
К
(Cyrillic Capital Ka): - Styles for
к
(Cyrillic Ka): - Styles for
л
(Cyrillic Lower El):cyrl-el = 'straight'
,cv71 = 1
Cyrillic Lower El ( л
) with standard shape (default)cyrl-el = 'tailed'
,cv71 = 2
Cyrillic Lower El ( л
) with tail shape - Styles for
м
(Cyrillic Lower Em): - Styles for
н
(Cyrillic Lower En): - Styles for
У
(Cyrillic Capital U): - Styles for
ф
(Cyrillic Lower Ef): - Styles for
ч
(Cyrillic Lower Che):cyrl-che = 'standard'
,cv76 = 1
Cyrillic Lower Che ( ч
) with standard shape (default)cyrl-che = 'tailed'
,cv76 = 2
Cyrillic Lower Che ( ч
) with tail - Styles for
ь
(Cyrillic Lower Yeri and related letters): - Styles for
ы
(Cyrillic Lower Yery): - Styles for
Я
(Cyrillic Capital Ya): - Styles for
я
(Cyrillic Lower Ya): - Styles for
0
: - Styles for
1
: - Styles for
2
:two = 'straight-neck'
,cv83 = 1
2
with straight necktwo = 'curly-neck'
,cv83 = 2
2
with curly neck (default) - Styles for
3
:three = 'flat-top'
,cv84 = 1
Flat top 3
(Like Museo Sans / Montserrat)three = 'two-arcs'
,cv84 = 2
Arched top 3
(default) - Styles for
4
: - Styles for
5
:five = 'vertical-upper-left-bar'
,cv86 = 1
5
with a vertical upper-left bar (default)five = 'oblique-upper-left-bar'
,cv86 = 2
5
with an oblique upper-left bar - Styles for
6
:six = 'closed-contour'
,cv87 = 1
6
with a more closed contoursix = 'open-contour'
,cv87 = 2
6
with a more open contoursix = 'straight-bar'
,cv87 = 3
6
with a straight bar (default) - Styles for
7
: - Styles for
8
: - Styles for
9
:nine = 'closed-contour'
,cv90 = 1
9
with a more closed contournine = 'open-contour'
,cv90 = 2
9
with a more open contournine = 'straight-bar'
,cv90 = 3
9
with a straight bar (default) - Styles for
öẋ
,ij
(Dot and Comma shape in diacritics):diacritic-dot = 'round'
,cv91 = 1
Dots and Commas in diacritics are round (default) diacritic-dot = 'square'
,cv91 = 2
Dots and Commas in diacritics are square - Styles for
.,
,:;
(Dot and Comma shape in punctuations and symbols):punctuation-dot = 'round'
,cv92 = 1
Small punctuations (like .
,,
) use round dots (default)punctuation-dot = 'square'
,cv92 = 2
Small punctuations (like .
,,
) use square dots - Styles for
~
:tilde = 'high'
,cv93 = 1
Higher tilde ~
tilde = 'low'
,cv93 = 2
Lower tilde ~
(default) - Styles for
*
: - Styles for
_
: - Styles for
^
:caret = 'high'
,cv96 = 1
Higher circumflex ^
caret = 'medium'
,cv96 = 2
Lower circumflex ^
(default)caret = 'low'
,cv96 = 3
Lower circumflex ^
- Styles for
(
,)
: - Styles for
{
,}
:brace = 'straight'
,cv98 = 1
More straight braces brace = 'curly'
,cv98 = 2
More curly braces (default) brace = 'curly-flat-boundary'
,cv98 = 3
Curly braces with flat boundary shape - Styles for
#
: - Styles for
&
: - Styles for
@
: - Styles for
$
: - Styles for
%
: - Styles for
|
,¦
: - Styles for
'
:ascii-single-quote = 'straight'
,VSAF = 1
Show ASCII quote ( "
) as short vertical straight bar. (default)ascii-single-quote = 'raised-comma'
,VSAF = 2
Show ASCII quote ( "
) as raised comma. - Styles for
`
: - Styles for
?
: - Styles for
¶
:pilcrow = 'high'
,VSAI = 1
Higher pilcrow sign ¶
(default)pilcrow = 'low'
,VSAI = 2
Lower pilcrow sign ¶
- Styles for
¢
: - Styles for
∂
(Partial derivative symbol): - Styles for
µ
(Micro sign): - Styles for
<=
,>=
(Less-equal and Greater-equal ligations):lig-ltgteq = 'flat'
,VLAA = 1
The lower bar of <=
and>=
ligation is flat (default)lig-ltgteq = 'slanted'
,VLAA = 2
The lower bar of <=
and>=
ligation is slanted - Styles for
!=
(Not-equal ligations): - Styles for
==
(Equality ligations): - Styles for
--
(Hyphen-minus ligations): - Styles for
=>
(Double arrow ligation): - Styles for
->
(Single arrow ligation):
- Default digit form:
Subsection weights
is used to change the weight grades that the custom family needs. It is a dictionary of either strings formatted in default.<weight>
format, meaning reusing a default weight grade, or sub-objects with properties:
shape
: Number, configures the weight grade of the glyphs' shapes.menu
: Integer, configures the weight grade used when naming fonts.css
: Integer, configures the weight grade used in web font CSS.
Subsection widths
is used to change the width grades that the custom family needs. It is a dictionary of either strings formatted in default.<width>
format, meaning reusing a default width grade, or sub-objects with properties:
shape
: Number, configures the width of the glyphs' shapes, measured in 1/1000 em.menu
: Integer, configures the width grade used when naming fonts. The valid values are1
to9
, inclusive.css
: String, configures the font-stretch value used in web font CSS.
Subsection slopes
is used to change the slope angles and grades that the custom family needs. It is a dictionary of either strings formatted in default.<slope>
format, meaning reusing a default slope grade, or sub-objects with properties:
angle
: Number, configures the slope angle in degrees. The valid vales are0
to15
, inclusive.shape
: String fromupright
,italic
oroblique
. Configures the slope used for variant selection.menu
: String fromupright
,italic
oroblique
. Configures the slope grade used when naming fonts.css
: String fromnormal
,italic
oroblique
. Configures the CSS font-style value.
Subsection slopes
is a simple string-to-string dictionary maps slopes (upright
, italic
or oblique
) to CSS font-style values, represented in string.
Certain software, notably Emacs, relies on pre-encoded ligatures instead of OpenType to provide ligations. Iosevka could be configured with additional subsection compatibility-ligatures
, being an array of records with following fields:
unicode
: The PUA code point being assigned to.featureTag
: The feature tag to compute ligations.sequence
: The source character sequence.
A sample of compatibility ligature config is:
[[buildPlans.iosevka-custom.compatibility-ligatures]]
unicode = 57600 # 0xE100
featureTag = 'calt'
sequence = '<*>'
Subsection metric-override
provides ability to override certain metric values, if you reallly want to. Adding this section is strongly discouraged as it may introduce broken geometry or broken shapes.
Property | Unit | Default Value | Meaning |
---|---|---|---|
cap |
emu | 735 | Height of H . |
ascender |
emu | 735 | Height of b . |
xHeight |
emu | 520 | Height of x . |
sb |
emu | (varies, 60 for Regular) | Width of common side-bearings. |
accentWidth |
emu | 200 | Width of accent marks. |
accentClearance |
emu | 72 | Vertical clearance of accent marks to the base. |
accentHeight |
emu | 176 | Height of accent marks. |
accentStackOffset |
emu | 220 | Offset height of accent mark stack. |
dotSize |
emu | (varies, 125 for regular) | Size of dots in diacritic marks. |
periodSize |
emu | (varies, 140 for regular) | Size of dots in period. |
leading |
emu | 1250 | Built-in line height. |
symbolMid |
emu | 340 | Height of the center of hyphen (- ). |
parenSize |
emu | 966 | Height of Parentheses. |
winMetricAscenderPad |
emu | 0 | Additional pad for Win metrics’ ascender to avoid clipping in legacy Windows applications. |
winMetricDescenderPad |
emu | 0 | Additional pad for Win metrics’ descender to avoid clipping in legacy Windows applications. |
powerlineScaleX , powerlineScaleY |
(ratio) | 1 | X and Y scale of Powerline glyphs. |
powerlineShiftX , powerlineShiftY |
emu | 0 | X and Y shift of Powerline glyphs. |
onumZeroHeightRatio |
(ratio) | 1.145 | Ratio of height of 0 under onum feature, to the height of x . |
essRatio |
(ratio) | (varies, 1.12 for Regular) | Ratio of the thickness of the neck of S /s /? , to the normal stroke width. essRatioUpper , essRatioLower and rssRatioQuestion will override this value for corresponded glyph categories when set. |
essRatioUpper |
(ratio) | (varies, 1.12 for Regular) | Ratio of the thickness of the neck of S , to the normal stroke width. |
essRatioLower |
(ratio) | (varies, 1.12 for Regular) | Ratio of the thickness of the neck of s , to the normal stroke width. |
essRatioQuestion |
(ratio) | (varies, 1.12 for Regular) | Ratio of the thickness of the neck of ? , to the normal stroke width. |
archDepth |
emu | (varies, 195 for Regular) | Depth of the curve segment of arches / O rings in capital letters. |
smallArchDepth |
emu | (varies, 200 for Regular) | Depth of the curve segment of arches / O rings in small letters. |
The values of each item could be either a number, or a string representing an expression so that it could be different for different instance fonts, or depending on default values. The syntax of valid expressions are:
Expression -> Term (('+' | '-') Term)*
Term -> Factor (('*' | '/') Factor)*
Factor -> ('+' | '-')* Primitive
Primitive -> Literal
| Call
| Binding
| Group
| List
Literal -> ['0'..'9']+ ('.' ['0'..'9']+)?
Identifier -> ['A'..'Z', 'a'..'z', '_']+
Call -> Identifier '(' Expression (',' Expression)* ')'
List -> Identifier '[' Expression (',' Expression)* ']'
Binding -> Identifier
Valid identifiers include:
weight
: being the weight grade;width
: being the characters' unit width, measured in em-units;slopeAngle
: being the slope angle in degrees;- Default value of all overridable metrics, prefixed with
default_
, i.e., defaultcap
value will be accessable thorughdefault_cap
.
Valid functions include:
blend
(x, [x1, y1], [x2, y2], ...): Perform a smooth interpolation through data pairs [x1, y1], [x2, y2], ..., against parameter x.
For example, the following configuration:
[buildPlans.iosevka-custom.metric-override]
leading = 1500
sb = 'default_sb * 1.0625 + 15'
dotSize = 'blend(weight, [100, 50], [400, 125], [900, 180])'
will:
- Override line height to
1500
em-unit; - Override the sidebearing value by its value multiplied by
1.0625
then added with15
. - Override the dot size by a interpolation against weight: at thin (
100
) being50
, at regular (400
) being125
, and at heavy (900
) being180
.
A sample configuration could be found at private-build-plans.sample.toml.
It is possible to create a customized TTC build by using the following method:
- Add a collect plan into
private-build-plans.toml
, with afrom
field containing all the TTF groups it needs:
[collectPlans.iosevka-custom]
from = ["iosevka-custom1", "iosevka-custom-2"]
- Run build with the following command:
npm run build -- ttc::iosevka-custom
: Create TTCs from collectioniosevka-custom
; The file will be saved intodist/.ttc
.npm run build -- super-ttc::iosevka-custom
: Create a single-file TTC from collectioniosevka-custom
; The file will be saved intodist/.super-ttc
.