Do more work on updating fonts
diff --git a/modules/fonts.nix b/modules/fonts.nix
index 14c51bd..1927bff 100644
--- a/modules/fonts.nix
+++ b/modules/fonts.nix
@@ -5,9 +5,9 @@
       roboto-mono
       roboto-slab
       twitter-color-emoji
-      font-awesome
-      material-design-icons
+      octicons
       powerline-symbols
+      monocraft
       nerdfonts-glyphs
     ];
 
@@ -15,10 +15,10 @@
     enableDefaultFonts = true;
 
     fontconfig.defaultFonts = {
-      serif = ["Roboto Slab"];
-      sansSerif = ["Roboto" "Symbols Nerd Font"];
-      monospace = ["Roboto Mono" "Symbols Nerd Font"];
-      emoji = ["Twitter Color Emoji"];
+      serif = ["Roboto Slab" "octicons"];
+      sansSerif = ["Roboto" "octicons"];
+      monospace = ["Liga Roboto Mono" "octicons"];
+      emoji = ["Twitter Color Emoji" "octicons"];
     };
   };
 }
diff --git a/overlays/ligaturize.nix b/overlays/ligaturize.nix
index 49d532c..223a1eb 100644
--- a/overlays/ligaturize.nix
+++ b/overlays/ligaturize.nix
@@ -1,11 +1,12 @@
 final: prev: let
   lib = prev.lib;
   fonts = ["roboto-mono"];
-  ligaturizer = prev.fetchFromGithub {
+  ligaturizer = prev.fetchFromGitHub {
     owner = "ToxicFrog";
     repo = "Ligaturizer";
     rev = "v5";
-    sha256 = lib.fakeSha256;
+    sha256 = "sha256-sFzoUvA4DB9CVonW/OZWWpwP0R4So6YlAQeqe7HLq50=";
+    fetchSubmodules = true;
   };
 in
   lib.pipe fonts [
@@ -13,15 +14,34 @@
       inherit name;
       value = prev.${name};
     }))
+    builtins.listToAttrs
     (builtins.mapAttrs (name: value:
       value.overrideAttrs (
         prevAttrs: {
-          postPatch = prevAttrs.postPatch + ''
-          find $out -name "*.ttf" -exec fontforge -lang py -script ligaturize.py {} \;
-          find $out -name "*.otf" -exec fontforge -lang py -script ligaturize.py {} \;
-          false
-          '';
+          outputHash = null;
+          outputHashMode = null;
+          outputHashAlgo = null;
+          nativeBuildInputs = (prevAttrs.nativeBuildInputs or []) ++ [prev.fontforge];
+          postFixup =
+            (prevAttrs.postFixup or "")
+            + ''
+              pushd ${ligaturizer}
+              mkdir -p $out/share/fonts/truetype
+              mkdir -p $out/share/fonts/opentype
+              find $out/share/fonts/truetype \
+                -name "*.ttf" \
+                -exec fontforge \
+                -lang py \
+                -script ligaturize.py {} \
+                --output-dir=$out/share/fonts/truetype \;
+              find $out/share/fonts/opentype \
+                -name "*.otf" \
+                -exec fontforge \
+                -lang py \
+                -script ligaturize.py {} \
+                --output-dir=$out/share/fonts/opentype \;
+              popd
+            '';
         }
       )))
-    builtins.listToAttrs
   ]
diff --git a/packages/monocraft.nix b/packages/monocraft.nix
index cff1079..d265767 100644
--- a/packages/monocraft.nix
+++ b/packages/monocraft.nix
@@ -11,7 +11,7 @@
     owner = "IdreesInc";
     repo = "Monocraft";
     rev = "v${version}";
-    sha256 = "sha256-ePBxEVjzAJ7g6iAGIqPfgZ8bwtNILmyEVm0zD+xNN6k=";
+    sha256 = "sha256-frg7LcMv6zWPWxkr6RIl01fC68THELbb45mJVqefXC0=";
   };
 
   dontBuild = true;
