|
1 | 1 | # PrefixHQ |
2 | 2 |
|
3 | | -**PrefixHQ** is a Linux GUI tool for managing Steam Proton/Wine prefixes. It helps identify and handle orphaned or leftover prefixes, making it easy to clean up your system and manage game configurations. |
| 3 | + |
| 4 | + |
| 5 | + |
4 | 6 |
|
5 | | -## Features |
| 7 | +A modern, visual manager for Steam CompatData (Proton/Wine prefixes) on Linux. |
| 8 | +Transform your folder structure into a beautiful game library with automatic cover art and multi-library awareness. |
6 | 9 |
|
7 | | -* **Scan Installed Games:** Automatically detects installed Steam games. |
8 | | -* **Orphan Prefix Management:** Lists prefixes in `~/.local/share/Steam/steamapps/compatdata` that no longer correspond to installed games. |
9 | | -* **Safe Deletion:** Delete selected prefixes with warnings for non-Steam programs to prevent accidental data loss. |
10 | | -* **Open Prefix Directory:** Quickly open a prefix folder in your file manager. |
11 | | -* **Rename Games:** Customize display names for games or prefixes. |
12 | | -* **Local Database:** Stores installed games and custom names in `~/.config/PrefixHQ/games.json` for faster access. |
| 10 | +--- |
13 | 11 |
|
14 | | -## Installation |
| 12 | +## ✨ Features |
15 | 13 |
|
16 | | -1. Download the latest precompiled binary from the [Releases](https://github.com/Nastas95/PrefixHQ/releases) page. |
17 | | -2. Run it! |
| 14 | +### 🖼️ Visual Game Library |
| 15 | +- **Responsive Grid Layout** – Card-based interface with high-quality Steam cover art |
| 16 | +- **Automatic Cover Downloads** – Fetches official header images from Steam API |
| 17 | +- **Local Image Caching** – Saves covers to `~/.config/PrefixHQ/cache/` for instant reloads |
| 18 | +- **Custom Cover Support** – Override covers via URL, local file, or SteamGridDB search |
18 | 19 |
|
19 | | -## Requirements |
| 20 | +### 📚 Multi-Library Awareness |
| 21 | +- **Automatic Library Detection** – Parses `libraryfolders.vdf` to discover *all* Steam libraries (primary + secondary drives, external SSDs) |
| 22 | +- **Cross-Library Matching** – Correctly pairs prefixes with game names even when game files reside in a different library |
| 23 | +- **Installation Status Tracking** – Visual indicators distinguish installed vs. orphaned prefixes: |
| 24 | + - ✅ **Green** = Game currently installed |
| 25 | + - ⚠️ **Red** = Prefix orphaned (game uninstalled) |
20 | 26 |
|
21 | | -* Linux with Steam installed |
22 | | -* No need to install Python or dependencies — all required libraries are bundled in the binary |
23 | | -* (*Optional*) Internet connection (**upon launch PrefixHQ tries to download the Steam appID from [this source](https://store.steampowered.com/api/appdetails) and save it to the config folder**) |
| 27 | +### ⚙️ Universal Compatibility |
| 28 | +- Works out-of-the-box with: |
| 29 | + - Native Steam (`~/.steam/steam`) |
| 30 | + - Flatpak (`~/.var/app/com.valvesoftware.Steam/`) |
| 31 | + - Snap (`~/snap/steam/common/`) |
24 | 32 |
|
25 | | -## Notes |
| 33 | +### ⚡ Performance & Safety |
| 34 | +- **Background Scanning** – Async prefix detection via `QThread` (no UI freezing) |
| 35 | +- **Smart Deduplication** – Handles edge cases where same AppID appears across libraries |
| 36 | +- **Permission-Aware** – Skips unreadable directories gracefully |
| 37 | +- **Safe Deletion** – Confirmation dialogs before removing prefixes |
26 | 38 |
|
27 | | -* Uses `~/.local/share/Steam/steamapps/compatdata` to detect Proton/Wine prefixes. |
28 | | -* Stores configuration in `~/.config/PrefixHQ/`. |
29 | | -* Safe for managing Steam prefixes, but deletion of non-Steam prefixes may remove important files — proceed with caution. |
| 39 | +### 🖱️ Context Menu Actions (Right-Click) |
| 40 | +- `Open Prefix Folder` – Jump directly to `compatdada` directory |
| 41 | +- `Search on SteamGridDB` – Find community artwork alternatives |
| 42 | +- `Load Cover from File...` – Use local image |
| 43 | +- `Load Cover from URL...` – Fetch custom cover from web |
| 44 | +- `Mark as Installed/Uninstalled` – Override detection status manually |
| 45 | + |
| 46 | +--- |
| 47 | + |
| 48 | +## 🛠️ Requirements |
| 49 | + |
| 50 | +| Component | Requirement | |
| 51 | +|-----------|-------------| |
| 52 | +| **OS** | Linux | |
| 53 | +| **Python** | 3.8+ | |
| 54 | +| **Dependencies** | `PyQt6>=6.4.0`, `requests>=2.28.0` | |
| 55 | + |
| 56 | +> 💡 All other dependencies (`os`, `sys`, `json`, `pathlib`, etc.) are part of Python's standard library. |
| 57 | +
|
| 58 | +--- |
| 59 | + |
| 60 | +## 🚀 Installation & Usage |
| 61 | + |
| 62 | + |
| 63 | +### Option 1: Binary Releases |
| 64 | +Download the latest Binary from the [Releases Page](https://github.com/yourusername/PrefixHQ/releases). |
| 65 | + |
| 66 | + |
| 67 | +### Option 2: Run from Source |
| 68 | + |
| 69 | +```bash |
| 70 | +# Clone the repository |
| 71 | +git clone https://github.com/Nastas95/PrefixHQ |
| 72 | +cd PrefixHQ |
| 73 | + |
| 74 | +# Install dependencies |
| 75 | +pip install -r requirements.txt |
| 76 | + |
| 77 | +# Launch the application |
| 78 | +python PrefixHQ.py |
| 79 | +``` |
| 80 | + |
| 81 | +--- |
| 82 | + |
| 83 | +## 🎮 How It Works |
| 84 | + |
| 85 | +1. **Scanning** |
| 86 | + On launch, PrefixHQ scans all Steam installations (Native/Flatpak/Snap) and parses `libraryfolders.vdf` to discover every library location. |
| 87 | + |
| 88 | +2. **Matching** |
| 89 | + Scans `steamapps/compatdata/` folders and matches AppID-named directories to installed games using: |
| 90 | + - Local `.acf` manifest files (primary method) |
| 91 | + - Steam API fallback (if needed) |
| 92 | + |
| 93 | +3. **Visualizing** |
| 94 | + Presents prefixes as visual cards with: |
| 95 | + - Game cover art |
| 96 | + - AppID and custom name |
| 97 | + - Status indicator (installed vs. uninstalled) |
| 98 | + |
| 99 | +4. **Cleaning** |
| 100 | + Safely delete orphaned prefixes to reclaim disk space — with confirmation dialogs to prevent accidents. |
| 101 | + |
| 102 | +--- |
| 103 | + |
| 104 | +## ⚙️ Configuration & Data Storage |
| 105 | + |
| 106 | +All data is stored locally under `~/.config/PrefixHQ/`: |
| 107 | + |
| 108 | +| File/Folder | Purpose | |
| 109 | +|-------------|---------| |
| 110 | +| `prefix_db.json` | Database storing custom names, manual status overrides, and API cache | |
| 111 | +| `cache/` | Local storage for downloaded cover art (avoids repeated API calls) | |
| 112 | + |
| 113 | +> 🔁 First launch may take 10–30 seconds while cover art downloads. Subsequent launches are instant thanks to caching. |
| 114 | +
|
| 115 | +--- |
| 116 | + |
| 117 | +## ⚠️ Important Warning |
| 118 | + |
| 119 | +> [!WARNING] |
| 120 | +> **Deleting a prefix permanently removes all data inside that Proton container**, including: |
| 121 | +> - Windows game saves |
| 122 | +> - Configuration files |
| 123 | +> - Installed mods and custom content |
| 124 | +> |
| 125 | +> **Always verify** a prefix is truly orphaned before deletion. When in doubt, back up the folder first. |
| 126 | +
|
| 127 | +--- |
| 128 | + |
| 129 | +## 📝 License |
| 130 | + |
| 131 | +Distributed under the **GNU General Public License v3.0** |
| 132 | + |
| 133 | +See [`LICENSE`](LICENSE) for the full license text. |
0 commit comments