fixed
diff --git a/.gitmodules b/.gitmodules
index da4b2df..f8e01e9 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,4 +1,4 @@
 [submodule "src/reflex/nsfwjs"]
 	path = src/reflex/nsfwjs
-	url = https://github.com/infinitered/nsfwjs
+	url = https://github.com/clicksminuteper/nsfwjs
 	shallow = true
diff --git a/flake.lock b/flake.lock
index 4435c97..93f2395 100644
--- a/flake.lock
+++ b/flake.lock
@@ -191,11 +191,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1686173255,
-        "narHash": "sha256-G9HiMDCnK+YeIb+lpLxsRg+/Kk2pz/PSlEtFe8Yi138=",
+        "lastModified": 1686323589,
+        "narHash": "sha256-XADn6eWl3670Oj38p0GiN1PaPKvTmDQRQErGLXYjZQU=",
         "ref": "refs/heads/master",
-        "rev": "f91bc86c6d2b1c2c3c4f476835b5ec01b750e898",
-        "revCount": 98,
+        "rev": "aa1dc4ff5759f04cc383a5b38a163b3a7b6ac601",
+        "revCount": 102,
         "type": "git",
         "url": "ssh://git@github.com/clicksminuteper/pnpm2nix"
       },
diff --git a/flake.nix b/flake.nix
index 8c57619..33d0698 100644
--- a/flake.nix
+++ b/flake.nix
@@ -8,64 +8,120 @@
   inputs.pnpm2nix.inputs.nixpkgs.follows = "nixpkgs";
 
   outputs = { self, nixpkgs, flake-utils, clicks-server, pnpm2nix }:
