From 6a98c96f7af13faca7838424dbb1ca1f5343d36d Mon Sep 17 00:00:00 2001 From: puttaalu Date: Sun, 13 Oct 2024 19:17:19 +0200 Subject: [PATCH] wip: generate src inputs --- README.md | 2 +- default.nix | 79 +++++++++++++++++++++++++++++++++++++++++++++++++---- flake.lock | 6 ++-- flake.nix | 32 ++++++++-------------- shas.nix | 52 +++++++++++++++++++++++++++++++++++ 5 files changed, 141 insertions(+), 30 deletions(-) create mode 100644 shas.nix diff --git a/README.md b/README.md index ce650e9..0f609b0 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ This is a WIP Flake that can install SMCs fonts. Currently, the following are su 4. Gayathri *NOTE* I am not that familiar with nix flakes yet. This repo will see a lot more activity and perhaps significant change in structure in the near future. - + ## Using with a flakes+home-manager based nixOS setup In the inputs section diff --git a/default.nix b/default.nix index dfa07fc..fa6520f 100644 --- a/default.nix +++ b/default.nix @@ -1,7 +1,74 @@ -{ pkgs, ... }: +{ 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 ? [ ] }: -{ - manjari = pkgs.callPackage ./manjari { }; - anjali-old-lipi = pkgs.callPackage ./anjali-old-lipi { }; - chilanka = pkgs.callPackage ./chilanka { }; -} +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 ]; + }; +}) diff --git a/flake.lock b/flake.lock index 07cac77..ee9838e 100644 --- a/flake.lock +++ b/flake.lock @@ -20,11 +20,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1721924956, - "narHash": "sha256-Sb1jlyRO+N8jBXEX9Pg9Z1Qb8Bw9QyOgLDNMEpmjZ2M=", + "lastModified": 1728492678, + "narHash": "sha256-9UTxR8eukdg+XZeHgxW5hQA9fIKHsKCdOIUycTryeVw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "5ad6a14c6bf098e98800b091668718c336effc95", + "rev": "5633bcff0c6162b9e4b5f1264264611e950c8ec7", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index fd0ed4b..9aa724f 100644 --- a/flake.nix +++ b/flake.nix @@ -11,28 +11,20 @@ flake-utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; }; - font-smc-manjari = pkgs.callPackage ./manjari/default.nix { }; - font-smc-anjali-old-lipi = - pkgs.callPackage ./anjali-old-lipi/default.nix { }; - font-smc-chilanka = pkgs.callPackage ./chilanka/default.nix { }; - font-smc-gayathri = pkgs.callPackage ./gayathri/default.nix { }; + fonts-smc = pkgs.callPackage ./default.nix { }; + # font-smc-manjari = pkgs.callPackage ./manjari/default.nix { }; + # font-smc-anjali-old-lipi = + # pkgs.callPackage ./anjali-old-lipi/default.nix { }; + # font-smc-chilanka = pkgs.callPackage ./chilanka/default.nix { }; + # font-smc-gayathri = pkgs.callPackage ./gayathri/default.nix { }; in rec { packages = { - smc-anjali-old-lipi = font-smc-anjali-old-lipi; - smc-manjari = font-smc-manjari; - smc-chilanka = font-smc-chilanka; - smc-gayathri = font-smc-gayathri; - - all = pkgs.symlinkJoin { - name = "all"; - paths = [ - font-smc-anjali-old-lipi - font-smc-chilanka - font-smc-manjari - font-smc-gayathri - ]; - }; - default = packages.all; + smc-fonts = fonts-smc; + # smc-anjali-old-lipi = font-smc-anjali-old-lipi; + # smc-manjari = font-smc-manjari; + # smc-chilanka = font-smc-chilanka; + # smc-gayathri = font-smc-gayathri; + default = fonts-smc; }; }); } diff --git a/shas.nix b/shas.nix new file mode 100644 index 0000000..41fd097 --- /dev/null +++ b/shas.nix @@ -0,0 +1,52 @@ +{ + + # Font name , variant and sha + "anjalioldlipi" = { + "anjalioldlipi" = "sha256-c3ScpdN2h39Q6GLFL97pBBGrsillcMXmhlGilOAdF1w="; + }; + "chilanka" = { + "chilanka" = "sha256-z+pRvm/8alA3TbUBuR4oDD/kpvuXJTqOBlzXEKBZvnE="; + }; + "dyuthi" = { + "dyuthi" = "sha256-H+2ccvHmlZjtH8KfWBSQKPtMkY/NsydHqFNaTzLS4S8="; + }; + "gayathri" = { + "gayathri" = "sha256-p9KZi31Na4hfUuDsKj4OXjc9s6J/8xMeuszlL5oVauQ="; + }; + "karumbi" = { + "karumbi" = "sha256-aeKH7CWbJNtkgv1PsaWWxyBZor+UO9q9Cctpc/qnEQU="; + }; + "keraleeyam" = { + "keraleeyam" = "sha256-UEhDtBaWof/2C36IapGhtYgdeQInUn+A/UAJIF7+RuA="; + }; + "malini" = { + "Malini" = "sha256-LvXf1zAlLvZhn2/peRVjOPjQwG46mMP8Dxuvs4fmK1s="; + }; + "manjari" = { + "manjari" = "sha256-Sq/7UOBO54c3id6FMZeOmnZTRceEkMAAN8W+C7v7Mtw="; + }; + "meera" = { + "meera" = "sha256-yaqA2gYKc4OJ9YxmvQPUZ3qZFyKj0YciMaUoY1SST4I="; + }; + "nupuram" = { + "Nupuram-Arrows-Color" = + "sha256-oFsUCu3mDuHok7BXPnb1VdKmqP7DTw6TXKv6iXDknzA="; + "Nupuram-Calligraphy" = + "sha256-R2fPKe5PZqWu4ftV3/iVZptBhq9rku7EcXQGzGgylns="; + "Nupuram-Color" = "sha256-JwanvoGtI3BrG/DxGreo+gVZNGPjLiQA31nheNcuZWw="; + "Nupuram-Dots" = "sha256-5V09G4PkDnHHd/oIRe3kHX6BOQ5HuVVcFSlae32bdVs="; + }; + "rachana" = { + "rachana" = "sha256-csfMs4B6BD+yap/AaWpm4kQDsR/WNMrym6szM5iZNJo="; + }; + "raghumalayalamsans" = { + "raghumalayalamsans" = + "sha256-rSM77MiFqRzs67mme8xkJZkw13esB9eG13j8OzytCaA="; + }; + "suruma" = { + "suruma" = "sha256-x4ybBr5oCwD5Stu8rRGndOYRzaV6ikE+VnLJ/src+1U="; + }; + "uroob" = { + "uroob" = "sha256-IJcKD3cDRMA7G7foKtXtJxOrv6OeOujkq9+uGo+R/dY="; + }; +}