Statische Oberfläche vor Aether und InkNote: kein Backend, kein Build, nginx liefert web/ aus. Jede App bleibt ihre eigene PWA auf ihrer eigenen Domain – HoneyOS ist Startpunkt und Umschalter, kein iframe-Rahmen. - zwei Betriebsarten aus einem Datenstand: Terminal (Kacheln, Tastatur) und Desktop (Symbole, verschiebbare Fenster, Taskleiste) - honeybar.js als Drop-in für die Apps, rendert im Shadow DOM, damit Tailwind und die InkNote-Palette einander nicht in die Quere kommen - Konfiguration vollständig aus der .env: das Skript in /docker-entrypoint.d/ schreibt config.json beim Containerstart - optionaler _ME-Pfad pro App zeigt an, wer angemeldet ist; ohne CORS bleibt die Anzeige leer, ohne dass etwas kaputtgeht Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
89 lines
4.5 KiB
Bash
89 lines
4.5 KiB
Bash
# ─────────────────────────────────────────────────────────────────────────────
|
|
# HoneyOS — Konfiguration
|
|
#
|
|
# cp .env.example .env && anpassen
|
|
# docker compose pull && docker compose up -d
|
|
#
|
|
# Alles hier landet beim Containerstart in config.json und wird vom Browser
|
|
# gelesen. Das heißt: **es ist öffentlich.** Adressen und Namen gehören hier
|
|
# hinein, Geheimnisse niemals — HoneyOS hat kein Backend, das eines hüten
|
|
# könnte. Nach jeder Änderung: docker compose up -d (Neustart genügt).
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
|
|
HONEYOS_PORT=8088
|
|
|
|
# Anzeigename, solange keine App einen besseren nennt (siehe _ME weiter unten).
|
|
HONEYOS_USER=marc
|
|
HONEYOS_HOSTNAME=honeyos
|
|
HONEYOS_VERSION=0.1
|
|
|
|
# ── Apps ─────────────────────────────────────────────────────────────────────
|
|
# Durchnummeriert ab 1. Eine App entsteht durch ihre _URL — fehlt die, wird die
|
|
# Nummer übersprungen. Bis zu 12 Stück.
|
|
#
|
|
# _URL Pflicht. Wohin der Start springt.
|
|
# _ID Kurzname, klein. Muss zu data-app der Leiste passen. Standard: appN
|
|
# _NAME Beschriftung. Standard: die ID in Großbuchstaben
|
|
# _SUBTITLE Zeile darunter auf der Kachel
|
|
# _GLYPH Symbol: cloud | note | box | chip | folder | gear
|
|
# _KEY Zifferntaste zum Starten im Terminal-Modus
|
|
# _ME optional, siehe „Anmeldung" unten
|
|
# _TOKEN_KEY optional, siehe „Anmeldung" unten
|
|
|
|
HONEYOS_APP_1_ID=aether
|
|
HONEYOS_APP_1_NAME=AETHER
|
|
HONEYOS_APP_1_SUBTITLE=Cloud & Dateien
|
|
HONEYOS_APP_1_URL=https://cloud.honeyy.duckdns.org
|
|
HONEYOS_APP_1_GLYPH=cloud
|
|
HONEYOS_APP_1_KEY=1
|
|
HONEYOS_APP_1_ME=/api/v1/auth/me
|
|
|
|
HONEYOS_APP_2_ID=inknote
|
|
HONEYOS_APP_2_NAME=INKNOTE
|
|
HONEYOS_APP_2_SUBTITLE=Notizen & Zeichnen
|
|
HONEYOS_APP_2_URL=https://notes.honeyy.duckdns.org
|
|
HONEYOS_APP_2_GLYPH=note
|
|
HONEYOS_APP_2_KEY=2
|
|
HONEYOS_APP_2_ME=/api/auth/me
|
|
HONEYOS_APP_2_TOKEN_KEY=inknote_token
|
|
|
|
# HONEYOS_APP_3_ID=paperwall
|
|
# HONEYOS_APP_3_URL=https://…
|
|
# HONEYOS_APP_3_GLYPH=box
|
|
# HONEYOS_APP_3_KEY=3
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
# Anmeldung — was HoneyOS kann und was nicht
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
#
|
|
# HoneyOS meldet NIEMANDEN an. Es ist eine statische Seite; ein OIDC-Client
|
|
# bräuchte ein Backend und ein Client-Geheimnis, und beides gibt es hier nicht
|
|
# — absichtlich. Die Anmeldung bleibt Sache von Aether und InkNote, die beide
|
|
# an PocketID hängen.
|
|
#
|
|
# Was HoneyOS kann: **anzeigen**, wer angemeldet ist. Dafür ist _ME da — der
|
|
# Pfad, unter dem die App „wer bin ich" beantwortet. Relativ zu _URL oder
|
|
# absolut. Aus der Antwort wird der Anzeigename gefischt (display_name,
|
|
# displayName, name, username), verschachtelt unter `user` wird auch gefunden.
|
|
#
|
|
# Zwei Wege, wie das gelesen wird — und sie verhalten sich unterschiedlich:
|
|
#
|
|
# 1. Die Leiste IN der App (honeybar.js) fragt ihre eigene App.
|
|
# Gleicher Ursprung, also **funktioniert das sofort**, ohne dass an Aether
|
|
# oder InkNote etwas geändert werden muss.
|
|
#
|
|
# 2. Der Desktop auf os.… fragt über die Domaingrenze.
|
|
# Dafür muss die App diesen Ursprung erlauben, sonst blockt der Browser:
|
|
# InkNote: ALLOWED_ORIGINS=https://os.honeyy.duckdns.org
|
|
# Aether: CORS mit Access-Control-Allow-Credentials — noch nicht drin
|
|
# Ohne das bleibt die Anzeige einfach leer. Nichts geht kaputt, die
|
|
# Lampe „online" funktioniert weiter.
|
|
#
|
|
# _TOKEN_KEY brauchen nur Apps, die einen Bearer-Token im localStorage halten
|
|
# statt eines Cookies (InkNote tut das). Der Token ist pro Domain sichtbar —
|
|
# von os.… aus also NICHT lesbar. Für die Leiste in der App reicht es.
|
|
#
|
|
# Und wichtig: alle Adressen müssen unter derselben Domain liegen
|
|
# (….honeyy.duckdns.org). Sonst behandelt der Browser sie als fremde Site und
|
|
# schickt die Sitzung gar nicht erst mit.
|