Zum Inhalt

Projektstruktur

Überblick über das Rezeptor-Repository — wo was liegt und welche Verträge gelten.

Top-Level

rezeptor/
├── core/                 # Geteilte Bash-Module (DRY)
│   └── runtime.lock      # Gepinnte Proton-GE-Version + SHA256
├── recipes/
│   ├── <id>/             # Offizielle Rezepte
│   ├── community/<id>/   # Community (nicht im Manifest)
│   ├── _template*/       # Vorlagen (nicht im Manifest)
│   ├── catalog.json      # GUI-Katalog + trust
│   ├── manifest.json     # SHA256-Integrität
│   └── recipe.schema.json
├── launcher/             # PyQt6-GUI (Host-PyQt6 bei Clone/tar.gz; AppImage/Flatpak bundeln)
│   ├── launcher.py          # RezeptorWindow, Menüs/Tabs, Delegates
│   ├── recipe_process.py    # RecipeProcessOps — QProcess-Orchestrierung
│   ├── recipe_discovery.py  # RecipeInfo / Discover
│   └── …                    # siehe [GUI-Launcher](LAUNCHER.md) / [Architektur](ARCHITECTURE-LAUNCHER.md)
├── scripts/              # Lint, Manifest, new-recipe, Builds
├── tests/                # bats + Python
├── docs/{de,en}/         # Diese Site (MkDocs)
├── setup.sh              # Einstieg → launcher
├── VERSION               # SemVer (Release-Trigger)
└── Makefile              # validate, test, recipe-lint, …

recipes/<id>/ — Pflichtdateien

Jedes Rezept:

Datei Pflicht Rolle
recipe.yml ja Metadaten, install_steps, Hook-Pfade inkl. uninstall:
install.sh ja Erstinstallation
repair.sh ja validate → nur Fehlendes beheben
validate.sh ja Strukturierte OK: / FAIL: / WARN:-Ausgabe
launch.sh ja Starten
uninstall.sh ja Vollständig entfernen via purge_recipe_data
kill.sh ja Prozesse beenden (YAML kill:)

Optional: info.de.txt / info.en.txt, assets/, optional/.

Kein erneutes Installieren als Reparatur

repair.sh ruft validate.sh, behebt Abweichungen, validiert erneut — kein volles Re-Install.

core/ — Shared Core

Neue Logik nicht in Rezepten duplizieren — erst in core/ zentralisieren.

Modul Verantwortung
recipe-hooks.sh Hook-Einstieg, Profile, purge_recipe_data
recipe-install-steps.sh Deklarative install_steps
recipe-updates.sh Nummerierte Post-Install-Updates
recipe-iso.sh Spiel-ISO mounten (udisksctl)
recipe-prefix.sh Prefix anlegen/aktualisieren
recipe-winetricks.sh Winetricks unter Proton; Retry nur Exit 139
recipe-win10.sh Windows-10-Version (Registry, kein winecfg)
recipe-validate.sh Wiederverwendbare Checks
wine-runtime.sh Proton-GE, Grafik-DLLs
recipe-desktop.sh .desktop + Icons
paths.sh / env-file.sh / output.sh Pfade, State, GUI-Tags
sharedFuncs.sh Geteilte Helfer; launcher() ist LEGACY (siehe Core-API)

Tiefenreferenz: Core-API. App-Updates: nur scripts/rezeptor-update.sh.

AppRun / PATH-Exposition

AppDir/AppRun hängt PROJECT_ROOT/core an PATH, damit Legacy-Helfer per Namen gefunden werden. Rezept-Hooks dürfen nicht auf ambient PATH bauen: recipe_hooks::load und CORE_DIR/recipe_hooks::_source nutzen. Keine neuen Rezept-Abhängigkeiten von PATH-sichtbaren core/-Modulen.

Runtime: nur Proton-GE

  • Default-Pin in core/runtime.lock (PROTON_GE_TAG, URL, SHA256) — AppImage/Flatpak bundeln diesen Tag
  • Pro Rezept: optional proton_ge_tag: in recipe.yml (Photoshop und Halo → GE-Proton11-3); URL/SHA aus Lock-PROTON_GE_ALT_* oder proton_ge_url / proton_ge_sha256
  • Medizin: Runtime-Wahl nur wo das Rezept sie anbietet (z. B. Halo Steam-Proton) — Photoshop ist fest auf GE 11 gepinnt
  • Rezepte setzen runtime: proton-ge
  • Kein System-Wine-Fallback in Rezept-Skripten
  • Grafik: wine_runtime::deploy_proton_graphics_dlls()kein winetricks dxvk
  • Win10: recipe_win10::ensurekein winetricks winecfg

Installationsort Proton: ~/.local/share/wine-software/runtime/proton-ge/<tag>/ (geteilt, überlebt Uninstall; Zweit-Tags on-demand).

launcher/

PyQt6-App: Katalog, Trust, Settings, Hook-Prozesse, Activity-Log.
RezeptorWindow (launcher.py) + RecipeProcessOps (recipe_process.py) für Install/Repair/…/Launch.
Siehe GUI-Launcher und Architektur.

Datenorte (Laufzeit)

Pfad Rolle
~/.local/share/wine-software/<id>/ Kanonischer data_root
$DATA_ROOT/prefix Immer der Wine-Prefix
$DATA_ROOT/recipe.env Persistenter State (env_file_*, nie source)
$DATA_ROOT/data_root.path GUI-Override des gewählten Datenorts

CI & Qualität

make validate    # shellcheck, syntax, compile, i18n-check, ruff, recipes-check, recipe-lint, manifest
make test        # bats
make pytest      # Launcher-Unit-Tests (tests/*.py; braucht pytest + PyQt6)
./scripts/recipe-lint.sh
./scripts/recipe-manifest.sh

shellcheck in make validate deckt core/, recipes/wiso-steuer, recipes/photoshop, recipes/premiere, launcher/, scripts/ ab — nicht jedes Rezept (z. B. nicht photoshop-m0nkrus, Halo, Community). bash -n (syntax) prüft alle recipes/*/*.sh.

Workflows: .github/workflows/ci.yml, docs.yml, release.yml.

Weiter