final: prev: { element-desktop = prev.element-desktop.overrideAttrs (oldAttrs: rec { installPhase = let libPath = prev.lib.makeLibraryPath [ prev.libnotify ]; executableName = "element-desktop"; desktopItem = prev.makeDesktopItem { name = "element-desktop"; exec = "${executableName} %u"; icon = "element"; desktopName = "Element"; genericName = "Matrix Client"; comment = oldAttrs.meta.description; categories = [ "Network" "InstantMessaging" "Chat" ]; startupWMClass = "element"; mimeTypes = [ "x-scheme-handler/element" ]; }; in '' runHook preInstall # resources mkdir -p "$out/share/element" ln -s '${prev.element-web}' "$out/share/element/webapp" cp -r '.' "$out/share/element/electron" cp -r './res/img' "$out/share/element" rm -rf "$out/share/element/electron/node_modules" cp -r './node_modules' "$out/share/element/electron" cp $out/share/element/electron/lib/i18n/strings/en_EN.json $out/share/element/electron/lib/i18n/strings/en-us.json ln -s $out/share/element/electron/lib/i18n/strings/en{-us,}.json # icons for icon in $out/share/element/electron/build/icons/*.png; do mkdir -p "$out/share/icons/hicolor/$(basename $icon .png)/apps" ln -s "$icon" "$out/share/icons/hicolor/$(basename $icon .png)/apps/element.png" done # desktop item mkdir -p "$out/share" ln -s "${desktopItem}/share/applications" "$out/share/applications" # executable wrapper # LD_PRELOAD workaround for sqlcipher not found: https://github.com/matrix-org/seshat/issues/102 makeWrapper '${prev.electron}/bin/electron' "$out/bin/element-desktop" \ --set LD_PRELOAD ${prev.sqlcipher}/lib/libsqlcipher.so \ --set LD_LIBRARY_PATH "${libPath}" \ --add-flags "$out/share/element/electron" \ --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WebRTCPipeWireCapturer,WaylandWindowDecorations}}" runHook postInstall ''; }); }