Compare commits

..
3 Commits
Author SHA1 Message Date
Thore Cimbal 1d5a136dff Titelbild ausgetauscht: Alpengluehen statt Elements See
alpenglow.jpg (John Towner, Unsplash) ersetzt lake.jpg als Hintergrund der Login-Seite. Die Unsplash License erlaubt kommerzielle Nutzung und Aenderung ohne Genehmigung und verlangt keine Namensnennung - wir nennen ihn trotzdem, das ist die faire Form.

Die Danksagung ist dabei bewusst nicht uebersetzt: der Schluessel credits|default_cover_photo liegt in 32 Sprachdateien, 31 nennen Elements Fotografen namentlich. Nur en/de anzupassen haette in 29 Sprachen eine falsche Attribution stehen lassen, und diese 29 pflegen wir nicht - sie kommen aus Elements Uebersetzungsdienst.

lake.jpg ist entfernt, weil es durch diese Aenderung unerreichbar wird - 610 KB, die sonst in jedem Image mitfahren.
2026-08-06 12:00:00 +00:00
Thore CimbalandClaude Fable 5 580827f7ca desktop: branding-Block, damit der Client nicht Elements Logo zeigt
Die heute im Web gesetzten branding-Werte fehlten der Desktop-Config. Ohne sie
faellt AuthHeaderLogo.tsx auf themes/element/img/logos/element-logo.svg zurueck -
die Anmeldemaske des Desktop-Clients haette also weiter Elements gruenes Logo
gezeigt, waehrend der Web-Client bereits die ThreadNet-Marke traegt.

vector-icons/512.png liegt im webapp-Bundle des Desktops (geprueft), der Pfad
loest also auch dort auf.

Chirurgisch eingefuegt, nicht neu serialisiert - die 17 Themes und der
Gedankenstrich in der Beschreibung bleiben unangetastet.

Danach gilt: Web-Konfiguration ist eine echte Teilmenge der Desktop-Konfiguration,
ohne einen einzigen Wertkonflikt (verglichen ueber alle verschachtelten
Schluessel).

