From 69b372d036e8602a35fcfbb82abadc7004bda692 Mon Sep 17 00:00:00 2001 From: Daniel Flanagan Date: Fri, 2 Feb 2024 15:28:57 -0600 Subject: [PATCH] WIP font --- flake.nix | 2 +- pkgs/default.nix | 10 ++++++++-- pkgs/iosevka-lyte-term-min.nix | 29 +++++++++++++++++++++++++++++ pkgs/iosevka-lyte-term.nix | 26 ++++++++++++++++++++++++-- pkgs/makesubset.bash | 15 +++++++++++++++ pkgs/subset-glyphs.txt | 1 + 6 files changed, 78 insertions(+), 5 deletions(-) create mode 100644 pkgs/iosevka-lyte-term-min.nix create mode 100644 pkgs/makesubset.bash create mode 100644 pkgs/subset-glyphs.txt diff --git a/flake.nix b/flake.nix index faf75dc..b9c17f6 100644 --- a/flake.nix +++ b/flake.nix @@ -58,7 +58,7 @@ # Your custom packages # Acessible through 'nix build', 'nix shell', etc - packages = forAllSystems (system: import ./pkgs nixpkgs.legacyPackages.${system}); + packages = forAllSystems (system: import ./pkgs {pkgs = nixpkgs.legacyPackages.${system};}); # Formatter for your nix files, available through 'nix fmt' # Other options beside 'alejandra' include 'nixpkgs-fmt' diff --git a/pkgs/default.nix b/pkgs/default.nix index 5aa4dfb..acbdccc 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -1,6 +1,12 @@ # Custom packages, that can be defined similarly to ones from nixpkgs # You can build them using 'nix build .#example' -{pkgs, ...}: { - iosevka-lyte-term = pkgs.callPackage ./iosevka-lyte-term.nix {inherit pkgs;}; +{pkgs, ...}: rec { + iosevka-lyte-term = pkgs.callPackage ./iosevka-lyte-term.nix {inherit (pkgs) iosevka;}; + iosevka-lyte-term-min = pkgs.callPackage ./iosevka-lyte-term-min.nix { + inherit pkgs; + inherit (pkgs) brotli; + inherit iosevka-lyte-term; + fonttools = pkgs.python311Packages.fonttools; + }; # example = pkgs.callPackage ./example { }; } diff --git a/pkgs/iosevka-lyte-term-min.nix b/pkgs/iosevka-lyte-term-min.nix new file mode 100644 index 0000000..f13279c --- /dev/null +++ b/pkgs/iosevka-lyte-term-min.nix @@ -0,0 +1,29 @@ +{ + pkgs, + fonttools, + brotli, + iosevka-lyte-term, + ... +}: let + BASE_FONTS = "${iosevka-lyte-term}/share/fonts/truetype"; +in + pkgs.stdenvNoCC.mkDerivation { + inherit BASE_FONTS; + pname = "iosevka-lyte-term-min"; + version = iosevka-lyte-term.version; + # do I need to include makesubset.bash and subset-glyphs.txt? + buildInputs = [fonttools brotli]; + srcs = [ + BASE_FONTS + ./makesubset.bash + ]; + installPhase = '' + mkdir -p "$out/share/fonts/truetype" + for f in "$BASE_FONTS"/dist/iosevkalyteweb/woff2/*.woff2; do + if [[ $f == *".subset.woff2"* ]]; then + pyftsubset "$f" --name-IDs+=0,4,6 --text-file=./subset-glyphs.txt --flavor=woff2 & + fi + done + wait + ''; + } diff --git a/pkgs/iosevka-lyte-term.nix b/pkgs/iosevka-lyte-term.nix index a3f259e..fc66e18 100644 --- a/pkgs/iosevka-lyte-term.nix +++ b/pkgs/iosevka-lyte-term.nix @@ -1,6 +1,28 @@ -{pkgs, ...}: -pkgs.iosevka.override { +{iosevka, ...}: +(iosevka.overrideAttrs + (final: prev: { + pname = "iosevka-lyte-term"; + + buildPhase = '' + export HOME=$TMPDIR + runHook preBuild + npm run build --no-update-notifier -- --jCmd=$NIX_BUILD_CORES --verbose=9 ttf::iosevka-lyteterm + npm run build --no-update-notifier -- --jCmd=$NIX_BUILD_CORES --verbose=9 woff2::iosevka-lyteterm + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + fontdir="$out/share/fonts" + install -d "$fontdir" + install "dist/$pname/ttf"/* "$fontdir/truetype" + install "dist/$pname/woff2"/* "$fontdir/woff2" + runHook postInstall + ''; + })) +.override { set = "lyteterm"; + privateBuildPlan = '' [buildPlans.iosevka-lyteterm] family = "IosevkaLyteTerm" diff --git a/pkgs/makesubset.bash b/pkgs/makesubset.bash new file mode 100644 index 0000000..0812af7 --- /dev/null +++ b/pkgs/makesubset.bash @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +echo "out: $out" +echo "src: $src" +echo "BASE_FONTS: $BASE_FONTS" +echo "srcs: $srcs" +mkdir -p "$out/share/fonts/truetype" +for f in "$src"/dist/iosevkalyteweb/woff2/*.woff2; do + if [[ $f == *".subset.woff2"* ]]; then + pyftsubset "$f" --name-IDs+=0,4,6 --text-file=./subset-glyphs.txt --flavor=woff2 & + fi +done +wait +mv ./dist/iosevkalyteweb/woff2/*.subset.woff2 ./dist/iosevkalyteweb/woff2-subset/ +touch ./dist/iosevkalyteweb/woff2-subset/ diff --git a/pkgs/subset-glyphs.txt b/pkgs/subset-glyphs.txt new file mode 100644 index 0000000..756d2b7 --- /dev/null +++ b/pkgs/subset-glyphs.txt @@ -0,0 +1 @@ + !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ‌… ⎜⎡⎣─│┊└├┬╯░▒♯