diff --git a/packages/nerdfonts-glyphs.nix b/packages/nerdfonts-glyphs.nix
index ec96f74..43b6be5 100644
--- a/packages/nerdfonts-glyphs.nix
+++ b/packages/nerdfonts-glyphs.nix
@@ -5,7 +5,7 @@
 }:
 stdenv.mkDerivation rec {
   pname = "nerdfonts-glyphs";
-  version = "2.2.2";
+  version = "2.1.0";
 
   # This uses a sparse checkout because the repo is >2GB without it
   src = fetchFromGitHub {
@@ -15,7 +15,7 @@
     sparseCheckout = ''
       /src/glyphs
     '';
-    sha256 = "sha256-ePBlEVjzAJ7g6iAGIqPfgZ8bwtNILmyEVm0zD+xNN6k=";
+    sha256 = "sha256-boZUd1PM8puc9BTgOwCJpkfk6VMdXLsIyp+fQmW/ZqI=";
   };
 
   dontBuild = true;
@@ -25,6 +25,7 @@
     mkdir -p $out/bin $out/share/fonts/opentype
     find . -name "*.ttf" -exec mv {} $out/share/fonts/truetype \;
     find . -name "*.otf" -exec mv {} $out/share/fonts/opentype \;
+    
   '';
 
   meta = with lib; {
diff --git a/packages/octicons.nix b/packages/octicons.nix
index 35497bd..805425b 100644
--- a/packages/octicons.nix
+++ b/packages/octicons.nix
@@ -3,225 +3,72 @@
   fetchFromGitHub,
   stdenv,
   fontforge,
-  writeFile,
-  useNerdfontsOffset ? false,
+  writeText,
+  useNerdfontsOffset ? true,
 }: let
-  codepoints = writeFile "codepoints.json" ''
-    {
-      "alert": 61485,
-      "arrow-down": 61503,
-      "arrow-left": 61504,
-      "arrow-right": 61502,
-      "arrow-small-down": 61600,
-      "arrow-small-left": 61601,
-      "arrow-small-right": 61553,
-      "arrow-small-up": 61599,
-      "arrow-up": 61501,
-      "beaker": 61661,
-      "bell": 61662,
-      "bold": 61666,
-      "book": 61447,
-      "bookmark": 61563,
-      "briefcase": 61651,
-      "broadcast": 61512,
-      "browser": 61637,
-      "bug": 61585,
-      "calendar": 61544,
-      "check": 61498,
-      "checklist": 61558,
-      "chevron-down": 61603,
-      "chevron-left": 61604,
-      "chevron-right": 61560,
-      "chevron-up": 61602,
-      "circle-slash": 61572,
-      "circuit-board": 61654,
-      "clippy": 61493,
-      "clock": 61510,
-      "cloud-download": 61451,
-      "cloud-upload": 61452,
-      "code": 61535,
-      "comment": 61483,
-      "comment-discussion": 61519,
-      "credit-card": 61509,
-      "dash": 61642,
-      "dashboard": 61565,
-      "database": 61590,
-      "device-camera": 61526,
-      "device-camera-video": 61527,
-      "device-desktop": 62076,
-      "device-mobile": 61496,
-      "desktop-download": 61660,
-      "diff": 61517,
-      "diff-added": 61547,
-      "diff-ignored": 61593,
-      "diff-modified": 61549,
-      "diff-removed": 61548,
-      "diff-renamed": 61550,
-      "ellipsis": 61594,
-      "eye": 61518,
-      "file-binary": 61588,
-      "file-code": 61456,
-      "file-directory": 61462,
-      "file-media": 61458,
-      "file-pdf": 61460,
-      "file-submodule": 61463,
-      "file-symlink-directory": 61617,
-      "file-symlink-file": 61616,
-      "file-text": 61457,
-      "file-zip": 61459,
-      "flame": 61650,
-      "fold": 61644,
-      "gear": 61487,
-      "gift": 61506,
-      "gist": 61454,
-      "gist-secret": 61580,
-      "git-branch": 61472,
-      "git-commit": 61471,
-      "git-compare": 61612,
-      "git-merge": 61475,
-      "git-pull-request": 61449,
-      "globe": 61622,
-      "graph": 61507,
-      "heart": 9829,
-      "history": 61566,
-      "home": 61581,
-      "horizontal-rule": 61552,
-      "hubot": 61597,
-      "inbox": 61647,
-      "info": 61529,
-      "issue-closed": 61480,
-      "issue-opened": 61478,
-      "issue-reopened": 61479,
-      "italic": 61668,
-      "jersey": 61465,
-      "key": 61513,
-      "keyboard": 61453,
-      "law": 61656,
-      "light-bulb": 61440,
-      "link": 61532,
-      "link-external": 61567,
-      "list-ordered": 61538,
-      "list-unordered": 61537,
-      "location": 61536,
-      "lock": 61546,
-      "logo-gist": 61613,
-      "logo-github": 61586,
-      "mail": 61499,
-      "mail-read": 61500,
-      "mail-reply": 61521,
-      "mark-github": 61450,
-      "markdown": 61641,
-      "megaphone": 61559,
-      "mention": 61630,
-      "milestone": 61557,
-      "mirror": 61476,
-      "mortar-board": 61655,
-      "mute": 61568,
-      "no-newline": 61596,
-      "octoface": 61448,
-      "organization": 61495,
-      "package": 61636,
-      "paintcan": 61649,
-      "pencil": 61528,
-      "person": 61464,
-      "pin": 61505,
-      "plug": 61652,
-      "plus": 61533,
-      "primitive-dot": 61522,
-      "primitive-square": 61523,
-      "pulse": 61573,
-      "question": 61484,
-      "quote": 61539,
-      "radio-tower": 61488,
-      "repo": 61441,
-      "repo-clone": 61516,
-      "repo-force-push": 61514,
-      "repo-forked": 61442,
-      "repo-pull": 61446,
-      "repo-push": 61445,
-      "rocket": 61491,
-      "rss": 61492,
-      "ruby": 61511,
-      "search": 61486,
-      "server": 61591,
-      "settings": 61564,
-      "shield": 61665,
-      "sign-in": 61494,
-      "sign-out": 61490,
-      "smiley": 61671,
-      "squirrel": 61618,
-      "star": 61482,
-      "stop": 61583,
-      "sync": 61575,
-      "tag": 61461,
-      "tasklist": 61669,
-      "telescope": 61576,
-      "terminal": 61640,
-      "text-size": 61667,
-      "three-bars": 61534,
-      "thumbsup": 61658,
-      "thumbsdown": 61659,
-      "tools": 61489,
-      "trashcan": 61648,
-      "triangle-down": 61531,
-      "triangle-left": 61508,
-      "triangle-right": 61530,
-      "triangle-up": 61610,
-      "unfold": 61497,
-      "unmute": 61626,
-      "unverified": 61672,
-      "verified": 61670,
-      "versions": 61540,
-      "watch": 61664,
-      "x": 61569,
-      "zap": 9889,
-      "ellipses": 61697,
-      "file": 61698,
-      "grabber": 61699,
-      "plus-small": 61700,
-      "reply": 61701
-    }
-  '';
-  script = writeFile "octicons.py" ''
+  pname = "octicons";
+  version = "4.4.0";
+  src = fetchFromGitHub {
+    owner = "primer";
+    repo = "octicons";
+    rev = "v${version}";
+    sha256 = "sha256-xhJRe5mO2YkqQggqZ1JHBYsJKQUSJA08crDvl22GSGg=";
+  };
+
+  script = writeText "octicons.py" ''
     import fontforge
     import json
-    
-    with open("${codepoints}/codepoints.json") as f:
+    import itertools
+
+
+    if ${
+      if useNerdfontsOffset
+      then "True"
+      else "False"
+    }:
+      validRange = list(itertools.chain((0x2665, 0x26a1), range(0xF400, 0xF4A8), (0xF112, 0xF67C)))
+      def codepointTransform(_):
+        return validRange.pop(0)
+    else:
+      codepointTransform = lambda cp: cp
+
+    offset = ${
+      if useNerdfontsOffset
+      then "0x0400"
+      else "0"
+    }
+
+    with open("${src}/lib/font/codepoints.json") as f:
       codepoints = json.load(f)
 
     font = fontforge.font()
 
-    for name, codepoint in enumerate(codepoints):
-      glyph = font.createChar(codepoint)
-      glyph.importOutlines(f"./icons/{name}-24.svg")
+    for name, codepoint in sorted(codepoints.items(), key=lambda item: item[1]):
+      transformed = codepointTransform(codepoint)
+      print(name, hex(transformed))
+      glyph = font.createChar(transformed)
+      glyph.importOutlines(f"${src}/lib/svg/{name}.svg")
 
-    font.fontname = "octicons"
+    font.familyname = "${pname}"
+    font.fullname = "${pname}"
+    font.fontname = "${pname}"
 
-    font.save("octicons.ttf")
+    font.generate("${pname}.ttf")
   '';
 in
-  rectdenv.mkDerivation rec {
-    pname = "octicons";
-    version = "17.5.0";
-
-    src = fetchFromGitHub {
-      owner = "primer";
-      repo = "octicons";
-      rev = "v${version}";
-      sha256 = lib.fakeSha256;
-    };
-
-    dontBuild = true;
+  stdenv.mkDerivation rec {
+    inherit version src pname;
 
     buildPhase = ''
       fontforge \
         -lang py \
-        -script ${script}/octicons.py \;
+        -script ${script} \;
     '';
 
     installPhase = ''
-      mkdir -p $out/bin $out/share/fonts/opentype
-      mv octicons.ttf $out/share/fonts/opentype
+      mkdir -p $out/bin $out/share/fonts/truetype
+      mv ${pname}.ttf $out/share/fonts/truetype
+      echo $out
     '';
 
     nativeBuildInputs = [fontforge];