-    flake-utils.lib.eachDefaultSystem (system: let
-      pkgs = nixpkgs.legacyPackages.${system};
-      nodejs = pkgs.nodejs_20;
-      nodePackages = pkgs.nodePackages_latest;
-      lib = pkgs.lib;
-    in rec {
-      devShells.default = pkgs.mkShell {
-        packages = [ nodejs nodePackages.pnpm pkgs.pkg-config pkgs.fontconfig.dev ];
-        shellHook = ''
-          unset name
-          export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:${lib.makeSearchPath "/lib/pkgconfig" [
-            pkgs.pixman
-            pkgs.cairo.dev
-            pkgs.libpng.dev
-            pkgs.gnome2.pango.dev
-            pkgs.glib.dev
-            pkgs.harfbuzz.dev
-            pkgs.freetype.dev
-          ]}
-        '';
-      };
+    flake-utils.lib.eachDefaultSystem
+      (system:
+        let
+          pkgs = nixpkgs.legacyPackages.${system};
+          nodejs = pkgs.nodejs_20;
+          nodePackages = pkgs.nodePackages_latest;
+          lib = pkgs.lib;
+        in
+        rec {
+          devShells.default = pkgs.mkShell {
+            packages = [ nodejs nodePackages.pnpm pkgs.pkg-config pkgs.fontconfig.dev ];
+            shellHook = ''
+              unset name
+              export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:${lib.makeSearchPath "/lib/pkgconfig" [
+                pkgs.pixman
+                pkgs.cairo.dev
+                pkgs.libpng.dev
+                pkgs.gnome2.pango.dev
+                pkgs.glib.dev
+                pkgs.harfbuzz.dev
+                pkgs.freetype.dev
+              ]}
+            '';
+          };
+        }) // {
+      packages.x86_64-linux =
+        let
+          pkgs = nixpkgs.legacyPackages.x86_64-linux;
+          nodejs = pkgs.nodejs_20;
+          nodePackages = pkgs.nodePackages_latest;
+          lib = pkgs.lib;
+        in
+        rec {
+          node_modules = lib.pipe
+            {
+              src = ./.;
+              linkDevDependencies = true;
+              overrides = pnpm2nix.defaultPnpmOverrides.x86_64-linux // {
+                canvas = (drv: drv.overrideAttrs (oldAttrs: {
+                  nativeBuildInputs = oldAttrs.nativeBuildInputs ++ [ pkgs.pkg-config ];
+                  buildInputs = oldAttrs.buildInputs ++ [
+                    pkgs.pixman
+                    pkgs.cairo.dev
+                    pkgs.libpng.dev
+                    pkgs.gnome2.pango.dev
+                    pkgs.glib.dev
+                    pkgs.harfbuzz.dev
+                    pkgs.freetype.dev
+                  ];
+                }));
 
-      packages.env = lib.pipe {
-        src = ./.;
-      } [
-        (pnpm2nix.mkPnpmPackage.${system})
-        (pnpm2nix.mkPnpmEnv.${system})
-      ];
+                "@tensorflow/tfjs-node" = (drv: drv.overrideAttrs (oldAttrs: {
+                  buildInputs = oldAttrs.buildInputs ++ [
+                    pkgs.libtensorflow
+                  ];
 
-      packages.default = let
-        packageJSON = (builtins.fromJSON (builtins.readFile ./package.json));
-      in pkgs.stdenv.mkDerivation {
-        pname = "nucleus";
-        version = packageJSON.version;
+                  preBuild = ''
+                    mkdir -p node_modules/@tensorflow/tfjs-node/deps/lib
+                    ln -s ${pkgs.libtensorflow}/lib/libtensorflow.so.2 node_modules/@tensorflow/tfjs-node/deps/lib/libtensorflow.so.2.9.1
+                  '';
+                }));
+              };
+            } [
+            (pnpm2nix.mkPnpmPackage.x86_64-linux)
+            (drv: builtins.readFile "${drv}/nix-support/propagated-build-inputs")
+            (path: "${path}/node_modules")
+          ];
 
-        src = ./.;
+          nucleus =
+            let
+              packageJSON = (builtins.fromJSON (builtins.readFile ./package.json));
+            in
+            pkgs.stdenv.mkDerivation {
+              pname = "nucleus";
+              version = packageJSON.version;
 
-        buildInputs = [ packages.env nodejs nodePackages.pnpm ];
-        nativeBuildInputs = [ packages.env nodePackages.pnpm ];
+              src = ./.;
 
-        buildPhase = ''
-          pnpm run build
-        '';
+              buildInputs = [ nodejs nodePackages.pnpm ];
+              nativeBuildInputs = [ nodePackages.pnpm nodePackages.typescript pkgs.python3 ];
 
-        installPhase = ''
-          cp dist $out
-          mkdir -p $out/bin
-          echo "#!/usr/bin/env bash\ncd $out\n${packageJSON.scripts.start}" > $out/bin/nucleus
-        '';
-      };
+              buildPhase = ''
+                ${pkgs.python3}/bin/python3 ${./scripts/fix-pnpm-bin.py} ${node_modules} ./bin
+                export PATH=$PATH:./bin
+                ln -s ${node_modules} node_modules
+                pnpm run build
+              '';
 
-      dockerImage = let
-        nucleus = packages.default;
-      in pkgs.dockerTools.streamLayeredImage {
-        name = "nucleus";
-        tag = "latest";
-        contents = [ nucleus ];
-        config.Cmd = [ "${nucleus}/bin/nucleus" ];
-      };
-    });
+              installPhase = ''
+                mkdir -p $out
+
+                cp dist $out -r
+                cp node_modules $out -r
+                cp bin $out/.bin -r
+                cp package.json $out
+                cp LICENSE $out
+
+                mkdir -p $out/bin
+                echo "#!/usr/bin/env bash" > $out/bin/nucleus
+                echo "cd $out" >> $out/bin/nucleus
+                echo "export PATH=$PATH:$out/node_modules/.bin" >> $out/bin/nucleus
+                echo "${packageJSON.scripts.start}" >> $out/bin/nucleus
+                chmod +x $out/bin/nucleus
+              '';
+            };
+
+          dockerImage = pkgs.dockerTools.streamLayeredImage {
+            name = "nucleus";
+            tag = "latest";
+            contents = [ nucleus ];
+            config.Cmd = [ "${nucleus}/bin/nucleus" ];
+          };
+
+          default = nucleus;
+        };
+    };
 }
diff --git a/package.json b/package.json
index 4f9bec9..c994fde 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
     "dependencies": {
-        "@clicks/nsfwjs": "^3.0.2",
+        "@clicks/nsfwjs": "^3.0.3",
         "@hokify/agenda": "^6.3.0",
         "@octokit/graphql": "^5.0.6",
         "@tensorflow/tfjs": "^4.7.0",
@@ -29,6 +29,11 @@
         "structured-clone": "^0.2.2",
         "systeminformation": "^5.18.2"
     },
+    "pnpm": {
+        "overrides": {
+            "@hokify/agenda>mongodb": "$mongodb"
+        }
+    },
     "name": "nucleus",
     "version": "1.1.0",
     "description": "Nucleus: The core of your server",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 18b1954..103698b 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -1,9 +1,12 @@
 lockfileVersion: '6.0'
 
+overrides:
+  '@hokify/agenda>mongodb': ^5.6.0
+
 dependencies:
   '@clicks/nsfwjs':
-    specifier: ^3.0.2
-    version: 3.0.2(@tensorflow/tfjs@4.7.0)
+    specifier: ^3.0.3
+    version: 3.0.3(@tensorflow/tfjs@4.7.0)
   '@hokify/agenda':
     specifier: ^6.3.0
     version: 6.3.0
