add: iosevka-fonts (#7092) (#7108)

* add: iosevka-fonts

* use macros for ts

* set jCmd properly for even slower builds :p

* add build option to use TTC collections instead

* add license.md

* use very big runners for this

* use large arm runners

* try using bun instead

* HACK: Use prebuilt binaries

(cherry picked from commit 50dc230eac)

Co-authored-by: Pornpipat Popum <cappy@cappuchino.xyz>
This commit is contained in:
Raboneko
2025-11-04 10:04:19 -08:00
committed by GitHub
parent 986991b18a
commit 5780014725
3 changed files with 156 additions and 0 deletions
+9
View File
@@ -0,0 +1,9 @@
project pkg {
arches = ["x86_64"]
rpm {
spec = "iosevka-fonts.spec"
}
# labels {
# large = 1
# }
}
+146
View File
@@ -0,0 +1,146 @@
%define _iosevka_families Iosevka IosevkaAile IosevkaCurly IosevkaCurlySlab IosevkaEtoile IosevkaSS01 IosevkaSS02 IosevkaSS03 IosevkaSS04 IosevkaSS05 IosevkaSS06 IosevkaSS07 IosevkaSS08 IosevkaSS09 IosevkaSS10 IosevkaSS11 IosevkaSS12 IosevkaSS13 IosevkaSS14 IosevkaSS15 IosevkaSS16 IosevkaSlab
# HACK: Download prebuilt binaries instead of building from source
#
# XXX: Use `--without bins` only if you enjoy waiting 33+ hours and death by
# a thousand JavaScript apps, or you use Gentoo.
%bcond_without bins
%bcond_without smt
%bcond_with ttc
# this runs at macro expansion time, not build time
%{lua:
local families = rpm.expand("%{_iosevka_families}")
local i = 0
local function prettify(name)
-- insert space before uppercase letters (except first)
local spaced = name:gsub("(%l)(%u)", "%1 %2")
-- fix "SSxx" into "SSxx" (with space before)
spaced = spaced:gsub("(%a)(SS%d+)", "%1 %2")
return spaced
end
for family in string.gmatch(families, "%S+") do
local pretty = prettify(family)
rpm.define(string.format("fontfamily%d %s", i, pretty))
if rpm.expand("%{with bins}") == "1" then
-- PkgTTC-Iosevka-33.3.3
rpm.define(string.format("fonts%d %s/*.ttc", i, family))
else
if rpm.expand("%{with ttc}") == "1" then
rpm.define(string.format("fonts%d dist/.ttc/%s/*.ttc", i, family))
else
rpm.define(string.format("fonts%d dist/%s/TTF/*.ttf", i, family))
end
end
rpm.define(string.format("fontdescription%d %%fontdescription (%s)", i, pretty))
i = i + 1
end
rpm.define(string.format("iosevka_family_count %d", i))
}
%global fontorg io.github.be5invis
%global fontlicense OFL-1.1
%if %{with bins}
%global fontlicenses Iosevka-%{version}/LICENSE.md
%else
%global fontlicenses LICENSE.md
%endif
%global foundry Belleve Invis
%global fontdescription %{expand:
Versatile typeface for code, from code.}
Version: 33.3.3
Release: 1%{?dist}
Packager: Cappy Ishihara <cappy@fyralabs.com>
Summary: Versatile typeface for code, from code.
BuildRequires: rpm_macro(fontpkg)
URL: https://github.com/be5invis/Iosevka
Source0: %{url}/archive/refs/tags/v%{version}.tar.gz
%if %{with bins}
BuildRequires: curl
BuildRequires: jq
BuildRequires: aria2
BuildRequires: unzip
%else
BuildRequires: bun-bin
BuildRequires: ttfautohint
%endif
%fontpkg -a
%fontmetapkg
%prep
%if %{with bins}
%setup -c
# TODO: Probably enhance by scripting RPM to add a `SourceN` directive instead
# download prebuilt binaries instead of building from source
# NOTE: May invite the ire of GitHub rate limiting since this pulls
# a LOT of assets in one go
curl https://api.github.com/repos/be5invis/Iosevka/releases/tags/v%{version} \
| jq -r ".assets[] | .browser_download_url" | grep PkgTTC-Iosevka \
| aria2c -i -
%else
%autosetup -n Iosevka-%{version}
bun i
%endif
%build
# XXX: Verda is VERY expensive when building fonts from source,
# which might be fine if you're building on a supercomputer with
# many cores and tons of RAM and lots of time to spare.
#
# By default the SMT build is enabled in case you want to
# melt your computer by literally building fonts from source, see
# the `--with bin` option to disable prebuilt binaries
#
# The build time is roughly ~1.5h * 22 = 33 hours on a quad-core
# machine with 32GB of RAM when building with maximum parallelism,
# so be warned.
#
%if %{with smt}
%define _font_smp_flags --jCmd=%{_smp_build_ncpus}
%else
# However, we will be doing only 1 thread here to avoid
# thrashing builders
%define _font_smp_flags --jCmd=1
%endif
collections="%{_iosevka_families}"
%if %{with bins}
build_font() {
local style=$1
local zipfile="PkgTTC-${style}-%{version}.zip"
unzip -d ${style}/ ${zipfile}
}
%else
build_font() {
local style=$1
bun run --bun build -- ttc::${style} %{_font_smp_flags}
}
%endif
for collection in $collections; do
build_font "$collection"
done
%fontbuild -a
%install
%fontinstall -a
%check
%fontcheck -a
%fontfiles -a
%changelog
%autochangelog
+1
View File
@@ -0,0 +1 @@
rpm.version(gh("be5invis/Iosevka"));