diff --git a/flake.lock b/flake.lock
index 00eec75..37354f9 100644
--- a/flake.lock
+++ b/flake.lock
@@ -57,30 +57,6 @@
"type": "github"
}
},
- "attic_2": {
- "inputs": {
- "crane": "crane_3",
- "flake-compat": "flake-compat_3",
- "flake-parts": "flake-parts_2",
- "nix-github-actions": "nix-github-actions_2",
- "nixpkgs": "nixpkgs_4",
- "nixpkgs-stable": "nixpkgs-stable_2"
- },
- "locked": {
- "lastModified": 1758711588,
- "narHash": "sha256-0nZlCCDC5PfndsQJXXtcyrtrfW49I3KadGMDlutzaGU=",
- "owner": "zhaofengli",
- "repo": "attic",
- "rev": "12cbeca141f46e1ade76728bce8adc447f2166c6",
- "type": "github"
- },
- "original": {
- "owner": "zhaofengli",
- "ref": "main",
- "repo": "attic",
- "type": "github"
- }
- },
"botcore-v4": {
"inputs": {
"nixpkgs": "nixpkgs"
@@ -184,65 +160,14 @@
"type": "github"
}
},
- "crane_3": {
- "locked": {
- "lastModified": 1751562746,
- "narHash": "sha256-smpugNIkmDeicNz301Ll1bD7nFOty97T79m4GUMUczA=",
- "owner": "ipetkov",
- "repo": "crane",
- "rev": "aed2020fd3dc26e1e857d4107a5a67a33ab6c1fd",
- "type": "github"
- },
- "original": {
- "owner": "ipetkov",
- "repo": "crane",
- "type": "github"
- }
- },
- "crane_4": {
- "locked": {
- "lastModified": 1772080396,
- "narHash": "sha256-84W9UNtSk9DNMh43WBkOjpkbfODlmg+RDi854PnNgLE=",
- "owner": "ipetkov",
- "repo": "crane",
- "rev": "8525580bc0316c39dbfa18bd09a1331e98c9e463",
- "type": "github"
- },
- "original": {
- "owner": "ipetkov",
- "ref": "master",
- "repo": "crane",
- "type": "github"
- }
- },
- "drasl": {
- "inputs": {
- "nixpkgs": [
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1775253339,
- "narHash": "sha256-uP07QbRBILuQjXjaAwAE10LjC9T7CbKWk6P40aU1dV0=",
- "owner": "unmojang",
- "repo": "drasl",
- "rev": "671d2a90775e5ec369b36eaca89ad68ff1a606ae",
- "type": "github"
- },
- "original": {
- "owner": "unmojang",
- "repo": "drasl",
- "type": "github"
- }
- },
"draupnirSrc": {
"flake": false,
"locked": {
- "lastModified": 1775154181,
- "narHash": "sha256-WrMYak6ztIy3KqjcVuN2OmIy1uxlIVNvHPGw7e3LRw0=",
+ "lastModified": 1779012439,
+ "narHash": "sha256-Iys8Fi9SAz1etN4HdQ82Vb7/7a+Lqi8JG4vm03MLfEo=",
"owner": "the-draupnir-project",
"repo": "Draupnir",
- "rev": "1cb4c59c0213c0f558e1616331fdfc771ce3b2bb",
+ "rev": "5c8f6a30a1657ffe198068e87e9c5dbf58d18648",
"type": "github"
},
"original": {
@@ -274,29 +199,6 @@
"type": "github"
}
},
- "fenix_2": {
- "inputs": {
- "nixpkgs": [
- "grapevine",
- "nixpkgs"
- ],
- "rust-analyzer-src": "rust-analyzer-src_2"
- },
- "locked": {
- "lastModified": 1772261909,
- "narHash": "sha256-8XbJXrhMFhLgoBrjFIJx5XJi+SD+7/gbvaIXCuqy9Z0=",
- "owner": "nix-community",
- "repo": "fenix",
- "rev": "e4c413b9546d6c9e6426b33b4d6de1a49a375024",
- "type": "github"
- },
- "original": {
- "owner": "nix-community",
- "ref": "main",
- "repo": "fenix",
- "type": "github"
- }
- },
"flake-compat": {
"flake": false,
"locked": {
@@ -332,39 +234,6 @@
"flake-compat_3": {
"flake": false,
"locked": {
- "lastModified": 1747046372,
- "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
- "owner": "edolstra",
- "repo": "flake-compat",
- "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
- "type": "github"
- },
- "original": {
- "owner": "edolstra",
- "repo": "flake-compat",
- "type": "github"
- }
- },
- "flake-compat_4": {
- "flake": false,
- "locked": {
- "lastModified": 1767039857,
- "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
- "owner": "edolstra",
- "repo": "flake-compat",
- "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
- "type": "github"
- },
- "original": {
- "owner": "edolstra",
- "ref": "master",
- "repo": "flake-compat",
- "type": "github"
- }
- },
- "flake-compat_5": {
- "flake": false,
- "locked": {
"lastModified": 1767039857,
"narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
"owner": "NixOS",
@@ -378,7 +247,7 @@
"type": "github"
}
},
- "flake-compat_6": {
+ "flake-compat_4": {
"flake": false,
"locked": {
"lastModified": 1767039857,
@@ -394,7 +263,7 @@
"type": "github"
}
},
- "flake-compat_7": {
+ "flake-compat_5": {
"flake": false,
"locked": {
"lastModified": 1767039857,
@@ -432,28 +301,6 @@
"type": "github"
}
},
- "flake-parts_2": {
- "inputs": {
- "nixpkgs-lib": [
- "grapevine",
- "attic",
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1751413152,
- "narHash": "sha256-Tyw1RjYEsp5scoigs1384gIg6e0GoBVjms4aXFfRssQ=",
- "owner": "hercules-ci",
- "repo": "flake-parts",
- "rev": "77826244401ea9de6e3bac47c2db46005e1f30b5",
- "type": "github"
- },
- "original": {
- "owner": "hercules-ci",
- "repo": "flake-parts",
- "type": "github"
- }
- },
"flake-utils": {
"inputs": {
"systems": "systems"
@@ -510,7 +357,7 @@
},
"flake-utils_4": {
"inputs": {
- "systems": "systems_4"
+ "systems": "systems_5"
},
"locked": {
"lastModified": 1731533236,
@@ -522,32 +369,13 @@
},
"original": {
"owner": "numtide",
- "ref": "main",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_5": {
"inputs": {
- "systems": "systems_6"
- },
- "locked": {
- "lastModified": 1731533236,
- "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
- "owner": "numtide",
- "repo": "flake-utils",
- "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
- "type": "github"
- },
- "original": {
- "owner": "numtide",
- "repo": "flake-utils",
- "type": "github"
- }
- },
- "flake-utils_6": {
- "inputs": {
- "systems": "systems_8"
+ "systems": "systems_7"
},
"locked": {
"lastModified": 1731533236,
@@ -562,9 +390,9 @@
"type": "indirect"
}
},
- "flake-utils_7": {
+ "flake-utils_6": {
"inputs": {
- "systems": "systems_9"
+ "systems": "systems_8"
},
"locked": {
"lastModified": 1731533236,
@@ -597,7 +425,7 @@
},
"git-hooks": {
"inputs": {
- "flake-compat": "flake-compat_7",
+ "flake-compat": "flake-compat_5",
"gitignore": "gitignore_2",
"nixpkgs": [
"nom",
@@ -605,11 +433,11 @@
]
},
"locked": {
- "lastModified": 1775036584,
- "narHash": "sha256-zW0lyy7ZNNT/x8JhzFHBsP2IPx7ATZIPai4FJj12BgU=",
+ "lastModified": 1778507602,
+ "narHash": "sha256-kTwur1wV+01SdqskVMSo6JMEpg71ps3HpbFY2GsflKs=",
"owner": "cachix",
"repo": "git-hooks.nix",
- "rev": "4e0eb042b67d863b1b34b3f64d52ceb9cd926735",
+ "rev": "61ab0e80d9c7ab14c256b5b453d8b3fb0189ba0a",
"type": "github"
},
"original": {
@@ -662,42 +490,16 @@
"type": "github"
}
},
- "grapevine": {
- "inputs": {
- "attic": "attic_2",
- "crane": "crane_4",
- "fenix": "fenix_2",
- "flake-compat": "flake-compat_4",
- "flake-utils": "flake-utils_4",
- "nixpkgs": "nixpkgs_5",
- "rocksdb": "rocksdb"
- },
- "locked": {
- "host": "gitlab.computer.surgery",
- "lastModified": 1772652123,
- "narHash": "sha256-0Rxw9gO/yX8Z+/oggglo6G64b03jyYStrsrrAJsU2NE=",
- "owner": "matrix",
- "repo": "grapevine-fork",
- "rev": "f82328dcf20e4f4a03e7fce11cb66bb8660e1c80",
- "type": "gitlab"
- },
- "original": {
- "host": "gitlab.computer.surgery",
- "owner": "matrix",
- "repo": "grapevine-fork",
- "type": "gitlab"
- }
- },
"home-manager": {
"inputs": {
- "nixpkgs": "nixpkgs_6"
+ "nixpkgs": "nixpkgs_4"
},
"locked": {
- "lastModified": 1775268934,
- "narHash": "sha256-Sa5tW5kYPJornQEkFVD43F/0d4/WP+/GLTNktTFe2qU=",
+ "lastModified": 1779027260,
+ "narHash": "sha256-ZbgWWFQmSyM3HQ31nAZk2hJ7OSeNr9uRFHL8jCifY9M=",
"owner": "nix-community",
"repo": "home-manager",
- "rev": "9dc93220c1c9a410ef6277d6dc55c571d9e592d0",
+ "rev": "bcb774cfc3268120cd61808629f9aa7dad3750a2",
"type": "github"
},
"original": {
@@ -780,7 +582,7 @@
"nixpkgs"
],
"pre-commit-hooks": "pre-commit-hooks",
- "systems": "systems_5",
+ "systems": "systems_4",
"xdph": "xdph"
},
"locked": {
@@ -1034,11 +836,11 @@
"lix": {
"flake": false,
"locked": {
- "lastModified": 1774721317,
- "narHash": "sha256-KS0ElyhZKdUFcfaxfwid3yi2Id3EP9i+dGL16/wx1T8=",
- "rev": "d0190cff6f2314cc1c727ff113aea20e086f4bcc",
+ "lastModified": 1778147108,
+ "narHash": "sha256-pK0oP+HYH8XVPwZ6BB0DAC4ex0gCsj0FLH5182BBgBU=",
+ "rev": "7831c98a4db589c84cf730db23793afe3fd90f2d",
"type": "tarball",
- "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/d0190cff6f2314cc1c727ff113aea20e086f4bcc.tar.gz?rev=d0190cff6f2314cc1c727ff113aea20e086f4bcc"
+ "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/7831c98a4db589c84cf730db23793afe3fd90f2d.tar.gz?rev=7831c98a4db589c84cf730db23793afe3fd90f2d"
},
"original": {
"type": "tarball",
@@ -1047,7 +849,7 @@
},
"lix-module": {
"inputs": {
- "flake-utils": "flake-utils_5",
+ "flake-utils": "flake-utils_4",
"flakey-profile": "flakey-profile",
"lix": [
"lix"
@@ -1071,11 +873,11 @@
"matrixSpecSrc": {
"flake": false,
"locked": {
- "lastModified": 1774996059,
- "narHash": "sha256-++UyNBrzc0L5VW23YsY+ykYDGbLI23x5v1fTCKiYiTs=",
+ "lastModified": 1778746843,
+ "narHash": "sha256-WqbQnI1UMpMIZe/2+Li5Dvm6DRpm6fhiX3LdZricFww=",
"owner": "matrix-org",
"repo": "matrix-spec",
- "rev": "156d1b878aa3a2369c2de248c57b6b7176412bb3",
+ "rev": "905165ffd3750f6d219a4b1b1347698c9bd1601b",
"type": "github"
},
"original": {
@@ -1105,11 +907,11 @@
"nhekoSrc": {
"flake": false,
"locked": {
- "lastModified": 1774004536,
- "narHash": "sha256-7DLsLimyc2YLcI6JTDY17jvVLC/tjJoJyl9DgDld4KA=",
+ "lastModified": 1778283689,
+ "narHash": "sha256-Zyvfxuk77FYBYwPJykK6YBnnCLG1BeN6jJ5gcDA5Go4=",
"owner": "Nheko-reborn",
"repo": "nheko",
- "rev": "685cceac0f61a9776c9010a6f134fcb87f1add53",
+ "rev": "90ff9c6f36dd9df9e0e23212c34b83ec61772bba",
"type": "github"
},
"original": {
@@ -1156,40 +958,18 @@
"type": "github"
}
},
- "nix-github-actions_2": {
- "inputs": {
- "nixpkgs": [
- "grapevine",
- "attic",
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1737420293,
- "narHash": "sha256-F1G5ifvqTpJq7fdkT34e/Jy9VCyzd5XfJ9TO8fHhJWE=",
- "owner": "nix-community",
- "repo": "nix-github-actions",
- "rev": "f4158fa080ef4503c8f4c820967d946c2af31ec9",
- "type": "github"
- },
- "original": {
- "owner": "nix-community",
- "repo": "nix-github-actions",
- "type": "github"
- }
- },
"nix-jetbrains-plugins": {
"inputs": {
- "flake-compat": "flake-compat_6",
- "nixpkgs": "nixpkgs_7",
- "systems": "systems_7"
+ "flake-compat": "flake-compat_4",
+ "nixpkgs": "nixpkgs_5",
+ "systems": "systems_6"
},
"locked": {
- "lastModified": 1775285005,
- "narHash": "sha256-kPR2oxUgJdYlgfxj91RrbMahIhvLfjHCLo+YIkwa2ZE=",
+ "lastModified": 1778951860,
+ "narHash": "sha256-aFjBC3AVLh/bsgcsoI6Z/yQmh/NABffwHJIqQOTj+Tg=",
"owner": "nix-community",
"repo": "nix-jetbrains-plugins",
- "rev": "546cfbddead4789f76ff77b7751de30a3f4c6ef5",
+ "rev": "68930eefa5e77fc6bb7977635c83a003683c2f11",
"type": "github"
},
"original": {
@@ -1216,11 +996,11 @@
},
"nixpkgs-RoryNix": {
"locked": {
- "lastModified": 1775292572,
- "narHash": "sha256-YRI9gjlK2rh9mvtC2wYpXYqGIQ61lmSe3Hmp8E60JnU=",
+ "lastModified": 1779047664,
+ "narHash": "sha256-GGvK1crvlJa9vBwV7UBTRXB1XOFLoB3RAPsDcnqLr+E=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "61a90ea4761c15b47cbf78c528ede5c2495f658b",
+ "rev": "195e19cca23a3f7e553b45fc26fed71ac1e39a6a",
"type": "github"
},
"original": {
@@ -1232,11 +1012,11 @@
},
"nixpkgs-master": {
"locked": {
- "lastModified": 1775292572,
- "narHash": "sha256-YRI9gjlK2rh9mvtC2wYpXYqGIQ61lmSe3Hmp8E60JnU=",
+ "lastModified": 1779047664,
+ "narHash": "sha256-GGvK1crvlJa9vBwV7UBTRXB1XOFLoB3RAPsDcnqLr+E=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "61a90ea4761c15b47cbf78c528ede5c2495f658b",
+ "rev": "195e19cca23a3f7e553b45fc26fed71ac1e39a6a",
"type": "github"
},
"original": {
@@ -1246,39 +1026,39 @@
"type": "github"
}
},
- "nixpkgs-stable": {
+ "nixpkgs-override-draupnir": {
"locked": {
- "lastModified": 1724316499,
- "narHash": "sha256-Qb9MhKBUTCfWg/wqqaxt89Xfi6qTD3XpTzQ9eXi3JmE=",
+ "lastModified": 1779707573,
+ "narHash": "sha256-wHca//T/RJVV/1S5ceiC16f/Rk0XU0aCGesWoXeiRjI=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "797f7dc49e0bc7fab4b57c021cdf68f595e47841",
+ "rev": "7e18ec57066eedfca6259e4d7717eae8eb619b67",
"type": "github"
},
"original": {
"owner": "NixOS",
- "ref": "nixos-24.05",
+ "ref": "master",
"repo": "nixpkgs",
"type": "github"
}
},
- "nixpkgs-stable_2": {
+ "nixpkgs-stable": {
"locked": {
- "lastModified": 1751741127,
- "narHash": "sha256-t75Shs76NgxjZSgvvZZ9qOmz5zuBE8buUaYD28BMTxg=",
+ "lastModified": 1724316499,
+ "narHash": "sha256-Qb9MhKBUTCfWg/wqqaxt89Xfi6qTD3XpTzQ9eXi3JmE=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "29e290002bfff26af1db6f64d070698019460302",
+ "rev": "797f7dc49e0bc7fab4b57c021cdf68f595e47841",
"type": "github"
},
"original": {
"owner": "NixOS",
- "ref": "nixos-25.05",
+ "ref": "nixos-24.05",
"repo": "nixpkgs",
"type": "github"
}
},
- "nixpkgs-stable_3": {
+ "nixpkgs-stable_2": {
"locked": {
"lastModified": 1767313136,
"narHash": "sha256-16KkgfdYqjaeRGBaYsNrhPRRENs0qzkQVUooNHtoy2w=",
@@ -1294,38 +1074,6 @@
"type": "github"
}
},
- "nixpkgs_10": {
- "locked": {
- "lastModified": 1774610258,
- "narHash": "sha256-HaThtroVD9wRdx7KQk0B75JmFcXlMUoEdDFNOMOlsOs=",
- "owner": "NixOS",
- "repo": "nixpkgs",
- "rev": "832efc09b4caf6b4569fbf9dc01bec3082a00611",
- "type": "github"
- },
- "original": {
- "owner": "NixOS",
- "ref": "nixpkgs-unstable",
- "repo": "nixpkgs",
- "type": "github"
- }
- },
- "nixpkgs_11": {
- "locked": {
- "lastModified": 1774709743,
- "narHash": "sha256-iwwgwHv32WRB4+Ol5S3acFkwA/u4Cx80sTKOve6j1P8=",
- "owner": "NixOS",
- "repo": "nixpkgs",
- "rev": "73f0991bf391b257e98125272bf3f43ea6aec1c7",
- "type": "github"
- },
- "original": {
- "owner": "NixOS",
- "ref": "master",
- "repo": "nixpkgs",
- "type": "github"
- }
- },
"nixpkgs_2": {
"locked": {
"lastModified": 1726042813,
@@ -1360,27 +1108,27 @@
},
"nixpkgs_4": {
"locked": {
- "lastModified": 1751949589,
- "narHash": "sha256-mgFxAPLWw0Kq+C8P3dRrZrOYEQXOtKuYVlo9xvPntt8=",
+ "lastModified": 1778443072,
+ "narHash": "sha256-zi7/fsqM/kFdNuED//4WOCUtezGtKKqRNORjMvfwjnA=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "9b008d60392981ad674e04016d25619281550a9d",
+ "rev": "da5ad661ba4e5ef59ba743f0d112cbc30e474f32",
"type": "github"
},
"original": {
"owner": "NixOS",
- "ref": "nixpkgs-unstable",
+ "ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_5": {
"locked": {
- "lastModified": 1772198003,
- "narHash": "sha256-I45esRSssFtJ8p/gLHUZ1OUaaTaVLluNkABkk6arQwE=",
+ "lastModified": 1778443072,
+ "narHash": "sha256-zi7/fsqM/kFdNuED//4WOCUtezGtKKqRNORjMvfwjnA=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "dd9b079222d43e1943b6ebd802f04fd959dc8e61",
+ "rev": "da5ad661ba4e5ef59ba743f0d112cbc30e474f32",
"type": "github"
},
"original": {
@@ -1392,11 +1140,11 @@
},
"nixpkgs_6": {
"locked": {
- "lastModified": 1774709303,
- "narHash": "sha256-D3Q07BbIA2KnTcSXIqqu9P586uWxN74zNoCH3h2ESHg=",
+ "lastModified": 1778869304,
+ "narHash": "sha256-30sZNZoA1cqF5JNO9fVX+wgiQYjB7HJqqJ4ztCDeBZE=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "8110df5ad7abf5d4c0f6fb0f8f978390e77f9685",
+ "rev": "d233902339c02a9c334e7e593de68855ad26c4cb",
"type": "github"
},
"original": {
@@ -1408,11 +1156,11 @@
},
"nixpkgs_7": {
"locked": {
- "lastModified": 1767640445,
- "narHash": "sha256-UWYqmD7JFBEDBHWYcqE6s6c77pWdcU/i+bwD6XxMb8A=",
+ "lastModified": 1777578337,
+ "narHash": "sha256-Ad49moKWeXtKBJNy2ebiTQUEgdLyvGmTeykAQ9xM+Z4=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "9f0c42f8bc7151b8e7e5840fb3bd454ad850d8c5",
+ "rev": "15f4ee454b1dce334612fa6843b3e05cf546efab",
"type": "github"
},
"original": {
@@ -1424,50 +1172,50 @@
},
"nixpkgs_8": {
"locked": {
- "lastModified": 1775036866,
- "narHash": "sha256-ZojAnPuCdy657PbTq5V0Y+AHKhZAIwSIT2cb8UgAz/U=",
+ "lastModified": 1775888245,
+ "narHash": "sha256-nwASzrRDD1JBEu/o8ekKYEXm/oJW6EMCzCRdrwcLe90=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "6201e203d09599479a3b3450ed24fa81537ebc4e",
+ "rev": "13043924aaa7375ce482ebe2494338e058282925",
"type": "github"
},
"original": {
"owner": "NixOS",
- "ref": "nixos-unstable",
+ "ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_9": {
"locked": {
- "lastModified": 1764517877,
- "narHash": "sha256-pp3uT4hHijIC8JUK5MEqeAWmParJrgBVzHLNfJDZxg4=",
+ "lastModified": 1778979197,
+ "narHash": "sha256-d83oRDbsJ+XrYqxqe/z5CIGRrY2B5xYC308UsQXdmus=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "2d293cbfa5a793b4c50d17c05ef9e385b90edf6c",
+ "rev": "233ebfd96819ab13eff099ded59063c8bfb80d63",
"type": "github"
},
"original": {
"owner": "NixOS",
- "ref": "nixos-unstable",
+ "ref": "master",
"repo": "nixpkgs",
"type": "github"
}
},
"nom": {
"inputs": {
- "flake-utils": "flake-utils_6",
+ "flake-utils": "flake-utils_5",
"git-hooks": "git-hooks",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
- "lastModified": 1775188977,
- "narHash": "sha256-fEcyfTV1+GEXJgpOlem+d+Dsa8twe3Qw8RFO0d8RCWM=",
+ "lastModified": 1778817799,
+ "narHash": "sha256-dO9+Q2P7b9a7ivaNS9bbtkCaDi5eqZpzgIhUzc1iL/Y=",
"owner": "maralorn",
"repo": "nix-output-monitor",
- "rev": "8f8e7caf3c5a440683b12b99f93926966da312a5",
+ "rev": "35823353dd2a4f3c30ef650839c39ee843d85679",
"type": "github"
},
"original": {
@@ -1478,14 +1226,14 @@
},
"ooye": {
"inputs": {
- "nixpkgs": "nixpkgs_9"
+ "nixpkgs": "nixpkgs_7"
},
"locked": {
- "lastModified": 1765676020,
- "narHash": "sha256-5t3t7h4s6Qoxp56HPNEKGnk+OTv8FNB/8hxSarCMrAY=",
+ "lastModified": 1777734248,
+ "narHash": "sha256-+jVsr0osin+zDOUrDooe3UaPJq82OEDRXq/qnqoOGUc=",
"ref": "refs/heads/master",
- "rev": "24128571fba0404572f594e9423f5a81aff87aa4",
- "revCount": 24,
+ "rev": "30602e93bf809d0b9911a5c4678d830580ec1e3a",
+ "revCount": 26,
"type": "git",
"url": "https://cgit.rory.gay/nix/OOYE-module.git"
},
@@ -1521,7 +1269,7 @@
},
"pre-commit-hooks": {
"inputs": {
- "flake-compat": "flake-compat_5",
+ "flake-compat": "flake-compat_3",
"gitignore": "gitignore",
"nixpkgs": [
"hyprland",
@@ -1542,32 +1290,13 @@
"type": "github"
}
},
- "rocksdb": {
- "flake": false,
- "locked": {
- "lastModified": 1752084860,
- "narHash": "sha256-mKh6zsmxsiUix4LX+npiytmKvLbo6WNA9y4Ns/EY+bE=",
- "owner": "facebook",
- "repo": "rocksdb",
- "rev": "410c5623195ecbe4699b9b5a5f622c7325cec6fe",
- "type": "github"
- },
- "original": {
- "owner": "facebook",
- "ref": "v10.4.2",
- "repo": "rocksdb",
- "type": "github"
- }
- },
"root": {
"inputs": {
"botcore-v4": "botcore-v4",
"cgit-magenta": "cgit-magenta",
"conduit": "conduit",
- "drasl": "drasl",
"draupnirSrc": "draupnirSrc",
"flake-utils": "flake-utils_3",
- "grapevine": "grapevine",
"home-manager": "home-manager",
"hyprland": "hyprland",
"lix": "lix",
@@ -1576,10 +1305,11 @@
"mtxclientSrc": "mtxclientSrc",
"nhekoSrc": "nhekoSrc",
"nix-jetbrains-plugins": "nix-jetbrains-plugins",
- "nixpkgs": "nixpkgs_8",
+ "nixpkgs": "nixpkgs_6",
"nixpkgs-RoryNix": "nixpkgs-RoryNix",
"nixpkgs-master": "nixpkgs-master",
- "nixpkgs-stable": "nixpkgs-stable_3",
+ "nixpkgs-override-draupnir": "nixpkgs-override-draupnir",
+ "nixpkgs-stable": "nixpkgs-stable_2",
"nom": "nom",
"ooye": "ooye",
"sops-nix": "sops-nix",
@@ -1604,33 +1334,16 @@
"type": "github"
}
},
- "rust-analyzer-src_2": {
- "flake": false,
- "locked": {
- "lastModified": 1772178959,
- "narHash": "sha256-DkjUvrEnnhHjOcjMx6aXfYGIZ0PWmcYzvVayhRj1r4M=",
- "owner": "rust-lang",
- "repo": "rust-analyzer",
- "rev": "8494a8b3b769c17e8594d811012cc1b0fab090c7",
- "type": "github"
- },
- "original": {
- "owner": "rust-lang",
- "ref": "nightly",
- "repo": "rust-analyzer",
- "type": "github"
- }
- },
"sops-nix": {
"inputs": {
- "nixpkgs": "nixpkgs_10"
+ "nixpkgs": "nixpkgs_8"
},
"locked": {
- "lastModified": 1775188331,
- "narHash": "sha256-/0BoSi0Dg0ON7IW0oscM12WSPBaMSCn36XTt0lHZoy8=",
+ "lastModified": 1777944972,
+ "narHash": "sha256-VfGRo1qTBKOe3s2gOv8LSoA6Fk19PvBlwQ1ECN0Evn8=",
"owner": "Mic92",
"repo": "sops-nix",
- "rev": "8f093d0d2f08f37317778bd94db5951d6cce6c46",
+ "rev": "c591bf665727040c6cc5cb409079acb22dcce33c",
"type": "github"
},
"original": {
@@ -1641,16 +1354,16 @@
},
"spacebar": {
"inputs": {
- "flake-utils": "flake-utils_7",
- "nixpkgs": "nixpkgs_11",
+ "flake-utils": "flake-utils_6",
+ "nixpkgs": "nixpkgs_9",
"pion-webrtc": "pion-webrtc"
},
"locked": {
- "lastModified": 1774987951,
- "narHash": "sha256-0wfYV5mAskVGC2gVVpBKPJGiGdAkm+PDKDct4NC3A9Y=",
+ "lastModified": 1781766293,
+ "narHash": "sha256-IkZQ7q6sFATMxF7jDE4Zm0TJ7oLQnsGWKqMMUARjpxI=",
"owner": "spacebarchat",
"repo": "server",
- "rev": "12422e9a9afb1e3ce22243cbd80fec715d4dcc39",
+ "rev": "18dd02f151512a723918c400a2402a993e2ec10e",
"type": "github"
},
"original": {
@@ -1722,21 +1435,6 @@
},
"systems_4": {
"locked": {
- "lastModified": 1681028828,
- "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
- "owner": "nix-systems",
- "repo": "default",
- "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
- "type": "github"
- },
- "original": {
- "owner": "nix-systems",
- "repo": "default",
- "type": "github"
- }
- },
- "systems_5": {
- "locked": {
"lastModified": 1689347949,
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
"owner": "nix-systems",
@@ -1750,7 +1448,7 @@
"type": "github"
}
},
- "systems_6": {
+ "systems_5": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
@@ -1765,7 +1463,7 @@
"type": "github"
}
},
- "systems_7": {
+ "systems_6": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
@@ -1780,7 +1478,7 @@
"type": "github"
}
},
- "systems_8": {
+ "systems_7": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
@@ -1795,7 +1493,7 @@
"type": "github"
}
},
- "systems_9": {
+ "systems_8": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
diff --git a/flake.nix b/flake.nix
index fa16501..e658f21 100755
--- a/flake.nix
+++ b/flake.nix
@@ -7,13 +7,13 @@
"http://nix-bincache.rory-desktop.local"
"http://nix-bincache.rory-laptop.local"
# public
- "https://attic.computer.surgery/grapevine"
+ #"https://attic.computer.surgery/grapevine"
"https://hyprland.cachix.org"
"https://nix-bincache.rory.gay"
];
extra-trusted-public-keys = [
"nix-bincache.rory-desktop.local:LDcVGNQoaprWeggWcRE1N0jjEqdjOR1D0kOI3fZne24="
- "grapevine:nYiZ0Qz9nT7Y7kNC/2NdoS3+J9gwTyWxOvlwZnFgceA="
+ #"grapevine:nYiZ0Qz9nT7Y7kNC/2NdoS3+J9gwTyWxOvlwZnFgceA="
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
"nix-bincache.rory.gay:663PIW8xxgIImxLcsokODWI2PHFWXvzJEfjX6TaIjxQ="
"nix-bincache.rory-laptop.local:IbXbNC8ok5YYj9HKYU/5GCec5HE/aixgW/+3sRHP2nE="
@@ -32,10 +32,10 @@
};
# Draupnir module/package
- #nixpkgs-override-synapse.url = "github:teutat3s/nixpkgs/matrix-synapse-1.136.0";
-# nixpkgs-override-draupnir.url = "github:NixOS/nixpkgs/master";
-# nixpkgs-override-draupnir.url = "github:r-ryantm/nixpkgs/auto-update/draupnir";
-# nixpkgs-override-jetbrains.url = "github:TheArcaneBrony/nixpkgs/jetbrains-2025-4";
+ # nixpkgs-override-synapse.url = "github:teutat3s/nixpkgs/matrix-synapse-1.136.0";
+ nixpkgs-override-draupnir.url = "github:NixOS/nixpkgs/master";
+ # nixpkgs-override-draupnir.url = "github:r-ryantm/nixpkgs/auto-update/draupnir";
+ # nixpkgs-override-jetbrains.url = "github:theCapypara/nixpkgs/jetbrains/update-26.1-ssl";
# Base modules
home-manager.url = "github:nix-community/home-manager/master";
@@ -44,12 +44,12 @@
nix-jetbrains-plugins.url = "github:nix-community/nix-jetbrains-plugins";
# Packages
- grapevine.url = "gitlab:matrix/grapevine-fork?host=gitlab.computer.surgery";
+ #grapevine.url = "gitlab:matrix/grapevine-fork?host=gitlab.computer.surgery";
conduit.url = "gitlab:famedly/conduit/next";
- drasl = {
- url = "github:unmojang/drasl";
- inputs.nixpkgs.follows = "nixpkgs";
- };
+ #drasl = {
+ # url = "github:unmojang/drasl";
+ # inputs.nixpkgs.follows = "nixpkgs";
+ #};
# - AUR imports
# aur-visual-paradigm = {
# url = "git+https://aur.archlinux.org/visual-paradigm.git";
@@ -155,8 +155,8 @@
home-manager.nixosModules.home-manager
lix-module.nixosModules.default
- grapevine.nixosModules.default
- drasl.nixosModules.drasl
+ #grapevine.nixosModules.default
+ #drasl.nixosModules.drasl
ooye.modules.default
(
@@ -183,7 +183,7 @@
specialArgs = {
inherit botcore-v4;
inherit home-manager;
- inherit grapevine;
+ #inherit grapevine;
inherit conduit;
#inherit nixpkgs-Draupnir;
#inherit nixpkgs-DraupnirPkg;
@@ -236,7 +236,7 @@
# };
#};
- Rory-desktop = nixpkgs-master.lib.nixosSystem {
+ Rory-desktop = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
./host/Rory-desktop/configuration.nix
@@ -249,8 +249,8 @@
{ ... }:
{
nix = {
- registry.nixpkgs.flake = nixpkgs-master;
- nixPath = [ "nixpkgs=${nixpkgs-master.outPath}" ];
+ registry.nixpkgs.flake = nixpkgs;
+ nixPath = [ "nixpkgs=${nixpkgs.outPath}" ];
};
}
)
@@ -296,7 +296,7 @@
./packages/overlays/lldb.nix
(
- { ... }:
+ { pkgs, ... }:
{
nix = {
registry.nixpkgs.flake = nixpkgs;
@@ -487,7 +487,7 @@
inherit (oldAttrs) src;
inherit patches;
name = "${oldAttrs.pname}-${oldAttrs.version}";
- hash = "sha256-nB7gLPDK8sB65xZkTn5W4MCqx4QwWKDUr8hB8KIu0qY=";
+ hash = "sha256-RwUsiS6JM5dmqquKVtyaBp67DYZys6Uecy0V6AabTk4=";
};
#doInstallCheck = false;
diff --git a/host/Rory-desktop/configuration.nix b/host/Rory-desktop/configuration.nix
index 5558a08..20078d9 100644
--- a/host/Rory-desktop/configuration.nix
+++ b/host/Rory-desktop/configuration.nix
@@ -19,6 +19,8 @@ args@{
../../modules/software-templates/eid-mw.nix
../../modules/software-templates/devenv/dotnet.nix
../../modules/software-templates/devenv/javascript.nix
+ ../../modules/software-templates/devenv/go.nix
+ ../../modules/software-templates/devenv/java.nix
./services/nginx.nix
./services/postgres.nix
@@ -29,7 +31,7 @@ args@{
./optional/gui/hyprland.nix
./services/libvirt.nix
-# ./services/rabbitmq.nix
+ # ./services/rabbitmq.nix
#./services/edu/mongodb.nix
#./optional/gui/x11.nix
./services/printing.nix
@@ -42,7 +44,11 @@ args@{
boot = {
kernelPackages = pkgs.linuxPackages_latest;
- binfmt.emulatedSystems = [ "aarch64-linux" "riscv64-linux" "riscv32-linux" ];
+ binfmt.emulatedSystems = [
+ "aarch64-linux"
+ "riscv64-linux"
+ "riscv32-linux"
+ ];
loader = {
grub = {
configurationLimit = 10;
@@ -58,7 +64,7 @@ args@{
};
# TODO: re-enable when USB is fixed
- #programs.noisetorch.enable = true;
+ programs.noisetorch.enable = true;
programs.gamemode.enable = true;
users.users.Rory.extraGroups = [ "gamemode" ];
@@ -186,6 +192,7 @@ args@{
intiface-central
wine64Packages.waylandFull
ft2-clone
+ luanti
];
hardware = {
@@ -237,15 +244,6 @@ args@{
enableGhostscriptFonts = lib.mkForce false;
};
- services.cockpit = {
- enable = true;
- settings = {
- WebService = {
- AllowUnencrypted = true;
- };
- };
- };
-
nix.settings.auto-optimise-store = lib.mkForce false;
nixpkgs = {
config = {
@@ -273,7 +271,7 @@ args@{
# };
monitoring = {
- monitorAll = false;
+ monitorAll = true;
localPrometheus = true;
exposePrometheus = true;
localGrafana = true;
@@ -281,6 +279,10 @@ args@{
nginxHost = "monitoring.localhost";
nginxSsl = false;
};
+
+ systemd.services."grafana".serviceConfig.LoadCredential = [
+ "secret_key:/data/secrets/grafana-secret-key"
+ ];
networking.hosts."127.0.0.1" = builtins.attrNames config.services.nginx.virtualHosts;
@@ -317,7 +319,29 @@ args@{
];
};
-
+ services.prometheus.scrapeConfigs = [
+ {
+ job_name = "spacebar-dev-api";
+ scrape_interval = "${toString config.monitoring.prometheusScrapeInterval}s";
+ static_configs = [
+ { targets = [ "localhost:3001" ]; }
+ ];
+ }
+ {
+ job_name = "spacebar-dev-gateway";
+ scrape_interval = "${toString config.monitoring.prometheusScrapeInterval}s";
+ static_configs = [
+ { targets = [ "localhost:3002" ]; }
+ ];
+ }
+ {
+ job_name = "spacebar-dev-cdn";
+ scrape_interval = "${toString config.monitoring.prometheusScrapeInterval}s";
+ static_configs = [
+ { targets = [ "localhost:3003" ]; }
+ ];
+ }
+ ];
console = {
earlySetup = true;
diff --git a/host/Rory-ovh/configuration.nix b/host/Rory-ovh/configuration.nix
index 0ea717d..4acf6ce 100755
--- a/host/Rory-ovh/configuration.nix
+++ b/host/Rory-ovh/configuration.nix
@@ -17,6 +17,7 @@
../../modules/users/Alice.nix
./services/prometheus.nix
+ ./spacebar-monitoring.nix
./services/nginx/nginx.nix
./services/nix-bincache.nix
@@ -27,9 +28,9 @@
./services/matrix/ooye.nix
./services/email/root.nix
./services/drasl.nix
- ./services/prosody.nix
+ #./services/prosody.nix
#./services/wireguard/wireguard.nix
- ../../modules/software-templates/devenv/dotnet.nix
+ #../../modules/software-templates/devenv/dotnet.nix
];
users.groups.ocp = { };
@@ -39,6 +40,9 @@
"riscv64-linux"
"riscv32-linux"
];
+ boot.kernelParams = [
+ "vm.nr_hugepages=48000"
+ ];
networking = {
hostName = "Rory-ovh";
nat = {
@@ -124,6 +128,14 @@
;
};
+ containers."draupnir-belibre" = import ./services/containers/draupnir-belibre/container.nix {
+ inherit
+ pkgs
+ lib
+ draupnir
+ ;
+ };
+
networking.firewall.interfaces."ve-spacebar".allowedTCPPorts = [ 5432 ];
containers."spacebar" = import ./services/containers/spacebar/container.nix {
inherit
diff --git a/host/Rory-ovh/services/containers/draupnir-ansible/services/draupnir.nix b/host/Rory-ovh/services/containers/draupnir-ansible/services/draupnir.nix
index ef76500..93ba3f9 100644
--- a/host/Rory-ovh/services/containers/draupnir-ansible/services/draupnir.nix
+++ b/host/Rory-ovh/services/containers/draupnir-ansible/services/draupnir.nix
@@ -22,7 +22,13 @@
protections = {
wordlist = {
- words = [ "https://postimg.cc/" ];
+ words = [
+ "https://postimg.cc/"
+ "lolitaheaven.onrender.com"
+ "heavenlychat-px42.onrender.com"
+ "heavenlydev.onrender.com"
+ "Adolf_hipster007"
+ ];
minutesBeforeTrusting = 0;
};
};
diff --git a/host/Rory-ovh/services/containers/draupnir-belibre/container.nix b/host/Rory-ovh/services/containers/draupnir-belibre/container.nix
new file mode 100644
index 0000000..09f5606
--- /dev/null
+++ b/host/Rory-ovh/services/containers/draupnir-belibre/container.nix
@@ -0,0 +1,29 @@
+{
+ draupnir,
+ ...
+}:
+
+{
+ privateNetwork = true;
+ autoStart = true;
+ specialArgs = {
+ inherit draupnir;
+ };
+ config =
+ { lib, pkgs, ... }:
+ {
+ imports = [
+ ../shared.nix
+ ./root.nix
+ ./services/draupnir.nix
+ ];
+ };
+ hostAddress = "192.168.100.1";
+ localAddress = "192.168.100.23";
+
+ bindMounts."draupnir-access-token" = {
+ hostPath = "/data/secrets/draupnir-belibre-access-token";
+ mountPoint = "/etc/draupnir-access-token";
+ isReadOnly = true;
+ };
+}
diff --git a/host/Rory-ovh/services/containers/draupnir-belibre/root.nix b/host/Rory-ovh/services/containers/draupnir-belibre/root.nix
new file mode 100644
index 0000000..0ebce9e
--- /dev/null
+++ b/host/Rory-ovh/services/containers/draupnir-belibre/root.nix
@@ -0,0 +1,16 @@
+{ ... }:
+
+{
+ networking.useHostResolvConf = true;
+
+ networking.hosts = {
+ "192.168.100.1" = [
+ "matrix.rory.gay"
+ "rory.gay"
+ ];
+ };
+
+ networking.firewall = {
+ enable = true;
+ };
+}
diff --git a/host/Rory-ovh/services/containers/draupnir-belibre/services/draupnir.nix b/host/Rory-ovh/services/containers/draupnir-belibre/services/draupnir.nix
new file mode 100644
index 0000000..917958c
--- /dev/null
+++ b/host/Rory-ovh/services/containers/draupnir-belibre/services/draupnir.nix
@@ -0,0 +1,67 @@
+{ draupnir, ... }:
+
+{
+ services.draupnir = {
+ enable = true;
+ package = draupnir;
+ secrets.accessToken = "/etc/draupnir-access-token";
+
+ settings = {
+ homeserverUrl = "https://matrix.rory.gay";
+ managementRoom = "#draupnir-belibre-mgmt:rory.gay";
+ recordIgnoredInvites = true; # We want to be aware of invites
+ autojoinOnlyIfManager = true; # ... but we don't want the bot to be invited to eg. Matrix HQ...
+ automaticallyRedactForReasons = [ "*" ]; # Always autoredact
+ fasterMembershipChecks = true;
+
+ backgroundDelayMS = 10; # delay isn't needed, I don't mind the performance hit
+ pollReports = false;
+
+ admin.enableMakeRoomAdminCommand = false;
+ commands.ban.defaultReasons = [ "spam" ];
+
+ protections = {
+ wordlist = {
+ words = [
+ # The Obvious
+ "tranny"
+ "faggot"
+ "ywnbaw"
+ "nigger"
+ # abuse domains
+ "https://postimg.cc/"
+ "https://s.binance.com"
+ # Dec 2025 IRC spam
+ "irc.hardchats.com"
+ "white power"
+ "white pride"
+ "trannies"
+ "jews did 9/11"
+ "zigger"
+ "|| || <==="
+ "usurping jews"
+ "fag hoe"
+ "neo-freenode"
+ "thegreatbritishbookshop.co.uk"
+ "\"israel\""
+ "die alone"
+ "kike"
+ "irc.tr0ll.us"
+ "irc.gangste.rs"
+ "irc.wepump.in"
+ "death to"
+ "irc.hackclub.com"
+ "irc.supernets.org"
+ "[supernets]"
+ # Known abuse
+ "lolitaheaven.onrender.com"
+ "heavenlychat-px42.onrender.com"
+ "heavenlydev.onrender.com"
+ "Adolf_hipster007"
+ ];
+ minutesBeforeTrusting = 0;
+ };
+ };
+ };
+ };
+}
diff --git a/host/Rory-ovh/services/containers/draupnir-fedora/services/draupnir.nix b/host/Rory-ovh/services/containers/draupnir-fedora/services/draupnir.nix
index 0b74984..9a6d219 100644
--- a/host/Rory-ovh/services/containers/draupnir-fedora/services/draupnir.nix
+++ b/host/Rory-ovh/services/containers/draupnir-fedora/services/draupnir.nix
@@ -22,7 +22,13 @@
protections = {
wordlist = {
- words = [ "https://postimg.cc/" ];
+ words = [
+ "https://postimg.cc/"
+ "lolitaheaven.onrender.com"
+ "heavenlychat-px42.onrender.com"
+ "heavenlydev.onrender.com"
+ "Adolf_hipster007"
+ ];
minutesBeforeTrusting = 0;
};
};
diff --git a/host/Rory-ovh/services/containers/spacebar/root.nix b/host/Rory-ovh/services/containers/spacebar/root.nix
index 884c46c..7d351c3 100644
--- a/host/Rory-ovh/services/containers/spacebar/root.nix
+++ b/host/Rory-ovh/services/containers/spacebar/root.nix
@@ -1,4 +1,4 @@
-{ lib, ... }:
+{ lib, pkgs, ... }:
{
networking.useHostResolvConf = true;
@@ -27,9 +27,11 @@
services.openssh = {
enable = true;
startWhenNeeded = true;
- banner = ''
- Welcome to spacebar.chat!
- '';
+ settings = {
+ #Banner = /. + (pkgs.writeText "ssh-banner" ''
+ # Welcome to spacebar.chat!
+ #'');
+ };
};
users.users.root = {
@@ -51,13 +53,13 @@
#"ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAgEAgVEkgeVnatQ1iAsZvQuw1hj1jCAQTObaCF7M0nSf7UrSUWxs+C8s+uvg6HcJiQpRWvNaLtX1xKzAwK3wkqLXQIrOYdRTrm4TEQGdZ8QlUwGOTdpVECEiVEXuYZgiYhBoP35OeskPOcFDtYGHzsBM0ckb71xSI1S4HxmETxGlOl43JZ7SjiMYjtAEN8eqrPxcQB8R4htrxeThRypUMbO2Lc5JmnUK2fEIU3O2xHvL/vpjcBrWK/9GNoUeClWvFqasBBWOcUvPvmBEfymORJX73ELD3lPVbhIUucYQl/471O4xGALrBY6krTM4LHsNm3NG1StMlNM0LeZIy3YTHvo6dtAJJ3zYaLt9BiMpPkw2vllh35b5FSNxgJ9lU1WiM/q5TEvPsUrk5+Pi6SIEt48rejsuYwNJySmy+26ZfNJDh0Gn2S2aZJsXyrTx03t6rfuVptnOY08ZBxaOFE1lxHYOdzHL+/M1U1Z64/lkG1L7yvJtUxYAxJoxku8JenBVWQJMcKzoZDVWnrCKoKeEC8kLRjLWTDHGEq2RFOpaDBxDRYQeTFY2uQMv8F3Sbfd1FY3RF2s6wk1HB+r29skI2StN/PbQNbz57oCYAJvtsirmGoVd5BG4F335rtDENVwzYksUSEh+nKvgdUNKf7+mZg02QeKFoSJ304RLsrDsadBoF7c="
# maddy
- "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDOXRjGuFSnbe9zU0gd09SzfCL8JMf4EWVqbj3iAcFYsXeoMCXz5YtLl1kkOeQ3uXT1m8H/zjIRkpn2GbDpD000TBTXyBlzNOVQ23fZOvzMrYl2pX/09VFACF+tCTMxy1YsJur3ka9uwLlsmMqvSl0YZt6bN6RfEglGMEPuBfTm1EFo7MhXhUPnGUwiJ8xcsGSRH2kGmp/FSHUZL4CVWviZweULl2BcJTxqOdVZKM547SzN8/rLpu6I/4G/P8JTBiSIP4k8n5Fq6sZcDI5OOO6dk91wH9hU210kGHpwicXOoPAZzLFg4+Rz6VsXI1V8geydfm1Ci+XsQHEMs0V9IsAHPHvb8OeXBcyKtkaa4qAvIRN7ZdU4j17RVg8jHdkfdhkiNTzc6pnb9JS7xG/HU+9CW9USDaR6OFD5qSuUxLYP9qk9wYKtm+A3Yt6P+FLcuzSpjXu93vCGjJwCnuXcTP8DhoO3jVtzaixqzNMLgLCwDlalcf0lOSYEmzTs32lpPec= maddy@The"
+ #"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDOXRjGuFSnbe9zU0gd09SzfCL8JMf4EWVqbj3iAcFYsXeoMCXz5YtLl1kkOeQ3uXT1m8H/zjIRkpn2GbDpD000TBTXyBlzNOVQ23fZOvzMrYl2pX/09VFACF+tCTMxy1YsJur3ka9uwLlsmMqvSl0YZt6bN6RfEglGMEPuBfTm1EFo7MhXhUPnGUwiJ8xcsGSRH2kGmp/FSHUZL4CVWviZweULl2BcJTxqOdVZKM547SzN8/rLpu6I/4G/P8JTBiSIP4k8n5Fq6sZcDI5OOO6dk91wH9hU210kGHpwicXOoPAZzLFg4+Rz6VsXI1V8geydfm1Ci+XsQHEMs0V9IsAHPHvb8OeXBcyKtkaa4qAvIRN7ZdU4j17RVg8jHdkfdhkiNTzc6pnb9JS7xG/HU+9CW9USDaR6OFD5qSuUxLYP9qk9wYKtm+A3Yt6P+FLcuzSpjXu93vCGjJwCnuXcTP8DhoO3jVtzaixqzNMLgLCwDlalcf0lOSYEmzTs32lpPec= maddy@The"
# cat
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILNLIRgH0j8DXd2KoGWgyRmI9hEtBE8O3UDZf+hZ5dTQ coconut@fedora"
# puyo
- "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGZDkdhQ/7/jvmOQ45O07X3UTx9tIjUVpa8uaOTzUeBj puyodead@protonmail.com"
+ #"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGZDkdhQ/7/jvmOQ45O07X3UTx9tIjUVpa8uaOTzUeBj puyodead@protonmail.com"
# cyber
#"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFnQSAqDqmi9OUgUCMWce02YxuTA0Bpgjm3y4rirrYmk cyber@cyber-pc"
diff --git a/host/Rory-ovh/services/containers/spacebar/services/spacebar.nix b/host/Rory-ovh/services/containers/spacebar/services/spacebar.nix
index ec98d4b..7b8321b 100644
--- a/host/Rory-ovh/services/containers/spacebar/services/spacebar.nix
+++ b/host/Rory-ovh/services/containers/spacebar/services/spacebar.nix
@@ -1,7 +1,7 @@
{ spacebar, lib, ... }:
let
- sb = import "${spacebar}/nix/modules/default/lib.nix";
+ sb = import "${spacebar}/nix/lib/mkEndpoint.nix";
in
{
imports = [ spacebar.nixosModules.default ];
@@ -179,12 +179,18 @@ in
enableAbuseIpDb = true;
enableIpData = false; # 1500req/d, needed by gateway
};
+ embeds = {
+ youtube = {
+ userAgent = "Mozilla/5.0 (compatible; Discordbot/2.0; +https://discordapp.com)";
+ };
+ };
};
extraEnvironment = {
DATABASE = "postgres://spacebar:spacebar@192.168.100.1/spacebar";
#LOG_REQUESTS = "-200,204,304";
LOG_REQUESTS = "-";
LOG_VALIDATION_ERRORS = true;
+ LOG_API_ERRORS = true;
#DB_LOGGING=true;
#LOG_GATEWAY_TRACES=true;
#LOG_PROTO_UPDATES=true;
diff --git a/host/Rory-ovh/services/matrix/draupnir.nix b/host/Rory-ovh/services/matrix/draupnir.nix
index 54f5d23..9a7c292 100755
--- a/host/Rory-ovh/services/matrix/draupnir.nix
+++ b/host/Rory-ovh/services/matrix/draupnir.nix
@@ -1,4 +1,4 @@
-{ pkgs, draupnir, ... }:
+{ config, lib, pkgs, draupnir, ... }:
{
services.draupnir = {
@@ -60,10 +60,49 @@
"irc.hackclub.com"
"irc.supernets.org"
"[supernets]"
+ "lolitaheaven.onrender.com"
+ "heavenlychat-px42.onrender.com"
+ "heavenlydev.onrender.com"
+ "Adolf_hipster007"
];
minutesBeforeTrusting = 0;
};
};
};
};
+
+ systemd.services."draupnir" = {
+ serviceConfig = let
+ cfg = config.services.draupnir;
+ format = pkgs.formats.yaml { };
+ configFile = format.generate "draupnir.yaml" cfg.settings;
+ in {
+ ExecStart = lib.mkForce (
+ toString (
+ [
+ (lib.getExe cfg.package)
+ "--draupnir-config"
+ configFile
+ ]
+ ++ lib.optionals (cfg.secrets.accessToken != null) [
+ "--access-token-path"
+ "%d/access_token"
+ ]
+ ++ lib.optionals (cfg.secrets.pantalaimon.password != null) [
+ "--pantalaimon-password-path"
+ "%d/pantalaimon_password"
+ ]
+ ++ lib.optionals (cfg.secrets.web.synapseHTTPAntispam.authorization != null) [
+ "--http-antispam-authorization-path"
+ "%d/http_antispam_authorization"
+ ]
+ ++ [
+ "--max-old-space-size=32768"
+ "--max-semi-space-size=256"
+ "--prof"
+ ]
+ )
+ );
+ };
+ };
}
diff --git a/host/Rory-ovh/spacebar-monitoring.nix b/host/Rory-ovh/spacebar-monitoring.nix
new file mode 100644
index 0000000..97176cf
--- /dev/null
+++ b/host/Rory-ovh/spacebar-monitoring.nix
@@ -0,0 +1,40 @@
+{ config, lib, ... }:
+{
+ services.prometheus.scrapeConfigs = [
+ {
+ job_name = "spacebar-api-3001";
+ scrape_interval = "1s";
+ static_configs = [
+ { targets = [ "192.168.100.22:3001" ]; }
+ ];
+ }
+ {
+ job_name = "spacebar-gateway-3002";
+ scrape_interval = "1s";
+ static_configs = [
+ { targets = [ "192.168.100.22:3002" ]; }
+ ];
+ }
+ {
+ job_name = "spacebar-cdn-3003";
+ scrape_interval = "1s";
+ static_configs = [
+ { targets = [ "192.168.100.22:3003" ]; }
+ ];
+ }
+ {
+ job_name = "spacebar-webrtc-3005";
+ scrape_interval = "1s";
+ static_configs = [
+ { targets = [ "192.168.100.22:3005" ]; }
+ ];
+ }
+ ]
+ ++ (lib.map (port: {
+ job_name = "spacebar-gateway-${builtins.toString port}";
+ scrape_interval = "1s";
+ static_configs = [
+ { targets = [ "192.168.100.22:${builtins.toString port}" ]; }
+ ];
+ }) (lib.range 3100 3115));
+}
diff --git a/modules/base-server.nix b/modules/base-server.nix
index 1278d83..46f0c97 100755
--- a/modules/base-server.nix
+++ b/modules/base-server.nix
@@ -27,10 +27,10 @@
};
};
- sleep.extraConfig = ''
- AllowSuspend=no
- AllowHibernation=no
- '';
+ sleep.settings.Sleep = {
+ AllowSuspend = "no";
+ AllowHibernation = "no";
+ };
};
#systemd.services.NetworkManager-wait-online.enable = false;
@@ -77,38 +77,4 @@
# This shaves off half a gigabyte of disk space...
hardware.enableAllFirmware = false;
hardware.enableRedistributableFirmware = false;
-
- services = {
- promtail = {
- enable = true;
- configuration = {
- server = {
- http_listen_port = 3031;
- grpc_listen_port = 0;
- };
- positions = {
- filename = "/tmp/positions.yaml";
- };
- clients = [ { url = "https://loki.regional.seian.cloud/loki/api/v1/push"; } ];
- scrape_configs = [
- {
- job_name = "journal";
- journal = {
- max_age = "12h";
- labels = {
- job = "systemd-journal";
- host = "${toString config.networking.hostName}";
- };
- };
- relabel_configs = [
- {
- source_labels = [ "__journal__systemd_unit" ];
- target_label = "unit";
- }
- ];
- }
- ];
- };
- };
- };
}
diff --git a/modules/base.nix b/modules/base.nix
index 7588010..e539b15 100755
--- a/modules/base.nix
+++ b/modules/base.nix
@@ -73,6 +73,7 @@
"8.8.8.8"
"8.4.4.8"
];
+ resolvconf.enable = false;
};
environment.etc."resolv.conf" = lib.mkDefault {
@@ -154,9 +155,7 @@
zsh-completions
];
- systemd.coredump.extraConfig = lib.mkDefault ''
- Storage=none
- '';
+ systemd.coredump.settings.Coredump.Storage = lib.mkDefault "none";
nix = {
settings = {
experimental-features = [
@@ -187,7 +186,6 @@
};
monitoring.monitorAll = lib.mkForce false;
- services.promtail.enable = lib.mkForce false;
networking.useDHCP = lib.mkOverride 51 true;
};
}
diff --git a/modules/software-templates/devenv/c-cpp.nix b/modules/software-templates/devenv/c-cpp.nix
index 579edcc..7e88303 100644
--- a/modules/software-templates/devenv/c-cpp.nix
+++ b/modules/software-templates/devenv/c-cpp.nix
@@ -1,8 +1,8 @@
{ pkgs, nix-jetbrains-plugins, ... }:
{
- environment.systemPackages = with nix-jetbrains-plugins.lib."${pkgs.stdenv.system}"; [
- (buildIdeWithPlugins pkgs.jetbrains "clion" [
+ environment.systemPackages = with nix-jetbrains-plugins.lib; [
+ (buildIdeWithPlugins pkgs "clion" [
"com.github.copilot"
"nix-idea"
# "visual-studio-keymap"
diff --git a/modules/software-templates/devenv/dotnet.nix b/modules/software-templates/devenv/dotnet.nix
index d8871ef..53cbf52 100644
--- a/modules/software-templates/devenv/dotnet.nix
+++ b/modules/software-templates/devenv/dotnet.nix
@@ -1,8 +1,8 @@
{ pkgs, nix-jetbrains-plugins, ... }:
{
- environment.systemPackages = with nix-jetbrains-plugins.lib."${pkgs.stdenv.system}"; [
- (buildIdeWithPlugins pkgs.jetbrains "rider" [
+ environment.systemPackages = with nix-jetbrains-plugins.lib; [
+ (buildIdeWithPlugins pkgs "rider" [
"com.github.copilot"
"nix-idea"
# "visual-studio-keymap"
diff --git a/modules/software-templates/devenv/go.nix b/modules/software-templates/devenv/go.nix
new file mode 100644
index 0000000..bbce701
--- /dev/null
+++ b/modules/software-templates/devenv/go.nix
@@ -0,0 +1,17 @@
+{ pkgs, nix-jetbrains-plugins, ... }:
+
+{
+ environment.systemPackages = with nix-jetbrains-plugins.lib; [
+ (buildIdeWithPlugins pkgs "goland" [
+ "com.github.copilot"
+ "nix-idea"
+ # "visual-studio-keymap"
+ "String Manipulation"
+ ])
+ pkgs.go
+ pkgs.gcc
+ ];
+ environment.sessionVariables = {
+ DOTNET_CLI_TELEMETRY_OPTOUT = "1";
+ };
+}
diff --git a/modules/software-templates/devenv/java.nix b/modules/software-templates/devenv/java.nix
index ed1581a..a0065c6 100644
--- a/modules/software-templates/devenv/java.nix
+++ b/modules/software-templates/devenv/java.nix
@@ -1,8 +1,8 @@
{ pkgs, nix-jetbrains-plugins, ... }:
{
- environment.systemPackages = with nix-jetbrains-plugins.lib."${pkgs.stdenv.system}"; [
- (buildIdeWithPlugins pkgs.jetbrains "idea" [
+ environment.systemPackages = with nix-jetbrains-plugins.lib; [
+ (buildIdeWithPlugins pkgs "idea" [
"com.github.copilot"
"nix-idea"
# "visual-studio-keymap"
diff --git a/modules/software-templates/devenv/javascript.nix b/modules/software-templates/devenv/javascript.nix
index 583f6ef..de69646 100644
--- a/modules/software-templates/devenv/javascript.nix
+++ b/modules/software-templates/devenv/javascript.nix
@@ -1,8 +1,8 @@
{ pkgs, nix-jetbrains-plugins, ... }:
{
- environment.systemPackages = with nix-jetbrains-plugins.lib."${pkgs.stdenv.system}"; [
- (buildIdeWithPlugins pkgs.jetbrains "webstorm" [
+ environment.systemPackages = with nix-jetbrains-plugins.lib; [
+ (buildIdeWithPlugins pkgs "webstorm" [
"com.github.copilot"
"nix-idea"
# "visual-studio-keymap"
diff --git a/modules/users/Arci.nix b/modules/users/Arci.nix
index df7efb5..28c3c1c 100644
--- a/modules/users/Arci.nix
+++ b/modules/users/Arci.nix
@@ -59,9 +59,8 @@
programs = {
git = {
enable = true;
+ signing.format = null;
settings = {
- user.name = "Rory&";
- user.email = "root@rory.gay";
safe.directory = "/";
};
};
diff --git a/modules/users/Rory.nix b/modules/users/Rory.nix
index c56c3ed..05745fc 100755
--- a/modules/users/Rory.nix
+++ b/modules/users/Rory.nix
@@ -71,11 +71,13 @@
programs = {
git = {
enable = true;
+ signing.format = null;
settings = {
user.name = "Rory&";
user.email = "root@rory.gay";
safe.directory = "/";
advice.defaultBranchName = false;
+ signing.format = "openpgp";
};
};
zsh = {
@@ -111,8 +113,7 @@
export DISABLE_AUTO_UPDATE=true
COMPLETION_WAITING_DOTS="true"
- '';
- initExtra = ''
+ # at the end?
alias mv='mv -v'
alias pre='npx prettier -w'
alias git-commit='git commit --signoff --sign'
@@ -192,12 +193,12 @@
POWERLEVEL9K_MODE = "nerdfont-complete";
POWERLEVEL9K_ICON_PADDING = "none";
POWERLEVEL9K_PROMPT_ADD_NEWLINE = "false";
- POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR = "\uE0B1";
- POWERLEVEL9K_RIGHT_SUBSEGMENT_SEPARATOR = "\uE0B3";
- POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR = "\uE0B0";
- POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR = "\uE0B2";
- POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL = "\uE0B0";
- POWERLEVEL9K_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL = "\uE0B2";
+ POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR = "\\uE0B1";
+ POWERLEVEL9K_RIGHT_SUBSEGMENT_SEPARATOR = "\\uE0B3";
+ POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR = "\\uE0B0";
+ POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR = "\\uE0B2";
+ POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL = "\\uE0B0";
+ POWERLEVEL9K_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL = "\\uE0B2";
POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE = true;
};
};
diff --git a/modules/users/geba.nix b/modules/users/geba.nix
index 6214d91..77ee689 100644
--- a/modules/users/geba.nix
+++ b/modules/users/geba.nix
@@ -60,9 +60,8 @@
programs = {
git = {
enable = true;
+ signing.format = null;
settings = {
- user.name = "Rory&";
- user.email = "root@rory.gay";
safe.directory = "/";
};
};
diff --git a/modules/users/ks.nix b/modules/users/ks.nix
index d55dd1e..b0cf8df 100755
--- a/modules/users/ks.nix
+++ b/modules/users/ks.nix
@@ -17,6 +17,7 @@
home-manager.users.ks = {
programs.git = {
enable = true;
+ signing.format = null;
settings = {
user.name = "Kinoshita Shimizu";
user.email = "ks@kinoshitaproductions.com";
diff --git a/packages/overlays/matrix-synapse/patches/0001-Add-CVE-IDs-to-changelog-for-1.152.1.-19778.patch b/packages/overlays/matrix-synapse/patches/0001-Add-CVE-IDs-to-changelog-for-1.152.1.-19778.patch
new file mode 100644
index 0000000..adbc9fc
--- /dev/null
+++ b/packages/overlays/matrix-synapse/patches/0001-Add-CVE-IDs-to-changelog-for-1.152.1.-19778.patch
@@ -0,0 +1,29 @@
+From 16c17f3a420242e53088337d48b1fb55a86e3a8f Mon Sep 17 00:00:00 2001
+From: Denis Kasak <dkasak@termina.org.uk>
+Date: Wed, 13 May 2026 17:26:16 +0200
+Subject: [PATCH 01/19] Add CVE IDs to changelog for 1.152.1. (#19778)
+
+Since this is just a change log update, I've removed the entire
+checklist. Please tell me if this is incorrect.
+---
+ CHANGES.md | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/CHANGES.md b/CHANGES.md
+index d9b3f8b2c1..f0488cd68c 100644
+--- a/CHANGES.md
++++ b/CHANGES.md
+@@ -2,8 +2,8 @@
+
+ ## Security Fixes
+
+-- Prevent CPU starvation (Denial of Service) under worker lock contention, additionally capping the `WorkerLock` time out interval to a maximum of 60 seconds. Contributed by Famedly. ([\#19394](https://github.com/element-hq/synapse/issues/19394), ELEMENTSEC-2026-1706, [GHSA-8q93-326v-3m7g](https://github.com/element-hq/synapse/security/advisories/GHSA-8q93-326v-3m7g), CVE pending)
+-- Prevent pagination ending when a page is full of rejected events. (ELEMENTSEC-2025-1636, [GHSA-6qf2-7x63-mm6v](https://github.com/element-hq/synapse/security/advisories/GHSA-6qf2-7x63-mm6v), CVE pending)
++- Prevent CPU starvation (Denial of Service) under worker lock contention, additionally capping the `WorkerLock` time out interval to a maximum of 60 seconds. Contributed by Famedly. ([\#19394](https://github.com/element-hq/synapse/issues/19394), ELEMENTSEC-2026-1706, [GHSA-8q93-326v-3m7g](https://github.com/element-hq/synapse/security/advisories/GHSA-8q93-326v-3m7g), CVE-2026-45078)
++- Prevent pagination ending when a page is full of rejected events. (ELEMENTSEC-2025-1636, [GHSA-6qf2-7x63-mm6v](https://github.com/element-hq/synapse/security/advisories/GHSA-6qf2-7x63-mm6v), CVE-2026-45076)
+
+
+ # Synapse 1.152.0 (2026-04-28)
+--
+2.53.0
+
diff --git a/packages/overlays/matrix-synapse/patches/0001-nix-use-postgres-17.patch b/packages/overlays/matrix-synapse/patches/0002-nix-use-postgres-17.patch
index 7e079b6..959b903 100644
--- a/packages/overlays/matrix-synapse/patches/0001-nix-use-postgres-17.patch
+++ b/packages/overlays/matrix-synapse/patches/0002-nix-use-postgres-17.patch
@@ -1,7 +1,7 @@
-From 0710094b06b2b3eaad8212d24edd10066648cb17 Mon Sep 17 00:00:00 2001
+From e2b5f1ee0eac4b9c84e99fe9eb0d6a59103149a2 Mon Sep 17 00:00:00 2001
From: Rory& <root@rory.gay>
Date: Fri, 25 Jul 2025 08:25:28 +0200
-Subject: [PATCH 01/25] nix: use postgres 17
+Subject: [PATCH 02/19] nix: use postgres 17
Signed-off-by: Rory& <root@rory.gay>
---
@@ -21,5 +21,5 @@ index 4ff6518aed..51ae12c272 100644
# On the first invocation of `devenv up`, create a database for
# Synapse to store data in.
--
-2.52.0
+2.53.0
diff --git a/packages/overlays/matrix-synapse/patches/0002-nix-fix-flake.patch b/packages/overlays/matrix-synapse/patches/0003-nix-fix-flake.patch
index 014d2f5..311bc81 100644
--- a/packages/overlays/matrix-synapse/patches/0002-nix-fix-flake.patch
+++ b/packages/overlays/matrix-synapse/patches/0003-nix-fix-flake.patch
@@ -1,7 +1,7 @@
-From 3191ff6411778d266986ada3a68fd90427a9d283 Mon Sep 17 00:00:00 2001
+From cf9633037f4927bedf4d8c89386cd8fa33984cad Mon Sep 17 00:00:00 2001
From: Rory& <root@rory.gay>
Date: Mon, 9 Jun 2025 17:38:34 +0200
-Subject: [PATCH 02/25] nix: fix flake
+Subject: [PATCH 03/19] nix: fix flake
Signed-off-by: Rory& <root@rory.gay>
---
@@ -186,5 +186,5 @@ index 51ae12c272..cc41490a41 100644
# over the 'synapse' database.
services.postgres.initialScript = ''
--
-2.52.0
+2.53.0
diff --git a/packages/overlays/matrix-synapse/patches/0003-nix-Update-flake.patch b/packages/overlays/matrix-synapse/patches/0004-nix-Update-flake.patch
index cd8148f..36f1e19 100644
--- a/packages/overlays/matrix-synapse/patches/0003-nix-Update-flake.patch
+++ b/packages/overlays/matrix-synapse/patches/0004-nix-Update-flake.patch
@@ -1,7 +1,7 @@
-From 7bc7375545daed0571933e2a6063ecb0f78fecf7 Mon Sep 17 00:00:00 2001
+From 33cb357d30e5817bf679fc161a3a333a37579188 Mon Sep 17 00:00:00 2001
From: Rory& <root@rory.gay>
Date: Thu, 13 Nov 2025 13:57:10 +0100
-Subject: [PATCH 03/25] nix: Update flake
+Subject: [PATCH 04/19] nix: Update flake
Signed-off-by: Rory& <root@rory.gay>
---
@@ -44,7 +44,7 @@ index 4e2f01153b..0f2de20b2b 100644
},
"original": {
diff --git a/flake.nix b/flake.nix
-index cc41490a41..5bde1e6c07 100644
+index cc41490a41..50ae70e989 100644
--- a/flake.nix
+++ b/flake.nix
@@ -82,7 +82,7 @@
@@ -52,10 +52,10 @@ index cc41490a41..5bde1e6c07 100644
# NOTE: We currently need to set the Rust version unnecessarily high
# in order to work around https://github.com/matrix-org/synapse/issues/15939
- (rust-bin.stable."1.87.0".default.override {
-+ (rust-bin.stable."1.88.0".default.override {
++ (rust-bin.stable."1.89.0".default.override {
# Additionally install the "rust-src" extension to allow diving into the
# Rust source code in an IDE (rust-analyzer will also make use of it).
extensions = [ "rust-src" ];
--
-2.52.0
+2.53.0
diff --git a/packages/overlays/matrix-synapse/patches/0004-nix-Temporarily-disable-go-in-flake.patch b/packages/overlays/matrix-synapse/patches/0005-nix-Temporarily-disable-go-in-flake.patch
index ed4e7f5..3b9e543 100644
--- a/packages/overlays/matrix-synapse/patches/0004-nix-Temporarily-disable-go-in-flake.patch
+++ b/packages/overlays/matrix-synapse/patches/0005-nix-Temporarily-disable-go-in-flake.patch
@@ -1,7 +1,7 @@
-From ed37b0cde78794056afcae9030e38d97f010336d Mon Sep 17 00:00:00 2001
+From cda3b7476e27da235c8304abac8a1cf32ad2c576 Mon Sep 17 00:00:00 2001
From: Rory& <root@rory.gay>
Date: Sat, 16 Aug 2025 20:18:45 +0200
-Subject: [PATCH 04/25] nix: Temporarily disable go in flake
+Subject: [PATCH 05/19] nix: Temporarily disable go in flake
Signed-off-by: Rory& <root@rory.gay>
---
@@ -9,7 +9,7 @@ Signed-off-by: Rory& <root@rory.gay>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/flake.nix b/flake.nix
-index 5bde1e6c07..cf7a731f51 100644
+index 50ae70e989..ef944747cb 100644
--- a/flake.nix
+++ b/flake.nix
@@ -151,7 +151,7 @@
@@ -22,5 +22,5 @@ index 5bde1e6c07..cf7a731f51 100644
# Postgres is needed to run Synapse with postgres support and
--
-2.52.0
+2.53.0
diff --git a/packages/overlays/matrix-synapse/patches/0005-Add-test-script.patch b/packages/overlays/matrix-synapse/patches/0006-Add-test-script.patch
index 60157ca..300d132 100644
--- a/packages/overlays/matrix-synapse/patches/0005-Add-test-script.patch
+++ b/packages/overlays/matrix-synapse/patches/0006-Add-test-script.patch
@@ -1,7 +1,7 @@
-From d5295e735828d424d9217d7127ece66cad177986 Mon Sep 17 00:00:00 2001
+From 7218323ec2954bca8af95af70cf9d8d2a064fa3c Mon Sep 17 00:00:00 2001
From: Rory& <root@rory.gay>
Date: Thu, 13 Nov 2025 13:56:59 +0100
-Subject: [PATCH 05/25] Add test script
+Subject: [PATCH 06/19] Add test script
Signed-off-by: Rory& <root@rory.gay>
---
@@ -18,5 +18,5 @@ index 0000000000..1ac82801b2
+#! /usr/bin/env sh
+poetry run trial -j`nproc` tests
--
-2.52.0
+2.53.0
diff --git a/packages/overlays/matrix-synapse/patches/0006-Fix-gitignore-to-ignore-.venv.patch b/packages/overlays/matrix-synapse/patches/0007-Fix-gitignore-to-ignore-.venv.patch
index 1722347..2ab29dd 100644
--- a/packages/overlays/matrix-synapse/patches/0006-Fix-gitignore-to-ignore-.venv.patch
+++ b/packages/overlays/matrix-synapse/patches/0007-Fix-gitignore-to-ignore-.venv.patch
@@ -1,7 +1,7 @@
-From 93af91e5d4eb59c8f1a55d5d3f86746d9728d28a Mon Sep 17 00:00:00 2001
+From 527765f8a34f0f4c32973b31909e67f2bcf02035 Mon Sep 17 00:00:00 2001
From: Rory& <root@rory.gay>
Date: Mon, 9 Jun 2025 17:46:10 +0200
-Subject: [PATCH 06/25] Fix gitignore to ignore .venv
+Subject: [PATCH 07/19] Fix gitignore to ignore .venv
Signed-off-by: Rory& <root@rory.gay>
---
@@ -21,5 +21,5 @@ index e333f2320b..3aec96e75e 100644
/logs
/media_store/
--
-2.52.0
+2.53.0
diff --git a/packages/overlays/matrix-synapse/patches/0007-Fast-auth-links.patch b/packages/overlays/matrix-synapse/patches/0008-Fast-auth-links.patch
index 1891da7..b77ad1b 100644
--- a/packages/overlays/matrix-synapse/patches/0007-Fast-auth-links.patch
+++ b/packages/overlays/matrix-synapse/patches/0008-Fast-auth-links.patch
@@ -1,7 +1,7 @@
-From 7bf6dd9744da4eaccf201e62eef243b5e6c95314 Mon Sep 17 00:00:00 2001
+From 064fbcdd10c15eea7f695b693c7ee1ef99b6b606 Mon Sep 17 00:00:00 2001
From: Rory& <root@rory.gay>
Date: Tue, 22 Jul 2025 05:07:01 +0200
-Subject: [PATCH 07/25] Fast auth links
+Subject: [PATCH 08/19] Fast auth links
Signed-off-by: Rory& <root@rory.gay>
---
@@ -64,7 +64,7 @@ index 6e38b55686..2bab1e53c5 100644
def make_in_list_sql_clause(
database_engine: BaseDatabaseEngine,
diff --git a/synapse/storage/databases/main/event_federation.py b/synapse/storage/databases/main/event_federation.py
-index cc7083b605..55a0714f14 100644
+index 415926eb0a..0e34a3ffc3 100644
--- a/synapse/storage/databases/main/event_federation.py
+++ b/synapse/storage/databases/main/event_federation.py
@@ -47,6 +47,7 @@ from synapse.storage.database import (
@@ -97,5 +97,5 @@ index cc7083b605..55a0714f14 100644
txn.execute(sql % (clause,), args)
--
-2.52.0
+2.53.0
diff --git a/packages/overlays/matrix-synapse/patches/0008-Add-too-much-logging-to-room-summary-over-federation.patch b/packages/overlays/matrix-synapse/patches/0009-Add-too-much-logging-to-room-summary-over-federation.patch
index a4cf1fb..ecbeb9f 100644
--- a/packages/overlays/matrix-synapse/patches/0008-Add-too-much-logging-to-room-summary-over-federation.patch
+++ b/packages/overlays/matrix-synapse/patches/0009-Add-too-much-logging-to-room-summary-over-federation.patch
@@ -1,7 +1,7 @@
-From 4d1ba2cb8982f0f72116753da80744947a09f373 Mon Sep 17 00:00:00 2001
+From e0c0a852c437a5eef52041ec42edfbc6d0b913ca Mon Sep 17 00:00:00 2001
From: Rory& <root@rory.gay>
Date: Wed, 23 Apr 2025 17:53:52 +0200
-Subject: [PATCH 08/25] Add too much logging to room summary over federation
+Subject: [PATCH 09/19] Add too much logging to room summary over federation
Signed-off-by: Rory& <root@rory.gay>
---
@@ -9,10 +9,10 @@ Signed-off-by: Rory& <root@rory.gay>
1 file changed, 36 insertions(+), 4 deletions(-)
diff --git a/synapse/handlers/room_summary.py b/synapse/handlers/room_summary.py
-index 9ec0d33f11..5ea32af620 100644
+index bbcdc0877e..5a35d4d0e1 100644
--- a/synapse/handlers/room_summary.py
+++ b/synapse/handlers/room_summary.py
-@@ -748,23 +748,55 @@ class RoomSummaryHandler:
+@@ -747,23 +747,55 @@ class RoomSummaryHandler:
"""
# The API doesn't return the room version so assume that a
# join rule of knock is valid.
@@ -73,5 +73,5 @@ index 9ec0d33f11..5ea32af620 100644
# already be in the room (if it was a child room), or there might be a
# pending invite, etc.
--
-2.52.0
+2.53.0
diff --git a/packages/overlays/matrix-synapse/patches/0009-Log-entire-room-if-accessibility-check-fails.patch b/packages/overlays/matrix-synapse/patches/0010-Log-entire-room-if-accessibility-check-fails.patch
index d189ca2..1d480e4 100644
--- a/packages/overlays/matrix-synapse/patches/0009-Log-entire-room-if-accessibility-check-fails.patch
+++ b/packages/overlays/matrix-synapse/patches/0010-Log-entire-room-if-accessibility-check-fails.patch
@@ -1,7 +1,7 @@
-From 521c06d64c7a22bea6db9a78337c53b70c44cbe3 Mon Sep 17 00:00:00 2001
+From 8f2314ceaf0d459bf11df840ce14918292f5b90d Mon Sep 17 00:00:00 2001
From: Rory& <root@rory.gay>
Date: Wed, 23 Apr 2025 18:24:57 +0200
-Subject: [PATCH 09/25] Log entire room if accessibility check fails
+Subject: [PATCH 10/19] Log entire room if accessibility check fails
Signed-off-by: Rory& <root@rory.gay>
---
@@ -9,10 +9,10 @@ Signed-off-by: Rory& <root@rory.gay>
1 file changed, 4 insertions(+)
diff --git a/synapse/handlers/room_summary.py b/synapse/handlers/room_summary.py
-index 5ea32af620..30ee91cd95 100644
+index 5a35d4d0e1..9f904af2ea 100644
--- a/synapse/handlers/room_summary.py
+++ b/synapse/handlers/room_summary.py
-@@ -964,6 +964,10 @@ class RoomSummaryHandler:
+@@ -961,6 +961,10 @@ class RoomSummaryHandler:
if not room_entry or not await self._is_remote_room_accessible(
requester, room_entry.room_id, room_entry.room
):
@@ -24,5 +24,5 @@ index 5ea32af620..30ee91cd95 100644
room = dict(room_entry.room)
--
-2.52.0
+2.53.0
diff --git a/packages/overlays/matrix-synapse/patches/0010-Log-policy-server-rejected-events.patch b/packages/overlays/matrix-synapse/patches/0010-Log-policy-server-rejected-events.patch
deleted file mode 100644
index 7bf9a02..0000000
--- a/packages/overlays/matrix-synapse/patches/0010-Log-policy-server-rejected-events.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From 2fdf69e5d068f20dfaf31097d05f2ba72a8bd374 Mon Sep 17 00:00:00 2001
-From: Rory& <root@rory.gay>
-Date: Tue, 27 May 2025 05:21:46 +0200
-Subject: [PATCH 10/25] Log policy server rejected events
-
-Signed-off-by: Rory& <root@rory.gay>
----
- synapse/handlers/room_policy.py | 7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git a/synapse/handlers/room_policy.py b/synapse/handlers/room_policy.py
-index 0663a36714..d2216978ac 100644
---- a/synapse/handlers/room_policy.py
-+++ b/synapse/handlers/room_policy.py
-@@ -111,6 +111,13 @@ class RoomPolicyHandler:
- policy_server, event
- )
- if recommendation != RECOMMENDATION_OK:
-+ logger.info(
-+ "[POLICY] Policy server %s recommended not to allow event %s in room %s: %s",
-+ policy_server,
-+ event.event_id,
-+ event.room_id,
-+ recommendation,
-+ )
- return False
-
- return True # default allow
---
-2.52.0
-
diff --git a/packages/overlays/matrix-synapse/patches/0011-Use-parse_boolean-for-unredacted-content.patch b/packages/overlays/matrix-synapse/patches/0011-Use-parse_boolean-for-unredacted-content.patch
index 0bdfbdf..f2361c8 100644
--- a/packages/overlays/matrix-synapse/patches/0011-Use-parse_boolean-for-unredacted-content.patch
+++ b/packages/overlays/matrix-synapse/patches/0011-Use-parse_boolean-for-unredacted-content.patch
@@ -1,7 +1,7 @@
-From ef028691294d2b6b15af1d2225dd2a777ec28cc4 Mon Sep 17 00:00:00 2001
+From c4f5b54b4bc425ff0adc10ef44b1e91cd33fc969 Mon Sep 17 00:00:00 2001
From: Rory& <root@rory.gay>
Date: Tue, 27 May 2025 06:14:26 +0200
-Subject: [PATCH 11/25] Use parse_boolean for unredacted content
+Subject: [PATCH 11/19] Use parse_boolean for unredacted content
Signed-off-by: Rory& <root@rory.gay>
---
@@ -9,10 +9,10 @@ Signed-off-by: Rory& <root@rory.gay>
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/synapse/rest/client/room.py b/synapse/rest/client/room.py
-index 5e7dcb0191..dac466f465 100644
+index 83664814a6..f17c1f5e26 100644
--- a/synapse/rest/client/room.py
+++ b/synapse/rest/client/room.py
-@@ -1023,10 +1023,9 @@ class RoomEventServlet(RestServlet):
+@@ -1053,10 +1053,9 @@ class RoomEventServlet(RestServlet):
requester = await self.auth.get_user_by_req(request, allow_guest=True)
include_unredacted_content = self.msc2815_enabled and (
@@ -26,5 +26,5 @@ index 5e7dcb0191..dac466f465 100644
== "true"
)
--
-2.52.0
+2.53.0
diff --git a/packages/overlays/matrix-synapse/patches/0012-Expose-tombstone-in-room-admin-api.patch b/packages/overlays/matrix-synapse/patches/0012-Expose-tombstone-in-room-admin-api.patch
index 514f817..9c414b8 100644
--- a/packages/overlays/matrix-synapse/patches/0012-Expose-tombstone-in-room-admin-api.patch
+++ b/packages/overlays/matrix-synapse/patches/0012-Expose-tombstone-in-room-admin-api.patch
@@ -1,7 +1,7 @@
-From 94b2da38a5ab6200a7c7bc4a5e50a327f5aa128d Mon Sep 17 00:00:00 2001
+From 4a87e254861c102323b9f3bdab14b792da995069 Mon Sep 17 00:00:00 2001
From: Rory& <root@rory.gay>
Date: Tue, 27 May 2025 06:37:52 +0200
-Subject: [PATCH 12/25] Expose tombstone in room admin api
+Subject: [PATCH 12/19] Expose tombstone in room admin api
Signed-off-by: Rory& <root@rory.gay>
---
@@ -11,10 +11,10 @@ Signed-off-by: Rory& <root@rory.gay>
3 files changed, 40 insertions(+), 2 deletions(-)
diff --git a/synapse/rest/admin/rooms.py b/synapse/rest/admin/rooms.py
-index a886859ffa..e97d076a44 100644
+index 61511b9360..3ff2865b96 100644
--- a/synapse/rest/admin/rooms.py
+++ b/synapse/rest/admin/rooms.py
-@@ -301,6 +301,10 @@ class ListRoomRestServlet(RestServlet):
+@@ -302,6 +302,10 @@ class ListRoomRestServlet(RestServlet):
direction = parse_enum(request, "dir", Direction, default=Direction.FORWARDS)
reverse_order = True if direction == Direction.BACKWARDS else False
@@ -25,7 +25,7 @@ index a886859ffa..e97d076a44 100644
# Return list of rooms according to parameters
rooms, total_rooms = await self.store.get_rooms_paginate(
start,
-@@ -310,6 +314,7 @@ class ListRoomRestServlet(RestServlet):
+@@ -311,6 +315,7 @@ class ListRoomRestServlet(RestServlet):
search_term,
public_rooms,
empty_rooms,
@@ -34,10 +34,10 @@ index a886859ffa..e97d076a44 100644
response = {
diff --git a/synapse/rest/client/room.py b/synapse/rest/client/room.py
-index dac466f465..d28be2befb 100644
+index f17c1f5e26..7f3b1153f7 100644
--- a/synapse/rest/client/room.py
+++ b/synapse/rest/client/room.py
-@@ -1027,7 +1027,6 @@ class RoomEventServlet(RestServlet):
+@@ -1057,7 +1057,6 @@ class RoomEventServlet(RestServlet):
request,
"fi.mau.msc2815.include_unredacted_content"
)
@@ -46,10 +46,10 @@ index dac466f465..d28be2befb 100644
if include_unredacted_content and not await self.auth.is_server_admin(
requester
diff --git a/synapse/storage/databases/main/room.py b/synapse/storage/databases/main/room.py
-index 633df07736..7623208c28 100644
+index a0c42082f0..68c2edfc14 100644
--- a/synapse/storage/databases/main/room.py
+++ b/synapse/storage/databases/main/room.py
-@@ -605,6 +605,7 @@ class RoomWorkerStore(CacheInvalidationWorkerStore):
+@@ -779,6 +779,7 @@ class RoomWorkerStore(CacheInvalidationWorkerStore):
search_term: str | None,
public_rooms: bool | None,
empty_rooms: bool | None,
@@ -57,7 +57,7 @@ index 633df07736..7623208c28 100644
) -> tuple[list[dict[str, Any]], int]:
"""Function to retrieve a paginated list of rooms as json.
-@@ -624,6 +625,7 @@ class RoomWorkerStore(CacheInvalidationWorkerStore):
+@@ -798,6 +799,7 @@ class RoomWorkerStore(CacheInvalidationWorkerStore):
If true, empty rooms are queried.
if false, empty rooms are excluded from the query. When it is
none (the default), both empty rooms and none-empty rooms are queried.
@@ -65,7 +65,7 @@ index 633df07736..7623208c28 100644
Returns:
A list of room dicts and an integer representing the total number of
rooms that exist given this query
-@@ -792,11 +794,43 @@ class RoomWorkerStore(CacheInvalidationWorkerStore):
+@@ -966,11 +968,43 @@ class RoomWorkerStore(CacheInvalidationWorkerStore):
room_count = cast(tuple[int], txn.fetchone())
return rooms, room_count[0]
@@ -111,5 +111,5 @@ index 633df07736..7623208c28 100644
async def get_ratelimit_for_user(self, user_id: str) -> RatelimitOverride | None:
"""Check if there are any overrides for ratelimiting for the given user
--
-2.52.0
+2.53.0
diff --git a/packages/overlays/matrix-synapse/patches/0013-fix-Always-recheck-messages-pagination-data-if-a-bac.patch b/packages/overlays/matrix-synapse/patches/0013-fix-Always-recheck-messages-pagination-data-if-a-bac.patch
index 535a353..e983a71 100644
--- a/packages/overlays/matrix-synapse/patches/0013-fix-Always-recheck-messages-pagination-data-if-a-bac.patch
+++ b/packages/overlays/matrix-synapse/patches/0013-fix-Always-recheck-messages-pagination-data-if-a-bac.patch
@@ -1,7 +1,7 @@
-From 5cd230419f6dc712ad6f0b931f7009f7fe0f0148 Mon Sep 17 00:00:00 2001
+From 21cd3ad37d016c06494f0ff95c9bfd39fd92c6d4 Mon Sep 17 00:00:00 2001
From: Jason Little <j.little@famedly.com>
Date: Wed, 30 Apr 2025 09:29:42 -0500
-Subject: [PATCH 13/25] fix: Always recheck `/messages` pagination data if a
+Subject: [PATCH 13/19] fix: Always recheck `/messages` pagination data if a
backfill might have been needed (#28)
Signed-off-by: Rory& <root@rory.gay>
@@ -11,7 +11,7 @@ Signed-off-by: Rory& <root@rory.gay>
2 files changed, 33 insertions(+), 36 deletions(-)
diff --git a/synapse/handlers/federation.py b/synapse/handlers/federation.py
-index 14805ac80f..04f8587fd8 100644
+index b3444dd2ef..2d5612fc04 100644
--- a/synapse/handlers/federation.py
+++ b/synapse/handlers/federation.py
@@ -191,7 +191,7 @@ class FederationHandler:
@@ -32,7 +32,7 @@ index 14805ac80f..04f8587fd8 100644
"""
# Starting the processing time here so we can include the room backfill
# linearizer lock queue in the timing
-@@ -306,7 +304,7 @@ class FederationHandler:
+@@ -308,7 +306,7 @@ class FederationHandler:
limit=1,
)
if not have_later_backfill_points:
@@ -41,7 +41,7 @@ index 14805ac80f..04f8587fd8 100644
logger.debug(
"_maybe_backfill_inner: all backfill points are *after* current depth. Trying again with later backfill points."
-@@ -326,15 +324,15 @@ class FederationHandler:
+@@ -328,15 +326,15 @@ class FederationHandler:
)
# We return `False` because we're backfilling in the background and there is
# no new events immediately for the caller to know about yet.
@@ -60,7 +60,7 @@ index 14805ac80f..04f8587fd8 100644
# If we're approaching an extremity we trigger a backfill, otherwise we
# no-op.
-@@ -353,7 +351,7 @@ class FederationHandler:
+@@ -355,7 +353,7 @@ class FederationHandler:
current_depth,
limit,
)
@@ -69,7 +69,7 @@ index 14805ac80f..04f8587fd8 100644
# For performance's sake, we only want to paginate from a particular extremity
# if we can actually see the events we'll get. Otherwise, we'd just spend a lot
-@@ -421,7 +419,7 @@ class FederationHandler:
+@@ -423,7 +421,7 @@ class FederationHandler:
logger.debug(
"_maybe_backfill_inner: found no extremities which would be visible"
)
@@ -78,7 +78,7 @@ index 14805ac80f..04f8587fd8 100644
logger.debug(
"_maybe_backfill_inner: extremities_to_request %s", extremities_to_request
-@@ -444,7 +442,7 @@ class FederationHandler:
+@@ -446,7 +444,7 @@ class FederationHandler:
)
)
@@ -87,7 +87,7 @@ index 14805ac80f..04f8587fd8 100644
# TODO: Should we try multiple of these at a time?
# Number of contacted remote homeservers that have denied our backfill
-@@ -467,7 +465,7 @@ class FederationHandler:
+@@ -469,7 +467,7 @@ class FederationHandler:
# If this succeeded then we probably already have the
# appropriate stuff.
# TODO: We can probably do something more intelligent here.
@@ -96,7 +96,7 @@ index 14805ac80f..04f8587fd8 100644
except NotRetryingDestination as e:
logger.info("_maybe_backfill_inner: %s", e)
continue
-@@ -491,7 +489,7 @@ class FederationHandler:
+@@ -493,7 +491,7 @@ class FederationHandler:
)
denied_count += 1
if denied_count >= max_denied_count:
@@ -105,7 +105,7 @@ index 14805ac80f..04f8587fd8 100644
continue
logger.info("Failed to backfill from %s because %s", dom, e)
-@@ -507,7 +505,7 @@ class FederationHandler:
+@@ -509,7 +507,7 @@ class FederationHandler:
)
denied_count += 1
if denied_count >= max_denied_count:
@@ -114,7 +114,7 @@ index 14805ac80f..04f8587fd8 100644
continue
logger.info("Failed to backfill from %s because %s", dom, e)
-@@ -519,7 +517,7 @@ class FederationHandler:
+@@ -521,7 +519,7 @@ class FederationHandler:
logger.exception("Failed to backfill from %s because %s", dom, e)
continue
@@ -123,7 +123,7 @@ index 14805ac80f..04f8587fd8 100644
# If we have the `processing_start_time`, then we can make an
# observation. We wouldn't have the `processing_start_time` in the case
-@@ -531,14 +529,9 @@ class FederationHandler:
+@@ -533,14 +531,9 @@ class FederationHandler:
**{SERVER_NAME_LABEL: self.server_name}
).observe((processing_end_time - processing_start_time) / 1000)
@@ -140,10 +140,10 @@ index 14805ac80f..04f8587fd8 100644
async def send_invite(self, target_host: str, event: EventBase) -> EventBase:
"""Sends the invite to the remote server for signing.
diff --git a/synapse/handlers/pagination.py b/synapse/handlers/pagination.py
-index 7b9c829056..368fa3e007 100644
+index 2bc7efeb5e..6d4bde4bbe 100644
--- a/synapse/handlers/pagination.py
+++ b/synapse/handlers/pagination.py
-@@ -632,27 +632,31 @@ class PaginationHandler:
+@@ -633,27 +633,31 @@ class PaginationHandler:
or missing_too_many_events
or not_enough_events_to_fill_response
):
@@ -162,7 +162,7 @@ index 7b9c829056..368fa3e007 100644
- (
- events,
- next_key,
-- _,
+- limited,
- ) = await self.store.paginate_room_events_by_topological_ordering(
- room_id=room_id,
- from_key=from_token.room_key,
@@ -179,7 +179,7 @@ index 7b9c829056..368fa3e007 100644
+ (
+ events,
+ next_key,
-+ _,
++ limited,
+ ) = await self.store.paginate_room_events_by_topological_ordering(
+ room_id=room_id,
+ from_key=from_token.room_key,
@@ -192,5 +192,5 @@ index 7b9c829056..368fa3e007 100644
# Otherwise, we can backfill in the background for eventual
# consistency's sake but we don't need to block the client waiting
--
-2.52.0
+2.53.0
diff --git a/packages/overlays/matrix-synapse/patches/0014-Fix-pagination-with-large-gaps-of-rejected-events.patch b/packages/overlays/matrix-synapse/patches/0014-Fix-pagination-with-large-gaps-of-rejected-events.patch
index 89e812e..deb4522 100644
--- a/packages/overlays/matrix-synapse/patches/0014-Fix-pagination-with-large-gaps-of-rejected-events.patch
+++ b/packages/overlays/matrix-synapse/patches/0014-Fix-pagination-with-large-gaps-of-rejected-events.patch
@@ -1,51 +1,35 @@
-From 4775b12430b2fd8c7487f3779087cd16ece63bf7 Mon Sep 17 00:00:00 2001
+From aa2cba639cd420a67b9528705187cd8ba21ed93d Mon Sep 17 00:00:00 2001
From: Nicolas Werner <nicolas.werner@hotmail.de>
Date: Sun, 8 Jun 2025 23:14:31 +0200
-Subject: [PATCH 14/25] Fix pagination with large gaps of rejected events
+Subject: [PATCH 14/19] Fix pagination with large gaps of rejected events
Signed-off-by: Rory& <root@rory.gay>
---
- synapse/handlers/pagination.py | 13 +++++++++++--
- 1 file changed, 11 insertions(+), 2 deletions(-)
+ synapse/handlers/pagination.py | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
diff --git a/synapse/handlers/pagination.py b/synapse/handlers/pagination.py
-index 368fa3e007..350c1ccd9e 100644
+index 6d4bde4bbe..869b476d87 100644
--- a/synapse/handlers/pagination.py
+++ b/synapse/handlers/pagination.py
-@@ -565,7 +565,7 @@ class PaginationHandler:
- (
- events,
- next_key,
-- _,
-+ limited,
- ) = await self.store.paginate_room_events_by_topological_ordering(
- room_id=room_id,
- from_key=from_token.room_key,
-@@ -648,7 +648,7 @@ class PaginationHandler:
- (
- events,
- next_key,
-- _,
-+ limited,
- ) = await self.store.paginate_room_events_by_topological_ordering(
- room_id=room_id,
- from_key=from_token.room_key,
-@@ -671,6 +671,15 @@ class PaginationHandler:
+@@ -672,6 +672,17 @@ class PaginationHandler:
next_token = from_token.copy_and_replace(StreamKeyType.ROOM, next_key)
+ # We might have hit some internal filtering first, for example rejected
+ # events. Ensure we return a pagination token then.
+ if not events and limited:
-+ return {
-+ "chunk": [],
-+ "start": await from_token.to_string(self.store),
-+ "end": await next_token.to_string(self.store),
-+ }
++ return GetMessagesResult(
++ messages_chunk=[],
++ bundled_aggregations={},
++ state=None,
++ start_token=from_token,
++ end_token=next_token,
++ )
+
- # if no events are returned from pagination, that implies
- # we have reached the end of the available events.
- # In that case we do not return end, to tell the client
+ # if no events are returned from pagination (this page is empty)
+ # and there aren't any more pages (not limited),
+ # that implies we have reached the end of the available events.
--
-2.52.0
+2.53.0
diff --git a/packages/overlays/matrix-synapse/patches/0015-RequestRatelimiter-expose-can_do_action.patch b/packages/overlays/matrix-synapse/patches/0015-RequestRatelimiter-expose-can_do_action.patch
index 635e1a6..d961013 100644
--- a/packages/overlays/matrix-synapse/patches/0015-RequestRatelimiter-expose-can_do_action.patch
+++ b/packages/overlays/matrix-synapse/patches/0015-RequestRatelimiter-expose-can_do_action.patch
@@ -1,7 +1,7 @@
-From edb8616c493500b52f509a8c27ee2d62ebfae758 Mon Sep 17 00:00:00 2001
+From b80719e34f34df23c90b69ca60d53d46f955d451 Mon Sep 17 00:00:00 2001
From: Rory& <root@rory.gay>
Date: Fri, 25 Jul 2025 08:26:15 +0200
-Subject: [PATCH 15/25] RequestRatelimiter: expose can_do_action
+Subject: [PATCH 15/19] RequestRatelimiter: expose can_do_action
Signed-off-by: Rory& <root@rory.gay>
---
@@ -92,5 +92,5 @@ index d6cc3d26b5..bdc9481e4f 100644
+ n_actions=n_actions,
+ )
--
-2.52.0
+2.53.0
diff --git a/packages/overlays/matrix-synapse/patches/0016-Clarify-pre_event_ids-assert-in-event-creation-handl.patch b/packages/overlays/matrix-synapse/patches/0016-Clarify-pre_event_ids-assert-in-event-creation-handl.patch
index ec49b23..d230cba 100644
--- a/packages/overlays/matrix-synapse/patches/0016-Clarify-pre_event_ids-assert-in-event-creation-handl.patch
+++ b/packages/overlays/matrix-synapse/patches/0016-Clarify-pre_event_ids-assert-in-event-creation-handl.patch
@@ -1,7 +1,7 @@
-From dd61c685748369af6e7b46dd55ea4f5b8d4447b7 Mon Sep 17 00:00:00 2001
+From e221cdbc9fa341f4f375bd4f7e5ed740446bfd68 Mon Sep 17 00:00:00 2001
From: Rory& <root@rory.gay>
Date: Sat, 16 Aug 2025 20:19:08 +0200
-Subject: [PATCH 16/25] Clarify pre_event_ids assert in event creation handler
+Subject: [PATCH 16/19] Clarify pre_event_ids assert in event creation handler
Signed-off-by: Rory& <root@rory.gay>
---
@@ -9,10 +9,10 @@ Signed-off-by: Rory& <root@rory.gay>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/synapse/handlers/message.py b/synapse/handlers/message.py
-index 99ce120736..0c7bf8b4d1 100644
+index 4032c7eca9..435e6b5c14 100644
--- a/synapse/handlers/message.py
+++ b/synapse/handlers/message.py
-@@ -1274,7 +1274,7 @@ class EventCreationHandler:
+@@ -1324,7 +1324,7 @@ class EventCreationHandler:
if state_event_ids is not None:
# Do a quick check to make sure that prev_event_ids is present to
# make the type-checking around `builder.build` happy.
@@ -22,5 +22,5 @@ index 99ce120736..0c7bf8b4d1 100644
temp_event = await builder.build(
prev_event_ids=prev_event_ids,
--
-2.52.0
+2.53.0
diff --git a/packages/overlays/matrix-synapse/patches/0017-Add-bulk-send-events-endpoint.patch b/packages/overlays/matrix-synapse/patches/0017-Add-bulk-send-events-endpoint.patch
index 04f7835..9ed6f9f 100644
--- a/packages/overlays/matrix-synapse/patches/0017-Add-bulk-send-events-endpoint.patch
+++ b/packages/overlays/matrix-synapse/patches/0017-Add-bulk-send-events-endpoint.patch
@@ -1,7 +1,7 @@
-From a96f2eb4361749a083b0c8a49068af8154333232 Mon Sep 17 00:00:00 2001
+From 47c6aab82a297f3e9db2df7121c16598f8711ac2 Mon Sep 17 00:00:00 2001
From: Rory& <root@rory.gay>
Date: Sat, 26 Jul 2025 09:50:56 +0200
-Subject: [PATCH 17/25] Add bulk send events endpoint
+Subject: [PATCH 17/19] Add bulk send events endpoint
Try to optimise bulk sending some more
@@ -16,7 +16,7 @@ Signed-off-by: Rory& <root@rory.gay>
2 files changed, 114 insertions(+), 1 deletion(-)
diff --git a/synapse/rest/client/capabilities.py b/synapse/rest/client/capabilities.py
-index baff999ab0..5a85a415e6 100644
+index 705d74dee1..075c3de261 100644
--- a/synapse/rest/client/capabilities.py
+++ b/synapse/rest/client/capabilities.py
@@ -74,6 +74,9 @@ class CapabilitiesRestServlet(RestServlet):
@@ -30,7 +30,7 @@ index baff999ab0..5a85a415e6 100644
}
diff --git a/synapse/rest/client/room.py b/synapse/rest/client/room.py
-index d28be2befb..7bcfdb68ce 100644
+index 7f3b1153f7..168415249b 100644
--- a/synapse/rest/client/room.py
+++ b/synapse/rest/client/room.py
@@ -23,10 +23,12 @@
@@ -46,23 +46,23 @@ index d28be2befb..7bcfdb68ce 100644
import attr
from prometheus_client.core import Histogram
-@@ -45,6 +47,7 @@ from synapse.api.errors import (
+@@ -51,6 +53,7 @@ from synapse.api.errors import (
UnredactedContentDeletedError,
)
from synapse.api.filtering import Filter
+from synapse.api.ratelimiting import RequestRatelimiter
from synapse.events.utils import (
EventClientSerializer,
- SerializeEventConfig,
-@@ -52,6 +55,7 @@ from synapse.events.utils import (
- serialize_event,
+ FilteredEvent,
+@@ -58,6 +61,7 @@ from synapse.events.utils import (
+ format_event_for_client_v2,
)
from synapse.handlers.pagination import GetMessagesResult
+from synapse.events import EventBase
from synapse.http.server import HttpServer
from synapse.http.servlet import (
ResolveRoomIdMixin,
-@@ -486,7 +490,6 @@ class RoomSendEventRestServlet(TransactionRestServlet):
+@@ -514,7 +518,6 @@ class RoomSendEventRestServlet(TransactionRestServlet):
txn_id,
)
@@ -70,7 +70,7 @@ index d28be2befb..7bcfdb68ce 100644
def _parse_request_delay(
request: SynapseRequest,
max_delay: int | None,
-@@ -1728,6 +1731,112 @@ class RoomSummaryRestServlet(ResolveRoomIdMixin, RestServlet):
+@@ -1758,6 +1761,112 @@ class RoomSummaryRestServlet(ResolveRoomIdMixin, RestServlet):
remote_room_hosts,
)
@@ -183,7 +183,7 @@ index d28be2befb..7bcfdb68ce 100644
def register_servlets(hs: "HomeServer", http_server: HttpServer) -> None:
RoomStateEventRestServlet(hs).register(http_server)
-@@ -1737,6 +1846,7 @@ def register_servlets(hs: "HomeServer", http_server: HttpServer) -> None:
+@@ -1767,6 +1876,7 @@ def register_servlets(hs: "HomeServer", http_server: HttpServer) -> None:
JoinRoomAliasServlet(hs).register(http_server)
RoomMembershipRestServlet(hs).register(http_server)
RoomSendEventRestServlet(hs).register(http_server)
@@ -192,5 +192,5 @@ index d28be2befb..7bcfdb68ce 100644
RoomStateRestServlet(hs).register(http_server)
RoomRedactEventRestServlet(hs).register(http_server)
--
-2.52.0
+2.53.0
diff --git a/packages/overlays/matrix-synapse/patches/0018-admin-api-send-more-data.patch b/packages/overlays/matrix-synapse/patches/0018-admin-api-send-more-data.patch
index 63a5ba0..2969f7c 100644
--- a/packages/overlays/matrix-synapse/patches/0018-admin-api-send-more-data.patch
+++ b/packages/overlays/matrix-synapse/patches/0018-admin-api-send-more-data.patch
@@ -1,7 +1,7 @@
-From 1082cc5441ca3153016c456b89b07ce7846525e2 Mon Sep 17 00:00:00 2001
+From 6cb4af5641c98b0b6149e1201d8c86d72650cab4 Mon Sep 17 00:00:00 2001
From: Rory& <root@rory.gay>
Date: Mon, 27 Oct 2025 19:23:42 +0100
-Subject: [PATCH 18/25] admin api - send more data
+Subject: [PATCH 18/19] admin api - send more data
Signed-off-by: Rory& <root@rory.gay>
---
@@ -11,10 +11,10 @@ Signed-off-by: Rory& <root@rory.gay>
3 files changed, 66 insertions(+), 22 deletions(-)
diff --git a/synapse/rest/admin/rooms.py b/synapse/rest/admin/rooms.py
-index e97d076a44..09a8a01f77 100644
+index 3ff2865b96..cad8f205e3 100644
--- a/synapse/rest/admin/rooms.py
+++ b/synapse/rest/admin/rooms.py
-@@ -302,7 +302,15 @@ class ListRoomRestServlet(RestServlet):
+@@ -303,7 +303,15 @@ class ListRoomRestServlet(RestServlet):
reverse_order = True if direction == Direction.BACKWARDS else False
emma_include_tombstone = parse_boolean(
@@ -31,7 +31,7 @@ index e97d076a44..09a8a01f77 100644
)
# Return list of rooms according to parameters
-@@ -314,7 +322,9 @@ class ListRoomRestServlet(RestServlet):
+@@ -315,7 +323,9 @@ class ListRoomRestServlet(RestServlet):
search_term,
public_rooms,
empty_rooms,
@@ -43,7 +43,7 @@ index e97d076a44..09a8a01f77 100644
response = {
diff --git a/synapse/rest/client/capabilities.py b/synapse/rest/client/capabilities.py
-index 5a85a415e6..3326ead0d5 100644
+index 075c3de261..c0b0a9923f 100644
--- a/synapse/rest/client/capabilities.py
+++ b/synapse/rest/client/capabilities.py
@@ -76,6 +76,9 @@ class CapabilitiesRestServlet(RestServlet):
@@ -57,10 +57,10 @@ index 5a85a415e6..3326ead0d5 100644
}
}
diff --git a/synapse/storage/databases/main/room.py b/synapse/storage/databases/main/room.py
-index 7623208c28..08735e1fbb 100644
+index 68c2edfc14..e427ffa78a 100644
--- a/synapse/storage/databases/main/room.py
+++ b/synapse/storage/databases/main/room.py
-@@ -606,6 +606,8 @@ class RoomWorkerStore(CacheInvalidationWorkerStore):
+@@ -780,6 +780,8 @@ class RoomWorkerStore(CacheInvalidationWorkerStore):
public_rooms: bool | None,
empty_rooms: bool | None,
emma_include_tombstone: bool = False,
@@ -69,7 +69,7 @@ index 7623208c28..08735e1fbb 100644
) -> tuple[list[dict[str, Any]], int]:
"""Function to retrieve a paginated list of rooms as json.
-@@ -626,10 +628,13 @@ class RoomWorkerStore(CacheInvalidationWorkerStore):
+@@ -800,10 +802,13 @@ class RoomWorkerStore(CacheInvalidationWorkerStore):
if false, empty rooms are excluded from the query. When it is
none (the default), both empty rooms and none-empty rooms are queried.
emma_include_tombstone: If true, include tombstone events in the results.
@@ -83,7 +83,7 @@ index 7623208c28..08735e1fbb 100644
# Filter room names by a string
filter_ = []
where_args = []
-@@ -799,35 +804,61 @@ class RoomWorkerStore(CacheInvalidationWorkerStore):
+@@ -973,35 +978,61 @@ class RoomWorkerStore(CacheInvalidationWorkerStore):
_get_rooms_paginate_txn,
)
@@ -166,5 +166,5 @@ index 7623208c28..08735e1fbb 100644
return result
--
-2.52.0
+2.53.0
diff --git a/packages/overlays/matrix-synapse/patches/0019-Allow-overriding-max-background-task-count.patch b/packages/overlays/matrix-synapse/patches/0019-Allow-overriding-max-background-task-count.patch
index 3b7019a..bc1c344 100644
--- a/packages/overlays/matrix-synapse/patches/0019-Allow-overriding-max-background-task-count.patch
+++ b/packages/overlays/matrix-synapse/patches/0019-Allow-overriding-max-background-task-count.patch
@@ -1,7 +1,7 @@
-From 885576e816a6f888a7e294a717362f630c75cc6a Mon Sep 17 00:00:00 2001
+From 19d1e97075b24788daaf2895da3b46762b461ab3 Mon Sep 17 00:00:00 2001
From: Rory& <root@rory.gay>
Date: Tue, 28 Oct 2025 00:01:45 +0100
-Subject: [PATCH 19/25] Allow overriding max background task count
+Subject: [PATCH 19/19] Allow overriding max background task count
Signed-off-by: Rory& <root@rory.gay>
---
@@ -31,7 +31,7 @@ index 13c9c4dba0..a8add434d2 100644
# to the old method.
if "rc_message" in config:
diff --git a/synapse/util/task_scheduler.py b/synapse/util/task_scheduler.py
-index e5cfc85a37..2aaf7a017f 100644
+index c1790fd3ae..a083e5b694 100644
--- a/synapse/util/task_scheduler.py
+++ b/synapse/util/task_scheduler.py
@@ -142,6 +142,12 @@ class TaskScheduler:
@@ -48,5 +48,5 @@ index e5cfc85a37..2aaf7a017f 100644
self,
function: Callable[
--
-2.52.0
+2.53.0
diff --git a/packages/overlays/matrix-synapse/patches/0020-max-and-min-were-probably-switched.-Set-max-to-arbit.patch b/packages/overlays/matrix-synapse/patches/0020-max-and-min-were-probably-switched.-Set-max-to-arbit.patch
deleted file mode 100644
index 3fa292e..0000000
--- a/packages/overlays/matrix-synapse/patches/0020-max-and-min-were-probably-switched.-Set-max-to-arbit.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From bf1ab7b6b7bdfda9329ca1952b244162edf90aa9 Mon Sep 17 00:00:00 2001
-From: Jason Little <j.little@famedly.com>
-Date: Fri, 2 Jan 2026 12:48:22 -0600
-Subject: [PATCH 20/25] max() and min() were probably switched. Set max to
- arbitrary 15 minutes, continue logging at durations greater than 10 minutes
-
----
- synapse/handlers/worker_lock.py | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/synapse/handlers/worker_lock.py b/synapse/handlers/worker_lock.py
-index 1537a18cc0..82dd896d5a 100644
---- a/synapse/handlers/worker_lock.py
-+++ b/synapse/handlers/worker_lock.py
-@@ -275,8 +275,8 @@ class WaitingLock:
-
- def _get_next_retry_interval(self) -> float:
- next = self._retry_interval
-- self._retry_interval = max(5, next * 2)
-- if self._retry_interval > Duration(minutes=10).as_secs(): # >7 iterations
-+ self._retry_interval = min(Duration(minutes=15).as_secs(), next * 2)
-+ if self._retry_interval > Duration(minutes=10).as_secs(): # >12 iterations
- logger.warning(
- "Lock timeout is getting excessive: %ss. There may be a deadlock.",
- self._retry_interval,
-@@ -362,8 +362,8 @@ class WaitingMultiLock:
-
- def _get_next_retry_interval(self) -> float:
- next = self._retry_interval
-- self._retry_interval = max(5, next * 2)
-- if self._retry_interval > Duration(minutes=10).as_secs(): # >7 iterations
-+ self._retry_interval = min(Duration(minutes=15).as_secs(), next * 2)
-+ if self._retry_interval > Duration(minutes=10).as_secs(): # >12 iterations
- logger.warning(
- "Lock timeout is getting excessive: %ss. There may be a deadlock.",
- self._retry_interval,
---
-2.52.0
-
diff --git a/packages/overlays/matrix-synapse/patches/0021-changelog.patch b/packages/overlays/matrix-synapse/patches/0021-changelog.patch
deleted file mode 100644
index 40cf414..0000000
--- a/packages/overlays/matrix-synapse/patches/0021-changelog.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-From 5608626043f1a410b1ec426f58e77a7259f68186 Mon Sep 17 00:00:00 2001
-From: Jason Little <j.little@famedly.com>
-Date: Tue, 20 Jan 2026 06:42:18 -0600
-Subject: [PATCH 21/25] changelog
-
----
- changelog.d/19394.bugfix | 1 +
- 1 file changed, 1 insertion(+)
- create mode 100644 changelog.d/19394.bugfix
-
-diff --git a/changelog.d/19394.bugfix b/changelog.d/19394.bugfix
-new file mode 100644
-index 0000000000..eb93fffe15
---- /dev/null
-+++ b/changelog.d/19394.bugfix
-@@ -0,0 +1 @@
-+Prevent excessively long numbers for the retry interval of `WorkerLock`s. Contributed by Famedly.
---
-2.52.0
-
diff --git a/packages/overlays/matrix-synapse/patches/0022-Update-changelog.d-19394.bugfix.patch b/packages/overlays/matrix-synapse/patches/0022-Update-changelog.d-19394.bugfix.patch
deleted file mode 100644
index db9f06b..0000000
--- a/packages/overlays/matrix-synapse/patches/0022-Update-changelog.d-19394.bugfix.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-From b4eaaae1102b713bae9799b5655e07eb43966550 Mon Sep 17 00:00:00 2001
-From: Jason Little <j.little@famedly.com>
-Date: Wed, 21 Jan 2026 06:57:34 -0600
-Subject: [PATCH 22/25] Update changelog.d/19394.bugfix
-
-Co-authored-by: Eric Eastwood <madlittlemods@gmail.com>
----
- changelog.d/19394.bugfix | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/changelog.d/19394.bugfix b/changelog.d/19394.bugfix
-index eb93fffe15..3591c0a745 100644
---- a/changelog.d/19394.bugfix
-+++ b/changelog.d/19394.bugfix
-@@ -1 +1 @@
--Prevent excessively long numbers for the retry interval of `WorkerLock`s. Contributed by Famedly.
-+Capped the `WorkerLock` retry interval to a maximum of 15 minutes to prevent dealing with excessively long numbers. Contributed by Famedly.
---
-2.52.0
-
diff --git a/packages/overlays/matrix-synapse/patches/0023-Adjust-for-the-retry-interval-actually-being-a-timeo.patch b/packages/overlays/matrix-synapse/patches/0023-Adjust-for-the-retry-interval-actually-being-a-timeo.patch
deleted file mode 100644
index f965483..0000000
--- a/packages/overlays/matrix-synapse/patches/0023-Adjust-for-the-retry-interval-actually-being-a-timeo.patch
+++ /dev/null
@@ -1,257 +0,0 @@
-From 13ccc96c9a41e4a80375e9be0b288d6ef9711630 Mon Sep 17 00:00:00 2001
-From: Jason Little <j.little@famedly.com>
-Date: Mon, 26 Jan 2026 10:26:38 -0600
-Subject: [PATCH 23/25] Adjust for the retry interval actually being a timeout
- interval, and only increase it when a timeout occurs
-
----
- synapse/handlers/worker_lock.py | 56 +++++++++--------
- tests/handlers/test_worker_lock.py | 99 ++++++++++++++++++++++++++----
- 2 files changed, 120 insertions(+), 35 deletions(-)
-
-diff --git a/synapse/handlers/worker_lock.py b/synapse/handlers/worker_lock.py
-index 82dd896d5a..88ecfd6318 100644
---- a/synapse/handlers/worker_lock.py
-+++ b/synapse/handlers/worker_lock.py
-@@ -208,7 +208,7 @@ class WaitingLock:
- write: bool | None
- deferred: "defer.Deferred[None]" = attr.Factory(defer.Deferred)
- _inner_lock: Lock | None = None
-- _retry_interval: float = 0.1
-+ _timeout_interval: float = 0.1
- _lock_span: "opentracing.Scope" = attr.Factory(
- lambda: start_active_span("WaitingLock.lock")
- )
-@@ -240,19 +240,23 @@ class WaitingLock:
- break
-
- try:
-- # Wait until the we get notified the lock might have been
-+ # Wait until the notification the lock might have been
- # released (by the deferred being resolved). We also
-- # periodically wake up in case the lock was released but we
-+ # periodically wake up in case the lock was released, but we
- # weren't notified.
- with PreserveLoggingContext():
-- timeout = self._get_next_retry_interval()
- await timeout_deferred(
- deferred=self.deferred,
-- timeout=timeout,
-+ timeout=self._timeout_interval,
- clock=self.clock,
- )
-- except Exception:
-- pass
-+ except defer.TimeoutError:
-+ # Only increment the timeout interval if this was an actual timeout
-+ self._timeout_interval = self._increment_timeout_interval()
-+ except Exception as e:
-+ logger.warning(
-+ "Caught an exception while waiting on WaitingLock: %r", e
-+ )
-
- return await self._inner_lock.__aenter__()
-
-@@ -273,13 +277,13 @@ class WaitingLock:
-
- return r
-
-- def _get_next_retry_interval(self) -> float:
-- next = self._retry_interval
-- self._retry_interval = min(Duration(minutes=15).as_secs(), next * 2)
-- if self._retry_interval > Duration(minutes=10).as_secs(): # >12 iterations
-+ def _increment_timeout_interval(self) -> float:
-+ next = self._timeout_interval
-+ next = min(Duration(minutes=15).as_secs(), next * 2)
-+ if next > Duration(minutes=10).as_secs(): # >12 iterations
- logger.warning(
- "Lock timeout is getting excessive: %ss. There may be a deadlock.",
-- self._retry_interval,
-+ next,
- )
- return next * random.uniform(0.9, 1.1)
-
-@@ -297,7 +301,7 @@ class WaitingMultiLock:
- deferred: "defer.Deferred[None]" = attr.Factory(defer.Deferred)
-
- _inner_lock_cm: AsyncContextManager | None = None
-- _retry_interval: float = 0.1
-+ _timeout_interval: float = 0.1
- _lock_span: "opentracing.Scope" = attr.Factory(
- lambda: start_active_span("WaitingLock.lock")
- )
-@@ -324,19 +328,23 @@ class WaitingMultiLock:
- break
-
- try:
-- # Wait until the we get notified the lock might have been
-+ # Wait until the notification the lock might have been
- # released (by the deferred being resolved). We also
-- # periodically wake up in case the lock was released but we
-+ # periodically wake up in case the lock was released, but we
- # weren't notified.
- with PreserveLoggingContext():
-- timeout = self._get_next_retry_interval()
- await timeout_deferred(
- deferred=self.deferred,
-- timeout=timeout,
-+ timeout=self._timeout_interval,
- clock=self.clock,
- )
-- except Exception:
-- pass
-+ except defer.TimeoutError:
-+ # Only increment the timeout interval if this was an actual timeout
-+ self._timeout_interval = self._increment_timeout_interval()
-+ except Exception as e:
-+ logger.warning(
-+ "Caught an exception while waiting on WaitingMultiLock: %r", e
-+ )
-
- assert self._inner_lock_cm
- await self._inner_lock_cm.__aenter__()
-@@ -360,12 +368,12 @@ class WaitingMultiLock:
-
- return r
-
-- def _get_next_retry_interval(self) -> float:
-- next = self._retry_interval
-- self._retry_interval = min(Duration(minutes=15).as_secs(), next * 2)
-- if self._retry_interval > Duration(minutes=10).as_secs(): # >12 iterations
-+ def _increment_timeout_interval(self) -> float:
-+ next = self._timeout_interval
-+ next = min(Duration(minutes=15).as_secs(), next * 2)
-+ if next > Duration(minutes=10).as_secs(): # >12 iterations
- logger.warning(
- "Lock timeout is getting excessive: %ss. There may be a deadlock.",
-- self._retry_interval,
-+ next,
- )
- return next * random.uniform(0.9, 1.1)
-diff --git a/tests/handlers/test_worker_lock.py b/tests/handlers/test_worker_lock.py
-index 61ff51ff92..3ae44d48e2 100644
---- a/tests/handlers/test_worker_lock.py
-+++ b/tests/handlers/test_worker_lock.py
-@@ -21,6 +21,7 @@
-
- import logging
- import platform
-+from unittest.mock import patch
-
- from twisted.internet import defer
- from twisted.internet.testing import MemoryReactor
-@@ -48,13 +49,47 @@ class WorkerLockTestCase(unittest.HomeserverTestCase):
- self.get_success(lock1.__aenter__())
-
- lock2 = self.worker_lock_handler.acquire_lock("name", "key")
-- d2 = defer.ensureDeferred(lock2.__aenter__())
-- self.assertNoResult(d2)
--
-- self.get_success(lock1.__aexit__(None, None, None))
-+ # Wrap the WaitingLock object, so we can detect if the timeouts are being hit
-+ with patch.object(
-+ lock2,
-+ "_increment_timeout_interval",
-+ wraps=lock2._increment_timeout_interval,
-+ ) as wrapped_lock2_increment_timeout_interval_method:
-+ d2 = defer.ensureDeferred(lock2.__aenter__())
-+ self.assertNoResult(d2)
-+
-+ # The lock should not time out here
-+ wrapped_lock2_increment_timeout_interval_method.assert_not_called()
-+ self.get_success(lock1.__aexit__(None, None, None))
-+
-+ self.get_success(d2)
-+ self.get_success(lock2.__aexit__(None, None, None))
-+
-+ def test_timeouts_for_lock_locally(self) -> None:
-+ """Test timeouts are incremented for a lock on a single worker"""
-+ lock1 = self.worker_lock_handler.acquire_lock("name", "key")
-+ self.get_success(lock1.__aenter__())
-
-- self.get_success(d2)
-- self.get_success(lock2.__aexit__(None, None, None))
-+ lock2 = self.worker_lock_handler.acquire_lock("name", "key")
-+ # Wrap the WaitingLock object, so we can detect if the timeouts are being hit
-+ with patch.object(
-+ lock2,
-+ "_increment_timeout_interval",
-+ wraps=lock2._increment_timeout_interval,
-+ ) as wrapped_lock2_increment_timeout_interval_method:
-+ d2 = defer.ensureDeferred(lock2.__aenter__())
-+ self.assertNoResult(d2)
-+
-+ # Recall that pump() will advance time of the given amount 100 times, this
-+ # amounts to about 10 seconds passing
-+ self.pump(10.0)
-+
-+ # Should be timed out 6 times, but do not fail on that exact count
-+ wrapped_lock2_increment_timeout_interval_method.assert_called()
-+ self.get_success(lock1.__aexit__(None, None, None))
-+
-+ self.get_success(d2)
-+ self.get_success(lock2.__aexit__(None, None, None))
-
- def test_lock_contention(self) -> None:
- """Test lock contention when a lot of locks wait on a single worker"""
-@@ -117,10 +152,52 @@ class WorkerLockWorkersTestCase(BaseMultiWorkerStreamTestCase):
- self.get_success(lock1.__aenter__())
-
- lock2 = worker_lock_handler.acquire_lock("name", "key")
-- d2 = defer.ensureDeferred(lock2.__aenter__())
-- self.assertNoResult(d2)
-+ # Wrap the WaitingLock object, so we can detect if the timeouts are being hit
-+ with patch.object(
-+ lock2,
-+ "_increment_timeout_interval",
-+ wraps=lock2._increment_timeout_interval,
-+ ) as wrapped_lock2_increment_timeout_interval_method:
-+ d2 = defer.ensureDeferred(lock2.__aenter__())
-+ self.assertNoResult(d2)
-+
-+ # The lock should not time out here
-+ wrapped_lock2_increment_timeout_interval_method.assert_not_called()
-+ self.get_success(lock1.__aexit__(None, None, None))
-+
-+ self.get_success(d2)
-+ self.get_success(lock2.__aexit__(None, None, None))
-+
-+ def test_timeouts_for_lock_worker(self) -> None:
-+ """Test timeouts are incremented for a lock on another worker"""
-+ worker = self.make_worker_hs(
-+ "synapse.app.generic_worker",
-+ extra_config={
-+ "redis": {"enabled": True},
-+ },
-+ )
-+ worker_lock_handler = worker.get_worker_locks_handler()
-
-- self.get_success(lock1.__aexit__(None, None, None))
-+ lock1 = self.main_worker_lock_handler.acquire_lock("name", "key")
-+ self.get_success(lock1.__aenter__())
-
-- self.get_success(d2)
-- self.get_success(lock2.__aexit__(None, None, None))
-+ lock2 = worker_lock_handler.acquire_lock("name", "key")
-+ # Wrap the WaitingLock object, so we can detect if the timeouts are being hit
-+ with patch.object(
-+ lock2,
-+ "_increment_timeout_interval",
-+ wraps=lock2._increment_timeout_interval,
-+ ) as wrapped_lock2_increment_timeout_interval_method:
-+ d2 = defer.ensureDeferred(lock2.__aenter__())
-+ self.assertNoResult(d2)
-+
-+ # Recall that pump() will advance time of the given amount 100 times, this
-+ # amounts to about 10 seconds passing
-+ self.pump(0.1)
-+
-+ # Should be timed out 6 times, but do not fail on that exact count
-+ wrapped_lock2_increment_timeout_interval_method.assert_called()
-+ self.get_success(lock1.__aexit__(None, None, None))
-+
-+ self.get_success(d2)
-+ self.get_success(lock2.__aexit__(None, None, None))
---
-2.52.0
-
diff --git a/packages/overlays/matrix-synapse/patches/0024-unecessarily-long-pump-in-test-left-over-from-testin.patch b/packages/overlays/matrix-synapse/patches/0024-unecessarily-long-pump-in-test-left-over-from-testin.patch
deleted file mode 100644
index 3a75bc6..0000000
--- a/packages/overlays/matrix-synapse/patches/0024-unecessarily-long-pump-in-test-left-over-from-testin.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From 6a18e62bcf4d1bd21b4105495c10f5deaf8f902a Mon Sep 17 00:00:00 2001
-From: Jason Little <j.little@famedly.com>
-Date: Mon, 26 Jan 2026 11:18:29 -0600
-Subject: [PATCH 24/25] unecessarily long pump() in test, left over from
- testing logging
-
----
- tests/handlers/test_worker_lock.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/tests/handlers/test_worker_lock.py b/tests/handlers/test_worker_lock.py
-index 3ae44d48e2..c5c3ce22ef 100644
---- a/tests/handlers/test_worker_lock.py
-+++ b/tests/handlers/test_worker_lock.py
-@@ -82,7 +82,7 @@ class WorkerLockTestCase(unittest.HomeserverTestCase):
-
- # Recall that pump() will advance time of the given amount 100 times, this
- # amounts to about 10 seconds passing
-- self.pump(10.0)
-+ self.pump(0.1)
-
- # Should be timed out 6 times, but do not fail on that exact count
- wrapped_lock2_increment_timeout_interval_method.assert_called()
---
-2.52.0
-
diff --git a/packages/overlays/matrix-synapse/patches/0025-adjust-changelog-again.patch b/packages/overlays/matrix-synapse/patches/0025-adjust-changelog-again.patch
deleted file mode 100644
index fabaeff..0000000
--- a/packages/overlays/matrix-synapse/patches/0025-adjust-changelog-again.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-From facc7fb4494360dcd96099fcbdb223c5933e6321 Mon Sep 17 00:00:00 2001
-From: Jason Little <j.little@famedly.com>
-Date: Mon, 26 Jan 2026 11:18:38 -0600
-Subject: [PATCH 25/25] adjust changelog(again)
-
----
- changelog.d/19394.bugfix | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/changelog.d/19394.bugfix b/changelog.d/19394.bugfix
-index 3591c0a745..02131d89ba 100644
---- a/changelog.d/19394.bugfix
-+++ b/changelog.d/19394.bugfix
-@@ -1 +1 @@
--Capped the `WorkerLock` retry interval to a maximum of 15 minutes to prevent dealing with excessively long numbers. Contributed by Famedly.
-+Capped the `WorkerLock` time out interval to a maximum of 15 minutes to prevent dealing with excessively long numbers and prevent logging when the retry is not an actual time out. Contributed by Famedly.
---
-2.52.0
-
diff --git a/prebuild.sh b/prebuild.sh
index 74357cf..b3a3e99 100755
--- a/prebuild.sh
+++ b/prebuild.sh
@@ -11,7 +11,7 @@ fi
CONFIG=$1
DERIVATION=".#nixosConfigurations.${CONFIG}.config.system.build.toplevel"
-EXTRA_NIX_FLAGS="-vL --accept-flake-config --keep-going --show-trace --option allow-import-from-derivation false"
+EXTRA_NIX_FLAGS="-vL --accept-flake-config --keep-going --show-trace --option allow-import-from-derivation false -j 128"
EXTRA_NIXOS_REBUILD_FLAGS="--sudo --no-reexec --offline" # legacy: --use-remote-sudo --fast
[ -f "host/${CONFIG}/hooks/pre-rebuild.sh" ] && echo "<=== RUNNING PRE-REBUILD HOOK AT host/${CONFIG}/hooks/pre-rebuild.sh ===>" && host/${CONFIG}/hooks/pre-rebuild.sh
|