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)
│   ├── 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-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

  • Pin in core/runtime.lock (PROTON_GE_TAG, URL, SHA256)
  • 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).

launcher/

PyQt6-App: Katalog, Trust, Settings, Hook-Prozesse, Activity-Log. 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, bash -n, compileall, recipes-check, recipe-lint, manifest-check
make test        # bats
./scripts/recipe-lint.sh
./scripts/recipe-manifest.sh

shellcheck in make validate deckt nur core/, photoshop, wiso-steuer, launcher/, scripts/ ab — nicht jedes Rezept. bash -n prüft alle recipes/*/*.sh.

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

Weiter