# umutray A small system-tray daemon and CLI for running Windows game launchers on Linux via [umu-launcher](https://github.com/Open-Wine-Components/umu-launcher) and [GE-Proton](https://github.com/GloriousEggroll/proton-ge-custom). Ships with presets for six launchers out of the box: - Battle.net - EA App - Epic Games - Ubisoft Connect - GOG Galaxy - Rockstar Games Each lives in its own Wine prefix and shows up in the tray with per-launcher Launch / Kill entries. Users can add or remove launchers in `config edit`. ## Features - Tray icon on any SNI-capable desktop (KDE, GNOME+AppIndicator, Xfce …). - Per-launcher running state reflected in the tray via a 2 s poller. - `update-proton` — streams GE-Proton releases straight to disk from GitHub (no ~600 MB in-memory buffering), with a progress indicator. - `diagnose` — sanity-checks umu-run, Vulkan, display server, per-launcher prefix / exe / ownership / running state. - `service` — installs a `systemd --user` unit so the tray autostarts with the graphical session. - `setup` — graphical wizard (iced) that downloads an installer URL (with progress bar) or accepts a local `.exe`, then runs it via `umu-run` in the launcher's Wine prefix with a live log pane. Uninstalled launchers expose a **Setup…** entry directly in the tray. ## Install ```sh cargo build --release install -Dm755 target/release/umutray ~/.local/bin/umutray ``` Requires `umu-launcher`, `tar`, and `vulkan-tools` on PATH. On Arch: ```sh sudo pacman -S umu-launcher vulkan-tools ``` Then enable autostart: ```sh umutray service install ``` ## Usage | Command | What it does | | -------------------------------- | ------------------------------------------------------- | | `umutray` | Start the tray daemon (default) | | `umutray launchers` | List configured launchers and their state | | `umutray launch ` | Launch a specific launcher (e.g. `umutray launch epic`) | | `umutray kill []` | Kill one launcher, or all if no name is given | | `umutray play ` | Play a game with its configured overlays | | `umutray games []` | List configured games and their overlay flags | | `umutray diagnose []` | Health checks (one launcher or all) | | `umutray setup ` | Open the graphical setup wizard for a launcher | | `umutray update-proton --latest` | Install newest GE-Proton release | | `umutray update-proton --list` | Show recent releases without installing | | `umutray update-proton` | Interactive version picker | | `umutray config show` / `path` | Print current config or its file path | | `umutray config edit` | Open config in `$EDITOR` | | `umutray config set …` | Update globals (`--proton-version`, `--compat-dir`) | | `umutray config add-launcher …` | Append a new launcher (needs `--exe-path`) | | `umutray config remove-launcher` | Drop a launcher (prefix on disk is left untouched) | | `umutray config add-game …` | Attach a game to a launcher (needs `--exe-path`) | | `umutray config remove-game …` | Drop a game from a launcher | | `umutray config set-game-flags …`| Per-game overlay toggles: gamemode/mangohud/gamescope | | `umutray service install` | Write + enable a `systemd --user` unit | | `umutray service uninstall` | Stop, disable, and remove the unit | | `umutray service status` | `systemctl --user status umutray.service` | ## Config Lives at `~/.config/umutray/config.toml`. A full config looks like: ```toml proton_compat_dir = "/home/you/.local/share/Steam/compatibilitytools.d" proton_version = "GE-Proton" [[launchers]] name = "battlenet" display = "Battle.net" prefix_dir = "/home/you/Games/battlenet" exe_path = "Program Files (x86)/Battle.net/Battle.net Launcher.exe" gameid = "umu-battlenet" process_pattern = "Battle\\.net" # …one [[launchers]] block per launcher ``` `proton_version = "GE-Proton"` tells umu-launcher to auto-fetch the latest. Setting it to a pinned tag (done automatically by `update-proton`) uses that specific version. Each launcher may override the global `proton_version` with its own. ## License MIT. See [LICENSE](LICENSE).