$ show Faugus/faugus-launcher
Faugus Launcher is a Linux-native game launcher designed to run Windows games via compatibility layers (UMU-Launcher/Proton/Wine). It provides a modern GTK4/libadwaita GUI with multiple views (list, grid, covers, carrousel) for managing and launching games from sources like Steam, Epic, and others. The application handles game configuration, Proton version management, prefix handling, shortcut creation (desktop/appmenu/Steam), system tray integration, backup/restore of settings, and performance tool integration (MangoHud, GameMode, Lossless Scaling). Architecturally, it follows a modular Python structure with clear separation of concerns: launcher.py (main GUI), runner.py (game execution), config_manager.py (settings), proton_manager.py (Proton handling), backup.py (backup/restore), shortcut.py (shortcut creation), tray_sni.py (system tray), and various utility modules. Key entry points include the main launcher (launched via flatpak/AppImage/binary), the runner for game execution, and the tray daemon for background operation. Data flows involve storing game metadata in JSON files (games.json), configuring launch environments, and interacting with external services like SteamGridDB for art and GitHub for Proton/UMU updates. The application demonstrates strong engineering practices: atomic JSON writes to prevent corruption, proper GTK resource cleanup, background task handling, cross-platform path management for Flatpak/AppImage/native installs, and a configuration migration system. While it relies on external tools (mangohud, gamemoderun, icoextract) and online APIs (SteamGridDB, GitHub), it gracefully handles missing dependencies. The codebase is actively maintained with recent commits, CI/CD workflows for multiple packaging formats, and ongoing translation efforts.
The LLM identified 5 files worth highlighting for reuse:
Manages application directories (config, data, state, cache) across deployment methods (native, Flatpak, AppImage) by abstracting XDG base directories and handling environment variables like HOST_HOME and APPIMAGE_PATH. This isolated utility ensures correct path resolution regardless of installation method, demonstrating non-obvious skill in Linux desktop deployment complexities.
Handles loading, saving, and migrating application configuration with default values. Supports automatic migration between configuration versions through a chain of migration functions, ensuring forward and backward compatibility. This self-contained module can be extracted for any application needing persistent, versioned configuration.
Provides reusable utility functions: atomic JSON read/write (load_json_file, save_json_file) to prevent corruption, a background task runner (run_in_background) using thread pools, and GTK widget cleanup (destroy_and_release). These low-coupling utilities solve common problems in desktop applications with minimal dependencies.
Contains custom GTK4 widgets: IdComboBox (a DropDown that associates an ID with each item for data binding) and HiDpiMixin (for scaling textures in high-DPI displays). These encapsulated widgets solve recurring UI challenges in GTK applications and can be reused with minimal adaptation.
Implements a system tray icon using DBus and the StatusNotifierItem specification (with fallback). Manages tray menu, icon updates, tooltips, and click interactions. This self-contained component provides a reliable system tray implementation for Linux applications, abstracting DBus menu creation and event handling complexities.