Refs ThreadNet-Web#1

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-06 12:00:00 +00:00
Thore CimbalandClaude Fable 5 6f33c7277a desktop: macOS baut ohne volles Xcode (BUILD-01, management#22)
Upstream setzt mac.icon auf build/icon.icon - das Icon-Composer-Bundle von
macOS 26. Dessen Verarbeitung ruft actool auf, das es nur mit dem vollen Xcode
gibt (~10 GB, App-Store-Login). Mit blossen CommandLineTools scheitert damit
JEDER macOS-Build:

  ⨯ Failed to check actool version. Is Xcode 26 or higher installed?

Die bisherige Diagnose in management#22 war falsch: Dort stand, nur das
DMG-Target brauche actool und das ZIP baue problemlos. Tatsaechlich trifft es
alle macOS-Targets, weil mac.icon fuer alle gilt - das ZIP scheitert genauso.
Der dort empfohlene Ausweg (DMG per hdiutil bauen) haette ein Problem geloest,
das gar nicht am DMG lag.

Loesung: mac.icon und dmg.badgeIcon auf das klassische build/icon.icns. Damit
baut electron-builder ZIP UND DMG selbst, inklusive Blockmap - verifiziert am
2026-08-06, beide Artefakte in Release v0.4.1.

Umgesetzt als Variantenoption statt als Aenderung an Upstreams Defaults: Die
Werte stehen in unserem axion1337/build.json, electron-builder.ts wird nur
additiv um zwei optionale Schluessel erweitert - dieselbe Machart wie das
bereits vorhandene linux.deb.name. Ein Upstream-Merge erzeugt an der
mac.icon-Zeile damit keinen Konflikt.

Preis: kein macOS-26-Icon-Rendering. Ohne Xcode gaebe es ohnehin keinen Build.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj
2026-08-06 12:00:00 +00:00
7 changed files with 74 additions and 29 deletions
+3 -1
View File
@@ -3,5 +3,7 @@
"name": "threadnet-desktop", "name": "threadnet-desktop",
"productName": "ThreadNet", "productName": "ThreadNet",
"description": "ThreadNet — powered by Element", "description": "ThreadNet — powered by Element",
"protocols": ["io.element.desktop", "element"] "protocols": ["io.element.desktop", "element"],
"mac.icon": "build/icon.icns",
"dmg.badgeIcon": "build/icon.icns"
} }
+4
View File
@@ -1,5 +1,9 @@
{ {
"brand": "aXion1337.Chat", "brand": "aXion1337.Chat",
"branding": {
"auth_header_logo_url": "vector-icons/512.png",
"logo_link_url": "https://axion1337.chat"
},
"default_server_config": { "default_server_config": {
"m.homeserver": { "m.homeserver": {
"base_url": "https://matrix.axion1337.chat", "base_url": "https://matrix.axion1337.chat",
+27
View File
@@ -48,6 +48,8 @@ interface Variant extends Metadata {
"appId": string; "appId": string;
"linux.executableName"?: string; "linux.executableName"?: string;
"linux.deb.name"?: string; "linux.deb.name"?: string;
"mac.icon"?: string;
"dmg.badgeIcon"?: string;
"protocols": string[]; "protocols": string[];
} }
@@ -202,6 +204,31 @@ if (variant["linux.deb.name"]) {
config.deb.fpm.push("--name", variant["linux.deb.name"]); config.deb.fpm.push("--name", variant["linux.deb.name"]);
} }
/**
* ThreadNet-Fork: Icon-Pfade fuer macOS ueberschreibbar machen.
*
* Upstream setzt `mac.icon` auf das Icon-Composer-Bundle `build/icon.icon`
* (macOS 26). Dessen Verarbeitung ruft `actool` auf, das es nur mit dem vollen
* Xcode gibt (~10 GB, App-Store-Login) - mit blossen CommandLineTools scheitert
* damit JEDER macOS-Build, nicht nur das DMG:
*
* Failed to check actool version. Is Xcode 26 or higher installed?
*
* Ueber die Variante laesst sich stattdessen das klassische `.icns` waehlen.
* Bewusst hier als Variantenoption statt als Aenderung an den Defaults oben:
* So bleibt Upstreams Wert unberuehrt und ein Upstream-Merge erzeugt keinen
* Konflikt an dieser Zeile.
*
* Preis: kein macOS-26-Icon-Rendering. Ohne Xcode gaebe es ohnehin keinen Build.
*/
if (variant["mac.icon"]) {
config.mac.icon = variant["mac.icon"];
}
if (variant["dmg.badgeIcon"]) {
config.dmg.badgeIcon = variant["dmg.badgeIcon"];
}
/** /**
* Allow specifying windows signing cert via env vars * Allow specifying windows signing cert via env vars
* @param {string} process.env.ED_SIGNTOOL_SUBJECT_NAME * @param {string} process.env.ED_SIGNTOOL_SUBJECT_NAME
Binary file not shown.

After

Width:  |  Height:  |  Size: 590 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 596 KiB

+5 -1
View File
@@ -20,7 +20,11 @@ export const DEFAULTS: DeepReadonly<IConfigOptions> = {
branding: { branding: {
logo_link_url: "https://element.io", logo_link_url: "https://element.io",
auth_header_logo_url: "themes/element/img/logos/element-logo.svg", auth_header_logo_url: "themes/element/img/logos/element-logo.svg",
welcome_background_url: "themes/element/img/backgrounds/lake.jpg", // ThreadNet-Fork: eigenes Titelbild statt Elements lake.jpg. Steht hier im
// Default und nicht in element-values.yaml, weil die Bilddatei ohnehin nur
// ueber einen Build in den Container kommt - eine zusaetzliche Config-Zeile
// waere eine zweite Stelle, die mitwandern muesste.
welcome_background_url: "themes/element/img/backgrounds/alpenglow.jpg",
}, },
help_url: "https://element.io/help", help_url: "https://element.io/help",
help_encryption_url: "https://element.io/help#encryption", help_encryption_url: "https://element.io/help#encryption",
@@ -106,34 +106,42 @@ export default class HelpUserSettingsTab extends React.Component<EmptyObject, IS
<SettingsSubsection heading={_t("common|credits")}> <SettingsSubsection heading={_t("common|credits")}>
<SettingsSubsectionText> <SettingsSubsectionText>
<ul> <ul>
{/* ThreadNet-Fork: eigenes Titelbild, deshalb eigene Danksagung.
Bewusst OHNE _t(): der Schluessel credits|default_cover_photo
steckt in 32 Sprachdateien, 31 davon nennen Elements Fotografen
namentlich. Wuerden wir nur en/de anpassen, stuende in 29
Sprachen eine falsche Attribution — und die uebrigen 29 koennen
wir nicht pflegen, sie kommen aus Elements Uebersetzungsdienst.
Ein Fotografenname und eine Lizenzbezeichnung werden ohnehin
nicht uebersetzt. Der ungenutzte Schluessel bleibt in den
Sprachdateien stehen — ihn aus 32 Dateien zu entfernen waere
Laerm im naechsten Upstream-Merge. */}
<li> <li>
{_t( The{" "}
"credits|default_cover_photo", <ExternalLink
{}, href="themes/element/img/backgrounds/alpenglow.jpg"
{ rel="noreferrer noopener"
photo: (sub) => ( target="_blank"
<ExternalLink >
href="themes/element/img/backgrounds/lake.jpg" default cover photo
rel="noreferrer noopener" </ExternalLink>{" "}
target="_blank" is by <ExternalLink href="https://unsplash.com/@heytowner">John Towner</ExternalLink> on{" "}
> <ExternalLink
{sub} href="https://unsplash.com/photos/JgOeRuGD_Y4"
</ExternalLink> rel="noreferrer noopener"
), target="_blank"
author: (sub) => ( >
<ExternalLink href="https://www.flickr.com/golan">{sub}</ExternalLink> Unsplash
), </ExternalLink>
terms: (sub) => ( , used under the{" "}
<ExternalLink <ExternalLink
href="https://creativecommons.org/licenses/by-sa/4.0/" href="https://unsplash.com/license"
rel="noreferrer noopener" rel="noreferrer noopener"
target="_blank" target="_blank"
> >
{sub} Unsplash License
</ExternalLink> </ExternalLink>
), .
},
)}
</li> </li>
<li> <li>
{_t( {_t(