smc-fonts-flake/default.nix

75 lines
2.1 KiB
Nix

{ stdenv, fetchzip, lib
# To select only certain fonts, put a list of strings to `fonts`: every key in
# ./shas.nix is an optional font
, fonts ? [ ] }:
let
# both of these files are generated via ./update.sh
version = "version-20241013";
fontsShas = import ./shas.nix;
knownFonts = builtins.attrNames fontsShas;
selectedFonts = if (fonts == [ ]) then
knownFonts
else
let unknown = lib.subtractLists knownFonts fonts;
in if (unknown != [ ]) then
throw "Unknown font(s): ${lib.concatStringsSep " " unknown}"
else
fonts;
# Filter the fonts by selectedFonts list
filteredFonts =
builtins.filter (fontName: builtins.elem fontName selectedFonts)
(builtins.attrNames fontsShas);
# Function to generate a list of srcs that look like
# [
# (fetchurl {
# url = "";
# sha256 = "sha256-abc123...";
# })
# (fetchurl {
# url = "";
# sha256 = "sha256-def456...";
# })
# ]
generateUrls = fontAttrs: fontName:
builtins.map (variant:
let sha = fontAttrs.${variant};
in fetchzip {
url = "https://smc.org.in/downloads/fonts/${fontName}/${variant}.zip";
sha256 = sha;
stripRoot = false;
}) (builtins.attrNames fontAttrs);
# Generate srcs for the filtered fonts
srcs = builtins.concatLists
(builtins.map (fontName: generateUrls fontsShas.${fontName} fontName)
filteredFonts);
in stdenv.mkDerivation (finalAttrs: {
inherit version;
inherit srcs;
pname = "smc-fonts";
# sourceRoot = ".";
buildPhase = ''
echo "selected fonts are ${toString selectedFonts}"
ls *.otf *.ttf
'';
installPhase = ''
find -name \*.otf -exec mkdir -p $out/share/fonts/opentype/ \; -exec mv {} $out/share/fonts/opentype/ \;
find -name \*.ttf -exec mkdir -p $out/share/fonts/truetype/ \; -exec mv {} $out/share/fonts/truetype/ \;
'';
meta = with lib; {
description = "SMC typefaces";
longDescription = ''
Swathanthra Malayalam Computing.
'';
homepage = "https://smc.org.in/";
license = licenses.ofl;
platforms = platforms.all;
maintainers = with maintainers; [ aashiks ];
};
})