Install element on matrix.coded.codes
diff --git a/modules/caddy.nix b/modules/caddy.nix
index a861694..c152989 100644
--- a/modules/caddy.nix
+++ b/modules/caddy.nix
@@ -2,12 +2,11 @@
   services.caddy.enable = true;
   services.caddy.configFile = lib.pipe ./caddy/caddyfile.nix [
     import
+    (f: f { inherit pkgs lib; })
     builtins.toJSON
     (pkgs.writeText "caddy.json")
   ];
-  services.caddy.package = pkgs.callPackage ../packages/caddy.nix {
-    vendorSha256 = "sha256-3KcoOAB+YkOU8qKM75uQo58/dljRBmP25dionr9r2dc=";
-  };
+  services.caddy.package = pkgs.callPackage ../packages/caddy.nix { };
   services.caddy.user = "root";
   systemd.services.caddy.serviceConfig.ProtectHome = lib.mkForce false;
 }
diff --git a/modules/caddy/caddyfile.nix b/modules/caddy/caddyfile.nix
index 5d890bd..a7deb60 100644
--- a/modules/caddy/caddyfile.nix
+++ b/modules/caddy/caddyfile.nix
@@ -38,6 +38,26 @@
     match = [{ host = hosts; }];
     terminal = true;
   };
+  HTTPFileServerRoute = hosts: root: {
+    handle = [
+      {
+        handler = "subroute";
+        routes = [
+          {
+            handle = [
+              {
+                handler = "file_server";
+                inherit root;
+              }
+            ];
+          }
+        ];
+      }
+    ];
+    match = [{ host = hosts; }];
+    terminal = true;
+  };
+
   TCPReverseProxyRoute = ports: upstreams: {
     listen = map (port: "0.0.0.0:${toString port}") ports;
     routes = [
@@ -53,7 +73,7 @@
     ];
   };
 in
-{
+{ pkgs, lib }: {
   apps = {
     http = {
       servers = {
@@ -250,6 +270,16 @@
               match = [{ host = [ "coded.codes" ]; }];
               terminal = true;
             }
+            (HTTPFileServerRoute [ "matrix.coded.codes" ] (
+              pkgs.element-web.override {
+                conf = {
+                  default_server_config = lib.pipe ./coded.codes/.well-known/matrix [
+                    builtins.readFile
+                    builtins.fromJSON
+                  ];
+                };
+              }
+            ))
           ];
         };
         srv1 = {
diff --git a/packages/caddy.nix b/packages/caddy.nix
index 150f27d..6856bf2 100644
--- a/packages/caddy.nix
+++ b/packages/caddy.nix
@@ -1,5 +1,5 @@
 # https://github.com/NixOS/nixpkgs/issues/14671#issuecomment-1016376290
-{ lib, pkgs, fetchFromGitHub, buildGoModule, plugins ? [ ], vendorSha256 ? "" }:
+{ lib, pkgs, fetchFromGitHub, buildGoModule, plugins ? [ ] }:
 
 with lib;
 with pkgs;
@@ -11,12 +11,12 @@
     rev = "aa8cf68a3b5197c45a8b4ffd99b74465f0b5a6b1";
     hash = "sha256-3KcoOAB+YkOU8qKM75uQo58/dljRBmP25dionQ9K2dc=";
   };
-  caddySrc = srcOnly (fetchFromGitHub {
+  caddySrc = fetchFromGitHub {
     owner = "caddyserver";
     repo = "caddy";
     rev = "v2.6.4";
     hash = "sha256-3a3+nFHmGONvL/TyQRqgJtrSDIn0zdGy9YwhZP17mU0=";
-  });
+  };
 
   combinedSrc = stdenv.mkDerivation {
     name = "caddy-src";
@@ -37,6 +37,7 @@
       go mod init caddy
       echo "package main" >> main.go
       echo 'import caddycmd "github.com/caddyserver/caddy/v2/cmd"' >> main.go
+      echo 'import _ "github.com/caddyserver/caddy/v2/modules/standard"' >> main.go
       echo 'import _ "github.com/mholt/caddy-l4"' >> main.go
       echo "func main(){ caddycmd.Main() }" >> main.go
       go mod edit -require=github.com/caddyserver/caddy/v2@v2.6.4
@@ -51,7 +52,7 @@
 
   src = combinedSrc;
 
-  vendorHash = "sha256-GmgK2gPCkXXqVcxx+U0h7zJwRGBqFiBA7R0FwHY0SF0=";
+  vendorHash = "sha256-a49J7gKBYi9mQLlg+YFGaOetvbup5yRrWzX7kicvy+o=";
 
   overrideModAttrs = _: {
     postPatch = "cd ourcaddy";