diff --git a/.gitignore b/.gitignore index 1937f78..5f833c9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ release.mk /release /local-pkgbuild +bom.lock diff --git a/Makefile b/Makefile index 9e111bc..fbb47a2 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,6 @@ -.PHONY: all setup regenerate-i18n reskindex web desktop-common linux debian pacman local-pkgbuild local-pkgbuild-install windows windows-portable -.PHONY: web-release debian-release pacman-release windows-setup-release windows-unpacked-release windows-portable-release windows-release +.PHONY: all setup regenerate-i18n reskindex web desktop-common linux debian rpm pacman local-pkgbuild local-pkgbuild-install windows windows-portable +.PHONY: web-release debian-release rpm-release pacman-release windows-setup-release windows-unpacked-release windows-portable-release windows-release +.PHONY: macos-common macos macos-mas macos-release macos-mas-release icns .PHONY: clean CFGDIR ?= configs/sc @@ -19,6 +20,7 @@ OUT_WEB := $(WEB_OUT)/$(WEB_APP_NAME)-$(WEB_OUT_DIST_VERSION).tar.gz DESKTOP_OUT := element-desktop/dist OUT_DEB64 := $(DESKTOP_OUT)/$(DESKTOP_APP_NAME)_$(VERSION)_amd64.deb +OUT_RPM64 := $(DESKTOP_OUT)/$(DESKTOP_APP_NAME)-$(VERSION).x86_64.rpm OUT_PAC64 := $(DESKTOP_OUT)/$(DESKTOP_APP_NAME)-$(VERSION).pacman OUT_APPIMAGE64 := $(DESKTOP_OUT)/$(PRODUCT_NAME)-$(VERSION).AppImage OUT_TARXZ64 := $(DESKTOP_OUT)/$(DESKTOP_APP_NAME)-$(VERSION).tar.xz @@ -27,17 +29,34 @@ OUT_WIN64_PORTABLE := $(DESKTOP_OUT)/$(PRODUCT_NAME)\ $(VERSION).exe OUT_WIN64_BETTER_NAME := $(PRODUCT_NAME)_Setup_v$(VERSION).exe OUT_WIN64_UNPACKED_BETTER_NAME := $(PRODUCT_NAME)_win-unpacked_v$(VERSION).zip OUT_WIN64_PORTABLE_BETTER_NAME := $(PRODUCT_NAME)_win-portable_v$(VERSION) -OUT_MACOS := $(DESKTOP_OUT)/$(PRODUCT_NAME)-$(VERSION).dmg +OUT_MACOS := $(DESKTOP_OUT)/$(PRODUCT_NAME)-$(VERSION)-universal.dmg +OUT_MACOS_MAS := $(DESKTOP_OUT)/mas-universal/$(PRODUCT_NAME).app RELEASE_DIR := release CURRENT_RELEASE_DIR := $(RELEASE_DIR)/$(VERSION) +# macOS Codesigning +CSC_IDENTITY_AUTO_DISCOVERY ?= false +NOTARIZE_APPLE_ID ?= +CSC_NAME ?= -include release.mk setup: if [ ! -L "element-desktop/webapp" ]; then ./setup.sh; fi +element-desktop/build/SchildiChat.xcassets/SchildiChat.iconset: $(wildcard element-desktop/build/SchildiChat.xcassets/SchildiChat.iconset/*) + +element-desktop/build/icon.icns: element-desktop/build/SchildiChat.xcassets/SchildiChat.iconset + iconutil -c icns -o $@ $< + +element-desktop/build/SchildiChat.xcassets/SchildiChatDMG.iconset: $(wildcard element-desktop/build/SchildiChat.xcassets/SchildiChatDMG.iconset/*) + +element-desktop/build/dmg.icns: element-desktop/build/SchildiChat.xcassets/SchildiChatDMG.iconset + iconutil -c icns -o $@ $< + +icns: element-desktop/build/icon.icns element-desktop/build/dmg.icns + regenerate-i18n: setup ./regenerate_i18n.sh @@ -55,26 +74,41 @@ desktop-common: web $(YARN) --cwd element-desktop run fetch --cfgdir '' $(YARN) --cwd element-desktop run build:native +macos-common: web icns + $(YARN) --cwd element-desktop run fetch --cfgdir '' + $(YARN) --cwd element-desktop run build:native:universal + linux: desktop-common - $(YARN) --cwd element-desktop run build64linux + $(YARN) --cwd element-desktop run build:64 --linux deb pacman tar.xz debian: desktop-common - $(YARN) --cwd element-desktop run build64deb + $(YARN) --cwd element-desktop run build:64 --linux deb + +rpm: desktop-common + $(YARN) --cwd element-desktop run build:64 --linux rpm pacman: desktop-common - $(YARN) --cwd element-desktop run build64pacman + $(YARN) --cwd element-desktop run build:64 --linux pacman appimage: desktop-common - $(YARN) --cwd element-desktop run build64appimage + $(YARN) --cwd element-desktop run build:64 --linux AppImage windows: desktop-common - $(YARN) --cwd element-desktop run build64windows + $(YARN) --cwd element-desktop run build:64 --windows nsis windows-portable: desktop-common - $(YARN) --cwd element-desktop run build64windows-portable + $(YARN) --cwd element-desktop run build:64 --windows portable -macos: desktop-common - $(YARN) --cwd element-desktop run build --mac dmg -c.mac.identity=null +macos: macos-common + export CSC_IDENTITY_AUTO_DISCOVERY + export NOTARIZE_APPLE_ID + export CSC_NAME + $(YARN) --cwd element-desktop run build:universal --mac dmg + +macos-mas: macos-common + export NOTARIZE_APPLE_ID + export CSC_NAME + $(YARN) --cwd element-desktop run build:universal --mac mas local-pkgbuild: debian ./create_local_pkgbuild.sh $(VERSION) $(DESKTOP_APP_NAME) $(PRODUCT_NAME) $(OUT_DEB64) @@ -90,6 +124,10 @@ debian-release: debian mkdir -p $(CURRENT_RELEASE_DIR) cp $(OUT_DEB64) $(CURRENT_RELEASE_DIR) +rpm-release: rpm + mkdir -p $(CURRENT_RELEASE_DIR) + cp $(OUT_RPM64) $(CURRENT_RELEASE_DIR) + pacman-release: pacman mkdir -p $(CURRENT_RELEASE_DIR) cp $(OUT_PAC64) $(CURRENT_RELEASE_DIR) @@ -115,6 +153,14 @@ macos-release: macos mkdir -p $(CURRENT_RELEASE_DIR) cp $(OUT_MACOS) $(CURRENT_RELEASE_DIR) +macos-mas-release: macos-mas + mkdir -p $(CURRENT_RELEASE_DIR) + cp $(OUT_MACOS_MAS) $(CURRENT_RELEASE_DIR) + +bom.lock: element-desktop/yarn.lock element-web/yarn.lock matrix-js-sdk/yarn.lock matrix-react-sdk/yarn.lock + ./build-bom.sh +bom: bom.lock + clean: $(YARN) --cwd matrix-js-sdk clean $(YARN) --cwd matrix-react-sdk clean @@ -123,3 +169,4 @@ clean: rm -f element-desktop/webapp rm -rf element-web/dist rm -rf local-pkgbuild + rm -f bom.lock diff --git a/README.md b/README.md index 4f6500d..821ed19 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ SchildiChat Web/Desktop is a fork of Element [Web](https://github.com/vector-im/element-web)/[Desktop](https://github.com/vector-im/element-desktop). The most important changes of SchildiChat Web/Desktop compared to Element Web/Desktop are: -- A unifed chat list for both direct and group chats +- A unified chat list for both direct and group chats - Message bubbles - Bigger items in the room list - … and more! @@ -18,7 +18,14 @@ Feel free to [join the discussion on matrix](https://matrix.to/#/#schildichat-we ## Building SchildiChat Web/Desktop -This particular repo is a wrapper project for element-desktop, element-web, matrix-react-sdk and matrix-js-sdk in order to build SchildiChat Web **and** Desktop. +This particular repo is a wrapper project for element-desktop, element-web, matrix-react-sdk and matrix-js-sdk. It's the recommended starting point to build SchildiChat for Web **and** Desktop. + +
schildichat-desktop <-- this repo (recommended starting point to build SchildiChat for Web and Desktop)
+|-- element-desktop (electron wrapper)
+|-- element-web ("skin" for matrix-react-sdk)
+|-- matrix-react-sdk (most of the development happens here)
+`-- matrix-js-sdk (Matrix client js sdk)
+
### Install dependencies @@ -57,6 +64,14 @@ $ source .bashrc brew install tcl rust node gpg vim curl git yarn git make gcc ``` +#### Signed macOS builds + +To sign a macOS build set the environment or make variable `CSC_IDENTITY_AUTO_DISCOVERY` to true +or set `CSC_NAME` to your certificate name or id. + +To notarize a build with Apple set `NOTARIZE_APPLE_ID` to your AppleID and set the keychain item +`NOTARIZE_CREDS` to an App specific AppleID password. + ### Initial setup @@ -81,6 +96,7 @@ After that these packages which belong to to their respective make target should - `windows-setup`: _SchildiChat_Setup_v\.exe_: file ready for **installation** on a **Windows** system - `windows-portable`: _SchildiChat_win-portable_v\.zip_: **portable** version for a **Windows** system – take SchildiChat together with your login data around with you (the archive contains a readme with **instructions** and **notes**) - `macos`: Build a *.dmg for macOS +- `macos-mas`: Build a *.pkg for release in the Mac App Store #### Additional make targets not used for GitHub releases - `pacman`: file ready for installation on an **Arch Linux** (based) system via `pacman -U schildichat-desktop-.pacman` diff --git a/build-bom.sh b/build-bom.sh new file mode 100755 index 0000000..4032fa4 --- /dev/null +++ b/build-bom.sh @@ -0,0 +1,46 @@ +# /usr/bin/env bash +cat element-desktop/yarn.lock > bom.lock +echo "" >> bom.lock +cat element-web/yarn.lock >> bom.lock +echo "" >> bom.lock +cat matrix-js-sdk/yarn.lock >> bom.lock +echo "" >> bom.lock +cat matrix-react-sdk/yarn.lock >> bom.lock +echo "" >> bom.lock + +# matrix-seshat +cat << EOF >> bom.lock +matrix-seshat@2.3.0: + version "2.3.0" + resolved "https://github.com/matrix-org/seshat/archive/refs/heads/master.tar.gz" + integrity sha512-y4xtZViRX/h0zczl5hiqWyFNK7np0vVujQ/l47g1Mm7B7mDTHAneSSy/d5GADeUIsezZyvT3qKhSCwSSyqS8Xw== + dependencies: + sqlcipher "~m1" + openssl "~1.1.1f" + +sqlcipher@m1: + version "m1" + resolved "https://github.com/SchildiChat/sqlcipher/archive/refs/heads/m1.tar.gz" + integrity sha512-1Nk7J0dQyVedFLqnxUJQWrf/VBsUsfC5vAYaHDH3LRbWarfKDGYduZrhdBuzgAF+kMA237HaDt9Tq+CcXV0EJA== + +openssl@1.1.1f: + version "1.1.1f" + resolved "https://www.openssl.org/source/openssl-1.1.1f.tar.gz" + integrity sha512-sAvZta1SmPvO7sa7GcGrDBBspc+zEXhJfFi/fg4M8w/MGcIPhOI68xzBJr8kR9Pk+EYduXuvp7149pVhky8ADA== +EOF +echo "" >> bom.lock + +# keytar +cat << EOF >> bom.lock +keytar@^5.6.0: + version "5.6.0" + resolved "https://github.com/atom/node-keytar/archive/refs/tags/v5.6.0.tar.gz" + integrity sha512-dPdXLrm8AlqooT0ZS7y/mYif0DmQXoGGrqomwfl6ugIEHlpL1D+hJYhjyMC00TK924vOGD1a6OhDS2+RKEffXA== + dependencies: + libsecret "~0.20.3" + +libsecret@0.20.3: + version "0.20.3" + resolved "https://gitlab.gnome.org/GNOME/libsecret/-/archive/0.20.3/libsecret-0.20.3.tar.gz" + integrity sha512-tbD1jNKEEW9bPWuyd5YZ68eQjHhXOsy5PseVwleWYMEXgrrPPGnGGrLzSFUXRzNulFceLMeUG49Qr1rnyvfa1A== +EOF diff --git a/configs/sc/config.json b/configs/sc/config.json index dfc32f4..3a229d0 100644 --- a/configs/sc/config.json +++ b/configs/sc/config.json @@ -26,5 +26,12 @@ "url": "https://schildi.chat/desktop/privacy", "text": "Privacy Policy" } - ] + ], + "sc_update_announcement_room": { + "room_id_or_alias": "!JwTYjASnrfLEJQGQvt:matrix.org", + "via_servers": [ + "supercable.onl", + "spiritcroc.de" + ] + } } diff --git a/deploy/create-github-release.sh b/deploy/create-github-release.sh index d0cab53..b93f7d5 100755 --- a/deploy/create-github-release.sh +++ b/deploy/create-github-release.sh @@ -15,7 +15,7 @@ release_notes_file="/tmp/scrn.md" owner=SchildiChat repo=schildichat-desktop -target=sc +target=master # Define variables GH_API="https://api.github.com" diff --git a/deploy/update-flathub.sh b/deploy/update-flathub.sh index da21f06..28f228c 100755 --- a/deploy/update-flathub.sh +++ b/deploy/update-flathub.sh @@ -13,7 +13,6 @@ repourl="git@github.com:flathub/chat.schildi.desktop.git" downloadurl="https://github.com/SchildiChat/schildichat-desktop/releases/download/v${version}/schildichat-desktop_${version}_amd64.deb" sha256sum=($(sha256sum $debpath)) -debsize=($(wc -c $debpath)) debdate=$(date +%Y-%m-%d -r $debpath) [ -d "$repopath" ] || git clone $repourl $repopath @@ -23,20 +22,15 @@ pushd "$repopath" > /dev/null git fetch git reset --hard origin/master -jsonFile="chat.schildi.desktop.json" -jsonString=$(jq -r "." $jsonFile) - +yamlFile="chat.schildi.desktop.yaml" xmlFile="chat.schildi.desktop.appdata.xml" -jsonString=$(echo $jsonString | jq -r ".modules[]? |= ((select(.name?==\"schildichat\") | .sources[0].url = \"${downloadurl}\") // .)") -jsonString=$(echo $jsonString | jq -r ".modules[]? |= ((select(.name?==\"schildichat\") | .sources[0].sha256 = \"${sha256sum}\") // .)") -jsonString=$(echo $jsonString | jq -r ".modules[]? |= ((select(.name?==\"schildichat\") | .sources[0].size = ${debsize}) // .)") +sed -i "s|url: .* #SC:url|url: $downloadurl #SC:url|" "$yamlFile" +sed -i "s|sha256: .* #SC:sha256|sha256: $sha256sum #SC:sha256|" "$yamlFile" -echo $jsonString | jq --indent 4 "." > $jsonFile +sed -i "s|^\s\s$| \n |" "$xmlFile" -sed -i "s|^\s\s$| \n |" $xmlFile - -git add $jsonFile $xmlFile +git add $yamlFile $xmlFile git commit -m "Bump version to v$version" git push diff --git a/element-desktop b/element-desktop index 820d349..de5f137 160000 --- a/element-desktop +++ b/element-desktop @@ -1 +1 @@ -Subproject commit 820d3496094c6396509d048a83b6cb3e99a51fb3 +Subproject commit de5f137d4e37c7527596b4d910cb13a23b090dca diff --git a/element-web b/element-web index 37703fb..615ecdc 160000 --- a/element-web +++ b/element-web @@ -1 +1 @@ -Subproject commit 37703fbbcdd3b032361efa72ec6a8ae491e428df +Subproject commit 615ecdc6d663431807884d4bb7c1d66ea684a3c9 diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..7e563d6 --- /dev/null +++ b/flake.lock @@ -0,0 +1,26 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1630504215, + "narHash": "sha256-H5pzwo7z3e7ZatwuwWY25oZSejchO+ZH/XtMi8/PXLw=", + "owner": "yu-re-ka", + "repo": "nixpkgs", + "rev": "979e5916df0e6830a2b1ee999632de9a9d2beb23", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..cc71b74 --- /dev/null +++ b/flake.nix @@ -0,0 +1,29 @@ +{ + description = "The SchildiChat Matrix client"; + + inputs.nixpkgs.url = github:NixOS/nixpkgs; + + outputs = { self, nixpkgs }: let + systems = [ "x86_64-linux" "i686-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ]; + forAllSystems = f: nixpkgs.lib.genAttrs systems (system: f system); + + overlay = import ./nix/overlay.nix; + + # Memoize nixpkgs for different platforms for efficiency. + nixpkgsFor = forAllSystems (system: + import nixpkgs { + inherit system; + overlays = [ overlay ]; + }); + in { + inherit overlay; + + packages = builtins.mapAttrs (system: pkgs: { + inherit (pkgs) + schildichat-web + schildichat-desktop + schildichat-desktop-wayland + ; + }) nixpkgsFor; + }; +} diff --git a/i18n-overlays/element-desktop/es.json b/i18n-overlays/element-desktop/es.json new file mode 100644 index 0000000..928eceb --- /dev/null +++ b/i18n-overlays/element-desktop/es.json @@ -0,0 +1,3 @@ +{ + "Show": "Mostrar" +} diff --git a/i18n-overlays/element-desktop/et.json b/i18n-overlays/element-desktop/et.json new file mode 100644 index 0000000..949f6a3 --- /dev/null +++ b/i18n-overlays/element-desktop/et.json @@ -0,0 +1,3 @@ +{ + "Show": "Näita" +} diff --git a/i18n-overlays/element-desktop/eu.json b/i18n-overlays/element-desktop/eu.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/i18n-overlays/element-desktop/eu.json @@ -0,0 +1 @@ +{} diff --git a/i18n-overlays/element-desktop/fa.json b/i18n-overlays/element-desktop/fa.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/i18n-overlays/element-desktop/fa.json @@ -0,0 +1 @@ +{} diff --git a/i18n-overlays/element-desktop/fr.json b/i18n-overlays/element-desktop/fr.json new file mode 100644 index 0000000..e611c40 --- /dev/null +++ b/i18n-overlays/element-desktop/fr.json @@ -0,0 +1,3 @@ +{ + "Show": "Afficher" +} diff --git a/i18n-overlays/element-desktop/hu.json b/i18n-overlays/element-desktop/hu.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/i18n-overlays/element-desktop/hu.json @@ -0,0 +1 @@ +{} diff --git a/i18n-overlays/element-desktop/lt.json b/i18n-overlays/element-desktop/lt.json new file mode 100644 index 0000000..4eb3e4a --- /dev/null +++ b/i18n-overlays/element-desktop/lt.json @@ -0,0 +1,3 @@ +{ + "Show": "Rodyti" +} diff --git a/i18n-overlays/element-desktop/nb_NO.json b/i18n-overlays/element-desktop/nb_NO.json new file mode 100644 index 0000000..640dd4a --- /dev/null +++ b/i18n-overlays/element-desktop/nb_NO.json @@ -0,0 +1,3 @@ +{ + "Show": "Vis" +} diff --git a/i18n-overlays/element-desktop/nl.json b/i18n-overlays/element-desktop/nl.json new file mode 100644 index 0000000..58f6006 --- /dev/null +++ b/i18n-overlays/element-desktop/nl.json @@ -0,0 +1,3 @@ +{ + "Show": "Tonen" +} diff --git a/i18n-overlays/element-desktop/pl.json b/i18n-overlays/element-desktop/pl.json new file mode 100644 index 0000000..b1e2f15 --- /dev/null +++ b/i18n-overlays/element-desktop/pl.json @@ -0,0 +1,3 @@ +{ + "Show": "Pokaż" +} diff --git a/i18n-overlays/element-desktop/pt_BR.json b/i18n-overlays/element-desktop/pt_BR.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/i18n-overlays/element-desktop/pt_BR.json @@ -0,0 +1 @@ +{} diff --git a/i18n-overlays/element-desktop/ru.json b/i18n-overlays/element-desktop/ru.json new file mode 100644 index 0000000..cec22f6 --- /dev/null +++ b/i18n-overlays/element-desktop/ru.json @@ -0,0 +1,3 @@ +{ + "Show": "Показать" +} diff --git a/i18n-overlays/element-desktop/sk.json b/i18n-overlays/element-desktop/sk.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/i18n-overlays/element-desktop/sk.json @@ -0,0 +1 @@ +{} diff --git a/i18n-overlays/element-web/en_EN.json b/i18n-overlays/element-web/en_EN.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/i18n-overlays/element-web/en_EN.json @@ -0,0 +1 @@ +{} diff --git a/i18n-overlays/element-web/es.json b/i18n-overlays/element-web/es.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/i18n-overlays/element-web/es.json @@ -0,0 +1 @@ +{} diff --git a/i18n-overlays/element-web/et.json b/i18n-overlays/element-web/et.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/i18n-overlays/element-web/et.json @@ -0,0 +1 @@ +{} diff --git a/i18n-overlays/element-web/eu.json b/i18n-overlays/element-web/eu.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/i18n-overlays/element-web/eu.json @@ -0,0 +1 @@ +{} diff --git a/i18n-overlays/element-web/fa.json b/i18n-overlays/element-web/fa.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/i18n-overlays/element-web/fa.json @@ -0,0 +1 @@ +{} diff --git a/i18n-overlays/element-web/fr.json b/i18n-overlays/element-web/fr.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/i18n-overlays/element-web/fr.json @@ -0,0 +1 @@ +{} diff --git a/i18n-overlays/element-web/hu.json b/i18n-overlays/element-web/hu.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/i18n-overlays/element-web/hu.json @@ -0,0 +1 @@ +{} diff --git a/i18n-overlays/element-web/lt.json b/i18n-overlays/element-web/lt.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/i18n-overlays/element-web/lt.json @@ -0,0 +1 @@ +{} diff --git a/i18n-overlays/element-web/nb_NO.json b/i18n-overlays/element-web/nb_NO.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/i18n-overlays/element-web/nb_NO.json @@ -0,0 +1 @@ +{} diff --git a/i18n-overlays/element-web/nl.json b/i18n-overlays/element-web/nl.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/i18n-overlays/element-web/nl.json @@ -0,0 +1 @@ +{} diff --git a/i18n-overlays/element-web/pl.json b/i18n-overlays/element-web/pl.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/i18n-overlays/element-web/pl.json @@ -0,0 +1 @@ +{} diff --git a/i18n-overlays/element-web/pt_BR.json b/i18n-overlays/element-web/pt_BR.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/i18n-overlays/element-web/pt_BR.json @@ -0,0 +1 @@ +{} diff --git a/i18n-overlays/element-web/ru.json b/i18n-overlays/element-web/ru.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/i18n-overlays/element-web/ru.json @@ -0,0 +1 @@ +{} diff --git a/i18n-overlays/element-web/sk.json b/i18n-overlays/element-web/sk.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/i18n-overlays/element-web/sk.json @@ -0,0 +1 @@ +{} diff --git a/i18n-overlays/matrix-react-sdk/cs.json b/i18n-overlays/matrix-react-sdk/cs.json index f221168..0830b04 100644 --- a/i18n-overlays/matrix-react-sdk/cs.json +++ b/i18n-overlays/matrix-react-sdk/cs.json @@ -1,7 +1,13 @@ { "Enable layout with message bubbles": "Povolit bubliny zpráv", "Show message bubbles on one side only": "Bubliny zpráv zobrazit pouze na jedné straně", - "Show message bubbles depending on the width either on both sides or only on one side": "Bubliny zpráv zobrazit v závislosti na šířce stránky buď na obou stranách, nebo pouze na jedné straně.", + "Show message bubbles depending on the width either on both sides or only on one side": "Bubliny zpráv zobrazit v závislosti na šířce stránky buď na obou stranách, nebo pouze na jedné straně", "Message bubbles": "Bubliny zpráv", - "Normal priority": "Normální priorita" + "Normal priority": "Normální priorita", + "Message layout": "Vzhled zpráv", + "Modern": "Moderní", + "Show people and rooms in a combined list": "Zobrazit lidi a místnosti v kombinovaném seznamu", + "Update notifications": "Aktualizace oznámení", + "Do you want to join a room notifying you about new releases? This is especially useful if your platform doesn't support automatic updates for SchildiChat (e.g. Windows and macOS).": "Chcete se připojit k místnosti, která vás bude informovat o nových verzích? To je užitečné zejména v případě, že vaše platforma nepodporuje automatické aktualizace SchildiChatu (např. Windows a macOS).", + "Don't ask again": "Neptat se znovu" } diff --git a/i18n-overlays/matrix-react-sdk/de_DE.json b/i18n-overlays/matrix-react-sdk/de_DE.json index 0d4dd1b..f7f36b9 100644 --- a/i18n-overlays/matrix-react-sdk/de_DE.json +++ b/i18n-overlays/matrix-react-sdk/de_DE.json @@ -103,5 +103,11 @@ "Unable to look up phone number": "Telefonnummer kann nicht gefunden werden", "The widget will verify your user ID, but won't be able to perform actions for you:": "Das Widget überprüft deine Benutzer-ID, kann jedoch keine Aktionen für dich ausführen:", "Abort": "Abbrechen", - "Add existing room": "Existierenden Raum hinzufügen" + "Add existing room": "Existierenden Raum hinzufügen", + "Message layout": "Nachrichtenlayout", + "Modern": "Modern", + "Show people and rooms in a combined list": "Personen und Räume in einer gemeinsamen Liste anzeigen", + "Update notifications": "Updatebenachrichtigungen", + "Do you want to join a room notifying you about new releases? This is especially useful if your platform doesn't support automatic updates for SchildiChat (e.g. Windows and macOS).": "Möchtest du einem Raum beitreten, der dich über neue Updates informiert? Das ist besonders nützlich, wenn deine Plattform keine automatischen Updates für SchildiChat unterstützt (z. B. Windows und macOS).", + "Don't ask again": "Nicht erneut fragen" } diff --git a/i18n-overlays/matrix-react-sdk/en_EN.json b/i18n-overlays/matrix-react-sdk/en_EN.json index 943ae0a..13eda4f 100644 --- a/i18n-overlays/matrix-react-sdk/en_EN.json +++ b/i18n-overlays/matrix-react-sdk/en_EN.json @@ -1,7 +1,18 @@ { - "Enable layout with message bubbles": "Enable layout with message bubbles", "Show message bubbles on one side only": "Show message bubbles on one side only", "Show message bubbles depending on the width either on both sides or only on one side": "Show message bubbles depending on the width either on both sides or only on one side", "Message bubbles": "Message bubbles", - "Normal priority": "Normal priority" + "Normal priority": "Normal priority", + "Message layout": "Message layout", + "Modern": "Modern", + "Show people and rooms in a combined list": "Show people and rooms in a combined list", + "Update notifications": "Update notifications", + "Do you want to join a room notifying you about new releases? This is especially useful if your platform doesn't support automatic updates for SchildiChat (e.g. Windows and macOS).": "Do you want to join a room notifying you about new releases? This is especially useful if your platform doesn't support automatic updates for SchildiChat (e.g. Windows and macOS).", + "Don't ask again": "Don't ask again", + "System": "System", + "Add custom theme": "Add custom theme", + "Add theme": "Add theme", + "Theme in use": "Theme in use", + "Light theme": "Light theme", + "Dark theme": "Dark theme" } diff --git a/i18n-overlays/matrix-react-sdk/es.json b/i18n-overlays/matrix-react-sdk/es.json new file mode 100644 index 0000000..4db1f36 --- /dev/null +++ b/i18n-overlays/matrix-react-sdk/es.json @@ -0,0 +1,7 @@ +{ + "Show message bubbles on one side only": "mostrar las burbujas de mensajes en un solo lado", + "Message bubbles": "Burbujas de mensajes", + "Normal priority": "Prioridad normal", + "Enable layout with message bubbles": "Activar diseño con mensajes de burbujas", + "Show message bubbles depending on the width either on both sides or only on one side": "Mostrar mensajes de burbuja dependiendo del tamaño tanto en ambos lados o solo en un lado" +} diff --git a/i18n-overlays/matrix-react-sdk/et.json b/i18n-overlays/matrix-react-sdk/et.json new file mode 100644 index 0000000..3532664 --- /dev/null +++ b/i18n-overlays/matrix-react-sdk/et.json @@ -0,0 +1,7 @@ +{ + "Enable layout with message bubbles": "Sõnumimullidega paigutuse lubamine", + "Show message bubbles on one side only": "Näita sõnumimulle ainult ühel poolel", + "Show message bubbles depending on the width either on both sides or only on one side": "Näita sõnumimullid sõltuvalt laiusest kas mõlemal või ainult ühel küljel", + "Normal priority": "Tavaline prioriteet", + "Message bubbles": "Sõnumimullid" +} diff --git a/i18n-overlays/matrix-react-sdk/eu.json b/i18n-overlays/matrix-react-sdk/eu.json new file mode 100644 index 0000000..fdfdaab --- /dev/null +++ b/i18n-overlays/matrix-react-sdk/eu.json @@ -0,0 +1,7 @@ +{ + "Show message bubbles on one side only": "Erakutsi mezu burbuilak alde batetik bakarrik", + "Message bubbles": "Mezu burbuilak", + "Normal priority": "Normala lehentasuna", + "Enable layout with message bubbles": "Gaitu diseinua batera mezua burbuilak", + "Show message bubbles depending on the width either on both sides or only on one side": "Erakutsi mezu burbuilak arabera zabalera bai, bi aldeetatik edo alde batetik bakarrik" +} diff --git a/i18n-overlays/matrix-react-sdk/fa.json b/i18n-overlays/matrix-react-sdk/fa.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/i18n-overlays/matrix-react-sdk/fa.json @@ -0,0 +1 @@ +{} diff --git a/i18n-overlays/matrix-react-sdk/fr.json b/i18n-overlays/matrix-react-sdk/fr.json new file mode 100644 index 0000000..bdab12c --- /dev/null +++ b/i18n-overlays/matrix-react-sdk/fr.json @@ -0,0 +1,9 @@ +{ + "Show message bubbles on one side only": "Afficher les bulles de message sur un seul côté", + "Show message bubbles depending on the width either on both sides or only on one side": "Afficher les bulles de message selon la largeur soit sur un seul côté, soit sur les deux", + "Message bubbles": "Bulles de message", + "Normal priority": "Priorité normale", + "Message layout": "Disposition des messages", + "Modern": "Moderne", + "Show people and rooms in a combined list": "Afficher les personnes et les salons dans une liste combinée" +} diff --git a/i18n-overlays/matrix-react-sdk/hu.json b/i18n-overlays/matrix-react-sdk/hu.json new file mode 100644 index 0000000..a048d36 --- /dev/null +++ b/i18n-overlays/matrix-react-sdk/hu.json @@ -0,0 +1,7 @@ +{ + "Enable layout with message bubbles": "Üzenetbuborékos elrendezés engedélyezése", + "Show message bubbles on one side only": "Üzenetbuborékok megjelenítése csak az egyik oldalon", + "Message bubbles": "Üzenet buborékok", + "Show message bubbles depending on the width either on both sides or only on one side": "Üzenetbuborékok megjelenítése a szélességtől függően mindkét oldalon vagy csak az egyik oldalon", + "Normal priority": "Normál prioritás" +} diff --git a/i18n-overlays/matrix-react-sdk/lt.json b/i18n-overlays/matrix-react-sdk/lt.json new file mode 100644 index 0000000..cc5bfa9 --- /dev/null +++ b/i18n-overlays/matrix-react-sdk/lt.json @@ -0,0 +1,7 @@ +{ + "Normal priority": "Normalaus prioriteto", + "Modern": "Modernus", + "Message bubbles": "Žinučių burbulai", + "Message layout": "Žinučių išdėstymas", + "Show people and rooms in a combined list": "Asmenų ir kambarių rodymas bendrame sąraše" +} diff --git a/i18n-overlays/matrix-react-sdk/nb_NO.json b/i18n-overlays/matrix-react-sdk/nb_NO.json new file mode 100644 index 0000000..cd11a91 --- /dev/null +++ b/i18n-overlays/matrix-react-sdk/nb_NO.json @@ -0,0 +1,12 @@ +{ + "Message bubbles": "Meldingsbobler", + "Normal priority": "Normal prioritet", + "Message layout": "Meldingsvisning", + "Modern": "Moderne", + "Show people and rooms in a combined list": "Vis folk og rom i kombinert liste", + "Update notifications": "Oppdater merknader", + "Show message bubbles on one side only": "Vis meldingsbobler kun på én side", + "Show message bubbles depending on the width either on both sides or only on one side": "Vis meldingsbobler avhengig av bredden enten på begge sider eller kun på én side", + "Don't ask again": "Ikke spør igjen", + "Do you want to join a room notifying you about new releases? This is especially useful if your platform doesn't support automatic updates for SchildiChat (e.g. Windows and macOS).": "Ønsker du at et rom skal gi deg merknader om nye utgivelser? Dette er spesielt nyttig hvis din plattform ikke støtter automatiske oppdateringer for SchildiChat (f.eks. Windows og macOS)." +} diff --git a/i18n-overlays/matrix-react-sdk/nl.json b/i18n-overlays/matrix-react-sdk/nl.json new file mode 100644 index 0000000..f98fbac --- /dev/null +++ b/i18n-overlays/matrix-react-sdk/nl.json @@ -0,0 +1,13 @@ +{ + "Show message bubbles on one side only": "Boodschappenbubbels slechts aan één kant tonen", + "Show message bubbles depending on the width either on both sides or only on one side": "Toon berichtbubbels, afhankelijk van de breedte, aan beide zijden of slechts aan één zijde", + "Message bubbles": "Boodschap bellen", + "Normal priority": "Normale prioriteit", + "Enable layout with message bubbles": "Schakel lay-out in met tekstballonnen", + "Update notifications": "Update meldingen", + "Do you want to join a room notifying you about new releases? This is especially useful if your platform doesn't support automatic updates for SchildiChat (e.g. Windows and macOS).": "Wilt u lid worden van een kamer waarin u wordt geïnformeerd over nieuwe releases? Dit is vooral handig als uw platform geen automatische updates voor SchildiChat ondersteunt (bijv. Windows en macOS).", + "Don't ask again": "Niet nogmaals vragen", + "Modern": "Modern", + "Message layout": "Berichtlayout", + "Show people and rooms in a combined list": "Toon personen en kamers in een gecombineerde lijst" +} diff --git a/i18n-overlays/matrix-react-sdk/pl.json b/i18n-overlays/matrix-react-sdk/pl.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/i18n-overlays/matrix-react-sdk/pl.json @@ -0,0 +1 @@ +{} diff --git a/i18n-overlays/matrix-react-sdk/pt_BR.json b/i18n-overlays/matrix-react-sdk/pt_BR.json new file mode 100644 index 0000000..bdbad79 --- /dev/null +++ b/i18n-overlays/matrix-react-sdk/pt_BR.json @@ -0,0 +1,7 @@ +{ + "Enable layout with message bubbles": "Habilitar layout com bolhas de mensagem", + "Message bubbles": "Bolhas de mensagens", + "Normal priority": "Prioridade normal", + "Show message bubbles on one side only": "Mostrar bolhas de mensagem em apenas um lado", + "Show message bubbles depending on the width either on both sides or only on one side": "Mostrar bolhas de mensagem dependendo da largura de ambos os lados ou somente de um lado" +} diff --git a/i18n-overlays/matrix-react-sdk/ru.json b/i18n-overlays/matrix-react-sdk/ru.json new file mode 100644 index 0000000..4ef2334 --- /dev/null +++ b/i18n-overlays/matrix-react-sdk/ru.json @@ -0,0 +1,13 @@ +{ + "Message bubbles": "Пузырьки сообщений", + "Normal priority": "Нормальный приоритет", + "Enable layout with message bubbles": "Включение макета с пузырьками сообщений", + "Show message bubbles on one side only": "Показывайте пузырьки с сообщениями только на одной стороне", + "Show message bubbles depending on the width either on both sides or only on one side": "Показывать пузырьки сообщений в зависимости от ширины либо с обеих сторон, либо только с одной стороны", + "Modern": "Современное", + "Message layout": "Оформление сообщений", + "Do you want to join a room notifying you about new releases? This is especially useful if your platform doesn't support automatic updates for SchildiChat (e.g. Windows and macOS).": "Вы хотите присоединиться к комнате, уведомляющей вас о новых релизах? Это особенно полезно, если ваша платформа не поддерживает автоматические обновления для SchildiChat (например, Windows и macOS).", + "Show people and rooms in a combined list": "Показать людей и комнаты в объединенном списке", + "Update notifications": "Уведомления об обновлениях", + "Don't ask again": "Не спрашивать больше" +} diff --git a/i18n-overlays/matrix-react-sdk/sk.json b/i18n-overlays/matrix-react-sdk/sk.json new file mode 100644 index 0000000..7b17898 --- /dev/null +++ b/i18n-overlays/matrix-react-sdk/sk.json @@ -0,0 +1,7 @@ +{ + "Enable layout with message bubbles": "Povolenie rozloženia s bublinami správ", + "Show message bubbles on one side only": "Zobrazenie bublín správ len na jednej strane", + "Show message bubbles depending on the width either on both sides or only on one side": "Zobrazenie bublín správ v závislosti od šírky buď na oboch stranách, alebo len na jednej strane", + "Message bubbles": "Bubliny správ", + "Normal priority": "Normálna priorita" +} diff --git a/matrix-js-sdk b/matrix-js-sdk index a563025..4bc4575 160000 --- a/matrix-js-sdk +++ b/matrix-js-sdk @@ -1 +1 @@ -Subproject commit a563025c04de1b3ee164c4985fe998054fd997f2 +Subproject commit 4bc4575eb65aa68ea8080f5de2072a5949ca8c6d diff --git a/matrix-react-sdk b/matrix-react-sdk index 60ac218..55874ea 160000 --- a/matrix-react-sdk +++ b/matrix-react-sdk @@ -1 +1 @@ -Subproject commit 60ac2184de12b7705820db02da6c909c6318c92e +Subproject commit 55874eaa27ac68daa1fd67f739945cf51551f4ef diff --git a/merge_helpers.sh b/merge_helpers.sh index a0d4bd4..d9562af 100755 --- a/merge_helpers.sh +++ b/merge_helpers.sh @@ -6,6 +6,8 @@ i18n_helper_path="$SCHILDI_ROOT/i18n-helper/index.js" i18n_path="src/i18n/strings" i18n_overlay_path="$SCHILDI_ROOT/i18n-overlays" +yarn=yarnpkg + add_upstream() { if git remote | grep -q upstream; then echo "Remote named upstream already exists!" @@ -101,18 +103,24 @@ automatic_i18n_reversion() { } automatic_i18n_adjustment() { - node "$i18n_helper_path" "$SCHILDI_ROOT/matrix-react-sdk/$i18n_path" "$i18n_overlay_path/matrix-react-sdk" + # matrix-react-sdk pushd "$SCHILDI_ROOT/matrix-react-sdk" > /dev/null + $yarn i18n + node "$i18n_helper_path" "$SCHILDI_ROOT/matrix-react-sdk/$i18n_path" "$i18n_overlay_path/matrix-react-sdk" apply_i18n_changes "$i18n_path" popd > /dev/null - node "$i18n_helper_path" "$SCHILDI_ROOT/element-web/$i18n_path" "$i18n_overlay_path/element-web" + # element-web pushd "$SCHILDI_ROOT/element-web" > /dev/null + $yarn i18n + node "$i18n_helper_path" "$SCHILDI_ROOT/element-web/$i18n_path" "$i18n_overlay_path/element-web" apply_i18n_changes "$i18n_path" popd > /dev/null - node "$i18n_helper_path" "$SCHILDI_ROOT/element-desktop/$i18n_path" "$i18n_overlay_path/element-desktop" + # element-desktop pushd "$SCHILDI_ROOT/element-desktop" > /dev/null + $yarn i18n + node "$i18n_helper_path" "$SCHILDI_ROOT/element-desktop/$i18n_path" "$i18n_overlay_path/element-desktop" apply_i18n_changes "$i18n_path" popd > /dev/null } diff --git a/nix/overlay.nix b/nix/overlay.nix new file mode 100644 index 0000000..7261941 --- /dev/null +++ b/nix/overlay.nix @@ -0,0 +1,17 @@ +final: prev: { + cleanSchildichatDesktopSource = src: with final.lib; cleanSourceWith { + filter = name: type: cleanSourceFilter name type + && !(hasInfix "/node_modules/" name) + && !(hasInfix "/nix/" name && hasSuffix ".nix" name) + ; + inherit src; + }; + schildichat-web = final.callPackage ./schildichat-web.nix {}; + schildichat-desktop = final.callPackage ./schildichat-desktop.nix { + inherit (final.darwin.apple_sdk.frameworks) Security AppKit CoreServices; + }; + schildichat-desktop-wayland = final.callPackage ./schildichat-desktop.nix { + inherit (final.darwin.apple_sdk.frameworks) Security AppKit CoreServices; + useWayland = true; + }; +} diff --git a/nix/schildichat-desktop.nix b/nix/schildichat-desktop.nix new file mode 100644 index 0000000..ab1daa4 --- /dev/null +++ b/nix/schildichat-desktop.nix @@ -0,0 +1,109 @@ +{ lib +, stdenv +, fetchFromGitHub +, makeWrapper +, makeDesktopItem +, mkYarnPackage +, electron +, element-desktop # for native modules +, schildichat-web +, callPackage +, Security +, AppKit +, CoreServices + +, useWayland ? false + +, cleanSchildichatDesktopSource +, schildichat-desktop-src ? ../. +}: + +let + packageJSON = schildichat-desktop-src + "/element-desktop/package.json"; + yarnLock = schildichat-desktop-src + "/element-desktop/yarn.lock"; + + package = builtins.fromJSON (builtins.readFile packageJSON); + + pname = "schildichat-desktop"; + version = package.version; + + executableName = pname; + + electron_exec = if stdenv.isDarwin then "${electron}/Applications/Electron.app/Contents/MacOS/Electron" else "${electron}/bin/electron"; + +in mkYarnPackage rec { + inherit pname version packageJSON; + + src = cleanSchildichatDesktopSource (schildichat-desktop-src + "/element-desktop"); + + nativeBuildInputs = [ makeWrapper ]; + + inherit (element-desktop) seshat keytar; + + buildPhase = '' + runHook preBuild + + export HOME=$(mktemp -d) + pushd deps/schildichat-desktop/ + npx tsc + yarn run i18n + node ./scripts/copy-res.js + popd + rm -rf node_modules/matrix-seshat node_modules/keytar + ln -s $keytar node_modules/keytar + ln -s $seshat node_modules/matrix-seshat + + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + + # resources + mkdir -p "$out/share/element" + ln -s '${schildichat-web}' "$out/share/element/webapp" + cp -r './deps/schildichat-desktop' "$out/share/element/electron" + cp -r './deps/schildichat-desktop/res/img' "$out/share/element" + rm "$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 + makeWrapper '${electron_exec}' "$out/bin/${executableName}" \ + --add-flags "$out/share/element/electron${lib.optionalString useWayland " --enable-features=UseOzonePlatform --ozone-platform=wayland"}" + + runHook postInstall + ''; + + # Do not attempt generating a tarball for element-web again. + # note: `doDist = false;` does not work. + distPhase = '' + true + ''; + + # The desktop item properties should be kept in sync with data from upstream: + # https://github.com/vector-im/element-desktop/blob/develop/package.json + desktopItem = makeDesktopItem { + name = "schildichat-desktop"; + exec = "${executableName} %u"; + icon = "schildichat"; + desktopName = "SchildiChat"; + genericName = "Matrix Client"; + categories = "Network;InstantMessaging;Chat;"; + extraEntries = '' + StartupWMClass=schildichat + MimeType=x-scheme-handler/element; + ''; + }; +} diff --git a/nix/schildichat-web.nix b/nix/schildichat-web.nix new file mode 100644 index 0000000..e10071c --- /dev/null +++ b/nix/schildichat-web.nix @@ -0,0 +1,75 @@ +{ stdenv +, mkYarnModules +, nodejs +, cleanSchildichatDesktopSource +, schildichat-desktop-src ? ../. +, ... +}: + +let + packageJSON = schildichat-desktop-src + "/element-web/package.json"; + yarnLock = schildichat-desktop-src + "/element-web/yarn.lock"; + + package = builtins.fromJSON (builtins.readFile packageJSON); + + pname = "schildichat-web"; + version = package.version; + + modules = mkYarnModules { + name = "${pname}-modules-${version}"; + inherit pname version packageJSON yarnLock; + }; + +in stdenv.mkDerivation { + inherit pname version; + + src = cleanSchildichatDesktopSource schildichat-desktop-src; + + buildInputs = [ nodejs ]; + + postPatch = '' + patchShebangs . + ''; + + configurePhase = '' + runHook preConfigure + + cp configs/sc/config.json element-web/ + cp -r ${modules}/node_modules node_modules + chmod u+rwX -R node_modules + rm -rf node_modules/matrix-react-sdk + ln -s $PWD/matrix-react-sdk node_modules/ + ln -s $PWD/node_modules matrix-react-sdk/ + ln -s $PWD/node_modules element-web/ + + runHook postConfigure + ''; + + buildPhase = '' + runHook preBuild + + pushd matrix-react-sdk + node_modules/.bin/reskindex -h ../element-web/src/header + popd + + pushd element-web + node scripts/copy-res.js + node_modules/.bin/reskindex -h ../element-web/src/header + node_modules/.bin/webpack --progress --mode production + popd + + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + + cp -r element-web/webapp $out + + runHook postInstall + ''; + + passthru = { + inherit modules; + }; +}