Leadaxe:singbox-launcher 按 SPEC 135 拆分程序、数据与日志目录,已合入 develop
singbox-launcher 已按 SPEC 135 完成,以提交 eeae31c8 合入 develop,CI 在 Linux、macOS、Windows 均通过。路径拆成三种角色:程序目录只读,数据与日志各写自己的目录——Linux 为 $XDG_DATA_HOME/singbox-launcher 与 $XDG_STATE_HOME/singbox-launcher/logs,macOS 为 ~/Library/Application Support 与 ~/Library/Logs 下的 singbox-launcher,Windows 为 %LOCALAPPDATA%\singbox-launcher。二进制目录只读时(NixOS、Guix、Flatpak、snap)不再导致启动失败。 与 issue 提议的差异:未用 os.UserConfigDir(Windows 下是漫游 %APPDATA%,不适合放 70 MB 内核与缓存);数据用单一根目录、不细分 config/data/cache;自带模板、语言文件与内核不再于首次启动复制,按「数据→程序」就地读取;既有数据不重建,数据与二进制同目录的安装仍在原处运行;改用命名类型 AppDir/DataDir/LogDir,把程序目录传给写入调用由编译器阻止。 环境变量:SINGBOX_LAUNCHER_DATA_DIR、SINGBOX_LAUNCHER_LOG_DIR、SINGBOX_LAUNCHER_CORE。Linux 内核查找顺序改为数据目录 → 程序旁 → PATH,发行版自带的 sing-box 不再覆盖下载的 fork。查看路径:Settings → Storage → Copy paths 或 -paths;清理删除:Remove all data… 或 -purge-data。
作者原文@LeadaxeСделано (SPEC 135), влито в
developкоммитом eeae31c8, CI зелёный на Linux, macOS и Windows.Что изменилось. Пути разведены на три роли: папка программы только читается, данные и логи пишутся в свои каталоги. На Linux это
$XDG_DATA_HOME/singbox-launcher(по умолчанию~/.local/share/singbox-launcher) и$XDG_STATE_HOME/singbox-launcher/logs; на macOS~/Library/Application Support/singbox-launcherи~/Library/Logs/singbox-launcher; на Windows%LOCALAPPDATA%\singbox-launcher. Read-only каталог бинаря (NixOS, Guix, Flatpak, snap) больше не роняет старт.Чем отличается от предложенного в issue.
- Не
os.UserConfigDir(): на Windows это roaming%APPDATA%, куда не место 70 МБ ядра и кэшам; на Linux это~/.config. Один корень данных без дробления на config/data/cache, чтобы «чистильщики» кэша не ломалиconfig.json.- Поставляемое (шаблон, локали, ядро) не копируется при первом запуске, а читается на месте по цепочке «данные → программа». Копия появляется только когда лаунчер сам что-то скачал.
- Существующие данные не «пересоздаются»: установки с данными рядом с бинарём продолжают работать там же (portable по маркеру
portable.txtили по факту наличия данных рядом с пишущимся бинарём), а на macOS данные из бандла переносятся в~/Libraryпри первом запуске.- Вместо переименования функций путей — именованные типы
AppDir/DataDir/LogDir: передать папку программы в пишущий вызов не даёт компилятор, плюс страж в CI.Переменные окружения:
SINGBOX_LAUNCHER_DATA_DIR,SINGBOX_LAUNCHER_LOG_DIR(для Flatpak-обёрток и пакетов),SINGBOX_LAUNCHER_CORE(явный путь к ядру). Порядок поиска ядра на Linux теперь: папка данных → рядом с программой →PATH; дистрибутивныйsing-boxбольше не перекрывает скачанный форк.Посмотреть пути: Settings → Storage → Copy paths, либо
singbox-launcher -pathsбез окна. Удаление с очисткой: Settings → Storage → Remove all data… или-purge-data/-purge-data -yes.Проверка на NixOS/Flatpak с вашей стороны будет полезна: интересны вывод
-pathsи первая строка логаlayout: ….