about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--pkgs/applications/networking/instant-messengers/element/element-web.nix136
1 files changed, 78 insertions, 58 deletions
diff --git a/pkgs/applications/networking/instant-messengers/element/element-web.nix b/pkgs/applications/networking/instant-messengers/element/element-web.nix
index 92130d309902..864c70f1917b 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;
-
-  src = fetchFromGitHub {
-    owner = "vector-im";
-    repo = pname;
-    rev = "v${version}";
-    sha256 = pinData.webSrcHash;
-  };
-
-  offlineCache = fetchYarnDeps {
-    yarnLock = src + "/yarn.lock";
-    sha256 = pinData.webYarnHash;
+  unwrapped = stdenv.mkDerivation rec {
+    pname = "element-web";
+    inherit (pinData) version;
+
+    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;
 
-  nativeBuildInputs = [ yarn fixup_yarn_lock jq nodejs ];
-
-  configurePhase = ''
-    runHook preConfigure
+  dontUnpack = true;
 
-    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;
-  };
 }