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=";
+  };
+}
