2026-01-18 12:13:07 +00:00
|
|
|
# A-La-Karte
|
|
|
|
|
|
|
|
|
|
[](https://develop.kde.org/frameworks/)
|
|
|
|
|
[](https://www.qt.io/)
|
|
|
|
|
[](https://www.gnu.org/licenses/gpl-3.0)
|
|
|
|
|
|
|
|
|
|
A unified game launcher for KDE Plasma 6, inspired by [KDE Apps Initiative issue#26](https://invent.kde.org/teams/apps-initiative/tasks/-/issues/26).
|
|
|
|
|
|
2026-02-09 13:19:21 +00:00
|
|
|
## Project tracks
|
|
|
|
|
|
|
|
|
|
This repository currently has two development tracks:
|
|
|
|
|
|
|
|
|
|
- **Legacy (launcher-first)**
|
|
|
|
|
- The current `master`/`legacy` baseline: a traditional game launcher UI.
|
|
|
|
|
- See `docs/LEGACY.md`.
|
|
|
|
|
- **Gamecenter (launcher + daemons)**
|
|
|
|
|
- The `gamecenter` branch: an experimental direction to evolve A-La-Karte into a launcher + game center suitable for a console-like KDE experience.
|
|
|
|
|
- See `docs/GAMECENTER.md`.
|
|
|
|
|
|
|
|
|
|
For documentation index, see `docs/README.md`.
|
|
|
|
|
|
2026-01-18 12:13:07 +00:00
|
|
|
## Features
|
|
|
|
|
|
|
|
|
|
- Import games from Steam, Lutris, Heroic, Bottles, itch.io, Legendary, RetroArch playlists, Flatpak applications, and desktop entries
|
|
|
|
|
- Manual game entries with editable metadata (name, developer/publisher, executable, working directory)
|
2026-01-25 13:04:38 +00:00
|
|
|
- Per-game launch overrides (environment variables, compatibility runner selection, Wine/Proton prefix path)
|
|
|
|
|
- Per-game screenshots gallery with import and centralized storage
|
2026-01-18 12:13:07 +00:00
|
|
|
- Grid and list views
|
|
|
|
|
- Search by name/developer/publisher and filter by source
|
|
|
|
|
- Favorites and hidden games views
|
|
|
|
|
- Last-played timestamp
|
|
|
|
|
- Optional SteamGridDB cover fetching (requires API key)
|
|
|
|
|
- Optional KRunner integration (if KF6Runner is available at build time)
|
2026-01-24 12:56:51 +00:00
|
|
|
- Gamepad navigation (via SDL3)
|
2026-01-18 12:13:07 +00:00
|
|
|
|
|
|
|
|
## Requirements
|
|
|
|
|
|
|
|
|
|
### Build Dependencies
|
|
|
|
|
|
|
|
|
|
- CMake >= 3.20
|
|
|
|
|
- Qt >= 6.6
|
|
|
|
|
- KDE Frameworks >= 6.0
|
|
|
|
|
- Kirigami
|
|
|
|
|
- KI18n
|
|
|
|
|
- KCoreAddons
|
|
|
|
|
- KConfig
|
|
|
|
|
- Extra CMake Modules (ECM)
|
2026-01-24 12:56:51 +00:00
|
|
|
- SDL3
|
2026-01-18 12:13:07 +00:00
|
|
|
|
|
|
|
|
### Runtime Dependencies
|
|
|
|
|
|
|
|
|
|
- Qt 6 (Core, Quick, QuickControls2, Gui, Network, Concurrent)
|
|
|
|
|
- Kirigami 6
|
|
|
|
|
- KDE Frameworks 6
|
|
|
|
|
|
|
|
|
|
### Optional
|
|
|
|
|
|
|
|
|
|
- Steam (for Steam game import)
|
|
|
|
|
- Lutris (for Lutris game import)
|
|
|
|
|
- Heroic Games Launcher (for Epic/GOG/Amazon game import)
|
|
|
|
|
- Bottles (for Windows apps via Wine)
|
|
|
|
|
- itch.io app (for itch.io games)
|
|
|
|
|
- Legendary CLI (for Epic Games)
|
|
|
|
|
- RetroArch (for retro games via playlists)
|
|
|
|
|
|
|
|
|
|
## Building
|
|
|
|
|
|
|
|
|
|
### Using kde-builder (Recommended)
|
|
|
|
|
|
2026-01-24 12:56:51 +00:00
|
|
|
This project is not currently part of KDE's repo-metadata, so you need to add it as a custom project in your `~/.config/kde-builder.yaml`.
|
|
|
|
|
|
|
|
|
|
1. Set up kde-builder:
|
|
|
|
|
- https://develop.kde.org/docs/getting-started/building/kde-builder-setup/
|
|
|
|
|
2. Install distro build dependencies:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
kde-builder --install-distro-packages
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
3. Add a project entry to `~/.config/kde-builder.yaml`:
|
|
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
|
project alakarte:
|
|
|
|
|
repository: https://invent.kde.org/marcoa/a-la-karte.git
|
|
|
|
|
cmake-options: -DALAKARTE_SDL3_SOURCE_DIR=/path/to/SDL
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
4. Build:
|
|
|
|
|
|
2026-01-18 12:13:07 +00:00
|
|
|
```bash
|
|
|
|
|
kde-builder alakarte
|
|
|
|
|
```
|
|
|
|
|
|
2026-01-24 12:56:51 +00:00
|
|
|
To run the built app:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
kde-builder --run alakarte
|
|
|
|
|
```
|
|
|
|
|
|
2026-01-18 12:13:07 +00:00
|
|
|
### Manual Build
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
cmake -B build -S . -DCMAKE_INSTALL_PREFIX=/usr
|
|
|
|
|
cmake --build build
|
|
|
|
|
cmake --install build
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Development Build
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
cmake -B build -S . -DCMAKE_BUILD_TYPE=Debug
|
|
|
|
|
cmake --build build
|
|
|
|
|
./build/bin/alakarte
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Usage
|
|
|
|
|
|
|
|
|
|
1. Launch A-La-Karte from your application menu or run `alakarte`
|
|
|
|
|
2. If your library is empty, the import dialog opens automatically
|
|
|
|
|
3. Import games from your supported platforms
|
|
|
|
|
4. Your games will appear in the library grid
|
|
|
|
|
5. Select a game to see details, double-click or press Play to launch
|
|
|
|
|
|
|
|
|
|
### Keyboard Shortcuts
|
|
|
|
|
|
|
|
|
|
- **Ctrl+F**: Focus search field
|
|
|
|
|
- **Ctrl+N**: Add new game
|
|
|
|
|
- **Ctrl+I**: Open import dialog
|
|
|
|
|
- **Ctrl+,**: Open settings
|
|
|
|
|
- **Ctrl+H**: Toggle hidden games view
|
|
|
|
|
- **Ctrl+D**: Show game details
|
|
|
|
|
- **F5**: Refresh/import all games
|
|
|
|
|
- **Escape**: Close dialog/sheet or clear search
|
|
|
|
|
- **Enter/Space**: Select/launch game in grid
|
|
|
|
|
|
|
|
|
|
### Gamepad Controls
|
|
|
|
|
|
|
|
|
|
- **D-pad / Left Stick**: Navigate grid
|
|
|
|
|
- **A Button**: Select/launch game
|
|
|
|
|
- **B Button**: Back/close dialog
|
|
|
|
|
- **Start**: Open settings
|
|
|
|
|
- **Y Button**: Focus search
|
|
|
|
|
|
|
|
|
|
## Supported Platforms
|
|
|
|
|
|
|
|
|
|
### Steam
|
|
|
|
|
|
|
|
|
|
A-La-Karte automatically detects Steam installations at:
|
|
|
|
|
- `~/.steam/steam`
|
|
|
|
|
- `~/.local/share/Steam`
|
|
|
|
|
- Flatpak: `~/.var/app/com.valvesoftware.Steam/.local/share/Steam`
|
|
|
|
|
|
|
|
|
|
All library folders are scanned for installed games.
|
|
|
|
|
|
|
|
|
|
### Lutris
|
|
|
|
|
|
|
|
|
|
Games are imported from:
|
|
|
|
|
- `~/.local/share/lutris`
|
|
|
|
|
- Flatpak: `~/.var/app/net.lutris.Lutris/data/lutris`
|
|
|
|
|
|
|
|
|
|
Uses the Lutris CLI when available for best results.
|
|
|
|
|
|
|
|
|
|
### Heroic Games Launcher
|
|
|
|
|
|
|
|
|
|
Supports Epic Games, GOG, and Amazon Games via Heroic:
|
|
|
|
|
- `~/.config/heroic`
|
|
|
|
|
- Flatpak: `~/.var/app/com.heroicgameslauncher.hgl/config/heroic`
|
|
|
|
|
|
|
|
|
|
### Bottles
|
|
|
|
|
|
|
|
|
|
Windows applications via Wine:
|
|
|
|
|
- `~/.local/share/bottles`
|
|
|
|
|
- Flatpak: `~/.var/app/com.usebottles.bottles/data/bottles`
|
|
|
|
|
|
|
|
|
|
### itch.io
|
|
|
|
|
|
|
|
|
|
Games installed via the itch.io app:
|
|
|
|
|
- `~/.config/itch/db/butler.db`
|
|
|
|
|
- Flatpak: `~/.var/app/io.itch.itch/config/itch/db/butler.db`
|
|
|
|
|
|
|
|
|
|
### Legendary
|
|
|
|
|
|
|
|
|
|
Epic Games via Legendary CLI:
|
|
|
|
|
- `~/.config/legendary`
|
|
|
|
|
|
|
|
|
|
### RetroArch
|
|
|
|
|
|
|
|
|
|
Retro games from RetroArch playlists:
|
|
|
|
|
- `~/.config/retroarch/playlists`
|
|
|
|
|
- Flatpak: `~/.var/app/org.libretro.RetroArch/config/retroarch/playlists`
|
|
|
|
|
|
|
|
|
|
### Desktop Entries
|
|
|
|
|
|
|
|
|
|
Games from XDG .desktop files in standard application directories.
|
|
|
|
|
|
|
|
|
|
### Flatpak Games
|
|
|
|
|
|
|
|
|
|
Games installed as Flatpak applications (detected by category).
|
|
|
|
|
|
|
|
|
|
## Configuration
|
|
|
|
|
|
|
|
|
|
Settings are stored in `~/.config/alakarterc` and include:
|
|
|
|
|
|
|
|
|
|
- View mode (Grid/List)
|
|
|
|
|
- Grid size
|
|
|
|
|
- Platform badge visibility
|
|
|
|
|
- Auto-import on startup
|
|
|
|
|
- Enabled import sources
|
|
|
|
|
|
|
|
|
|
Game library is stored in `~/.local/share/alakarte/library.json`.
|
|
|
|
|
|
2026-01-25 13:04:38 +00:00
|
|
|
Imported screenshots are stored under `~/.local/share/alakarte/media/screenshots/<gameId>/`.
|
|
|
|
|
|
2026-01-18 12:13:07 +00:00
|
|
|
## Code Overview
|
|
|
|
|
|
|
|
|
|
- **Application entry point**: `src/main.cpp`
|
|
|
|
|
- **Core singleton**: `src/app.*` exposes models/services to QML (game model, launcher, config, SteamGridDB)
|
|
|
|
|
- **Data model**:
|
|
|
|
|
- `src/game.*` stores per-game metadata
|
|
|
|
|
- `src/gamemodel.*` and `src/gamesortfiltermodel.*` provide sorting/filtering for the UI
|
2026-01-25 13:04:38 +00:00
|
|
|
- **Media**: `src/mediamanager.*` + `src/screenshotmodel.*` provide centralized per-game screenshot management
|
2026-01-18 12:13:07 +00:00
|
|
|
- **Importers**: `src/*importer.*` (Steam/Lutris/Heroic/etc.)
|
|
|
|
|
- **Launcher**: `src/gamelauncher.*` launches processes/URLs and records last-played on launch
|
|
|
|
|
- **UI**: `src/qml/` (Kirigami + Qt Quick)
|
|
|
|
|
|
|
|
|
|
## Local Smoke Testing (Repeatable)
|
|
|
|
|
|
|
|
|
|
If you want to test without affecting your real configuration/library, run with isolated XDG directories:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
export XDG_CONFIG_HOME="$(mktemp -d)"
|
|
|
|
|
export XDG_DATA_HOME="$(mktemp -d)"
|
|
|
|
|
./build/bin/alakarte
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Suggested quick checks:
|
|
|
|
|
|
|
|
|
|
1. Add a manual entry with a harmless command (e.g. `true` or `sleep 2`) and launch it.
|
|
|
|
|
2. Confirm `Last played` updates after launch.
|
|
|
|
|
3. Toggle favorite/hidden and confirm filtering works.
|
|
|
|
|
4. Open the import sheet and run an import; confirm it completes and does not crash even if sources are missing.
|
|
|
|
|
5. (Optional) Create a temporary `.desktop` file under `$XDG_DATA_HOME/applications/` and verify the Desktop Entries importer detects it.
|
|
|
|
|
|
|
|
|
|
## Contributing
|
|
|
|
|
|
|
|
|
|
Contributions are welcome! Please see the [KDE development guidelines](https://community.kde.org/Get_Involved/development).
|
|
|
|
|
|
|
|
|
|
### Getting Started
|
|
|
|
|
|
|
|
|
|
1. Set up your development environment: https://develop.kde.org/docs/getting-started/building/kde-builder-setup/
|
|
|
|
|
2. Clone the repository
|
|
|
|
|
3. Build and test your changes
|
|
|
|
|
4. Submit a merge request
|
|
|
|
|
|
|
|
|
|
### Code Style
|
|
|
|
|
|
|
|
|
|
This project follows KDE coding conventions:
|
|
|
|
|
- https://community.kde.org/Policies/Frameworks_Coding_Style
|
|
|
|
|
- https://community.kde.org/Policies/Library_Code_Policy
|
|
|
|
|
|
|
|
|
|
## License
|
|
|
|
|
|
|
|
|
|
A-La-Karte is licensed under the GNU General Public License v3.0 or later.
|
|
|
|
|
|
|
|
|
|
See [LICENSES/GPL-3.0-or-later.txt](LICENSES/GPL-3.0-or-later.txt) for the full license text.
|
|
|
|
|
|
|
|
|
|
## Links
|
|
|
|
|
|
|
|
|
|
- [KDE API Documentation](https://api.kde.org/)
|
|
|
|
|
- [Kirigami Documentation](https://develop.kde.org/frameworks/kirigami/)
|
|
|
|
|
- [KDE Development Guidelines](https://community.kde.org/Get_Involved/development)
|
|
|
|
|
- [Project Repository](https://invent.kde.org/marcoa/a-la-karte)
|
|
|
|
|
- [Issue Tracker](https://invent.kde.org/marcoa/a-la-karte/-/issues)
|