diff --git a/flake.nix b/flake.nix
index 0318ebe..dbac670 100644
--- a/flake.nix
+++ b/flake.nix
@@ -116,6 +116,10 @@
       # auto backports from nixpkgs unstable
       self.overlays.backports
 
+      # modpacks (keeps modpack version in sync between hosts so i can reverse
+      # proxy create track map because it's broken)
+      self.overlays.modpacks
+
       inputs.hyprwm-contrib.overlays.default
       inputs.rust-overlay.overlays.default
       inputs.nixfiles-assets.overlays.default
diff --git a/overlays/default.nix b/overlays/default.nix
index 41d51df..d25c036 100644
--- a/overlays/default.nix
+++ b/overlays/default.nix
@@ -9,6 +9,7 @@ let
 in rec {
   backports = import ./backports.nix nixfiles;
   mitigations = import ./mitigations.nix nixfiles;
+  modpacks = import ./modpacks.nix nixfiles;
   default = composeManyExtensions [
     backports
     mitigations
diff --git a/overlays/modpacks.nix b/overlays/modpacks.nix
new file mode 100644
index 0000000..5ddbc9a
--- /dev/null
+++ b/overlays/modpacks.nix
@@ -0,0 +1,27 @@
+nixfiles: final: prev:
+let
+  inherit (final) lib;
+  inherit (lib) fakeHash;
+  notlite = let
+    commit = "7697c3a";
+    packHash = "sha256-/IA/NP1w9RcWg+71lxUN+Q3hz12GhN/e4lkSnaYyAb4=";
+  in final.fetchPackwizModpack {
+      url = "https://gitea.protogen.io/nullbite/notlite/raw/commit/${commit}/pack.toml";
+      inherit packHash;
+    };
+
+  notlite-ctm-static = final.stdenvNoCC.mkDerivation {
+    pname = "ctm-static";
+    version = "0.0.0";
+    src = final.emptyDirectory;
+    nativeBuildInputs = [ final.unzip ];
+    buildPhase = ''
+      unzip "${notlite}/mods/create-track-map-*.jar" 'assets/littlechasiu/ctm/static/*'
+      cp -r assets/littlechasiu/ctm/static/. $out/
+    '';
+  };
+in {
+  modpacks = {
+    inherit notlite notlite-ctm-static;
+  };
+}