From aac8165a7f2034e189afda3777afbd24887fb05d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C2=B7=F0=90=91=91=F0=90=91=B4=F0=90=91=95=F0=90=91=91?= =?UTF-8?q?=F0=90=91=A9=F0=90=91=A4?= Date: Sat, 28 Mar 2026 12:52:15 +0700 Subject: [PATCH 1/4] =?UTF-8?q?ejabberd:=2026.02=20=E2=86=92=2026.03?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkgs/by-name/ej/ejabberd/package.nix | 5 +- pkgs/by-name/ej/ejabberd/rebar-deps.nix | 138 +++++++++--------------- 2 files changed, 55 insertions(+), 88 deletions(-) diff --git a/pkgs/by-name/ej/ejabberd/package.nix b/pkgs/by-name/ej/ejabberd/package.nix index 383bdcf4417da..bdec28abbf8a0 100644 --- a/pkgs/by-name/ej/ejabberd/package.nix +++ b/pkgs/by-name/ej/ejabberd/package.nix @@ -76,7 +76,6 @@ let builder = lib.makeOverridable buildRebar3; overrides = final: prev: { - jiffy = prev.jiffy.override { buildPlugins = [ beamPackages.pc ]; }; cache_tab = prev.cache_tab.override { buildPlugins = [ beamPackages.pc ]; }; mqtree = prev.mqtree.override { buildPlugins = [ beamPackages.pc ]; }; stringprep = prev.stringprep.override { buildPlugins = [ beamPackages.pc ]; }; @@ -140,7 +139,7 @@ let in stdenv.mkDerivation (finalAttrs: { pname = "ejabberd"; - version = "26.02"; + version = "26.03"; nativeBuildInputs = [ makeWrapper @@ -170,7 +169,7 @@ stdenv.mkDerivation (finalAttrs: { owner = "processone"; repo = "ejabberd"; tag = finalAttrs.version; - hash = "sha256-izP7Rz65Lr4LDOCzZPdDWb3TyXDSTd/8gOPSfovVGM8="; + hash = "sha256-M38niXEW++SPAvqQ2cqEd23+w7lBDO5EPgu/QRdYbXo="; }; passthru.tests = { diff --git a/pkgs/by-name/ej/ejabberd/rebar-deps.nix b/pkgs/by-name/ej/ejabberd/rebar-deps.nix index f8cb854d44d61..8c09cf4bd54eb 100644 --- a/pkgs/by-name/ej/ejabberd/rebar-deps.nix +++ b/pkgs/by-name/ej/ejabberd/rebar-deps.nix @@ -12,53 +12,23 @@ in let self = packages // (overrides self packages); packages = with self; { - unicode_util_compat = builder { - name = "unicode_util_compat"; - version = "0.7.1"; - src = fetchHex { - pkg = "unicode_util_compat"; - version = "0.7.1"; - sha256 = "sha256-s6kXhUzjriM2GXRK0eAQLgVnMTZ3b7L6diNPPgOyNkI="; - }; - beamDeps = [ ]; - }; - jiffy = builder { - name = "jiffy"; - version = "1.1.2"; - src = fetchHex { - pkg = "jiffy"; - version = "1.1.2"; - sha256 = "sha256-u2G8Qqcgu9M8sJpBDki7eaYQEsdMuLPnXybZiEhc84E="; - }; - beamDeps = [ ]; - }; - base64url = builder { - name = "base64url"; - version = "1.0.1"; - src = fetchHex { - pkg = "base64url"; - version = "1.0.1"; - sha256 = "sha256-+bOt1HMaAqmwQQOYtHWzPnVmppU2Ujemve4btEdxn1w="; - }; - beamDeps = [ ]; - }; yconf = builder { name = "yconf"; - version = "1.0.22"; + version = "1.0.23"; src = fetchHex { pkg = "yconf"; - version = "1.0.22"; - sha256 = "sha256-rKg0V86r5wdWSEtch7p7GVX1EdSZFoaH6uqnwwDoV/E="; + version = "1.0.23"; + sha256 = "sha256-JbTft1MoAmrKp3TPXG+4fUi1XuvOYw3aozYkQdrDFDc="; }; beamDeps = [ fast_yaml ]; }; xmpp = builder { name = "xmpp"; - version = "1.12.0"; + version = "1.13.1"; src = fetchHex { pkg = "xmpp"; - version = "1.12.0"; - sha256 = "sha256-AUuuc2WfuiVncesAe8U0hhiscn3R0QuasVqf74cWIsg="; + version = "1.13.1"; + sha256 = "sha256-oCTu98y094uftS431jhaV73RUL515Q1Ru8uvOamriD0="; }; beamDeps = [ ezlib @@ -71,11 +41,11 @@ let }; stun = builder { name = "stun"; - version = "1.2.21"; + version = "1.2.22"; src = fetchHex { pkg = "stun"; - version = "1.2.21"; - sha256 = "sha256-PX/o77nQWyQKaqmmv4uLe/8tgCiV0XBEPFiJh9weEtk="; + version = "1.2.22"; + sha256 = "sha256-NAi0sR1SN6CI9TsmCgaUDDCxb0pICUiS1qkgThZDGIo="; }; beamDeps = [ fast_tls @@ -84,11 +54,11 @@ let }; stringprep = builder { name = "stringprep"; - version = "1.0.33"; + version = "1.0.34"; src = fetchHex { pkg = "stringprep"; - version = "1.0.33"; - sha256 = "sha256-lvizC8UIh/YFsztGvKHSSMGah5MZuMSCeQ47TaXamMA="; + version = "1.0.34"; + sha256 = "sha256-J+eOo3GIF2TgVvvoRdOtMEdA/14xMbwfOKZvC6qMm0c="; }; beamDeps = [ p1_utils ]; }; @@ -114,23 +84,23 @@ let }; p1_utils = builder { name = "p1_utils"; - version = "1.0.28"; + version = "1.0.29"; src = fetchHex { pkg = "p1_utils"; - version = "1.0.28"; - sha256 = "sha256-xJvUS8SkCtmWaRr4Jt1+CqVtTQzXMIFxkKH4TRp/ADM="; + version = "1.0.29"; + sha256 = "sha256-IHFCHK21uP/xFOkdTZRPFIUcMyOR9uk/xQEarWSr4bk="; }; beamDeps = [ ]; }; p1_pgsql = builder { name = "p1_pgsql"; - version = "1.1.38"; + version = "1.1.41"; src = fetchHex { pkg = "p1_pgsql"; - version = "1.1.38"; - sha256 = "sha256-Bs9kQwCBeOujh7ou6STTYgBBuuTaGyyWloAoSgXMdZ4="; + version = "1.1.41"; + sha256 = "sha256-Ju4quj1FBGTt1LP/nassalP8ILv9Mwppc5grkGUEoXI="; }; - beamDeps = [ xmpp ]; + beamDeps = [ stringprep ]; }; p1_oauth2 = builder { name = "p1_oauth2"; @@ -144,37 +114,35 @@ let }; p1_mysql = builder { name = "p1_mysql"; - version = "1.0.27"; + version = "1.0.28"; src = fetchHex { pkg = "p1_mysql"; - version = "1.0.27"; - sha256 = "sha256-BmBR8kACenZzJUfmnZagl05w3BTe2UU77yYyIYQe2ps="; + version = "1.0.28"; + sha256 = "sha256-bk0A6OzlBbpQkcjas67+QVzy2Db/OVCDRMNSezZtmRk="; }; beamDeps = [ ]; }; p1_acme = builder { name = "p1_acme"; - version = "1.0.30"; + version = "1.0.31"; src = fetchHex { pkg = "p1_acme"; - version = "1.0.30"; - sha256 = "sha256-KTXiCRa4BtOxFmlTpNkKaQ/YB4EJYUD+XKH2XVnr1oo="; + version = "1.0.31"; + sha256 = "sha256-m1kiqQq5TaWInmTeXMrTrcbmim08P7cI3VA3V7Iy2xw="; }; beamDeps = [ - base64url idna - jiffy jose yconf ]; }; mqtree = builder { name = "mqtree"; - version = "1.0.19"; + version = "1.0.20"; src = fetchHex { pkg = "mqtree"; - version = "1.0.19"; - sha256 = "sha256-yBBlcVxJoYgoEvgKWuLYQugN0/LRMFMN81mQJIv4zjw="; + version = "1.0.20"; + sha256 = "sha256-XsDge5xIp4QGSWAL+W4UC0++nlAX4d3T6JjhXAo4PtA="; }; beamDeps = [ p1_utils ]; }; @@ -200,61 +168,61 @@ let }; idna = builder { name = "idna"; - version = "6.1.1"; + version = "7.1.0"; src = fetchHex { pkg = "idna"; - version = "6.1.1"; - sha256 = "sha256-kjdut4lEEu0ZrEdeSob3tBPBufu1vRbczVeTQVeUTOo="; + version = "7.1.0"; + sha256 = "sha256-aulZoCW/Nt9hqMq4UI2WVIkbVCaoTETYLer/1t34xx8="; }; - beamDeps = [ unicode_util_compat ]; + beamDeps = [ ]; }; fast_yaml = builder { name = "fast_yaml"; - version = "1.0.39"; + version = "1.0.40"; src = fetchHex { pkg = "fast_yaml"; - version = "1.0.39"; - sha256 = "sha256-JMe5q54rkmnWTkX0oqEoCWatsX0x5jNlz9PuJ3+wp40="; + version = "1.0.40"; + sha256 = "sha256-J3BcKZAsHG8yaLqb84fV+pKLLmVbUxEPpHuOR20ys4Y="; }; beamDeps = [ p1_utils ]; }; fast_xml = builder { name = "fast_xml"; - version = "1.1.57"; + version = "1.1.58"; src = fetchHex { pkg = "fast_xml"; - version = "1.1.57"; - sha256 = "sha256-7sNOkK2sr+Rn1d2rY1oBTe1zuYtAYVVLLRlyFz2SnDk="; + version = "1.1.58"; + sha256 = "sha256-o21uA6OYxTuhiekSv0x1WaNwSsY8UFDxJtR0FAGLTKA="; }; beamDeps = [ p1_utils ]; }; fast_tls = builder { name = "fast_tls"; - version = "1.1.25"; + version = "1.1.26"; src = fetchHex { pkg = "fast_tls"; - version = "1.1.25"; - sha256 = "sha256-WeGDtXQOZw4CuKpr5nO153eeX+W/zGef4tSZPRlJqCE="; + version = "1.1.26"; + sha256 = "sha256-aw1N0jCQN1Zeuqms858CgI9fghWjkQGh2jPCpbG1mz8="; }; beamDeps = [ p1_utils ]; }; ezlib = builder { name = "ezlib"; - version = "1.0.15"; + version = "1.0.16"; src = fetchHex { pkg = "ezlib"; - version = "1.0.15"; - sha256 = "sha256-3RS6bBJSGvXP5pI+c+PVRfSgiX3Ga/q1KH+7euOWLqs="; + version = "1.0.16"; + sha256 = "sha256-tIGVQEA9Hst+rmRf3/FCqNsrR22JMojTm6u5KSIlBAU="; }; beamDeps = [ p1_utils ]; }; esip = builder { name = "esip"; - version = "1.0.59"; + version = "1.0.60"; src = fetchHex { pkg = "esip"; - version = "1.0.59"; - sha256 = "sha256-C98uPDSdwLFE8XMVAynmdcalGsRz16Cy42IkX6rT++Y="; + version = "1.0.60"; + sha256 = "sha256-BgTL1LvI2hWSwAgwz+MGIM5PZlurEZnRSjtF+v0DFE8="; }; beamDeps = [ fast_tls @@ -294,21 +262,21 @@ let }; eimp = builder { name = "eimp"; - version = "1.0.26"; + version = "1.0.27"; src = fetchHex { pkg = "eimp"; - version = "1.0.26"; - sha256 = "sha256-2W1OhXK538QPJx5H8MsdiEk3O8mKISIyaHgXZe1SBEw="; + version = "1.0.27"; + sha256 = "sha256-PH6D4pO8+vUKG/BU/Etit7jEhKbkIY45dwmk0NhX8/w="; }; beamDeps = [ p1_utils ]; }; cache_tab = builder { name = "cache_tab"; - version = "1.0.33"; + version = "1.0.34"; src = fetchHex { pkg = "cache_tab"; - version = "1.0.33"; - sha256 = "sha256-QlgAnrBQsiqr4MhI4jC7pYQBpolcWML/dN+2NePDWQA="; + version = "1.0.34"; + sha256 = "sha256-DbnzF/OUHBfJ+OqBJeJe+ie77Uy/JKQsQm+tp0yCtpI="; }; beamDeps = [ p1_utils ]; }; From 1912549dcdc38fb6aaae2f6b5cdb05eef8efaaf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C2=B7=F0=90=91=91=F0=90=91=B4=F0=90=91=95=F0=90=91=91?= =?UTF-8?q?=F0=90=91=A9=F0=90=91=A4?= Date: Sat, 28 Mar 2026 14:13:15 +0700 Subject: [PATCH 2/4] ejabberd: update script tweak MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit • quote escape for safety • remove unneeded Bashism in `[[` --- pkgs/by-name/ej/ejabberd/update.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkgs/by-name/ej/ejabberd/update.sh b/pkgs/by-name/ej/ejabberd/update.sh index 3727293d77b9c..11ca5a5c4c204 100755 --- a/pkgs/by-name/ej/ejabberd/update.sh +++ b/pkgs/by-name/ej/ejabberd/update.sh @@ -8,17 +8,17 @@ version=$(curl -s ${GITHUB_TOKEN:+-u ":$GITHUB_TOKEN"} \ https://api.github.com/repos/processone/ejabberd/releases/latest | jq -e -r .tag_name) old_version=$(nix-instantiate --eval -A ejabberd.version | jq -e -r) -if [[ $version == "$old_version" ]]; then +if [ "$version" = "$old_version" ]; then echo "New version same as old version, nothing to do." >&2 exit 0 fi update-source-version ejabberd "$version" -sqlite=$(nix-build . -A sqlite.dev --no-link) +sqlite="$(nix-build . -A sqlite.dev --no-link)" rebardeps=$(dirname -- "$(readlink -f -- "${BASH_SOURCE[0]}")")/rebar-deps.nix -tmpdir=$(mktemp -d) -cp -r $(nix-build . --no-out-link -A ejabberd.src)/. "$tmpdir" +tmpdir="$(mktemp -d)" +cp -r "$(nix-build . --no-out-link -A ejabberd.src)/." "$tmpdir" cd "$tmpdir" ./autogen.sh From c159239b98b2905a3bf8a5c30d10d8de418e381e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C2=B7=F0=90=91=91=F0=90=91=B4=F0=90=91=95=F0=90=91=91?= =?UTF-8?q?=F0=90=91=A9=F0=90=91=A4?= Date: Mon, 30 Mar 2026 22:28:37 +0700 Subject: [PATCH 3/4] ejabberd: withBootstrap flag for mod_invite MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Not ideal to pull in the npm toolchain just for getting some static files (this is upstream’s call), but is less maintenance than trying to track the versions ourselves. This also means now that if you don’t plan to use the built-in mod_invites page, you can opt out of the toolchain + dependency. --- pkgs/by-name/ej/ejabberd/package.nix | 44 ++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/pkgs/by-name/ej/ejabberd/package.nix b/pkgs/by-name/ej/ejabberd/package.nix index bdec28abbf8a0..b33f05917d4fc 100644 --- a/pkgs/by-name/ej/ejabberd/package.nix +++ b/pkgs/by-name/ej/ejabberd/package.nix @@ -17,8 +17,11 @@ gd, autoreconfHook, gawk, + applyPatches, fetchFromGitHub, fetchgit, + fetchNpmDeps, + fetchpatch2, beamPackages, nixosTests, withMysql ? false, @@ -35,6 +38,9 @@ withRedis ? false, withImagemagick ? false, imagemagick, + withBootstrap ? true, # used for the built-in mod_invites page + nodejs, + npmHooks, }: let @@ -136,6 +142,7 @@ let "ezlib" ]; + npmToolingUsed = withBootstrap; in stdenv.mkDerivation (finalAttrs: { pname = "ejabberd"; @@ -150,6 +157,10 @@ stdenv.mkDerivation (finalAttrs: { rebar3_hex ]; }) + ] + ++ lib.optionals npmToolingUsed [ + nodejs + npmHooks.npmConfigHook ]; buildInputs = [ @@ -165,6 +176,25 @@ stdenv.mkDerivation (finalAttrs: { ++ lib.optional withLua allBeamDeps.luerl ++ lib.optional withRedis allBeamDeps.eredis; + npmDeps = + if npmToolingUsed then + (fetchNpmDeps { + name = "${finalAttrs.pname}-${finalAttrs.version}-npm-deps"; + src = + if builtins.isNull finalAttrs.patches || builtins.length finalAttrs.patches <= 0 then + finalAttrs.src + else + # A bit of a hack, but if the package*.json files are patched, + # fetchNpmDeps will be out of sync + applyPatches { + inherit (finalAttrs) src patches; + name = "${finalAttrs.pname}-${finalAttrs.version}-patched"; + }; + hash = "sha256-MTyoc8ozrCi3W0CXmxyLpyU8v+vlUjcbLnv/1ev/Qqo="; + }) + else + null; + src = fetchFromGitHub { owner = "processone"; repo = "ejabberd"; @@ -172,6 +202,15 @@ stdenv.mkDerivation (finalAttrs: { hash = "sha256-M38niXEW++SPAvqQ2cqEd23+w7lBDO5EPgu/QRdYbXo="; }; + patches = [ + (fetchpatch2 { + # Makes Bootstrap optional, drops jQuery + # https://github.com/processone/ejabberd/pull/4558 + url = "https://patch-diff.githubusercontent.com/raw/processone/ejabberd/pull/4558.patch"; + hash = "sha256-ETl2Zf7O6roxtf7DthJqL+tj4RvEfW94735sGM8x/GM="; + }) + ]; + passthru.tests = { inherit (nixosTests) ejabberd; }; @@ -186,6 +225,7 @@ stdenv.mkDerivation (finalAttrs: { (lib.enableFeature withLua "lua") (lib.enableFeature withTools "tools") (lib.enableFeature withRedis "redis") + (lib.enableFeature withBootstrap "bootstrap") ] ++ lib.optional withSqlite "--with-sqlite3=${sqlite.dev}"; @@ -198,6 +238,10 @@ stdenv.mkDerivation (finalAttrs: { touch _build/default/lib/.built ''; + preBuild = lib.optionalString npmToolingUsed /* sh */ '' + npm run postinstall + ''; + env.REBAR_IGNORE_DEPS = 1; postInstall = '' From d69420a026fcc6077c30b5e0094d0811105745f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C2=B7=F0=90=91=91=F0=90=91=B4=F0=90=91=95=F0=90=91=91?= =?UTF-8?q?=F0=90=91=A9=F0=90=91=A4?= Date: Tue, 14 Apr 2026 23:55:03 +0700 Subject: [PATCH 4/4] =?UTF-8?q?ejabberd:=2026.03=20=E2=86=92=2026.04?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit as the patches are merged, the patch juggling can be removed --- pkgs/by-name/ej/ejabberd/package.nix | 29 +++++-------------------- pkgs/by-name/ej/ejabberd/rebar-deps.nix | 12 +++++----- 2 files changed, 11 insertions(+), 30 deletions(-) diff --git a/pkgs/by-name/ej/ejabberd/package.nix b/pkgs/by-name/ej/ejabberd/package.nix index b33f05917d4fc..0c15936aa3c3a 100644 --- a/pkgs/by-name/ej/ejabberd/package.nix +++ b/pkgs/by-name/ej/ejabberd/package.nix @@ -17,7 +17,6 @@ gd, autoreconfHook, gawk, - applyPatches, fetchFromGitHub, fetchgit, fetchNpmDeps, @@ -146,7 +145,7 @@ let in stdenv.mkDerivation (finalAttrs: { pname = "ejabberd"; - version = "26.03"; + version = "26.04"; nativeBuildInputs = [ makeWrapper @@ -178,20 +177,11 @@ stdenv.mkDerivation (finalAttrs: { npmDeps = if npmToolingUsed then - (fetchNpmDeps { + fetchNpmDeps { name = "${finalAttrs.pname}-${finalAttrs.version}-npm-deps"; - src = - if builtins.isNull finalAttrs.patches || builtins.length finalAttrs.patches <= 0 then - finalAttrs.src - else - # A bit of a hack, but if the package*.json files are patched, - # fetchNpmDeps will be out of sync - applyPatches { - inherit (finalAttrs) src patches; - name = "${finalAttrs.pname}-${finalAttrs.version}-patched"; - }; + src = finalAttrs.src; hash = "sha256-MTyoc8ozrCi3W0CXmxyLpyU8v+vlUjcbLnv/1ev/Qqo="; - }) + } else null; @@ -199,18 +189,9 @@ stdenv.mkDerivation (finalAttrs: { owner = "processone"; repo = "ejabberd"; tag = finalAttrs.version; - hash = "sha256-M38niXEW++SPAvqQ2cqEd23+w7lBDO5EPgu/QRdYbXo="; + hash = "sha256-PF65TgHvKeSEudEqqJVEotu2zgiWgGtRuNvbiyE0nwc="; }; - patches = [ - (fetchpatch2 { - # Makes Bootstrap optional, drops jQuery - # https://github.com/processone/ejabberd/pull/4558 - url = "https://patch-diff.githubusercontent.com/raw/processone/ejabberd/pull/4558.patch"; - hash = "sha256-ETl2Zf7O6roxtf7DthJqL+tj4RvEfW94735sGM8x/GM="; - }) - ]; - passthru.tests = { inherit (nixosTests) ejabberd; }; diff --git a/pkgs/by-name/ej/ejabberd/rebar-deps.nix b/pkgs/by-name/ej/ejabberd/rebar-deps.nix index 8c09cf4bd54eb..dde541668b759 100644 --- a/pkgs/by-name/ej/ejabberd/rebar-deps.nix +++ b/pkgs/by-name/ej/ejabberd/rebar-deps.nix @@ -24,11 +24,11 @@ let }; xmpp = builder { name = "xmpp"; - version = "1.13.1"; + version = "1.13.3"; src = fetchHex { pkg = "xmpp"; - version = "1.13.1"; - sha256 = "sha256-oCTu98y094uftS431jhaV73RUL515Q1Ru8uvOamriD0="; + version = "1.13.3"; + sha256 = "sha256-BWSKpNvM/uYqqnlLKSowWEY50DyR9cCGa+jDQ0tqb0g="; }; beamDeps = [ ezlib @@ -188,11 +188,11 @@ let }; fast_xml = builder { name = "fast_xml"; - version = "1.1.58"; + version = "1.1.60"; src = fetchHex { pkg = "fast_xml"; - version = "1.1.58"; - sha256 = "sha256-o21uA6OYxTuhiekSv0x1WaNwSsY8UFDxJtR0FAGLTKA="; + version = "1.1.60"; + sha256 = "sha256-z54nSd1HIEcCy3oEq1BFZC+gCW/fyc/y6cptPyq9N8U="; }; beamDeps = [ p1_utils ]; };