@@ -987,8 +990,8 @@
       multi-integer-range: 3.0.0
     dev: false
 
-  /@clicks/nsfwjs@3.0.2(@tensorflow/tfjs@4.7.0):
-    resolution: {integrity: sha512-noih81vGmar/HJ89fHfKbcFSLchfiXuASCUlNp+fidzLtoxCBRbcTNoYe3JpNPnpn9dl6ktD0m16P8DcAnWWsg==}
+  /@clicks/nsfwjs@3.0.3(@tensorflow/tfjs@4.7.0):
+    resolution: {integrity: sha512-sQicaEck0PfxgDTukGCAiL0naS5XpxMbFFhQwOaLiGQSfzcLia720GIYc3NK3KlVoctsJ/2t+QeRDveAc0Ukmw==}
     peerDependencies:
       '@tensorflow/tfjs': ^4.6.0
     dependencies:
@@ -1100,9 +1103,11 @@
       debug: 4.3.4
       human-interval: 2.0.1
       luxon: 3.3.0
-      mongodb: 4.16.0
+      mongodb: 5.6.0
     transitivePeerDependencies:
-      - aws-crt
+      - '@aws-sdk/credential-providers'
+      - mongodb-client-encryption
+      - snappy
       - supports-color
     dev: false
 
diff --git a/result b/result
new file mode 120000
index 0000000..0025238
--- /dev/null
+++ b/result
@@ -0,0 +1 @@
+/nix/store/fmvzckvxnqrfbgv0mvzghgi87602pgcm-nucleus-1.1.0
\ No newline at end of file
diff --git a/scripts/fix-pnpm-bin.py b/scripts/fix-pnpm-bin.py
new file mode 100644
index 0000000..e4453ad
--- /dev/null
+++ b/scripts/fix-pnpm-bin.py
@@ -0,0 +1,50 @@
+import sys
+import os
+import json
+
+node_modules = sys.argv[1]
+bin_dir = sys.argv[2]
+
+def collect_packages_in(_node_modules, packages: set[str] | None = None):
+    _packages: set[str] = packages or set()
+    for path in os.listdir(_node_modules):
+        if not os.path.isdir(os.path.join(_node_modules, path)) or os.path.join(_node_modules, path) in _packages:
+            continue
+
+        _packages.add(os.path.join(_node_modules, path))
+        if os.path.exists(os.path.join(_node_modules, path, "node_modules")):
+            collect_packages_in(os.path.join(_node_modules, path, "node_modules"), _packages)
+    return _packages
+
+def get_binaries_in(package):
+    package_json = os.path.join(package, "package.json")
+    if not os.path.exists(package_json):
+        return []
+
+    with open(package_json) as f:
+        package_json_contents = json.load(f)
+
+    if "bin" not in package_json_contents:
+        return []
+
+    if type(package_json_contents["bin"]) == str:
+        return [[os.path.basename(package_json_contents["name"]), os.path.join(package, package_json_contents["bin"])]]
+
+    return [[name, os.path.join(package, bin)] for name, bin in package_json_contents["bin"].items()]
+
+def main():
+    packages = collect_packages_in(node_modules)
+    binaries = []
+    for package in packages:
+        binaries += get_binaries_in(package)
+
+    os.makedirs(bin_dir, exist_ok=True)
+
+    for binary in binaries:
+        if os.path.exists(os.path.join(bin_dir, binary[0])):
+            os.remove(os.path.join(bin_dir, binary[0]))
+
+        os.symlink(os.path.realpath(binary[1]), os.path.join(bin_dir, binary[0]))
+
+if __name__ == "__main__":
+    main()
diff --git a/src/reflex/nsfwjs b/src/reflex/nsfwjs
new file mode 160000
index 0000000..9b0e45c
--- /dev/null
+++ b/src/reflex/nsfwjs
@@ -0,0 +1 @@
+Subproject commit 9b0e45c13996b1b6bc96a3af3d3c4b67ad4e971f
diff --git a/src/reflex/scanners.ts b/src/reflex/scanners.ts
index 963aebb..2b68a34 100644
--- a/src/reflex/scanners.ts
+++ b/src/reflex/scanners.ts
@@ -5,7 +5,7 @@
 import type Discord from "discord.js";
 import client from "../utils/client.js";
 import { createHash } from "crypto";
-import * as nsfwjs from "nsfwjs";
+import * as nsfwjs from "@clicks/nsfwjs";
 import ClamScan from "clamscan";
 import * as tf from "@tensorflow/tfjs-node";
 import EmojiEmbed from "../utils/generateEmojiEmbed.js";