diff --git a/subprojects/bahaghari/lib/default.nix b/subprojects/bahaghari/lib/default.nix
index c75face3..88fa343d 100644
--- a/subprojects/bahaghari/lib/default.nix
+++ b/subprojects/bahaghari/lib/default.nix
@@ -20,6 +20,6 @@ pkgs.lib.makeExtensible
       # a top-level attribute.
       tinted-theming = callLibs ./tinted-theming.nix;
 
-      inherit (self.trivial) importYAML toYAML toBaseDigitsWithGlyphs;
+      inherit (self.trivial) importYAML toYAML toBaseDigitsWithGlyphs generateGlyphSet;
       inherit (self.hex) toHexString;
     })
diff --git a/subprojects/bahaghari/lib/trivial.nix b/subprojects/bahaghari/lib/trivial.nix
index 19167fc6..0f50b2cc 100644
--- a/subprojects/bahaghari/lib/trivial.nix
+++ b/subprojects/bahaghari/lib/trivial.nix
@@ -46,4 +46,19 @@
       toBaseDigits = d: glyphs.${builtins.toString d};
     in
     pkgs.lib.concatMapStrings toBaseDigits baseDigits;
+
+  /* Generates a glyph set usable for `toBaseDigitsWithGlyphs`. Take note the
+     given list is assumed to be sorted and the generated glyph set starts at
+     `0` up to (`listLength - 1`).
+
+     Type: generateGlyphSet :: [ String ] -> Attrs
+
+     Example:
+       generateGlyphSet [ "0" "1" "2" "3" "4" "5" "6" "7" "8 "9" "A" "B" "C" "D" "E" "F" ]
+  */
+  generateGlyphSet = glyphsList:
+    let
+      glyphsList' = pkgs.lib.lists.imap0 (i: glyph: { "${builtins.toString i}" = glyph; }) glyphsList;
+    in
+      pkgs.lib.foldl (acc: glyph: acc // glyph) { } glyphsList';
 }
diff --git a/subprojects/bahaghari/tests/lib/trivial/default.nix b/subprojects/bahaghari/tests/lib/trivial/default.nix
index ba422934..2affde03 100644
--- a/subprojects/bahaghari/tests/lib/trivial/default.nix
+++ b/subprojects/bahaghari/tests/lib/trivial/default.nix
@@ -40,6 +40,20 @@ let
   };
 in
 pkgs.lib.runTests {
+  testGenerateCustomGlyphSet = {
+    expr = lib.trivial.generateGlyphSet [ "A" "B" "C" "D" "E" "F" "G" "H" ];
+    expected = customOctalGlyphs;
+  };
+
+  testGenerateBase24GlyphSet = {
+    expr =
+      lib.trivial.generateGlyphSet
+        [ "0" "1" "2" "3" "4" "5" "6" "7"
+          "8" "9" "A" "B" "C" "D" "E" "F"
+          "G" "H" "I" "J" "M" "N" "O" "P" ];
+    expected = customBase24Glyphs;
+  };
+
   testBaseDigitWithCustomOctalGlyph = {
     expr = lib.trivial.toBaseDigitsWithGlyphs 8 9 customOctalGlyphs;
     expected = "BB";