From d76c0b027368703913470287eacbfc354cff7f56 Mon Sep 17 00:00:00 2001 From: yukkop Date: Fri, 5 Jun 2026 18:55:22 +0000 Subject: [PATCH] feat: vendor element-web --- nixos/module/hectic/service/element.nix | 2 +- .../bfs.poland.xray/bfs.poland.xray.nix | 2 +- package/default.nix | 1 + package/element-web/default.nix | 108 ++++++++++++++++++ 4 files changed, 111 insertions(+), 2 deletions(-) create mode 100644 package/element-web/default.nix diff --git a/nixos/module/hectic/service/element.nix b/nixos/module/hectic/service/element.nix index 96b97bf0..89d7bc7a 100644 --- a/nixos/module/hectic/service/element.nix +++ b/nixos/module/hectic/service/element.nix @@ -31,7 +31,7 @@ in { locations."= /config.element.${matrixDomain}.json".return = "302 /config.json"; - root = pkgs.element-web.override { + root = pkgs.hectic.element-web.override { conf = { default_server_config = { "m.homeserver".base_url = "https://${matrixDomain}"; diff --git a/nixos/system/bfs.poland.xray/bfs.poland.xray.nix b/nixos/system/bfs.poland.xray/bfs.poland.xray.nix index 9427161b..78715bbd 100644 --- a/nixos/system/bfs.poland.xray/bfs.poland.xray.nix +++ b/nixos/system/bfs.poland.xray/bfs.poland.xray.nix @@ -176,7 +176,7 @@ in { locations."= /config.${elementEntryDomain}.json".return = "302 /config.json"; - root = pkgs.element-web.override { + root = pkgs.hectic.element-web.override { conf = { default_server_config = { "m.homeserver".base_url = "https://${polandEntryDomain}"; diff --git a/package/default.nix b/package/default.nix index 83ac1312..0226dd7d 100644 --- a/package/default.nix +++ b/package/default.nix @@ -145,6 +145,7 @@ in { nix-derivation-hash = pkgs.callPackage ./nix-derivation-hash {}; "sentinèlla" = pkgs.callPackage (./. + "/sentinèlla") {}; deploy = pkgs.callPackage ./deploy { inherit inputs; }; + element-web = pkgs.callPackage ./element-web {}; shellplot = pkgs.callPackage ./shellplot {}; onlinepubs2man = pkgs.callPackage ./onlinepubs2man {}; migrator = pkgs.callPackage ./migrator { inherit self; }; diff --git a/package/element-web/default.nix b/package/element-web/default.nix new file mode 100644 index 00000000..585b7abd --- /dev/null +++ b/package/element-web/default.nix @@ -0,0 +1,108 @@ +{ + lib, + stdenv, + fetchFromGitHub, + jq, + nodejs, + jitsi-meet, + fetchPnpmDeps, + pnpm_10, + pnpmConfigHook, + faketty, + config, + conf ? config.element-web.conf or { }, +}: + +let + pnpm = pnpm_10; + noPhoningHome = { + disable_guests = true; + }; + jitsi-meet-override = jitsi-meet.overrideAttrs (previousAttrs: { + meta = removeAttrs previousAttrs.meta [ "knownVulnerabilities" ]; + }); + element-web-unwrapped = stdenv.mkDerivation (finalAttrs: { + pname = "element-web"; + version = "1.12.20"; + + src = fetchFromGitHub { + owner = "element-hq"; + repo = "element-web"; + tag = "v${finalAttrs.version}"; + hash = "sha256-pbzuPgKJ0DmrDSTO7ZTDArX+Xr9k/ndAGZvQg2kMTMQ="; + }; + + pnpmDeps = fetchPnpmDeps { + pname = "element"; + inherit (finalAttrs) version src; + inherit pnpm; + fetcherVersion = 3; + hash = "sha256-snm7vaHCVX6vYrkmsz5HlYMKx5Ks3K9jvUinkJ41CU0="; + }; + + nativeBuildInputs = [ + jq + nodejs + pnpm + pnpmConfigHook + faketty + ]; + + buildPhase = '' + runHook preBuild + + cd apps/web + + export VERSION=${finalAttrs.version} + faketty pnpm run build + + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + + cp -R webapp $out + cp ${jitsi-meet-override}/libs/external_api.min.js $out/jitsi_external_api.min.js + echo "${finalAttrs.version}" > "$out/version" + jq -s '.[0] * $conf' "config.sample.json" --argjson "conf" '${builtins.toJSON noPhoningHome}' > "$out/config.json" + + runHook postInstall + ''; + + meta = { + description = "Glossy Matrix collaboration client for the web"; + homepage = "https://element.io/"; + changelog = "https://github.com/element-hq/element-web/blob/v${finalAttrs.version}/CHANGELOG.md"; + teams = [ lib.teams.matrix ]; + license = lib.licenses.agpl3Plus; + platforms = lib.platforms.all; + }; + }); +in +if conf == { } then + element-web-unwrapped +else + stdenv.mkDerivation { + pname = "${element-web-unwrapped.pname}-wrapped"; + inherit (element-web-unwrapped) version meta; + + dontUnpack = true; + + nativeBuildInputs = [ jq ]; + + installPhase = '' + runHook preInstall + + mkdir -p $out + ln -s ${element-web-unwrapped}/* $out + rm $out/config.json + jq -s '.[0] * $conf' "${element-web-unwrapped}/config.json" --argjson "conf" ${lib.escapeShellArg (builtins.toJSON conf)} > "$out/config.json" + + runHook postInstall + ''; + + passthru = { + inherit conf; + }; + }