Skip to content

GUI launcher

Technical notes for the PyQt6 UI under launcher/. Brand and UX rules: Brand.

Start

./setup.sh                 # pre-check → python3 launcher/launcher.py
REZEPTOR_DEV=1 ./setup.sh  # developer mode

Dependencies for git clone / tar.gz / ./setup.sh: host PyQt6; optional PyQt6-Fluent-Widgets (ui_fluent.FLUENT_AVAILABLE).

AppImage and Flatpak already bundle Python + PyQt6 (+ Fluent) — no host python-pyqt6 needed there. See Quick start.

Module map

File Role
launcher.py Main window, QProcess hooks, activity, updates
recipe_discovery.py RecipeInfo / discover / YAML metadata
ARCHITECTURE-LAUNCHER.md Process / trust / secrets model
ui_fluent.py Fluent Theme.DARK + copper #B87333
ui_styles.py Host QSS, brand tokens
ui_rezeptor.py Sidebar, segment tabs, status pill
ui_settings.py Settings dialog
ui_docs.py In-app markdown (author catalog)
ui_recipe_view.py / ui_recipe_wizard.py Dev: editor / new recipe
ui_source.py Source/target pickers
recipe_catalog.py catalog.json, remote install
recipe_trust.py Manifest SHA256
settings.py ~/.local/share/wine-software/rezeptor/settings.json
log_context.py LogEvent, stable codes E_*
app_support.py humanize_log_line, bug report, releases
i18n/ + locales/*.json UI strings
version_detect.py Engine for YAML version_detect
host_deps.py Suggest missing host tools

UI conventions

  • Sidebar fixed 240 px, primary CTA + More ▾, segment tabs
  • Always Fluent Dark + copper — no system light hybrid, no PyQtDarkTheme
  • Do not override Fluent widgets with host QSS
  • Visual changes (colors, radii, scrollbars) only with explicit approval

Settings (excerpt)

Persisted in settings.json: locale, developer_mode, validate_on_startup, window geometry, recipe order, hidden IDs, recipe_sources, install env, archive passwords, log retention.

Env passed to hook scripts

The GUI sets among others:

Variable Purpose
LAUNCHER_GUI=1 Enables @step: / @progress: tags
LAUNCHER_SESSION_ID Session for reports
RECIPE_DATA_ROOT Chosen data location
RECIPE_INSTALLER_PATH / RECIPE_ARCHIVE_PATH / RECIPE_SOURCE_ROOT Source
RECIPE_TARGET_DIR / RECIPE_DEPLOY_MODE Portable target

In-app docs

ui_docs.pyDOC_CATALOG lists author/user pages under docs/{locale}/. The Help menu opens the local markdown view; GitHub links via github_doc_url.

Bug report (GitHub)

In app_support.py:

  • Clipboard = full body from bug_report.md (report_clipboard_text / build_issue_body)
  • URL short + ?template=bug_report.md (+ label/title); paste supplies the long text
  • Session ID (LAUNCHER_SESSION_ID) only in the report file, not in the status bar

Error codes

Defined in log_context.py, strings under error.* in locales — see I18N.

Install vs reinstall vs repair

Action Script Contract
Install (first time) install.sh Full install_steps
Reinstall (GUI, already installed) install.sh again No automatic wipe — recipe decides what to overwrite; use Uninstall for a clean slate
Repair repair.sh validate.sh → fix gaps only → validate again

Reinstall is not idempotent by design: there is no global pre-install purge. Recipes that need a clean deploy must document it in install.sh or require uninstall first.

Next