protontool
A tool for managing Wine/Proton prefixes with built-in component installation (DLLs, fonts, settings) for Steam games and custom prefixes.
Building
The binaries will be placed in target/release/:
protontool- Main CLI toolprotontool-launch- Launch Windows executablesprotontool-desktop-install- Install desktop shortcuts
Usage
Install components for a game
Search for games
List all installed games
Launch GUI
Run a custom command
Launch a Windows executable
Compile-time Configuration
Custom paths can be set at compile time using feature flags and environment variables:
# Custom Steam directory
protontool_DEFAULT_STEAM_DIR=/custom/steam \
# Custom GUI provider (yad or zenity)
protontool_DEFAULT_GUI_PROVIDER=yad \
# Custom Steam Runtime path
protontool_STEAM_RUNTIME_PATH=/custom/runtime \
Environment Variables
| Variable | Description |
|---|---|
STEAM_DIR |
Path to custom Steam installation |
PROTON_VERSION |
Name of preferred Proton installation |
WINE |
Path to custom wine executable |
WINESERVER |
Path to custom wineserver executable |
STEAM_RUNTIME |
0 = disable, 1 = enable, or path to custom runtime |
protontool_GUI |
GUI provider (yad or zenity) |
Variables set by protontool
| Variable | Description |
|---|---|
STEAM_APPID |
App ID of the current game |
STEAM_APP_PATH |
Path to the game's installation directory |
PROTON_PATH |
Path to the Proton installation |
Project Structure
src/
├── main.rs # protontool entry point
├── lib.rs # library root
├── bin/
│ ├── launch.rs # protontool-launch
│ └── desktop_install.rs
├── cli/
│ ├── mod.rs # CLI logic and mode handlers
│ └── util.rs # Argument parsing, logging
├── config.rs # Configuration and defaults
├── gui.rs # Zenity/YAD dialog wrappers
├── steam.rs # Steam installation detection
├── util.rs # Utilities
├── winetricks/ # Built-in verb installation system
└── vdf/
├── mod.rs
├── parser.rs # Valve Data Format parser
└── vdict.rs # VDF dictionary structure
Requirements
- Rust 1.70+ (for building)
- Steam
- Proton
zenityoryad(for GUI dialogs)
License
MIT