about summary refs log tree commit diff
path: root/pkgs/data/fonts
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/data/fonts')
-rw-r--r--pkgs/data/fonts/0xproto/default.nix4
-rw-r--r--pkgs/data/fonts/babelstone-han/default.nix2
-rw-r--r--pkgs/data/fonts/bront/default.nix2
-rw-r--r--pkgs/data/fonts/fg-virgil/default.nix4
-rw-r--r--pkgs/data/fonts/iosevka/bin.nix22
-rw-r--r--pkgs/data/fonts/iosevka/comfy.nix31
-rw-r--r--pkgs/data/fonts/iosevka/default.nix42
-rwxr-xr-xpkgs/data/fonts/iosevka/update-bin.sh4
-rw-r--r--pkgs/data/fonts/iosevka/variants.nix182
-rw-r--r--pkgs/data/fonts/julia-mono/default.nix4
-rw-r--r--pkgs/data/fonts/junicode/default.nix27
-rw-r--r--pkgs/data/fonts/junicode/test-vf.tex46
-rw-r--r--pkgs/data/fonts/junicode/test.tex46
-rw-r--r--pkgs/data/fonts/junicode/tests.nix35
-rw-r--r--pkgs/data/fonts/junicode/tex-font-path.patch166
-rw-r--r--pkgs/data/fonts/kode-mono/default.nix4
-rw-r--r--pkgs/data/fonts/lxgw-neoxihei/default.nix4
-rw-r--r--pkgs/data/fonts/lxgw-wenkai/default.nix4
-rw-r--r--pkgs/data/fonts/marathi-cursive/default.nix2
-rw-r--r--pkgs/data/fonts/mplus-outline-fonts/default.nix2
-rw-r--r--pkgs/data/fonts/openmoji/build.patch77
-rw-r--r--pkgs/data/fonts/openmoji/default.nix108
-rw-r--r--pkgs/data/fonts/sarasa-gothic/default.nix34
-rw-r--r--pkgs/data/fonts/sketchybar-app-font/default.nix6
-rw-r--r--pkgs/data/fonts/smiley-sans/default.nix4
-rw-r--r--pkgs/data/fonts/sudo/default.nix4
-rw-r--r--pkgs/data/fonts/tamzen/default.nix4
-rw-r--r--pkgs/data/fonts/twemoji-color-font/default.nix6
-rw-r--r--pkgs/data/fonts/ubuntu-font-family/default.nix2
-rw-r--r--pkgs/data/fonts/undefined-medium/default.nix6
-rw-r--r--pkgs/data/fonts/unifont/default.nix6
-rw-r--r--pkgs/data/fonts/unifont_upper/default.nix4
-rw-r--r--pkgs/data/fonts/vdrsymbols/default.nix2
-rw-r--r--pkgs/data/fonts/victor-mono/default.nix4
34 files changed, 630 insertions, 270 deletions
diff --git a/pkgs/data/fonts/0xproto/default.nix b/pkgs/data/fonts/0xproto/default.nix
index 778c1ff79fa9..ee43ede57da4 100644
--- a/pkgs/data/fonts/0xproto/default.nix
+++ b/pkgs/data/fonts/0xproto/default.nix
@@ -4,14 +4,14 @@
 }:
 stdenvNoCC.mkDerivation rec {
   pname = "0xproto";
-  version = "1.601";
+  version = "1.603";
 
   src = let
     underscoreVersion = builtins.replaceStrings ["."] ["_"] version;
   in
     fetchzip {
       url = "https://github.com/0xType/0xProto/releases/download/${version}/0xProto_${underscoreVersion}.zip";
-      hash = "sha256-f/5YmyIF66+7w2Tb0V0UKRjwDYDdZ0BEqsEuyN0FaDQ=";
+      hash = "sha256-20KqPX6BKlyX+R3zrhDMz3p9Vwgd4RlRe2qhJpic6W4=";
     };
 
   installPhase = ''
diff --git a/pkgs/data/fonts/babelstone-han/default.nix b/pkgs/data/fonts/babelstone-han/default.nix
index 9839295653d1..6dfad42d2086 100644
--- a/pkgs/data/fonts/babelstone-han/default.nix
+++ b/pkgs/data/fonts/babelstone-han/default.nix
@@ -23,7 +23,7 @@ stdenvNoCC.mkDerivation {
     description = "Unicode CJK font with over 36000 Han characters";
     homepage = "https://www.babelstone.co.uk/Fonts/Han.html";
 
-    license = licenses.free;
+    license = licenses.arphicpl;
     platforms = platforms.all;
     maintainers = with maintainers; [ emily ];
   };
diff --git a/pkgs/data/fonts/bront/default.nix b/pkgs/data/fonts/bront/default.nix
index d21c820f127b..36e6adb380df 100644
--- a/pkgs/data/fonts/bront/default.nix
+++ b/pkgs/data/fonts/bront/default.nix
@@ -19,7 +19,7 @@ stdenvNoCC.mkDerivation {
     description = "Bront Fonts";
     longDescription = "Ubuntu Mono Bront and DejaVu Sans Mono Bront fonts.";
     homepage = "https://github.com/chrismwendt/bront";
-    license = licenses.free;
+    license = with licenses; [ bitstreamVera ufl ];
     platforms = platforms.all;
     maintainers = [ maintainers.grburst ];
   };
diff --git a/pkgs/data/fonts/fg-virgil/default.nix b/pkgs/data/fonts/fg-virgil/default.nix
index e0837c71d8eb..da9ecb235005 100644
--- a/pkgs/data/fonts/fg-virgil/default.nix
+++ b/pkgs/data/fonts/fg-virgil/default.nix
@@ -2,13 +2,13 @@
 
 stdenvNoCC.mkDerivation (finalAttrs: {
   pname = "fg-virgil";
-  version = "0.17.0";
+  version = "0.17.3";
 
   src = fetchFromGitHub {
     owner = "excalidraw";
     repo = "excalidraw";
     rev = "v${finalAttrs.version}";
-    hash = "sha256-awd5jTz4sSiliEq7xt6dUR31C85oDcCP5GLuQn0ohj0=";
+    hash = "sha256-j8fT17RkgMQAAS4KsC2+uItT8Z300SZWnLkyo4XI1WY=";
   };
 
   installPhase = ''
diff --git a/pkgs/data/fonts/iosevka/bin.nix b/pkgs/data/fonts/iosevka/bin.nix
index 4b0f78e298ab..e0fb9bcabcc2 100644
--- a/pkgs/data/fonts/iosevka/bin.nix
+++ b/pkgs/data/fonts/iosevka/bin.nix
@@ -1,20 +1,26 @@
-{ stdenv, lib, fetchurl, iosevka, unzip
+{ stdenv
+, lib
+, fetchurl
+, iosevka
+, unzip
 , variant ? ""
 }:
 
 let
-  name = if lib.hasPrefix "sgr" variant then variant
-    else "iosevka" + lib.optionalString (variant != "") "-" + variant;
+  name =
+    if lib.hasPrefix "SGr-" variant then variant
+    else "Iosevka" + variant;
 
   variantHashes = import ./variants.nix;
-  validVariants = map (lib.removePrefix "iosevka-")
-    (builtins.attrNames (builtins.removeAttrs variantHashes [ "iosevka" ]));
-in stdenv.mkDerivation rec {
+  validVariants = map (lib.removePrefix "Iosevka")
+    (builtins.attrNames (builtins.removeAttrs variantHashes [ "Iosevka" ]));
+in
+stdenv.mkDerivation rec {
   pname = "${name}-bin";
-  version = "27.3.5";
+  version = "29.0.2";
 
   src = fetchurl {
-    url = "https://github.com/be5invis/Iosevka/releases/download/v${version}/ttc-${name}-${version}.zip";
+    url = "https://github.com/be5invis/Iosevka/releases/download/v${version}/PkgTTC-${name}-${version}.zip";
     sha256 = variantHashes.${name} or (throw ''
       No such variant "${variant}" for package iosevka-bin.
       Valid variants are: ${lib.concatStringsSep ", " validVariants}.
diff --git a/pkgs/data/fonts/iosevka/comfy.nix b/pkgs/data/fonts/iosevka/comfy.nix
index fb788b287635..63dfca58d544 100644
--- a/pkgs/data/fonts/iosevka/comfy.nix
+++ b/pkgs/data/fonts/iosevka/comfy.nix
@@ -4,21 +4,21 @@ let
   sets = [
     # Family                  | Shapes | Spacing | Style      | Ligatures |
     # ------------------------+--------+---------+------------+-----------|
-    "comfy"                   # Sans   | Compact | Monospaced | Yes       |
-    "comfy-fixed"             # Sans   | Compact | Monospaced | No        |
-    "comfy-duo"               # Sans   | Compact | Duospaced  | Yes       |
+    "comfy" #                 | Sans   | Compact | Monospaced | Yes       |
+    "comfy-fixed" #           | Sans   | Compact | Monospaced | No        |
+    "comfy-duo" #             | Sans   | Compact | Duospaced  | Yes       |
     # ------------------------+--------+---------+------------+-----------|
-    "comfy-motion"            # Slab   | Compact | Monospaced | Yes       |
-    "comfy-motion-fixed"      # Slab   | Compact | Monospaced | No        |
-    "comfy-motion-duo"        # Slab   | Compact | Duospaced  | Yes       |
+    "comfy-motion" #          | Slab   | Compact | Monospaced | Yes       |
+    "comfy-motion-fixed" #    | Slab   | Compact | Monospaced | No        |
+    "comfy-motion-duo" #      | Slab   | Compact | Duospaced  | Yes       |
     # ------------------------+--------+---------+------------+-----------|
-    "comfy-wide"              # Sans   | Wide    | Monospaced | Yes       |
-    "comfy-wide-fixed"        # Sans   | Wide    | Monospaced | No        |
-    "comfy-wide-duo"          # Sans   | Wide    | Duospaced  | Yes       |
+    "comfy-wide" #            | Sans   | Wide    | Monospaced | Yes       |
+    "comfy-wide-fixed" #      | Sans   | Wide    | Monospaced | No        |
+    "comfy-wide-duo" #        | Sans   | Wide    | Duospaced  | Yes       |
     # ------------------------+--------+---------+------------+-----------|
-    "comfy-wide-motion"       # Slab   | Wide    | Monospaced | Yes       |
+    "comfy-wide-motion" #     | Slab   | Wide    | Monospaced | Yes       |
     "comfy-wide-motion-fixed" # Slab   | Wide    | Monospaced | No        |
-    "comfy-wide-motion-duo"   # Slab   | Wide    | Duospaced  | Yes       |
+    "comfy-wide-motion-duo" # | Slab   | Wide    | Duospaced  | Yes       |
   ];
   version = "1.4.0";
   src = fetchFromGitHub {
@@ -34,6 +34,7 @@ let
       inherit set privateBuildPlan;
       buildNpmPackage = args: superBuildNpmPackage
         (args // {
+          pname = "iosevka-${set}";
           inherit version;
 
           src = fetchFromGitHub {
@@ -45,6 +46,14 @@ let
 
           npmDepsHash = "sha256-c+ltdh5e3+idclYfqp0Xh9IUwoj7XYP1uzJG6+a5gFU=";
 
+          installPhase = ''
+            runHook preInstall
+            fontdir="$out/share/fonts/truetype"
+            install -d "$fontdir"
+            install "dist/$pname/ttf"/* "$fontdir"
+            runHook postInstall
+          '';
+
           meta = with lib; {
             inherit (src.meta) homepage;
             description = ''
diff --git a/pkgs/data/fonts/iosevka/default.nix b/pkgs/data/fonts/iosevka/default.nix
index 6993a1641de5..a44fe0a09737 100644
--- a/pkgs/data/fonts/iosevka/default.nix
+++ b/pkgs/data/fonts/iosevka/default.nix
@@ -54,17 +54,17 @@ assert (privateBuildPlan != null) -> set != null;
 assert (extraParameters != null) -> set != null;
 
 buildNpmPackage rec {
-  pname = if set != null then "iosevka-${set}" else "iosevka";
-  version = "27.3.5";
+  pname = "Iosevka${toString set}";
+  version = "29.0.3";
 
   src = fetchFromGitHub {
     owner = "be5invis";
     repo = "iosevka";
     rev = "v${version}";
-    hash = "sha256-dqXr/MVOuEmAMueaRWsnzY9MabhnyBRtLR9IDVLN79I=";
+    hash = "sha256-7vNfmrQ/B+T9hF5/ikIU1RvBcSRStnEmOY7VPbrll6s=";
   };
 
-  npmDepsHash = "sha256-bux8aFBP1Pi5pAQY1jkNTqD2Ny2j+QQs+QRaXWJj6xg=";
+  npmDepsHash = "sha256-FGGhuMlDhXd97AY23/ZPlrcrmirZIooAYJaskn2aM6w=";
 
   nativeBuildInputs = [
     remarshal
@@ -88,29 +88,29 @@ buildNpmPackage rec {
     ) [ "buildPlan" ];
 
   configurePhase = ''
-    runHook preConfigure
-    ${lib.optionalString (builtins.isAttrs privateBuildPlan) ''
-      remarshal -i "$buildPlanPath" -o private-build-plans.toml -if json -of toml
-    ''}
-    ${lib.optionalString (builtins.isString privateBuildPlan
-      && (!lib.hasPrefix builtins.storeDir privateBuildPlan)) ''
-        cp "$buildPlanPath" private-build-plans.toml
+      runHook preConfigure
+      ${lib.optionalString (builtins.isAttrs privateBuildPlan) ''
+        remarshal -i "$buildPlanPath" -o private-build-plans.toml -if json -of toml
       ''}
-    ${lib.optionalString (builtins.isString privateBuildPlan
-      && (lib.hasPrefix builtins.storeDir privateBuildPlan)) ''
-        cp "$buildPlan" private-build-plans.toml
+      ${lib.optionalString (builtins.isString privateBuildPlan
+    && (!lib.hasPrefix builtins.storeDir privateBuildPlan)) ''
+          cp "$buildPlanPath" private-build-plans.toml
+        ''}
+      ${lib.optionalString (builtins.isString privateBuildPlan
+    && (lib.hasPrefix builtins.storeDir privateBuildPlan)) ''
+          cp "$buildPlan" private-build-plans.toml
+        ''}
+      ${lib.optionalString (extraParameters != null) ''
+        echo -e "\n" >> params/parameters.toml
+        cat "$extraParametersPath" >> params/parameters.toml
       ''}
-    ${lib.optionalString (extraParameters != null) ''
-      echo -e "\n" >> params/parameters.toml
-      cat "$extraParametersPath" >> params/parameters.toml
-    ''}
-    runHook postConfigure
+      runHook postConfigure
   '';
 
   buildPhase = ''
     export HOME=$TMPDIR
     runHook preBuild
-    npm run build --no-update-notifier -- --jCmd=$NIX_BUILD_CORES --verbose=9 ttf::$pname
+    npm run build --no-update-notifier --targets ttf::$pname -- --jCmd=$NIX_BUILD_CORES --verbose=9
     runHook postBuild
   '';
 
@@ -118,7 +118,7 @@ buildNpmPackage rec {
     runHook preInstall
     fontdir="$out/share/fonts/truetype"
     install -d "$fontdir"
-    install "dist/$pname/ttf"/* "$fontdir"
+    install "dist/$pname/TTF"/* "$fontdir"
     runHook postInstall
   '';
 
diff --git a/pkgs/data/fonts/iosevka/update-bin.sh b/pkgs/data/fonts/iosevka/update-bin.sh
index 68f93f1f26e6..bfa50e1a6e52 100755
--- a/pkgs/data/fonts/iosevka/update-bin.sh
+++ b/pkgs/data/fonts/iosevka/update-bin.sh
@@ -19,9 +19,9 @@ sed -i "s/$oldVersion/$version/" bin.nix
 {
     echo '# This file was autogenerated. DO NOT EDIT!'
     echo '{'
-    for asset in $(echo "$release" | jq -r '.assets[].name | select(startswith("ttc"))'); do
+    for asset in $(echo "$release" | jq -r '.assets[].name | select(startswith("PkgTTC"))'); do
         printf '  %s = "%s";\n' \
-            $(echo "$asset" | sed -r "s/^ttc-(.*)-$version.zip$/\1/") \
+            $(echo "$asset" | sed -r "s/^PkgTTC-(.*)-$version.zip$/\1/") \
             $(nix-prefetch-url "https://github.com/be5invis/Iosevka/releases/download/v$version/$asset")
     done
     echo '}'
diff --git a/pkgs/data/fonts/iosevka/variants.nix b/pkgs/data/fonts/iosevka/variants.nix
index 5e71e08b78da..8a5127b3fd33 100644
--- a/pkgs/data/fonts/iosevka/variants.nix
+++ b/pkgs/data/fonts/iosevka/variants.nix
@@ -1,95 +1,93 @@
 # This file was autogenerated. DO NOT EDIT!
 {
-  iosevka = "0s37z4yml026pmaj6gpc603mry34hlzg67b0v9rblb90rx7xqlii";
-  iosevka-aile = "1vpn9mg48xy4jmbs804zmisaj1mnvwv5b9c0iy6mrwkd5m7gcqfb";
-  iosevka-curly = "138wwgn03cx0lkgs2mbydiyggjmbmy3iz4wgn17sbp5d7m7g0sp3";
-  iosevka-curly-slab = "024miwl9y57rxmc4hnyjk0j861wapyfy4jpg5q61jjh6nji3qwrk";
-  iosevka-etoile = "0gcdpzi6riy6x9qcjzmvb2kcdh209d8zbbc78b95ymgyndzwp3k2";
-  iosevka-slab = "1gny1az6lrg24dx9qrrpbrq85mkn6684970gbvl8wjh1pmkv2w14";
-  iosevka-ss01 = "06kw96biyyp35cc4x5pr3bf08f72020nvwcz12wk0qms02rz37s0";
-  iosevka-ss02 = "0yd18n2vrxbpf4kccad5q0cr24j04grz57l2jpgr3j3qiwz53zn1";
-  iosevka-ss03 = "01203jgpx8hsxs2jq5py8404y1cz95m5bsdzgya3nhyfslix7dxz";
-  iosevka-ss04 = "1c2xs689fqzzvbv72wb7pfwx687hrl8vzvakjbl317qpzmlrlbkr";
-  iosevka-ss05 = "0whfsl9ma1590zmks0r7lywc0sfy6mq74p8mhkmds6h35nri9djj";
-  iosevka-ss06 = "065lqb0w4cvhk7jadic2xn4pdq0rrg4f4b0gpc5z0xa2fsvw4rir";
-  iosevka-ss07 = "0bhl2p0zrzdn9vhl5ndfdzd7658qsaci41l6vpcsl5x9np3ii2jg";
-  iosevka-ss08 = "1ka2ii29v4aqqiwfbjcwsqsj2gpa46mpnv7d11rgn49n4j0isk1p";
-  iosevka-ss09 = "08n44fjsas94d7q1x9az58z5p786gxh8665yyhvhjzh76pzrkbwj";
-  iosevka-ss10 = "136pvfw6lab3vwzrx45cqkh1n6r8srahd9jbi9li02r19m78qp6f";
-  iosevka-ss11 = "0wgnzq1vfibxgb50dcwjsvf20jvjvhp1xwsbh1zpqqsh1kr89bln";
-  iosevka-ss12 = "0ql1xhjk2alrvyryvjaw54z9gnh4gi58nhskrhnkz4mdlr7a6xr3";
-  iosevka-ss13 = "0ivk20l8y2g0s7729wjc4h9bdqvjn859ij8vaccl12ql58i2phhb";
-  iosevka-ss14 = "0ib2ynpk7lcisbmcrrd2wlia7rh243zq1hys6ln2r3gd75m6hvbq";
-  iosevka-ss15 = "0yp0n7d5wwwykmzlc41fywc1mx06khp3xiy6gad9bng7mavpx91c";
-  iosevka-ss16 = "0gm0b50zhc2hc6l3qpl4q3jk8rcr9bh8y0i65xcv3bm456753l4v";
-  iosevka-ss17 = "0yf244n7161zk1csxnb7zx2c95q79jibplvczqfh2k8as3r4xw07";
-  iosevka-ss18 = "1886h5dzswspd0j3hs0d6m271qqsfp3zkihyp9acpf2v4r56nmmn";
-  sgr-iosevka = "1kl1wkgda764qqyyk14s0gfb2qavsfvc9zbr30z7zdkcqxk383gd";
-  sgr-iosevka-aile = "115ynw0dysf9473j6jami7yf79i6rlhm7a019fxlfcqnm2k3zz5r";
-  sgr-iosevka-curly = "010g7cgd3r8dw48mfdmcqzymqn8mqn5xnnvinvilahxq0qaj2s4w";
-  sgr-iosevka-curly-slab = "1fk67ay7bs1s1qajlrib06n0y1ii1fjlxdqrj2dvzlji8ac35hqc";
-  sgr-iosevka-etoile = "1gf696k4f4hh1yh664d361x0n65sh6q0i3n8as5id2vpzcjbn83w";
-  sgr-iosevka-fixed = "12v438imi2891b4ra3c48imd0n429aa889myhkglrky1bfxwwpw2";
-  sgr-iosevka-fixed-curly = "1v4vv48an8l9a5diavxap328d3qd6iy6hbwkkn64db2vxwmkdml7";
-  sgr-iosevka-fixed-curly-slab = "0xbz45qkd9paghrdx4s1gxgnn872fmywmr7il0v5yir81wys1z97";
-  sgr-iosevka-fixed-slab = "1w7qsg6a2g27izbmqshly2bnsbwdf2rhymvnq30vqgb2f1a6rlwq";
-  sgr-iosevka-fixed-ss01 = "1f4fi4h3fl7c3b0maj2l9df4yfs4pqj9rq5f7kk9kl2jnk0zq6yy";
-  sgr-iosevka-fixed-ss02 = "18q603zbi1dk1z8n215z2kyi3rcxik6m6cffihml0f1sb39rh3r7";
-  sgr-iosevka-fixed-ss03 = "05xs1z82ck01f9x3vhc74ajbgj9ms14bbmbcz0cf18sx03hpyz84";
-  sgr-iosevka-fixed-ss04 = "00rb7580xppnvjph6az2ldhgagahvivirzax2pf3fxd5an08zmla";
-  sgr-iosevka-fixed-ss05 = "1smjnzjhkxkb9m79d8ynp30846zggb88z7qxd2q58iadq8narx2q";
-  sgr-iosevka-fixed-ss06 = "0wqd4pyv66axwsnicbpzidghvh3cx2lyzjmj66734rqz8slsrjb6";
-  sgr-iosevka-fixed-ss07 = "1xbs7mjvl8mvi4jhmxnfadvvgpyvyh7y4yqn8vhgbcxp84fzgy3j";
-  sgr-iosevka-fixed-ss08 = "0x2kkfffhapj4vnfpdv49zr4wrf02sw6467qrky9sf9phkwa40vh";
-  sgr-iosevka-fixed-ss09 = "0z436cps3rb8kfm7pxjjs8p3bjwrg86p549nd6fvgp67p05xx38r";
-  sgr-iosevka-fixed-ss10 = "0qpjdgzqb5yadp4bz26kmwjdmpaak7s2mj9km2g565bci096cri4";
-  sgr-iosevka-fixed-ss11 = "1i306ai7drhca8ammi6dz8j6v68mjyxwc35zzg801shgy8a00scd";
-  sgr-iosevka-fixed-ss12 = "0aza67vz3mrq9ah5pm7lyahdbh0dhzzp8v4hy5slmy8a766ha9gm";
-  sgr-iosevka-fixed-ss13 = "022nrapzv1s2a5davh1bpqgm46r04fbns5x6z3826ydsrwkapfs7";
-  sgr-iosevka-fixed-ss14 = "023f8j5rzivmqg61larm5kjyb7sd8prqilzd99xp1b97zi4iy0kg";
-  sgr-iosevka-fixed-ss15 = "0xb85wsfha7z0krlnb1nhzqd4cva13dvrp8kpfpnmmz1alpvgx0x";
-  sgr-iosevka-fixed-ss16 = "0n3chagxlypxsj1zb2r6z3vjfix15pc3nc8sx5cc9j4inb7v5z5v";
-  sgr-iosevka-fixed-ss17 = "0kzk2llpwi9plbn3jw203chr8ahpq6kbv9b4i9maf3ljvgdy7nyc";
-  sgr-iosevka-fixed-ss18 = "1mzv3zkxrd1lsri1niiqvlkpzhxy9m0gr3ygxzrrfj3f6p6wzq87";
-  sgr-iosevka-slab = "1fsl0qsvmfhxjc6y5g8d90x39mz5hzw55xfnwzjjifls6igc8kd4";
-  sgr-iosevka-ss01 = "0z18akfqsgr6qcqrcrrwpfdswzk8if9cdhahqgjnkw90qm4m6pyq";
-  sgr-iosevka-ss02 = "0x0bc72y835xlz9k2xbbpgccrgswkg7w1hia86x6d91kgj7whmg4";
-  sgr-iosevka-ss03 = "0v56qc9aj2k1vs7wxnni21hflady4n5qi05gysp193n7j440l3ci";
-  sgr-iosevka-ss04 = "0nidrw3pjcn5fz2a6ysvdkqah31rzgnsg4z7p804h9cnqwl2b2m4";
-  sgr-iosevka-ss05 = "0khphs4d28sas5i31kbbj2zv0b45vc0p05d9kyg3azl4hl72ic41";
-  sgr-iosevka-ss06 = "0qmr33qv890jqygz6gllh1g0fvvxyjmla0hb02zcgljrccwq7jyd";
-  sgr-iosevka-ss07 = "09952mnal5mdz5fqfg4ayidvxcc8sfwv7d127vdzxhawg60ikkss";
-  sgr-iosevka-ss08 = "1ymf7j5jx2jdh6n910d89k71m95hg05dp6g6mvv0c7m4yf5wd7m3";
-  sgr-iosevka-ss09 = "0gh7rx8fzbx61jba34kcwlazxg7ar4y6vp1h6aysn30fv7q9p7rp";
-  sgr-iosevka-ss10 = "0i72r3xllg8am12n700zylc1a8nc4xnj5zxhfhvlk1czdhv7dln6";
-  sgr-iosevka-ss11 = "0hs8b9fmjwxbl08652zfkgdmq0dds43jsr2qd3npmg6cg2xdiz2n";
-  sgr-iosevka-ss12 = "0crs18k93v2xsry8fmf07wfpl3n7ixdn2sy7xls4ijk5wk0nd6vr";
-  sgr-iosevka-ss13 = "1fg883qjpqpcxwh9bwc88nzihisr212q1fdrrzy8q3p9vy322j5j";
-  sgr-iosevka-ss14 = "1ix85cr0prgfrxckzgf2xdnh9zv6d8v2f4lf6syq0rax2wpdxdk7";
-  sgr-iosevka-ss15 = "098fjkjlgnzmw4wgr2d7vx627xiq7n19rc2x5f6qhqcfxcvayf0f";
-  sgr-iosevka-ss16 = "0ibfr10h6gxnimpq0bbp2n61a4y4rdkwa5x6m8hlxndxi801zy8j";
-  sgr-iosevka-ss17 = "11zx7lpp8xy67x35a6089s3fq0i1yqfdkckxnp2f32szv67midp0";
-  sgr-iosevka-ss18 = "1zdfk1a9sixn7as75sjf7sgh3qhhhs819305i9aw93dy4ghvc4zc";
-  sgr-iosevka-term = "091rkh4abm90hakq78w7r3ks9kcyx7kpcfvvcx8ydq7qammc2064";
-  sgr-iosevka-term-curly = "0kqxraz8jl7w97yf4x9jp7rkbkxjj85yghw0f70g3idxmzk2n4fh";
-  sgr-iosevka-term-curly-slab = "1q10n7wckzv1y9dq0b3jj61h39mcjhkga310pm8r0mjh59jsqxxk";
-  sgr-iosevka-term-slab = "1pzd5gzz7s1gawvvqnh8gfc6cm5c56ajvkc6c3fnjycl1v9fr3fg";
-  sgr-iosevka-term-ss01 = "0za9kwg389znql9jycs02xnmn9wi9c9ganwlqrsmazgcg6cxksds";
-  sgr-iosevka-term-ss02 = "0qli57cva503qvxqx86lrl6mjmbq9n0i04198vzjs5ad151iqk2a";
-  sgr-iosevka-term-ss03 = "0yfp4a6m9dl67kc8wa4skzrlkh1ysh0a0ndv3gvknaidzpqyigwh";
-  sgr-iosevka-term-ss04 = "1b8yvv3i66d0j4z8fh94q97hqgw404pf1z57p7kx31nlgs0p26kq";
-  sgr-iosevka-term-ss05 = "1x6adciw3irh6xsxjlw668l0cz094zin1p4f83allc2bkphq3f9w";
-  sgr-iosevka-term-ss06 = "1z73jak1ffc1mdnfh3j1z33b8sj5bbh5s86mn7ki5fy5wvq65sih";
-  sgr-iosevka-term-ss07 = "1f028x2m39xphvx265qzh3mrirj3rkwv9jmr5q4qdpvpk7xnbra9";
-  sgr-iosevka-term-ss08 = "1i0k7k21fmnb0s5ri840a45ycxmm9dz2zw59n4sxivyv70fhhsfc";
-  sgr-iosevka-term-ss09 = "1qn891rqxha2sr9w2h885xx4fnyc9scjqqp148dpsnn32cg7bqpr";
-  sgr-iosevka-term-ss10 = "02a1nxcv4q6s6kvlxrq7b9xdym2j7in40pkw05df8wqmlqzmgv2b";
-  sgr-iosevka-term-ss11 = "0fwjn4a5p65q5rdbb9wb979ff4k5r2ifh2x99jhj0xhwpy8dza1i";
-  sgr-iosevka-term-ss12 = "1ycga16psqw4jh6gzxji6sbvhlq6488hkkqwsh1h860gjql0ckm6";
-  sgr-iosevka-term-ss13 = "1f715vxs5j5ham5ihpxzq36ykn2nm2f62gg8s3yzsyp9s58sndmd";
-  sgr-iosevka-term-ss14 = "1l2s2naa77xv1dwng6lw0zccbndaln8viamsgmbrqjwfdisbrlzw";
-  sgr-iosevka-term-ss15 = "1wmkpilp06633rdaf5dzbw48srikh5a8jvk8prcwka4flrs5crnq";
-  sgr-iosevka-term-ss16 = "0ccxfk87qp4lr3g67lzbphw6rknvc78h66bbpq5smk0diad8q3nc";
-  sgr-iosevka-term-ss17 = "1hm0m9gr8pwbp34fsg9dxcmawn2czmx908gajv4miq4wg0ivsz8k";
-  sgr-iosevka-term-ss18 = "1ylbvygxdn3f2crkrywhj0jc15hdpwh08f925xxygq3vrshd22r6";
+  Iosevka = "1yw8dj5fs6acs0vcm5jdglgqqpx82nfwwhr8kzlcjvrjiyn0dg3q";
+  IosevkaAile = "1jl6v43r9kh5a3frplr8l133d9abipxm7fpzfwnf8d9l2pm1ipmn";
+  IosevkaCurly = "1f9v8y3hpn4ldr2qixzx5amzx37xiwhi7lpmf1lsf3z7fdack1jm";
+  IosevkaCurlySlab = "1viaiydv9if9q7d86y8c74xd724dgcfy471xxr6khhlfj2akfaki";
+  IosevkaEtoile = "17i072i6fjqpf9bkb8gsdjhxcm9nlg8zyprm1rs9qcwvvd2cjjxv";
+  IosevkaSlab = "18b9w8nx26vq5c2izdg1vgiihjldwc58vyrxwvmkf854h7k2rbnh";
+  IosevkaSS01 = "0dzs6lipc91ywnrxiyxb5vyg4srqlnvr3nfcgilxws9c3dl1ny39";
+  IosevkaSS02 = "15f5n44zq5x5yv9kdr76gp1nsiwkqjibni7i9zbvzxwmr2x8bsai";
+  IosevkaSS03 = "06c1kv6k08zxcl1ykyhypqc59xsc6fmp2s4mcwb9yj4l67dx5ly7";
+  IosevkaSS04 = "1d2bsfwl9idxzy721r3qbslz2cdl5mdbsnsv34p1blwwxq98bksn";
+  IosevkaSS05 = "1v8mbs5ig46hl4g3d19hbg7nza95vryr4lyfd23d0slp811rf9sv";
+  IosevkaSS06 = "1yffycdr8p66cjkh77j9k2vbnwmj1j0c37k92ryahflwjzcq42ma";
+  IosevkaSS07 = "0xgpsi1nn8s01mg91jq3i4dvq9l0xwr7ynq6jm200x5qqmaaf62h";
+  IosevkaSS08 = "1lxrmf0mz8id65gxib7ca895a2fn93aagmks309lbllxhw1pmqqf";
+  IosevkaSS09 = "16x9b2mh6ka67rjm6q4slkzn3g3sca9ash5vqwnmwvab554gh8qp";
+  IosevkaSS10 = "1797wikyqj2gy13isws0qivsgn0qw16ffijn945nmp8cwpm0lq8x";
+  IosevkaSS11 = "162fg9mf651sm3br7sl0h97rfd9zyb0x0pqx9nnjdx8d9k36yqiw";
+  IosevkaSS12 = "0pqrwh6332yja8gp9fhc4rn6a32slzwn9rlqcgvs725a16n3yw5g";
+  IosevkaSS13 = "1w75sicj7h6b3yxf98ycjifjkg138ip3f8l9l38syp96ggwwz2dl";
+  IosevkaSS14 = "0p0ix1zfrzpy95mz21lif88i81p9zy155735yycp633ii9lvgwa2";
+  IosevkaSS15 = "1qazyvfwligaldx711mhnj9iaf9qx14m1d7v0jxc2q92f891z51z";
+  IosevkaSS16 = "0ph5c5cn8ibm5jig7hvnhdy7jsvb8nvwi977d7v1618xbyhjgcwp";
+  IosevkaSS17 = "154mfqfnpi8qhf37g73y8716h4lz52aam3gmmwq6is9ibi6z9ygp";
+  IosevkaSS18 = "1y02ymzx464xv8yb4f2pq05mm42hs9md1azwk8nvi9ad6hvd9k4n";
+  SGr-Iosevka = "11zwmbj2d9yzzylrl9jdq63z9c25z8lxpj82h6xl63a7ap099671";
+  SGr-IosevkaCurly = "1mqcb1f2sp4n1459pj045gpsgppwr6mbp4cnw0njf53n4lcxckd3";
+  SGr-IosevkaCurlySlab = "1n0bzhwhwal2hh4k1ncs9ih5j87jxsfmbhln85lh4fh1ch06605y";
+  SGr-IosevkaFixed = "07w221c4khvi59l2b7i3srdlxnn2mifn9fqm0fzh9bfp5vj2f5hi";
+  SGr-IosevkaFixedCurly = "0flnn2x52m49qqwqrplkdhgcbv8k0409ylykpy49gfyddi3i5mgi";
+  SGr-IosevkaFixedCurlySlab = "1fl22fbil4cn7lhm8lag1gbv8hya79z7djndwwl5hkk2hxirq6bl";
+  SGr-IosevkaFixedSlab = "1x631dmmmmszrwpq9prirss216cyjkcjmwqf054rca7myr2np0zs";
+  SGr-IosevkaFixedSS01 = "01ld26vrabvpamp1l9immvj46yad0v4cn6i95im75ypjqsfcj48w";
+  SGr-IosevkaFixedSS02 = "1rqmami9diid5r2zakp2c8asvvfwrnr3p2cb1zncldxk8kg8f1v7";
+  SGr-IosevkaFixedSS03 = "18ywq6py1mvwqnjgs5h2ymzl0hxi884p792mgdyc55y40hzkx0wl";
+  SGr-IosevkaFixedSS04 = "0hv6phnikfl8fi7mzxih73c4x84cvzb6kbqhg12mci5874ic9kf3";
+  SGr-IosevkaFixedSS05 = "1l9ln1bf34709wa9y45pfwb2abls3sckygfx3wxx4yhwv2a9i1v4";
+  SGr-IosevkaFixedSS06 = "00lw0i99qh0rzahd1sbnrzfla8dd774sav5fi4gyhh877k3njzq2";
+  SGr-IosevkaFixedSS07 = "11wkvplaws7miiqbcd9jjcxr5mi83i4cyhn7cynhg4qjb260zx3c";
+  SGr-IosevkaFixedSS08 = "04kqwbxxymb15qm3lzvd1i1jcbvhha8dn03fpw85cznr4287jjbx";
+  SGr-IosevkaFixedSS09 = "05x8j5zgm1kfjyfqxrljpmfnvrx5a430ksqcm0mh9hfw466z2pcl";
+  SGr-IosevkaFixedSS10 = "1z48b7hf7bawpjip5lxzfv4lddxis7xbs0ymqpsgbjpg6c5l3p8i";
+  SGr-IosevkaFixedSS11 = "1acvzpdzfqr03rs1nyfm4myww90xcfn04gvrs7641akfc6y20z0c";
+  SGr-IosevkaFixedSS12 = "0wrq0hv4xlbmkmb9bnkmck7h5w14laiiir61wpg1dma1qq0bw4nr";
+  SGr-IosevkaFixedSS13 = "10xldxsxyk7bscamhpx7lp2lw9fls5kn9fd7jpk1mb4sc3xkyivh";
+  SGr-IosevkaFixedSS14 = "0rn60sridd2kvxc45662lq9qib9zmy5rl9g1125jzwdnc6vh3zpl";
+  SGr-IosevkaFixedSS15 = "196a9z1dc71jpb1psl1j2qivmgh8id74g1cc4pf86kg00gql5pr5";
+  SGr-IosevkaFixedSS16 = "0kbpnh470fns0c7vg0v204vbgxcda0ff67swdavif0j36zwd7cbz";
+  SGr-IosevkaFixedSS17 = "07z43yl5wlp05sis1z11fp93pqrd4w19g7zjz0nlwmv2kzcrzyf7";
+  SGr-IosevkaFixedSS18 = "0qprlh0a5250rpy64qk5r43rr6xzirdyncg9pggsgsk0zws4ln2w";
+  SGr-IosevkaSlab = "1rx40qivi5x5c406wmiaychrac2c789kcj7jr7fjxxhfj6anv6p7";
+  SGr-IosevkaSS01 = "0hjfarb36ga3hm79j7jnzf3lrbpmry2fjg7nlg6h5mwsqrfsr3mw";
+  SGr-IosevkaSS02 = "0c4q4px29iab6pvdsksjzb15d38iyvy4ijwjq16q0bj77pama1n7";
+  SGr-IosevkaSS03 = "0045mni3gjnfhy65jrd7i8abxjxdwccccasl48n4pfh4myr6imi7";
+  SGr-IosevkaSS04 = "0ybg72n0nm6wa8as4bgrc3wdpwzi4137v7cz3ahnvsx7zmvvd49m";
+  SGr-IosevkaSS05 = "1dim8mq9cf6b5zhjqs92d4lwbpqb1r00mq0dqb5pwszgzz80w78q";
+  SGr-IosevkaSS06 = "1bbpfp3w8vg47x91zsnr28zqc8ba6z24qw42nap1s1apjd7lr1h9";
+  SGr-IosevkaSS07 = "1hn0kzzlr8c3bl6b2i26fqgh82hlxw70yapl4ckxmm117kn9lvv1";
+  SGr-IosevkaSS08 = "17kpx8b25wnfaqsdx92gj4njfrr7xpwqdwwqd2zsyfc32h3iwp0i";
+  SGr-IosevkaSS09 = "1sh31rfxg775gbq0rgmjrlcff72xnbsbcasm83c0i20j97xvyylm";
+  SGr-IosevkaSS10 = "0kf2rnwvfgk92mrlv8hvx8jph2wadsk0nihlmmxxgnf4c1i25ik6";
+  SGr-IosevkaSS11 = "1086ycp819g78w1mjn9cjxhv2swhihbn84106lgxfdp5y65c3ylg";
+  SGr-IosevkaSS12 = "0zrkvvwwz1apdm0j21jc40ck3900hhcxg8h5mdjf5g46mq516g6m";
+  SGr-IosevkaSS13 = "1z7dvsa7bwkkk8cqfw8d0inmzyzpwsich3nr34drm66gl8nva2xz";
+  SGr-IosevkaSS14 = "179mdqpfr411p5xv6abissk6bg43wyfi74634bf1sc04yqjpb54c";
+  SGr-IosevkaSS15 = "10k83br5a23ls69av56b5bdsgixqjxba1mws7k25lm0rb5rmp7rr";
+  SGr-IosevkaSS16 = "11v6i6n9l73sszj78cinaq7glkc6s9yqk1q4hyg7zxixix66wa1s";
+  SGr-IosevkaSS17 = "0086w97065dya4psvgzgi7njsgx92fndzxmb51syl2274m4kl29y";
+  SGr-IosevkaSS18 = "0c6pzvkv7c9fzrn913rcdd5d4kp82fsdh2712axmxh75zbm8pw5c";
+  SGr-IosevkaTerm = "055izdas8r5f7flgah608k063r4b3n560lkxmq6rimgr47k8z89g";
+  SGr-IosevkaTermCurly = "18rax5qziik2xqgc7bv16h77562x4x0y4df87wdqxkkq9j52vwy0";
+  SGr-IosevkaTermCurlySlab = "0s1fh4b8zvq2wa7z0rmy8f7f3lv01gv5rmy6zhrfcqssjxv0c49c";
+  SGr-IosevkaTermSlab = "1k595x2zipmzlw9hdg8cvvib5fk9yvnzng27ajanlfvcfyw22xhj";
+  SGr-IosevkaTermSS01 = "1ziajrzn2zj5c3dvjm23rxlanpb3iqi6faksb3f5gs3ssqam9kzp";
+  SGr-IosevkaTermSS02 = "1zwwbvhli6ajnc1ch610f3ihwgm1af1ch0ajcls224dpww82ks4x";
+  SGr-IosevkaTermSS03 = "1isbq47zh6yj83yndynzkx1cikss1hks4f38pp1cp8fygi5y0z5k";
+  SGr-IosevkaTermSS04 = "1jlyblhl1p4s2rrsb7zvq450bwn35mh53b75y040kfl8ac5123j4";
+  SGr-IosevkaTermSS05 = "0rlzkql2q9h42j4lvl3la637sq1f3z2vpfpfj61ysiaxqw04fand";
+  SGr-IosevkaTermSS06 = "0ly1aignjzlslxibm0s1wpmjzk95lki4pyib4jn13zprb21kvqr3";
+  SGr-IosevkaTermSS07 = "07vwq3nfbj6dfxlmdmcf1kifkdb1vbw1h5r8qjgdkxpmx4p7qjs2";
+  SGr-IosevkaTermSS08 = "1vp6wliyhdwzx50chifkczfa12fn3jl727nyjman5s632yg4zxas";
+  SGr-IosevkaTermSS09 = "075hip6xz8by1vkl9j16ivwqq7hml0w1yn8c502zbcjhqdfkfy6y";
+  SGr-IosevkaTermSS10 = "12qfhk4wjsvqqp7zq5zcblffq4bhhbrq0ciwbv219d4pk2yf30aq";
+  SGr-IosevkaTermSS11 = "0jz860abggmpjs6qakv43ihrgsk9qpblv9ss239327a1vbl183bi";
+  SGr-IosevkaTermSS12 = "12dw36c3n3mqvp6ih0nz1slw367b5yplmp6h5vlz0ycv2myl55fg";
+  SGr-IosevkaTermSS13 = "1i8y62237jrh6v5176ra2kwx76hmnc00y13nngna0wlivwia4b7n";
+  SGr-IosevkaTermSS14 = "09p6pgc3izw3gsmzzkcay2bkvin5wv9h2nlnlwicsp0rkw7aga9v";
+  SGr-IosevkaTermSS15 = "1bajvhv7ibbvc59bl0mivs0kym09z147fkzq2czv9p5x17a35cvv";
+  SGr-IosevkaTermSS16 = "15l3lmgyjfbqs7l42k763cvi9sdlh9m3p3r62ks95fqsa4qvd84d";
+  SGr-IosevkaTermSS17 = "0k9jzkbvbi8654q67szlzgfsixnnf6sqnaigqdda2g9ih0y3gpr4";
+  SGr-IosevkaTermSS18 = "0fvqln3fc1vbwcx388248cbgbypb773d66kz0vxcmlnvj8dg7ffb";
 }
diff --git a/pkgs/data/fonts/julia-mono/default.nix b/pkgs/data/fonts/julia-mono/default.nix
index 6b343bcb163d..dc9ebf5ef25f 100644
--- a/pkgs/data/fonts/julia-mono/default.nix
+++ b/pkgs/data/fonts/julia-mono/default.nix
@@ -2,12 +2,12 @@
 
 stdenvNoCC.mkDerivation rec {
   pname = "JuliaMono-ttf";
-  version = "0.053";
+  version = "0.054";
 
   src = fetchzip {
     url = "https://github.com/cormullion/juliamono/releases/download/v${version}/${pname}.tar.gz";
     stripRoot = false;
-    hash = "sha256-KvDyT0T8ecpSoNmqvsvDMooWNNe+z/PvxYj1Nd6qqfA=";
+    hash = "sha256-DtvaFu3r2r5WmlFCbkbzqAk/Y2BNEnxR6hPDfKM+/aQ=";
   };
 
   installPhase = ''
diff --git a/pkgs/data/fonts/junicode/default.nix b/pkgs/data/fonts/junicode/default.nix
index 919d77f10f4f..1bc12ad70abb 100644
--- a/pkgs/data/fonts/junicode/default.nix
+++ b/pkgs/data/fonts/junicode/default.nix
@@ -1,15 +1,25 @@
-{ lib, stdenvNoCC, fetchzip }:
+{ lib, stdenvNoCC, fetchzip, texlive, callPackage }:
 
 stdenvNoCC.mkDerivation rec {
   pname = "junicode";
-  version = "2.203";
+  version = "2.206";
 
   src = fetchzip {
     url = "https://github.com/psb1558/Junicode-font/releases/download/v${version}/Junicode_${version}.zip";
-    hash = "sha256-RG12veiZXqjfK2gONmauhGReuLEkqxbQ4h4PEwaih/U=";
+    hash = "sha256-oOKg85Yz5/2/pvwjVqeQXE8xE7X+QJvPYwYN+E18oEc=";
   };
 
-  outputs = [ "out" "doc" ];
+  outputs = [ "out" "doc" "tex" ];
+
+  patches = [ ./tex-font-path.patch ];
+
+  postPatch = ''
+    substituteInPlace TeX/junicode.sty \
+      --replace '@@@opentype_path@@@' "$out/share/fonts/opentype/" \
+      --replace '@@@truetype_path@@@' "$out/share/fonts/truetype/"
+    substituteInPlace TeX/junicodevf.sty \
+      --replace '@@@truetype_path@@@' "$out/share/fonts/truetype/"
+  '';
 
   installPhase = ''
     runHook preInstall
@@ -20,9 +30,18 @@ stdenvNoCC.mkDerivation rec {
 
     install -Dm 444 -t $doc/share/doc/${pname}-${version} docs/*.pdf
 
+    install -Dm 444 -t $tex/tex/latex/junicode TeX/junicode.sty
+    install -Dm 444 -t $tex/tex/latex/junicodevf TeX/junicodevf.{sty,lua}
+
     runHook postInstall
   '';
 
+  passthru = {
+    tlDeps = with texlive; [ xkeyval fontspec ];
+
+    tests = callPackage ./tests.nix { };
+  };
+
   meta = {
     homepage = "https://github.com/psb1558/Junicode-font";
     description = "A Unicode font for medievalists";
diff --git a/pkgs/data/fonts/junicode/test-vf.tex b/pkgs/data/fonts/junicode/test-vf.tex
new file mode 100644
index 000000000000..a23437b40efd
--- /dev/null
+++ b/pkgs/data/fonts/junicode/test-vf.tex
@@ -0,0 +1,46 @@
+\documentclass{article}
+
+\usepackage{junicodevf}
+
+\begin{document}
+\begin{enumerate}
+\item {\jBold Bold}
+\item {\jBoldItalic BoldItalic}
+\item {\jCond Cond}
+\item {\jCondItalic CondItalic}
+\item {\jCondLight CondLight}
+\item {\jCondLightItalic CondLightItalic}
+\item {\jCondMedium CondMedium}
+\item {\jCondMediumItalic CondMediumItalic}
+\item {\jExp Exp}
+\item {\jExpItalic ExpItalic}
+\item {\jExpBold ExpBold}
+\item {\jExpBoldItalic ExpBoldItalic}
+\item {\jExpMedium ExpMedium}
+\item {\jExpMediumItalic ExpMediumItalic}
+\item {\jExpSmbold ExpSmbold}
+\item {\jExpSmboldItalic ExpSmboldItalic}
+\item {\jItalic Italic}
+\item {\jLight Light}
+\item {\jLightItalic LightItalic}
+\item {\jMedium Medium}
+\item {\jMediumItalic MediumItalic}
+\item {\jRegular Regular}
+\item {\jSmbold Smbold}
+\item {\jSmboldItalic SmboldItalic}
+\item {\jSmCond SmCond}
+\item {\jSmCondItalic SmCondItalic}
+\item {\jSmCondLight SmCondLight}
+\item {\jSmCondLightItalic SmCondLightItalic}
+\item {\jSmCondMedium SmCondMedium}
+\item {\jSmCondMediumItalic SmCondMediumItalic}
+\item {\jSmExp SmExp}
+\item {\jSmExpItalic SmExpItalic}
+\item {\jSmExpBold SmExpBold}
+\item {\jSmExpBoldItalic SmExpBoldItalic}
+\item {\jSmExpMedium SmExpMedium}
+\item {\jSmExpMediumItalic SmExpMediumItalic}
+\item {\jSmExpSmbold SmExpSmbold}
+\item {\jSmExpSmboldItalic SmExpSmboldItalic}
+\end{enumerate}
+\end{document}
diff --git a/pkgs/data/fonts/junicode/test.tex b/pkgs/data/fonts/junicode/test.tex
new file mode 100644
index 000000000000..d82f40f1279f
--- /dev/null
+++ b/pkgs/data/fonts/junicode/test.tex
@@ -0,0 +1,46 @@
+\documentclass{article}
+
+\usepackage[fonttype=@fonttype@]{junicode}
+
+\begin{document}
+\begin{enumerate}
+\item {\jBold Bold}
+\item {\jBoldItalic BoldItalic}
+\item {\jCond Cond}
+\item {\jCondItalic CondItalic}
+\item {\jCondLight CondLight}
+\item {\jCondLightItalic CondLightItalic}
+\item {\jCondMedium CondMedium}
+\item {\jCondMediumItalic CondMediumItalic}
+\item {\jExp Exp}
+\item {\jExpItalic ExpItalic}
+\item {\jExpBold ExpBold}
+\item {\jExpBoldItalic ExpBoldItalic}
+\item {\jExpMedium ExpMedium}
+\item {\jExpMediumItalic ExpMediumItalic}
+\item {\jExpSmBold ExpSmBold}
+\item {\jExpSmBoldItalic ExpSmBoldItalic}
+\item {\jItalic Italic}
+\item {\jLight Light}
+\item {\jLightItalic LightItalic}
+\item {\jMedium Medium}
+\item {\jMediumItalic MediumItalic}
+\item {\jRegular Regular}
+\item {\jSmBold SmBold}
+\item {\jSmBoldItalic SmBoldItalic}
+\item {\jSmCond SmCond}
+\item {\jSmCondItalic SmCondItalic}
+\item {\jSmCondLight SmCondLight}
+\item {\jSmCondLightItalic SmCondLightItalic}
+\item {\jSmCondMedium SmCondMedium}
+\item {\jSmCondMediumItalic SmCondMediumItalic}
+\item {\jSmExp SmExp}
+\item {\jSmExpItalic SmExpItalic}
+\item {\jSmExpBold SmExpBold}
+\item {\jSmExpBoldItalic SmExpBoldItalic}
+\item {\jSmExpMedium SmExpMedium}
+\item {\jSmExpMediumItalic SmExpMediumItalic}
+\item {\jSmExpSmBold SmExpSmBold}
+\item {\jSmExpSmBoldItalic SmExpSmBoldItalic}
+\end{enumerate}
+\end{document}
diff --git a/pkgs/data/fonts/junicode/tests.nix b/pkgs/data/fonts/junicode/tests.nix
new file mode 100644
index 000000000000..fda7de31670e
--- /dev/null
+++ b/pkgs/data/fonts/junicode/tests.nix
@@ -0,0 +1,35 @@
+{ lib, runCommand, junicode, texliveBasic }:
+let
+  texliveWithJunicode = texliveBasic.withPackages (p: [ p.xetex junicode ]);
+
+  texTest = { package, tex, fonttype, file }:
+    lib.attrsets.nameValuePair "${package}-${tex}-${fonttype}" (
+      runCommand "${package}-test-${tex}-${fonttype}.pdf"
+        {
+          nativeBuildInputs = [ texliveWithJunicode ];
+          inherit tex fonttype file;
+        } ''
+        substituteAll $file test.tex
+        HOME=$PWD $tex test.tex
+        cp test.pdf $out
+      '');
+in
+builtins.listToAttrs (
+  map
+    texTest
+    (lib.attrsets.cartesianProductOfSets {
+      tex = [ "xelatex" "lualatex" ];
+      fonttype = [ "ttf" "otf" ];
+      package = [ "junicode" ];
+      file = [ ./test.tex ];
+    })
+  ++
+  [
+    (texTest {
+      package = "junicodevf";
+      fonttype = "ttf";
+      tex = "lualatex";
+      file = ./test-vf.tex;
+    })
+  ]
+)
diff --git a/pkgs/data/fonts/junicode/tex-font-path.patch b/pkgs/data/fonts/junicode/tex-font-path.patch
new file mode 100644
index 000000000000..13b311b39ce6
--- /dev/null
+++ b/pkgs/data/fonts/junicode/tex-font-path.patch
@@ -0,0 +1,166 @@
+Upstream style file relies on font files being present on the system
+globally.  This is not quite how Nix usually does thing, so this patch
+changes the style file to instead look fonts up in hardcoded
+locations, which are later patched up to refer to the package outputs,
+thus ensuring the style always uses the fonts packaged with it.
+
+diff --git a/TeX/junicode.sty b/TeX/junicode.sty
+index 83bd45d..8fe671c 100644
+--- a/TeX/junicode.sty
++++ b/TeX/junicode.sty
+@@ -208,7 +208,14 @@
+ 
+ \RequirePackage{fontspec}
+ \defaultfontfeatures{Ligatures=TeX, Extension=.\junicode@fonttype}
+-\defaultfontfeatures{Ligatures=TeX}
++
++\def\junicode@fonttype@otf{otf}
++
++\ifx\junicode@fonttype\junicode@fonttype@otf
++  \def\junicode@fontpath{@@@opentype_path@@@}
++\else
++  \def\junicode@fontpath{@@@truetype_path@@@}
++\fi
+ 
+ \ifxetex
+ \typeout{\junicode@regstylename}
+@@ -219,6 +226,7 @@
+    ItalicFont =        *-\junicode@italstylename,
+    BoldFont =          *-\junicode@boldstylename,
+    BoldItalicFont =    *-\junicode@boldstylename Italic,
++   Path =              \junicode@fontpath,
+   ]{Junicode}
+ \fi
+ \ifluatex
+@@ -230,6 +238,7 @@
+    ItalicFont =        *-\junicode@italstylename,
+    BoldFont =          *-\junicode@boldstylename,
+    BoldItalicFont =    *-\junicode@boldstylename Italic,
++   Path =              \junicode@fontpath,
+   ]{Junicode}
+ \fi
+ 
+@@ -242,6 +251,7 @@
+         #3
+         Numbers =           {\junicode@figurealign,\junicode@figurestyle},
+         SmallCapsFeatures = {Letters=SmallCaps},
++        Path =              \junicode@fontpath,
+     ]
+ }
+ \fi
+@@ -252,6 +262,7 @@
+         #3
+         Numbers =           {\junicode@figurealign,\junicode@figurestyle},
+         SmallCapsFeatures = {Letters=SmallCaps},
++        Path =              \junicode@fontpath,
+     ]
+ }
+ \fi
+diff --git a/TeX/junicodevf.lua b/TeX/junicodevf.lua
+index 7148668..acebe82 100644
+--- a/TeX/junicodevf.lua
++++ b/TeX/junicodevf.lua
+@@ -148,7 +148,7 @@ function mkfontcommands()
+          romfontcmd = "jRegular"
+          italfontcmd = "jItalic"
+       end
+-      tex.print("\\junicodevf@newfont{\\" .. romfontcmd .. "}{JunicodeVF}{\\" .. defcmd .. "}{\\" .. defsizecmd .. "}")
++      tex.print("\\junicodevf@newfont{\\" .. romfontcmd .. "}{JunicodeVF-Roman}{\\" .. defcmd .. "}{\\" .. defsizecmd .. "}")
+       tex.print("\\junicodevf@newfont{\\" .. italfontcmd .. "}{JunicodeVF-Italic}{\\" .. defcmd .. "}{\\" .. defsizecmd .. "}")
+    end
+ end
+diff --git a/TeX/junicodevf.sty b/TeX/junicodevf.sty
+index c01ccaf..07a99ad 100644
+--- a/TeX/junicodevf.sty
++++ b/TeX/junicodevf.sty
+@@ -168,11 +168,13 @@ mkwidthcommands(wdindex, adjustment)}}
+ 
+ % DECLARE THE FONTS
+ 
+-\setmainfont{Junicode VF}[
+-    ItalicFont =         {*-Italic},
+-    BoldFont =           {*},
+-    BoldItalicFont =     {*-Italic},
++\setmainfont{JunicodeVF-Roman}[
++    ItalicFont =         {JunicodeVF-Italic},
++    BoldFont =           {JunicodeVF-Roman},
++    BoldItalicFont =     {JunicodeVF-Italic},
+     Renderer =           HarfBuzz,
++    Extension =          .ttf,
++    Path =               @@@truetype_path@@@,
+     Numbers =            {\junicodevf@figurealign,\junicodevf@figurestyle},
+     \MainDef,
+     UprightFeatures =    {\MainRegDef
+@@ -188,6 +190,8 @@ mkwidthcommands(wdindex, adjustment)}}
+ \newcommand*{\junicodevf@newfont}[4]{
+     \setfontface#1{#2}[
+         Renderer =          HarfBuzz,
++        Extension =          .ttf,
++        Path =               @@@truetype_path@@@,
+         Numbers =           {\junicodevf@figurealign,\junicodevf@figurestyle},
+         SmallCapsFont =     {*},
+         SmallCapsFeatures = {Letters=SmallCaps},
+@@ -200,43 +204,59 @@ mkwidthcommands(wdindex, adjustment)}}
+ 
+ % ENLARGED FACES
+ 
+-\setfontface\EnlargedOne{JunicodeVF}[
++\setfontface\EnlargedOne{JunicodeVF-Roman}[
+     Renderer = HarfBuzz,
++    Extension = .ttf,
++    Path = @@@truetype_path@@@,
+     \ENLAOneSizeDef
+ ]
+ 
+ \setfontface\EnlargedOneItalic{JunicodeVF-Italic}[
+     Renderer = HarfBuzz,
++    Extension = .ttf,
++    Path = @@@truetype_path@@@,
+     \ENLAOneSizeDef
+ ]
+ 
+-\setfontface\EnlargedTwo{JunicodeVF}[
++\setfontface\EnlargedTwo{JunicodeVF-Roman}[
+     Renderer = HarfBuzz,
++    Extension = .ttf,
++    Path = @@@truetype_path@@@,
+     \ENLATwoSizeDef
+ ]
+ 
+ \setfontface\EnlargedTwoItalic{JunicodeVF-Italic}[
+     Renderer = HarfBuzz,
++    Extension = .ttf,
++    Path = @@@truetype_path@@@,
+     \ENLATwoSizeDef
+ ]
+ 
+-\setfontface\EnlargedThree{JunicodeVF}[
++\setfontface\EnlargedThree{JunicodeVF-Roman}[
+     Renderer = HarfBuzz,
++    Extension = .ttf,
++    Path = @@@truetype_path@@@,
+     \ENLAThreeSizeDef
+ ]
+ 
+ \setfontface\EnlargedThreeItalic{JunicodeVF-Italic}[
+     Renderer = HarfBuzz,
++    Extension = .ttf,
++    Path = @@@truetype_path@@@,
+     \ENLAThreeSizeDef
+ ]
+ 
+-\setfontface\EnlargedFour{JunicodeVF}[
++\setfontface\EnlargedFour{JunicodeVF-Roman}[
+     Renderer = HarfBuzz,
++    Extension = .ttf,
++    Path = @@@truetype_path@@@,
+     \ENLAFourSizeDef
+ ]
+ 
+ \setfontface\EnlargedFourItalic{JunicodeVF-Italic}[
+     Renderer = HarfBuzz,
++    Extension = .ttf,
++    Path = @@@truetype_path@@@,
+     \ENLAFourSizeDef
+ ]
+ 
diff --git a/pkgs/data/fonts/kode-mono/default.nix b/pkgs/data/fonts/kode-mono/default.nix
index 8bd90a4db0b6..c4cd9f2de361 100644
--- a/pkgs/data/fonts/kode-mono/default.nix
+++ b/pkgs/data/fonts/kode-mono/default.nix
@@ -2,11 +2,11 @@
 
 stdenvNoCC.mkDerivation (finalAttrs: {
   pname = "kode-mono";
-  version = "1.204";
+  version = "1.206";
 
   src = fetchzip {
     url = "https://github.com/isaozler/kode-mono/releases/download/${finalAttrs.version}/kode-mono-fonts.zip";
-    hash = "sha256-0mAE06963HaBKBKBvTnt8q7QAY1FakEGUx1wAqOZVH4=";
+    hash = "sha256-0EZTlSqGCavSwjpKcEFv2L/bkKLE2jLyBWPSnmxQ3ww=";
     stripRoot = false;
   };
 
diff --git a/pkgs/data/fonts/lxgw-neoxihei/default.nix b/pkgs/data/fonts/lxgw-neoxihei/default.nix
index 2b1425f44cff..3832ba8d510b 100644
--- a/pkgs/data/fonts/lxgw-neoxihei/default.nix
+++ b/pkgs/data/fonts/lxgw-neoxihei/default.nix
@@ -5,11 +5,11 @@
 
 stdenvNoCC.mkDerivation rec {
   pname = "lxgw-neoxihei";
-  version = "1.109";
+  version = "1.120.1";
 
   src = fetchurl {
     url = "https://github.com/lxgw/LxgwNeoXiHei/releases/download/v${version}/LXGWNeoXiHei.ttf";
-    hash = "sha256-LnbkHmEyxqv1W/qWeCVQGHKLuv6qX3P8zUMUxx61t38=";
+    hash = "sha256-shzJ5y2mjvodtSHct9gm+09CludxUpR38qi9zvewjaQ=";
   };
 
   dontUnpack = true;
diff --git a/pkgs/data/fonts/lxgw-wenkai/default.nix b/pkgs/data/fonts/lxgw-wenkai/default.nix
index 991fff3c0bdc..8ce458d3e4a3 100644
--- a/pkgs/data/fonts/lxgw-wenkai/default.nix
+++ b/pkgs/data/fonts/lxgw-wenkai/default.nix
@@ -2,11 +2,11 @@
 
 stdenvNoCC.mkDerivation rec {
   pname = "lxgw-wenkai";
-  version = "1.315";
+  version = "1.320";
 
   src = fetchurl {
     url = "https://github.com/lxgw/LxgwWenKai/releases/download/v${version}/${pname}-v${version}.tar.gz";
-    hash = "sha256-btiF6jij8sw/kynQedUdy9//5rPPhtnRhmZ59FY+S0c=";
+    hash = "sha256-9crFUfj1mOXg4gD607jL2eHq8wlq/yEi5sgzKJ5YavM=";
   };
 
   installPhase = ''
diff --git a/pkgs/data/fonts/marathi-cursive/default.nix b/pkgs/data/fonts/marathi-cursive/default.nix
index 7f6bedc75e8b..4da56b2251c5 100644
--- a/pkgs/data/fonts/marathi-cursive/default.nix
+++ b/pkgs/data/fonts/marathi-cursive/default.nix
@@ -22,7 +22,7 @@ stdenvNoCC.mkDerivation rec {
     homepage = "https://github.com/MihailJP/MarathiCursive";
     description = "Modi script font with Graphite and OpenType support";
     maintainers = with maintainers; [ mathnerd314 ];
-    license = licenses.mit; # It's the M+ license, M+ is MIT(-ish)
+    license = licenses.mplus;
     platforms = platforms.all;
   };
 }
diff --git a/pkgs/data/fonts/mplus-outline-fonts/default.nix b/pkgs/data/fonts/mplus-outline-fonts/default.nix
index 06d4f018e644..401295dda1b3 100644
--- a/pkgs/data/fonts/mplus-outline-fonts/default.nix
+++ b/pkgs/data/fonts/mplus-outline-fonts/default.nix
@@ -25,7 +25,7 @@ in
       homepage = "https://mplus-fonts.osdn.jp";
       maintainers = with maintainers; [ uakci ];
       platforms = platforms.all;
-      license = licenses.mit;
+      license = licenses.mplus;
     };
   };
 
diff --git a/pkgs/data/fonts/openmoji/build.patch b/pkgs/data/fonts/openmoji/build.patch
new file mode 100644
index 000000000000..ddc9b554caf0
--- /dev/null
+++ b/pkgs/data/fonts/openmoji/build.patch
@@ -0,0 +1,77 @@
+diff --git a/helpers/generate-fonts-runner.sh b/helpers/generate-fonts-runner.sh
+index 21267e50f..873b5c664 100755
+--- a/helpers/generate-fonts-runner.sh
++++ b/helpers/generate-fonts-runner.sh
+@@ -25,10 +25,10 @@ mkdir -p "$build_dir"
+ 
+ # Change these to enable/disable formats
+ # Remember to update font/README.md accordingly
+-methods_black=(glyf)
+-methods_color=(cbdt glyf_colr_0 glyf_colr_1 sbix picosvgz untouchedsvgz)
++#methods_black=(glyf)
++#methods_color=(cbdt glyf_colr_0 glyf_colr_1 sbix picosvgz untouchedsvgz)
+ 
+-saturations=(black color)
++#saturations=(black color)
+ for saturation in "${saturations[@]}"; do
+     case "$saturation" in
+     black)
+@@ -43,6 +43,7 @@ for saturation in "${saturations[@]}"; do
+     mkdir -p "$build_dir/$saturation"
+ 
+     for method in "${methods[@]}"; do
++        if [ -z "$method" ]; then continue; fi
+         cat >"$build_dir/$saturation/OpenMoji-$saturation-$method.toml" <<-EOF
+ output_file = "$build_dir/$saturation/OpenMoji-$saturation-$method.ttf"
+ color_format = "$method"
+@@ -55,10 +56,7 @@ default = 400
+ 
+ [master.regular]
+ style_name = "Regular"
+-
+-# To quickly check build reverse comments below
+-srcs = ["/mnt/$saturation/svg/*.svg"]
+-# srcs = ["/mnt/$saturation/svg/1F923.svg", "/mnt/$saturation/svg/1F1E9-1F1F0.svg"]
++srcs = ["$(pwd)/$saturation/svg/*.svg"]
+ 
+ [master.regular.position]
+ wght = 400
+@@ -71,7 +69,7 @@ EOF
+     for method in "${methods[@]}"; do
+         # Generate XML for font
+         sed "s/Color/${saturation^}/;" \
+-            /mnt/data/OpenMoji-Color.ttx \
++            data/OpenMoji-Color.ttx \
+             > "$build_dir/$saturation/OpenMoji-$saturation-$method.ttx"
+ 
+         # Add version to XML
+@@ -89,25 +87,21 @@ EOF
+ 
+         # Compress with WOFF2
+         woff2_compress "$build_dir/fonts/OpenMoji-$saturation-$method/OpenMoji-$saturation-$method.ttf"
+-
+-        # Generate font demo
+-        /mnt/helpers/generate-font-demo.js "OpenMoji-$saturation-$method.woff2" "$build_dir/fonts/OpenMoji-$saturation-$method"
+     done
+ done
+ 
+-for colr_version in 0 1; do
++for colr_version in "${maximumColorVersions[@]}"; do
++    if [ -z "$colr_version" ]; then continue; fi
+     # Make TTF with both COLR and SVG font data in it
+     mkdir -p "$build_dir/fonts/OpenMoji-color-colr${colr_version}_svg"
+ 
+-    maximum_color \
++    maximum_color --build_dir="$build_dir/color" \
+         "$build_dir/fonts/OpenMoji-color-glyf_colr_${colr_version}/OpenMoji-color-glyf_colr_${colr_version}.ttf"\
+         --output_file "$build_dir/fonts/OpenMoji-color-colr${colr_version}_svg/OpenMoji-color-colr${colr_version}_svg.ttf"
+ 
+     woff2_compress "$build_dir/fonts/OpenMoji-color-colr${colr_version}_svg/OpenMoji-color-colr${colr_version}_svg.ttf"
+ 
+-    /mnt/helpers/generate-font-demo.js\
+-        "OpenMoji-color-colr${colr_version}_svg.woff2"\
+-        "$build_dir/fonts/OpenMoji-color-colr${colr_version}_svg"
++    rm -rf "$build_dir/fonts/OpenMoji-color-glyf_colr_${colr_version}"
+ done
+ 
+ echo "Done building fonts!"
diff --git a/pkgs/data/fonts/openmoji/default.nix b/pkgs/data/fonts/openmoji/default.nix
index fd0d8882059c..3f19bbe91f33 100644
--- a/pkgs/data/fonts/openmoji/default.nix
+++ b/pkgs/data/fonts/openmoji/default.nix
@@ -1,93 +1,85 @@
 { lib
-, stdenv
+, stdenvNoCC
 , fetchFromGitHub
-, fetchpatch
-, scfbuild
-, fontforge
-, node-glob
-, libuninameslist
-, nodejs
-, nodePackages
+, nanoemoji
 , python3Packages
-, variant ? "color" # "color" or "black"
+, woff2
+, xmlstarlet
+  # available color formats: ["cbdt" "glyf_colr_0" "glyf_colr_1" "sbix" "picosvgz" "untouchedsvgz"]
+  # available black formats: ["glyf"]
+, fontFormats ? [ "glyf" "cbdt" "glyf_colr_0" "glyf_colr_1" ]
+  # when at least one of the glyf_colr_0/1 formats is specified, whether to build maximum color fonts
+  # "none" to not build any, "svg" to build colr+svg, "bitmap" to build cbdt+colr+svg fonts
+, buildMaximumColorFonts ? "bitmap"
 }:
-
 let
-  filename = builtins.replaceStrings
-    [ "color"              "black"              ]
-    [ "OpenMoji-Color.ttf" "OpenMoji-Black.ttf" ]
-    variant;
+  # all available methods
+  methods = {
+    black = [ "glyf" ];
+    color = [ "cbdt" "glyf_colr_0" "glyf_colr_1" "sbix" "picosvgz" "untouchedsvgz" ];
+  };
+in
 
-  # With newer fontforge the build hangs, see
-  # https://github.com/NixOS/nixpkgs/issues/167869
-  # Patches etc taken from
-  # https://github.com/NixOS/nixpkgs/commit/69da642a5a9bb433138ba1b13c8d56fb5bb6ec05
-  fontforge-20201107 = fontforge.overrideAttrs (old: rec {
-    version = "20201107";
-    src = fetchFromGitHub {
-      owner = "fontforge";
-      repo = "fontforge";
-      rev = version;
-      sha256 = "sha256-Rl/5lbXaPgIndANaD0IakaDus6T53FjiBb45FIuGrvc=";
-    };
-    patches = [
-      (fetchpatch {
-        url = "https://salsa.debian.org/fonts-team/fontforge/raw/76bffe6ccf8ab20a0c81476a80a87ad245e2fd1c/debian/patches/0001-add-extra-cmake-install-rules.patch";
-        sha256 = "u3D9od2xLECNEHhZ+8dkuv9818tPkdP6y/Tvd9CADJg=";
-      })
-      (fetchpatch {
-        url = "https://github.com/fontforge/fontforge/commit/69e263b2aff29ad22f97f13935cfa97a1eabf207.patch";
-        sha256 = "06yyf90605aq6ppfiz83mqkdmnaq5418axp9jgsjyjq78b00xb29";
-      })
-    ];
-    buildInputs = old.buildInputs ++ [ libuninameslist ];
-  });
-  scfbuild-with-fontforge-20201107 = scfbuild.override (old: {
-    fontforge = fontforge-20201107;
-  });
+assert lib.asserts.assertEachOneOf "fontFormats" fontFormats (methods.black ++ methods.color);
+assert lib.asserts.assertOneOf "buildMaximumColorFonts" buildMaximumColorFonts [ "none" "bitmap" "svg" ];
 
-in stdenv.mkDerivation rec {
+stdenvNoCC.mkDerivation rec {
   pname = "openmoji";
-  version = "14.0.0";
+  version = "15.0.0";
 
   src = fetchFromGitHub {
     owner = "hfg-gmuend";
     repo = pname;
     rev = version;
-    sha256 = "sha256-XnSRSlWXOMeSaO6dKaOloRg3+sWS4BSaro4bPqOyKmE=";
+    hash = "sha256-659ONkHU45Z2789ay0yLero9j5nFWhslpJad++4oNN8=";
   };
 
+  patches = [
+    # fix paths and variables for nix build and skip generating font demos
+    ./build.patch
+  ];
+
   nativeBuildInputs = [
-    scfbuild-with-fontforge-20201107
-    nodejs
-    node-glob
-    nodePackages.lodash
+    nanoemoji
+    python3Packages.fonttools
+    woff2
+    xmlstarlet
   ];
 
-  postPatch = ''
-    # this is API change in glob >9
-    substituteInPlace helpers/generate-font-glyphs.js \
-      --replace "require('glob').sync" "require('glob').globSync"
+  methods_black = builtins.filter (m: builtins.elem m fontFormats) methods.black;
+  methods_color = builtins.filter (m: builtins.elem m fontFormats) methods.color;
+  saturations = lib.optional (methods_black != [ ]) "black" ++ lib.optional (methods_color != [ ]) "color";
+  maximumColorVersions = lib.optionals (buildMaximumColorFonts != "none") (
+    lib.optional (builtins.elem "glyf_colr_0" fontFormats) "0"
+    ++ lib.optional (builtins.elem "glyf_colr_1" fontFormats) "1"
+  );
+
+  postPatch = lib.optionalString (buildMaximumColorFonts == "bitmap") ''
+    substituteInPlace helpers/generate-fonts-runner.sh \
+      --replace 'maximum_color' 'maximum_color --bitmaps'
   '';
 
   buildPhase = ''
     runHook preBuild
 
-    node helpers/generate-font-glyphs.js
-
-    cd font
-    scfbuild -c scfbuild-${variant}.yml
+    bash helpers/generate-fonts-runner.sh "$(pwd)/build" "${version}"
 
     runHook postBuild
   '';
 
   installPhase = ''
-    install -Dm644 ${filename} $out/share/fonts/truetype/${filename}
+    runHook preInstall
+
+    mkdir -p $out/share/fonts/truetype $out/share/fonts/woff2
+    cp build/fonts/*/*.ttf $out/share/fonts/truetype/
+    cp build/fonts/*/*.woff2 $out/share/fonts/woff2/
+
+    runHook postInstall
   '';
 
   meta = with lib; {
     license = licenses.cc-by-sa-40;
-    maintainers = with maintainers; [ fgaz ];
+    maintainers = with maintainers; [ _999eagle fgaz ];
     platforms = platforms.all;
     homepage = "https://openmoji.org/";
     downloadPage = "https://github.com/hfg-gmuend/openmoji/releases";
diff --git a/pkgs/data/fonts/sarasa-gothic/default.nix b/pkgs/data/fonts/sarasa-gothic/default.nix
deleted file mode 100644
index b18b79950bfd..000000000000
--- a/pkgs/data/fonts/sarasa-gothic/default.nix
+++ /dev/null
@@ -1,34 +0,0 @@
-{ lib, stdenvNoCC, fetchurl, p7zip }:
-
-stdenvNoCC.mkDerivation rec {
-  pname = "sarasa-gothic";
-  version = "1.0.2";
-
-  src = fetchurl {
-    # Use the 'ttc' files here for a smaller closure size.
-    # (Using 'ttf' files gives a closure size about 15x larger, as of November 2021.)
-    url = "https://github.com/be5invis/Sarasa-Gothic/releases/download/v${version}/Sarasa-TTC-${version}.7z";
-    hash = "sha256-h34M5waO2uaqsZDYEEI72LIYv7B1Qjwms2v6qGTaNKg=";
-  };
-
-  sourceRoot = ".";
-
-  nativeBuildInputs = [ p7zip ];
-
-  installPhase = ''
-    runHook preInstall
-
-    mkdir -p $out/share/fonts/truetype
-    cp *.ttc $out/share/fonts/truetype
-
-    runHook postInstall
-  '';
-
-  meta = with lib; {
-    description = "A CJK programming font based on Iosevka and Source Han Sans";
-    homepage = "https://github.com/be5invis/Sarasa-Gothic";
-    license = licenses.ofl;
-    maintainers = [ maintainers.ChengCat ];
-    platforms = platforms.all;
-  };
-}
diff --git a/pkgs/data/fonts/sketchybar-app-font/default.nix b/pkgs/data/fonts/sketchybar-app-font/default.nix
index aeb4d1b1b3e2..cd9af9a9c5f4 100644
--- a/pkgs/data/fonts/sketchybar-app-font/default.nix
+++ b/pkgs/data/fonts/sketchybar-app-font/default.nix
@@ -5,11 +5,11 @@
 
 stdenvNoCC.mkDerivation (finalAttrs: {
   pname = "sketchybar-app-font";
-  version = "2.0.3";
+  version = "2.0.12";
 
   src = fetchurl {
     url = "https://github.com/kvndrsslr/sketchybar-app-font/releases/download/v${finalAttrs.version}/sketchybar-app-font.ttf";
-    hash = "sha256-KeyUx/u0YARmNdVC9RQtAL3QFOgV59uyg53y0Lknvyw=";
+    hash = "sha256-qACf4eWDeubBmJV0ApWidp2ESLREi5qiLliWCXoMBKY=";
   };
 
   dontUnpack = true;
@@ -28,7 +28,7 @@ stdenvNoCC.mkDerivation (finalAttrs: {
       A ligature-based symbol font and a mapping function for sketchybar, inspired by simple-bar's usage of community-contributed minimalistic app icons.
     '';
     homepage = "https://github.com/kvndrsslr/sketchybar-app-font";
-    license = lib.licenses.unlicense;
+    license = lib.licenses.cc0;
     maintainers = with lib.maintainers; [ khaneliman ];
   };
 })
diff --git a/pkgs/data/fonts/smiley-sans/default.nix b/pkgs/data/fonts/smiley-sans/default.nix
index 9c26bea80712..62d65aa5b010 100644
--- a/pkgs/data/fonts/smiley-sans/default.nix
+++ b/pkgs/data/fonts/smiley-sans/default.nix
@@ -2,11 +2,11 @@
 
 stdenvNoCC.mkDerivation rec {
   pname = "smiley-sans";
-  version = "1.1.1";
+  version = "2.0.1";
 
   src = fetchzip {
     url = "https://github.com/atelier-anchor/smiley-sans/releases/download/v${version}/smiley-sans-v${version}.zip";
-    sha256 = "sha256-/lsAZRHgmx1TMjm2O5Z0IOiHQM8LKJPXcBKZrlXt3RA=";
+    sha256 = "sha256-p6DwX5MBPemAfV99L9ayLkEWro31ip4tf+wBQr8mkbs=";
     stripRoot = false;
   };
 
diff --git a/pkgs/data/fonts/sudo/default.nix b/pkgs/data/fonts/sudo/default.nix
index ec079295a9ca..5678855ab80a 100644
--- a/pkgs/data/fonts/sudo/default.nix
+++ b/pkgs/data/fonts/sudo/default.nix
@@ -2,11 +2,11 @@
 
 stdenvNoCC.mkDerivation rec {
   pname = "sudo-font";
-  version = "0.81";
+  version = "1.2";
 
   src = fetchzip {
     url = "https://github.com/jenskutilek/sudo-font/releases/download/v${version}/sudo.zip";
-    hash = "sha256-qc26xHM9P9+lsPE9j5UY4f0hIb5PjlCSy+jm0zEFj2g=";
+    hash = "sha256-8ucMeKbnrYtk2/ZeYxzp8MA4Ss952/opD8GpB01Ze/I=";
   };
 
   installPhase = ''
diff --git a/pkgs/data/fonts/tamzen/default.nix b/pkgs/data/fonts/tamzen/default.nix
index f589455e9811..e8706c1971c6 100644
--- a/pkgs/data/fonts/tamzen/default.nix
+++ b/pkgs/data/fonts/tamzen/default.nix
@@ -2,13 +2,13 @@
 
 stdenv.mkDerivation rec {
   pname = "tamzen-font";
-  version = "1.11.5";
+  version = "1.11.6";
 
   src = fetchFromGitHub {
     owner = "sunaku";
     repo = "tamzen-font";
     rev = "Tamzen-${version}";
-    sha256 = "00x5fipzqimglvshhqwycdhaqslbvn3rl06jnswhyxfvz16ymj7s";
+    sha256 = "sha256-W5Wqsm5rpzzcbJl2lv6ORAznaAwLcmJ2S6Qo2zIoq9I=";
   };
 
   nativeBuildInputs = [ xorg.mkfontscale ];
diff --git a/pkgs/data/fonts/twemoji-color-font/default.nix b/pkgs/data/fonts/twemoji-color-font/default.nix
index 2641fc1bc940..a6e65ce68955 100644
--- a/pkgs/data/fonts/twemoji-color-font/default.nix
+++ b/pkgs/data/fonts/twemoji-color-font/default.nix
@@ -3,14 +3,14 @@
 , fetchurl
 }:
 
-stdenv.mkDerivation rec {
+stdenv.mkDerivation (finalAttrs: {
   pname = "twemoji-color-font";
   version = "14.0.2";
 
   # We fetch the prebuilt font because building it takes 1.5 hours on hydra.
   # Relevant issue: https://github.com/NixOS/nixpkgs/issues/97871
   src = fetchurl {
-    url = "https://github.com/eosrei/twemoji-color-font/releases/download/v${version}/TwitterColorEmoji-SVGinOT-Linux-${version}.tar.gz";
+    url = "https://github.com/eosrei/twemoji-color-font/releases/download/v${finalAttrs.version}/TwitterColorEmoji-SVGinOT-Linux-${finalAttrs.version}.tar.gz";
     sha256 = "sha256-aCbiHqCNxd8myIeuTlYEaYfg9JCd+MAsc94FcUoDU8E=";
   };
 
@@ -39,4 +39,4 @@ stdenv.mkDerivation rec {
     license = with licenses; [ cc-by-40 mit ];
     maintainers = [ maintainers.fgaz ];
   };
-}
+})
diff --git a/pkgs/data/fonts/ubuntu-font-family/default.nix b/pkgs/data/fonts/ubuntu-font-family/default.nix
index 331e34690a5e..671ba8b4b48d 100644
--- a/pkgs/data/fonts/ubuntu-font-family/default.nix
+++ b/pkgs/data/fonts/ubuntu-font-family/default.nix
@@ -25,7 +25,7 @@ stdenvNoCC.mkDerivation rec {
     contemporary style and contains characteristics unique to
     the Ubuntu brand that convey a precise, reliable and free attitude.";
     homepage = "http://font.ubuntu.com/";
-    license = licenses.free;
+    license = licenses.ufl;
     platforms = platforms.all;
     maintainers = [ maintainers.antono ];
   };
diff --git a/pkgs/data/fonts/undefined-medium/default.nix b/pkgs/data/fonts/undefined-medium/default.nix
index 3e3087c6abc8..c1b22f787117 100644
--- a/pkgs/data/fonts/undefined-medium/default.nix
+++ b/pkgs/data/fonts/undefined-medium/default.nix
@@ -2,11 +2,11 @@
 
 stdenvNoCC.mkDerivation rec {
   pname = "undefined-medium";
-  version = "1.1";
+  version = "1.2";
 
   src = fetchzip {
-    url = "https://github.com/andirueckel/undefined-medium/archive/v1.1.zip";
-    hash = "sha256-iquxt7lo92y4AQZf23Ij5Qzg2U7buL3kGLksQSR6vac=";
+    url = "https://github.com/andirueckel/undefined-medium/archive/v1.2.zip";
+    hash = "sha256-hgHwi25T+aM7ljzk5uR4x+CqoRJ3/IOyktdp/mDW46I=";
   };
 
   installPhase = ''
diff --git a/pkgs/data/fonts/unifont/default.nix b/pkgs/data/fonts/unifont/default.nix
index 7f2e9a1b158b..0868abcdd58c 100644
--- a/pkgs/data/fonts/unifont/default.nix
+++ b/pkgs/data/fonts/unifont/default.nix
@@ -4,16 +4,16 @@
 
 stdenv.mkDerivation rec {
   pname = "unifont";
-  version = "15.1.04";
+  version = "15.1.05";
 
   otf = fetchurl {
     url = "mirror://gnu/unifont/${pname}-${version}/${pname}-${version}.otf";
-    hash = "sha256-J8g8ojXDq5nV013zXXi1rEAYQhpCh7G06mV7IpmZbTg=";
+    hash = "sha256-e2K1CsuxhmidwwxEbOQ2e4fXlInpkHuDJV+fvg3PueE=";
   };
 
   pcf = fetchurl {
     url = "mirror://gnu/unifont/${pname}-${version}/${pname}-${version}.pcf.gz";
-    hash = "sha256-XHKP8xx+GvhFYBW03Sambpd2gclKvQUz1JAjIlb59OI=";
+    hash = "sha256-zpc9Z4XXvma/tXRYOvAAQIpjyYS+1XPiaLZF4xYPTbw=";
   };
 
   nativeBuildInputs = [ libfaketime xorg.fonttosfnt xorg.mkfontscale ];
diff --git a/pkgs/data/fonts/unifont_upper/default.nix b/pkgs/data/fonts/unifont_upper/default.nix
index e7820a85842c..058e4e4191c4 100644
--- a/pkgs/data/fonts/unifont_upper/default.nix
+++ b/pkgs/data/fonts/unifont_upper/default.nix
@@ -2,11 +2,11 @@
 
 stdenvNoCC.mkDerivation rec {
   pname = "unifont_upper";
-  version = "15.1.04";
+  version = "15.1.05";
 
   src = fetchurl {
     url = "mirror://gnu/unifont/unifont-${version}/${pname}-${version}.otf";
-    hash = "sha256-SUsG2xhrn47zrGpNzRn1g76qyt2vQyH/UBmYtzCD0UA=";
+    hash = "sha256-A/Z/+IMNUH/3Ir3ewf/U2xqkkpZDUDKO+dlnRYt+7U0=";
   };
 
   dontUnpack = true;
diff --git a/pkgs/data/fonts/vdrsymbols/default.nix b/pkgs/data/fonts/vdrsymbols/default.nix
index 5df82b31cfe5..fd7aba9ec063 100644
--- a/pkgs/data/fonts/vdrsymbols/default.nix
+++ b/pkgs/data/fonts/vdrsymbols/default.nix
@@ -27,6 +27,6 @@ stdenvNoCC.mkDerivation rec {
     # Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved.
     # DejaVu changes are in public domain
     # See https://dejavu-fonts.github.io/License.html for details
-    license = licenses.free;
+    license = with licenses; [ bitstreamVera publicDomain ];
   };
 }
diff --git a/pkgs/data/fonts/victor-mono/default.nix b/pkgs/data/fonts/victor-mono/default.nix
index 5c17ad653ebc..a855cf8b80bb 100644
--- a/pkgs/data/fonts/victor-mono/default.nix
+++ b/pkgs/data/fonts/victor-mono/default.nix
@@ -2,7 +2,7 @@
 
 stdenvNoCC.mkDerivation rec {
   pname = "victor-mono";
-  version = "1.5.5";
+  version = "1.5.6";
 
   # Upstream prefers we download from the website,
   # but we really insist on a more versioned resource.
@@ -14,7 +14,7 @@ stdenvNoCC.mkDerivation rec {
   src = fetchzip {
     url = "https://github.com/rubjo/victor-mono/raw/v${version}/public/VictorMonoAll.zip";
     stripRoot = false;
-    hash = "sha256-l8XeKE9PtluiazZO0PXfkGCcnm5o+VZdL7NZ6w0tp80=";
+    hash = "sha256-PnCCU7PO+XcxUk445sU5xVl8XqdSPJighjtDTqI6qiw=";
   };
 
   installPhase = ''