From ae1af5b2bdc475cfde3e9ce669be551d1de18c35a95761355f9c7a90c808c5d0 Mon Sep 17 00:00:00 2001 From: sisungo Date: Mon, 5 Oct 2026 06:10:08 +0000 Subject: [PATCH] feat: add Fira Project fonts Signed-off-by: sisungo --- hooks/autolink.py | 48 ++++++--------- packages/FiraMono-Fonts/configure/fontconfig | 5 ++ packages/FiraMono-Fonts/pkgbuild.py | 38 ++++++++++++ packages/FiraSans-Fonts/configure/fontconfig | 5 ++ packages/FiraSans-Fonts/pkgbuild.py | 61 ++++++++++++++++++++ packages/fontconfig/pkgbuild.py | 26 ++++++++- 6 files changed, 152 insertions(+), 31 deletions(-) create mode 100644 packages/FiraMono-Fonts/configure/fontconfig create mode 100644 packages/FiraMono-Fonts/pkgbuild.py create mode 100644 packages/FiraSans-Fonts/configure/fontconfig create mode 100644 packages/FiraSans-Fonts/pkgbuild.py diff --git a/hooks/autolink.py b/hooks/autolink.py index 5515d5c..1d5880b 100644 --- a/hooks/autolink.py +++ b/hooks/autolink.py @@ -3,6 +3,13 @@ import os from lib import arch, common, make, pkgcomposer +def do(f): + try: + f() + except: + pass + + def is_abslink(path): try: return os.readlink(path).startswith("/") @@ -51,36 +58,19 @@ def autolink_milestones(): if i.is_file() and os.access(i.path, os.F_OK): make.link(f"share/milestones/{i.name}", "/share/milestones/" + i.name) +def autolink_fonts(): + for i in common.treedir("share/fonts"): + if i.is_file() and os.access(i.path, os.F_OK): + make.link(f"share/fonts/{i.name}", "/share/fonts/" + i.name) + def autolink(composer: pkgcomposer.PkgComposer): os.chdir(composer.workdir + "/bundle/") - try: - autolink_bin() - except: - pass - - try: - autolink_lib() - except: - pass - - try: - autolink_include() - except: - pass - - try: - autolink_share_pkgconfig() - except: - pass - - try: - autolink_services() - except: - pass - - try: - autolink_milestones() - except: - pass + do(autolink_bin) + do(autolink_lib) + do(autolink_include) + do(autolink_share_pkgconfig) + do(autolink_services) + do(autolink_milestones) + do(autolink_fonts) diff --git a/packages/FiraMono-Fonts/configure/fontconfig b/packages/FiraMono-Fonts/configure/fontconfig new file mode 100644 index 0000000..8cc3666 --- /dev/null +++ b/packages/FiraMono-Fonts/configure/fontconfig @@ -0,0 +1,5 @@ +#!/bin/sh + +command -v fc-cache >/dev/null 2>&1 || exit 0 + +fc-cache -fs diff --git a/packages/FiraMono-Fonts/pkgbuild.py b/packages/FiraMono-Fonts/pkgbuild.py new file mode 100644 index 0000000..548a70a --- /dev/null +++ b/packages/FiraMono-Fonts/pkgbuild.py @@ -0,0 +1,38 @@ +import os + +from lib.make import * + +upstream_version = "3.206" + +version(upstream_version) +description("Monospaced variant of the Fira Sans font series") +maintainer("sisungo ") +source_url("https://carrois.com/downloads/Fira/Fira_Mono_3_2.zip") + + +def build(): + os.chdir("Fonts/FiraMono_OTF_32") + +on_build(build) + + +def declare_seperate(name): + def pack(composer): + composer.makedirs("share/fonts/FiraMono") + composer.add(f"{name}.otf", f"share/fonts/FiraMono/{name}.otf") + + package(name) + arch_any() + configure_script("configure/fontconfig") + on_pack(pack) + +declare_seperate("FiraMono-Bold") +declare_seperate("FiraMono-Medium") +declare_seperate("FiraMono-Regular") + +package("FiraMono-Fonts") +arch_any() +dep("FiraMono-Bold (same-version) @any") +dep("FiraMono-Medium (same-version) @any") +dep("FiraMono-Regular (same-version) @any") +on_pack(lambda x: print("Packing FiraMono-Fonts.")) diff --git a/packages/FiraSans-Fonts/configure/fontconfig b/packages/FiraSans-Fonts/configure/fontconfig new file mode 100644 index 0000000..8cc3666 --- /dev/null +++ b/packages/FiraSans-Fonts/configure/fontconfig @@ -0,0 +1,5 @@ +#!/bin/sh + +command -v fc-cache >/dev/null 2>&1 || exit 0 + +fc-cache -fs diff --git a/packages/FiraSans-Fonts/pkgbuild.py b/packages/FiraSans-Fonts/pkgbuild.py new file mode 100644 index 0000000..756d075 --- /dev/null +++ b/packages/FiraSans-Fonts/pkgbuild.py @@ -0,0 +1,61 @@ +import os + +from lib.make import * + +upstream_version = "4.301" + +version(upstream_version) +description("a humanist sans-serif typeface designed by Carrois Type Design and Mozilla") +maintainer("sisungo ") +source_url("https://carrois.com/downloads/Fira/Download_Folder_FiraSans_4301.zip") + + +widths = ["Compressed", "Condensed", "Normal"] +styles = ["Italic", "Roman"] +weights = ["Bold", "Book", "Eight", "ExtraBold", "ExtraLight", "Four", "Hair", "Heavy", "", "Light", "Medium", "SemiBold", "Thin", "Two", "Ultra", "UltraLight"] + + +def find_file(width, style, weight): + modify = width + if width == "Normal": + modify = "" + filename = f"FiraSans{modify}-{weight}{style}.otf" + if os.path.exists(f"{width}/{style}/{filename}"): + return filename + return None + +def on_pack_by(width, style, weight): + def pack(composer): + composer.makedirs("share/fonts/FiraSans") + filename = find_file(width, style, weight) + composer.add( + f"{width}/{style}/{filename}", + f"share/fonts/FiraSans/{filename}", + ) + on_pack(pack) + + +def build(): + filename_version = upstream_version.replace('.', '') + os.chdir(f"Download_Folder_FiraSans_{filename_version}/Fonts/Fira_Sans_OTF_{filename_version}") + + packages = [] + for width in widths: + for style in styles: + for weight in weights: + filename = find_file(width, style, weight) + if filename: + pkgname = filename.replace(".otf", "") + package(pkgname) + configure_script("configure/fontconfig") + arch_any() + on_pack_by(width, style, weight) + packages += [pkgname] + + package("FiraSans-Fonts") + arch_any() + for pkgname in packages: + dep(f"{pkgname} (same-version) @any") + on_pack(lambda x: print("Packing FiraSans-Fonts.")) + +on_build(build) diff --git a/packages/fontconfig/pkgbuild.py b/packages/fontconfig/pkgbuild.py index 2d644b2..eeb4606 100644 --- a/packages/fontconfig/pkgbuild.py +++ b/packages/fontconfig/pkgbuild.py @@ -1,3 +1,5 @@ +import glob + from lib import cpp from lib.make import * @@ -20,6 +22,7 @@ builddep("libpng-dev @target") def build(): cpp.meson_setup([ + "--prefix=/", f"--datadir={get_prefix('libfontconfig')}/share", "--sysconfdir=/var/config", "-Dnls=enabled", @@ -27,6 +30,9 @@ def build(): "-Dcache-build=disabled", "-Dxml-backend=expat", "-Ddefault-fonts-dirs=/share/fonts", + "-Dcache-dir=/var/cache/fontconfig", + f"-Dbaseconfig-dir={get_prefix('libfontconfig')}/share/base-config", + "-Dconfig-dir=/var/config/fontconfig", ]) cpp.meson_compile() cpp.meson_install() @@ -34,10 +40,26 @@ def build(): on_build(build) +def pack_lib(composer): + composer.makedir("lib") + for i in glob.glob("lib/*.so*"): + composer.add(i) + composer.makedir("share") + composer.add("share/base-config") + composer.add("share/fontconfig") + +def pack_dev(composer): + composer.makedir("lib") + composer.add("include") + composer.add("lib/pkgconfig") + composer.makedir("share") + composer.add("share/gettext") + composer.add("share/xml") + package("libfontconfig") dep("libexpat @same-arch") dep("libfreetype @same-arch") -cpp.use_auto_pack(["lib"]) +on_pack(pack_lib) package("fontconfig") dep("libfontconfig (same)") @@ -47,4 +69,4 @@ package("libfontconfig-dev") dep("libfontconfig (same)") dep("libexpat-dev @same-arch") dep("libfreetype-dev @same-arch") -cpp.use_auto_pack(["dev"]) +on_pack(pack_dev)