151 lines
4.7 KiB
Nix
151 lines
4.7 KiB
Nix
{
|
|
description = "Iosevka fonts for Modulo Notes";
|
|
|
|
inputs = {
|
|
nixpkgs.url = "nixpkgs/nixos-unstable";
|
|
utils.url = "github:numtide/flake-utils";
|
|
};
|
|
|
|
outputs = { self, nixpkgs, utils }:
|
|
utils.lib.eachSystem [ "x86_64-linux" "aarch64-linux" ] (system:
|
|
let pkgs = import nixpkgs { inherit system; };
|
|
in {
|
|
packages.default = pkgs.stdenvNoCC.mkDerivation {
|
|
name = "iosevka-modulo";
|
|
dontUnpack = true;
|
|
buildInputs = with pkgs; [ python311Packages.brotli python311Packages.fonttools ];
|
|
buildPhase = let
|
|
iosevka-regular = pkgs.iosevka.override {
|
|
set = "regular";
|
|
privateBuildPlan = {
|
|
family = "Iosevka Regular Modulo";
|
|
spacing = "normal";
|
|
serifs = "sans";
|
|
no-ligation = false;
|
|
no-cv-ss = true;
|
|
variants = {
|
|
design = {
|
|
l = "flat-tailed";
|
|
zero = "dotted";
|
|
asterisk = "turn-hex-high";
|
|
number-sign = "slanted-tall";
|
|
at = "fourfold-solid-inner";
|
|
};
|
|
};
|
|
slopes.upright = {
|
|
angle = 0;
|
|
shape = "upright";
|
|
menu = "upright";
|
|
css = "normal";
|
|
};
|
|
slopes.italic = {
|
|
angle = 9.4;
|
|
shape = "italic";
|
|
menu = "italic";
|
|
css = "italic";
|
|
};
|
|
weights.regular = {
|
|
shape = 400;
|
|
menu = 400;
|
|
css = 400;
|
|
};
|
|
weights.bold = {
|
|
shape = 700;
|
|
menu = 700;
|
|
css = 700;
|
|
};
|
|
weights.heavy = {
|
|
shape = 900;
|
|
menu = 900;
|
|
css = 900;
|
|
};
|
|
};
|
|
};
|
|
iosevka-etoile = pkgs.iosevka.override {
|
|
set = "etoile";
|
|
privateBuildPlan = {
|
|
family = "Iosevka Etoile Iaso";
|
|
spacing = "quasi-proportional";
|
|
serifs = "slab";
|
|
no-ligation = true;
|
|
no-cv-ss = true;
|
|
variants = {
|
|
design = {
|
|
l = "serifed-flat-tailed";
|
|
zero = "dotted";
|
|
asterisk = "turn-hex-high";
|
|
number-sign = "slanted-tall";
|
|
at = "fourfold-solid-inner";
|
|
w = "straight-flat-top-serifed";
|
|
};
|
|
};
|
|
slopes = {
|
|
upright = {
|
|
angle = 0;
|
|
shape = "upright";
|
|
menu = "upright";
|
|
css = "normal";
|
|
};
|
|
italic = {
|
|
angle = 9.4;
|
|
shape = "italic";
|
|
menu = "italic";
|
|
css = "italic";
|
|
};
|
|
};
|
|
weights.regular = {
|
|
shape = 400;
|
|
menu = 400;
|
|
css = 400;
|
|
};
|
|
weights.bold = {
|
|
shape = 700;
|
|
menu = 700;
|
|
css = 700;
|
|
};
|
|
weights.heavy = {
|
|
shape = 900;
|
|
menu = 900;
|
|
css = 900;
|
|
};
|
|
};
|
|
};
|
|
in ''
|
|
mkdir -p ttf
|
|
for ttf in ${iosevka-regular}/share/fonts/truetype/*.ttf ${iosevka-etoile}/share/fonts/truetype/*.ttf; do
|
|
cp $ttf .
|
|
|
|
echo "processing $ttf"
|
|
|
|
name=`basename -s .ttf $ttf`
|
|
pyftsubset \
|
|
$ttf \
|
|
--output-file="$name".woff2 \
|
|
--flavor=woff2 \
|
|
--layout-features=* \
|
|
--no-hinting \
|
|
--desubroutinize \
|
|
--unicodes="U+0000-0170,U+00D7,U+00F7,U+2000-206F,U+2074,U+20AC,U+2122,U+2190-21BB,U+2212,U+2215,U+F8FF,U+FEFF,U+FFFD,U+00E8"
|
|
mv *.ttf ttf
|
|
done
|
|
|
|
${pkgs.zip}/bin/zip ttf.zip ttf/*.ttf
|
|
|
|
${pkgs.python3}/bin/python3 ${./src/specimen.py}
|
|
'';
|
|
installPhase = ''
|
|
mkdir -p $out
|
|
cp *.woff2 $out
|
|
cp ttf.zip $out
|
|
|
|
cp ${src/family.css} $out/family.css
|
|
cp *.html $out
|
|
'';
|
|
};
|
|
|
|
devShells.default = pkgs.mkShell {
|
|
buildInputs = [pkgs.python3];
|
|
};
|
|
});
|
|
}
|