# Non-Steam Shortcuts через VDF ## Главное правило **Steam должен быть выключен** перед записью shortcuts.vdf. Если Steam работает — он перезапишет файл из памяти при следующем запуске. ## Единственный правильный способ — vdf.binary_load Использовать модуль `vdf` (установлен на HTPC через pip). **Никогда** не редактировать бинарный VDF через ручную сборку байтов или замену строк — это ломает файл. ```python import os, vdf, shutil, binascii, struct vdf_path = os.path.expanduser('~/.steam/steam/userdata/147839491/config/shortcuts.vdf') # 1. Бэкап shutil.copy2(vdf_path, vdf_path + '.bak') # 2. Загрузить существующий with open(vdf_path, 'rb') as f: data = vdf.binary_load(f) shortcuts = data.get('shortcuts', {}) # 3. Вычислить appid (алгоритм Steam) def compute_appid(name, exe): key = exe + name top = binascii.crc32(key.encode('utf-8')) | 0x80000000 return struct.unpack('i', struct.pack('I', top))[0] # 4. Создать entry next_idx = str(len(shortcuts)) shortcuts[next_idx] = { 'AppName': 'Game Name', 'Exe': '/path/to/game.exe', 'StartDir': '/path/to/', 'LaunchOptions': '', 'appid': compute_appid('Game Name', '/path/to/game.exe'), 'IsHidden': 0, 'AllowDesktopConfig': 1, 'AllowOverlay': 1, 'OpenVR': 0, 'Devkit': 0, 'DevkitGameID': '', 'DevkitOverrideAppID': 0, 'LastPlayTime': 0, 'FlatpakAppID': '', 'sortas': '', 'tags': {}, } # 5. Записать data['shortcuts'] = shortcuts with open(vdf_path, 'wb') as f: vdf.binary_dump(data, f) ``` ## CompatToolMapping (Proton) в config.vdf После добавления shortcut нужно прописать Proton в текстовом `config.vdf`: ```python import vdf CONFIG_PATH = os.path.expanduser('~/.local/share/Steam/config/config.vdf') with open(CONFIG_PATH, 'r') as f: config = vdf.load(f) compat_map = config['InstallConfigStore']['Software']['Valve']['Steam'].setdefault('CompatToolMapping', {}) compat_map[str(appid_signed)] = { 'name': 'GE-Proton10-34', # или 'proton_experimental' 'config': '', 'Priority': '250', } with open(CONFIG_PATH, 'w') as f: vdf.dump(config, f) ``` ## Полный скилл Вся процедура (shortcuts + Proton + artwork) описана в скилле `steam-emulator-shortcuts`. Смотреть там. ## Бэкап Автоматический бэкап `shortcuts.vdf` делается ежедневно скриптом `backup-saves.sh` на HTPC, версии хранятся в `/run/media/bazzite/Data/backups/saves/shortcuts/` (последние 30 копий). ## Перезагрузка Steam После записи VDF — перезапустить Steam, чтобы он подхватил изменения.