Carat::Apps
app: true у бинарника превращает его из CLI-утилиты в desktop-приложение.
Вместо общего bin-каталога бинарник получает собственный app-каталог:
~/.carat/apps/<name>/ bin/<name> бинарник (портабельный корень приложения) icons/<name>.png иконка (или .svg / платформенный .ico / .icns) manifest сгенерированные снаружи пути (задел под uninstall)
Иконка берётся из assets:appicon: (любой путь в шарде), её формат
проверяется по magic bytes (marcel.cr) — только PNG или SVG. Конвертация
не требуется: .desktop принимает PNG/SVG напрямую, а .ico/.icns —
контейнеры, принимающие PNG-payload без перекодирования (Ico/Icns).
На каждую платформу генерируется нативная точка входа: XDG .desktop на Linux (одинаково для всех дистрибутивов — спецификация вместо uname), ярлык в Start Menu на Windows, .app-бандл в ~/Applications на macOS. Приложение ничего не знает про carat: свои ассеты оно ищет относительно себя (portable-app конвенция), лаунчер ссылается абсолютными путями.
Constants
Class methods
Все бинарники с desktop-интеграцией (launchers:) шарда: иконка,
при необходимости переезд бинарника с PATH в app-каталог, нативные
лаунчеры (menu/desktop). Вызывается после сборки (глобальная установка).
Размеры из IHDR (PNG-заголовок) — для Ico/Icns без декодирования.