Originally created by: kristofferR
Carrier ships Tauri's generator-default .desktop file and no AppStream metadata. Hand-author both; the metainfo is also a Flathub prerequisite (Ref [#150]).
Desktop template with actions. src-tauri/linux/carrier.desktop.hbs replicating the generated file (including StartupWMClass=carrier) plus:
Actions=new-conversation;settings;
[Desktop Action new-conversation]
Name=New Conversation
Exec={{exec}} --new-conversation
[Desktop Action settings]
Name=Settings
Exec={{exec}} --settings
Wired via bundle.linux.deb.desktopTemplate and bundle.linux.rpm.desktopTemplate (both verified in the config schema). AppImage has no key but reuses the deb template in tauri-bundler — verify by building and diffing the extracted .desktop. Check tauri-bundler's default template for exact Handlebars variable names before writing ours. AUR repackages the deb, so it inherits everything.
CLI flags. New src-tauri/src/cli.rs: CliAction::{NewConversation, Settings} + pure, unit-tested parse_cli_action. Settings → show_settings_window; NewConversation → show_main + the same eval the File-menu item uses (__carrierShortcuts.newConversation() — extract into a shared const). Warm path: the single-instance callback parses argv (today it's ignored). Cold start: parse env::args(); NewConversation waits on a page-load hook with a short bounded retry since __carrierShortcuts registers after load — best-effort, documented.
AppStream metainfo. src-tauri/linux/io.github.kristofferr.carrier.metainfo.xml: matching id, <launchable>Carrier.desktop</launchable>, MIT, OARS (social-chat: intense, social-info: moderate), screenshots hosted under docs/ (GitHub Pages), manual <releases>. Shipped via bundle.linux.{deb,rpm,appimage}.files → /usr/share/metainfo/. Contact uses the noreply address only.
CI. Add appstreamcli validate --no-net + desktop-file-validate (on a rendered template) to ci.yml, plus a grep-gate asserting no personal email appears under packaging/ or src-tauri/linux/.
Manual testing: launcher right-click actions on KDE/GNOME; carrier --new-conversation warm (second instance) and cold; validators pass; AppImage picked up the template.
Part of [#171].
Tickets: #150
Tickets: #171
Tickets: #175
Tickets: #176
Tickets: #179
Tickets: #184
Tickets: #187
Tickets: #195
Tickets: #56
Originally posted by: kristofferR
Implemented and merged in [#195]: Carrier now ships desktop actions, CLI activation flags, AppStream metadata, and CI packaging validation. Closing as complete.
Related
Tickets:
#195Ticket changed by: kristofferR