From ffefe17d31c8cd219a83991b5e978fd15954f6af Mon Sep 17 00:00:00 2001 From: linsui Date: Tue, 8 Nov 2022 01:08:53 +0800 Subject: [PATCH] element-web: add wrapper --- .../element/element-web.nix | 134 ++++++++++-------- 1 file changed, 77 insertions(+), 57 deletions(-) diff --git a/pkgs/applications/networking/instant-messengers/element/element-web.nix b/pkgs/applications/networking/instant-messengers/element/element-web.nix index 92130d30990..864c70f1917 100644 --- a/pkgs/applications/networking/instant-messengers/element/element-web.nix +++ b/pkgs/applications/networking/instant-messengers/element/element-web.nix @@ -18,73 +18,93 @@ let disable_guests = true; # disable automatic guest account registration at matrix.org piwik = false; # disable analytics }; - configOverrides = writeText "element-config-overrides.json" (builtins.toJSON (noPhoningHome // conf)); -in stdenv.mkDerivation rec { - pname = "element-web"; - inherit (pinData) version; + unwrapped = stdenv.mkDerivation rec { + pname = "element-web"; + inherit (pinData) version; - src = fetchFromGitHub { - owner = "vector-im"; - repo = pname; - rev = "v${version}"; - sha256 = pinData.webSrcHash; + src = fetchFromGitHub { + owner = "vector-im"; + repo = pname; + rev = "v${version}"; + sha256 = pinData.webSrcHash; + }; + + offlineCache = fetchYarnDeps { + yarnLock = src + "/yarn.lock"; + sha256 = pinData.webYarnHash; + }; + + nativeBuildInputs = [ yarn fixup_yarn_lock jq nodejs ]; + + configurePhase = '' + runHook preConfigure + + export HOME=$PWD/tmp + # with the update of openssl3, some key ciphers are not supported anymore + # this flag will allow those codecs again as a workaround + # see https://medium.com/the-node-js-collection/node-js-17-is-here-8dba1e14e382#5f07 + # and https://github.com/vector-im/element-web/issues/21043 + export NODE_OPTIONS=--openssl-legacy-provider + mkdir -p $HOME + + fixup_yarn_lock yarn.lock + yarn config --offline set yarn-offline-mirror $offlineCache + yarn install --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive + patchShebangs node_modules + + runHook postConfigure + ''; + + buildPhase = '' + runHook preBuild + + export VERSION=${version} + yarn build:res --offline + yarn build:module_system --offline + yarn build:bundle --offline + + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + + cp -R webapp $out + cp ${jitsi-meet}/libs/external_api.min.js $out/jitsi_external_api.min.js + echo "${version}" > "$out/version" + jq -s '.[0] * $conf' "config.sample.json" --argjson "conf" '${builtins.toJSON noPhoningHome}' > "$out/config.json" + + runHook postInstall + ''; + + meta = { + description = "A glossy Matrix collaboration client for the web"; + homepage = "https://element.io/"; + changelog = "https://github.com/vector-im/element-web/blob/v${version}/CHANGELOG.md"; + maintainers = lib.teams.matrix.members; + license = lib.licenses.asl20; + platforms = lib.platforms.all; + }; }; +in +if (conf == { }) then unwrapped else +stdenv.mkDerivation rec { + pname = "${unwrapped.pname}-wrapped"; + inherit (unwrapped) version meta; - offlineCache = fetchYarnDeps { - yarnLock = src + "/yarn.lock"; - sha256 = pinData.webYarnHash; - }; + dontUnpack = true; - nativeBuildInputs = [ yarn fixup_yarn_lock jq nodejs ]; - - configurePhase = '' - runHook preConfigure - - export HOME=$PWD/tmp - # with the update of openssl3, some key ciphers are not supported anymore - # this flag will allow those codecs again as a workaround - # see https://medium.com/the-node-js-collection/node-js-17-is-here-8dba1e14e382#5f07 - # and https://github.com/vector-im/element-web/issues/21043 - export NODE_OPTIONS=--openssl-legacy-provider - mkdir -p $HOME - - fixup_yarn_lock yarn.lock - yarn config --offline set yarn-offline-mirror $offlineCache - yarn install --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive - patchShebangs node_modules - - runHook postConfigure - ''; - - buildPhase = '' - runHook preBuild - - export VERSION=${version} - yarn build:res --offline - yarn build:module_system --offline - yarn build:bundle --offline - - runHook postBuild - ''; + nativeBuildInputs = [ jq ]; installPhase = '' runHook preInstall - cp -R webapp $out - cp ${jitsi-meet}/libs/external_api.min.js $out/jitsi_external_api.min.js - echo "${version}" > "$out/version" - jq -s '.[0] * .[1]' "config.sample.json" "${configOverrides}" > "$out/config.json" + mkdir -p $out + ln -s ${unwrapped}/* $out + rm $out/config.json + jq -s '.[0] * $conf' "${unwrapped}/config.json" --argjson "conf" '${builtins.toJSON conf}' > "$out/config.json" runHook postInstall ''; - - meta = { - description = "A glossy Matrix collaboration client for the web"; - homepage = "https://element.io/"; - changelog = "https://github.com/vector-im/element-web/blob/v${version}/CHANGELOG.md"; - maintainers = lib.teams.matrix.members; - license = lib.licenses.asl20; - platforms = lib.platforms.all; - }; }