A module that cannot set Betterbird up is of little use (the operator, 2026-10-12). The module now declares the community package absent and unpacks the pinned upstream release where that package had it, so the same profile opens; places the enterprise policy that turns Betterbird's updater off and force-installs Owl from the xpi the mesh pinned by its vendor's digest (never in a repository); and takes the operator's accounts from the trusted setting accounts, without any password or token: an account the profile already holds is adopted under its own keys, a new one is created under the module's mesh_ keys, an ambiguous one is refused with the remedy, and the account lists are only written into. betterbird_accounts says the profile's accounts by count and proposes the setting built from them for the operator's Approve. Every new build waits for the operator's push. The reminder test is visibly a test (MESH TEST band, event name) and its description says it opens a window on the operator's screen.
151 lines
6.6 KiB
JSON
151 lines
6.6 KiB
JSON
{
|
|
"module": "betterbird",
|
|
"version": "1",
|
|
"upgrade": {
|
|
"policy": "record",
|
|
"why": "a new build may remove the community package betterbird-bin and replaces the installation in /opt/betterbird, which a running Betterbird has open: the switch on each node and every upgrade wait for the operator, who quits Betterbird first and then pushes (novox/hq ADR 0316 §4, §5)"
|
|
},
|
|
"requires": [
|
|
"x11-display"
|
|
],
|
|
"invokes": [
|
|
"seat:mesh-controller.settings"
|
|
],
|
|
"settings": {
|
|
"prefs": {
|
|
"kind": "preference",
|
|
"default": "// none",
|
|
"why": "Betterbird runs with its own defaults until a machine's assignment names a preference: one line of user_pref(\"name\", value); statements, which the module's user.js holds and Betterbird reads at its start (novox/hq issue 345). An account's preferences (mail.account., mail.identity., mail.server., mail.smtpserver. and the account lists) are refused here: an account is declared in the setting accounts, so it has one owner (novox/hq ADR 0316 §11)"
|
|
}
|
|
},
|
|
"tools": [
|
|
"betterbird_status",
|
|
"betterbird_prefs",
|
|
"betterbird_user_js",
|
|
"betterbird_log",
|
|
"betterbird_restart",
|
|
"betterbird_check",
|
|
"betterbird_accounts",
|
|
"betterbird_reminder_test"
|
|
],
|
|
"resources": [
|
|
{
|
|
"id": "configuration-dir",
|
|
"type": "directory",
|
|
"path": "${machine:account-home}/.config/betterbird",
|
|
"owner": "${machine:account}",
|
|
"mode": "0755"
|
|
},
|
|
{
|
|
"id": "user-js",
|
|
"type": "file",
|
|
"path": "${machine:account-home}/.config/betterbird/user.js",
|
|
"owner": "${machine:account}",
|
|
"mode": "0644",
|
|
"content": "// Betterbird's user.js (module betterbird, novox/hq issue 345). Owned by the mesh: the node-engine\n// writes it here at every push, and the module's tools copy it whole into Betterbird's profile\n// (betterbird_user_js with apply, betterbird_restart), where Betterbird reads it at its start and lets it\n// win over the preferences Betterbird saves itself. Change the module's setting prefs, never this file or the profile's copy.\n//\n// Only comments and user_pref(\"name\", value); statements; the tools refuse anything else, and any\n// preference whose name can hold a credential.\n${setting:prefs}\n",
|
|
"trusted": true
|
|
},
|
|
{
|
|
"id": "accounts",
|
|
"type": "file",
|
|
"path": "${machine:account-home}/.config/betterbird/accounts.json",
|
|
"owner": "${machine:account}",
|
|
"mode": "0600",
|
|
"merge": "json",
|
|
"content": "{\n \"accounts\": {}\n}\n",
|
|
"trusted": true
|
|
},
|
|
{
|
|
"id": "community-package",
|
|
"type": "package",
|
|
"package": "betterbird-bin",
|
|
"absent": true
|
|
},
|
|
{
|
|
"id": "installation",
|
|
"type": "archive",
|
|
"path": "/opt/betterbird",
|
|
"artifact": "archive"
|
|
},
|
|
{
|
|
"id": "owl",
|
|
"type": "archive",
|
|
"path": "/opt/betterbird/owl",
|
|
"artifact": "owl"
|
|
},
|
|
{
|
|
"id": "policies",
|
|
"type": "archive",
|
|
"path": "/opt/betterbird/distribution",
|
|
"artifact": "distribution"
|
|
},
|
|
{
|
|
"id": "spelling",
|
|
"type": "archive",
|
|
"path": "/opt/betterbird/defaults/pref",
|
|
"artifact": "defaults"
|
|
},
|
|
{
|
|
"id": "preparation",
|
|
"type": "archive",
|
|
"path": "/usr/local/lib/mesh-betterbird",
|
|
"artifact": "tools"
|
|
},
|
|
{
|
|
"id": "start",
|
|
"type": "file",
|
|
"path": "/usr/local/bin/betterbird",
|
|
"mode": "0755",
|
|
"content": "#!/bin/sh\n# Betterbird's start, written by the mesh (module betterbird, novox/hq ADR 0316). Replaced at every push.\n#\n# Before Betterbird starts, the module's tools place its user.js in the profile (the setting prefs, and the\n# accounts the setting accounts declares) and add the declared accounts to the profile's account list. They do\n# it only while no Betterbird of this account runs, because Betterbird rewrites its saved preferences when it quits; a\n# second start while one runs only hands over to it. What the preparation could not do it says here, and\n# betterbird_check says it too. Betterbird starts either way: its configuration never holds the mail back.\n/usr/local/lib/mesh-betterbird/betterbird-tools prepare || echo \"betterbird: the mesh's preparation did not complete; betterbird_check says why\" >&2\nexec /opt/betterbird/betterbird \"$@\"\n"
|
|
},
|
|
{
|
|
"id": "launcher",
|
|
"type": "file",
|
|
"path": "/usr/local/share/applications/eu.betterbird.Betterbird.desktop",
|
|
"mode": "0644",
|
|
"content": "[Desktop Entry]\nVersion=1.0\nType=Application\nName=Betterbird\nGenericName=Mail Client\nComment=Send and receive mail with Betterbird\nExec=/usr/local/bin/betterbird %u\nIcon=/opt/betterbird/chrome/icons/default/default128.png\nTerminal=false\nCategories=Network;Email;\nMimeType=message/rfc822;x-scheme-handler/mailto;application/x-xpinstall;application/x-extension-ics;text/calendar;text/vcard;text/x-vcard;x-scheme-handler/webcal;x-scheme-handler/webcals;x-scheme-handler/mid;\nStartupNotify=true\nStartupWMClass=eu.betterbird.Betterbird\nKeywords=Email;E-mail;Calendar;Thunderbird;\nActions=ComposeMessage;OpenAddressBook;\n# Written by the mesh (module betterbird, novox/hq ADR 0316 §3), in place of the community package's entry:\n# it starts Betterbird through the module's start, and names the icon in the installation, with no link.\n\n[Desktop Action ComposeMessage]\nName=Write new message\nExec=/usr/local/bin/betterbird -compose\n\n[Desktop Action OpenAddressBook]\nName=Open address book\nExec=/usr/local/bin/betterbird -addressbook\n"
|
|
}
|
|
],
|
|
"build": {
|
|
"artifacts": [
|
|
{
|
|
"name": "tools",
|
|
"kind": "bundle",
|
|
"language": "go",
|
|
"system": "arch",
|
|
"from": "cmd/betterbird-tools",
|
|
"binary": "betterbird-tools",
|
|
"loads": [
|
|
"betterbird-tools"
|
|
]
|
|
},
|
|
{
|
|
"name": "archive",
|
|
"kind": "archive",
|
|
"url": "https://www.betterbird.eu/downloads/LinuxArchive/betterbird-153.4.0esr-bb10.en-US.linux-x86_64.tar.xz",
|
|
"sha256": "38dd24890a66b4cf9a45bc24e15192e00c26b929e1bb8df7974c16a4539129e2",
|
|
"version": "153.4.0esr-bb10",
|
|
"within": "betterbird"
|
|
},
|
|
{
|
|
"name": "owl",
|
|
"kind": "archive",
|
|
"url": "https://www.beonex.com/owl/owl.xpi",
|
|
"sha256": "a54cc3d52113b34f97942ee19190947dee23561e2217f18db3d80ac023991221",
|
|
"version": "1.5.6.1",
|
|
"file": "owl.xpi"
|
|
},
|
|
{
|
|
"name": "distribution",
|
|
"kind": "archive",
|
|
"from": "install/distribution"
|
|
},
|
|
{
|
|
"name": "defaults",
|
|
"kind": "archive",
|
|
"from": "install/defaults-pref"
|
|
}
|
|
]
|
|
}
|
|
}
|