feat: package the app as a flatpak
This commit is contained in:
parent
8e9d2a92a6
commit
080b47b24f
11 changed files with 135 additions and 1 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -1,4 +1,6 @@
|
||||||
/target
|
/target
|
||||||
|
.flatpak
|
||||||
|
.flatpak-builder
|
||||||
result
|
result
|
||||||
result-*
|
result-*
|
||||||
*.key
|
*.key
|
||||||
|
|
|
||||||
15
README.md
15
README.md
|
|
@ -38,3 +38,18 @@ The tests run offline against an in-memory store: seed and key parsing, a sealed
|
||||||
## Status
|
## Status
|
||||||
|
|
||||||
Work in progress: the UI is unexercised against a live server — the store, crypto and address paths are covered by tests, the network flows (register, fetch, send, rotate) are wired to fumi-core's operations but only smoke-tested as far as launching the window.
|
Work in progress: the UI is unexercised against a live server — the store, crypto and address paths are covered by tests, the network flows (register, fetch, send, rotate) are wired to fumi-core's operations but only smoke-tested as far as launching the window.
|
||||||
|
|
||||||
|
## Packaging
|
||||||
|
|
||||||
|
`devbox run package` builds and installs the app as a Flatpak from
|
||||||
|
`com.randogoth.carrier.json` — the binary, the desktop file, the metainfo and
|
||||||
|
the icon all come from the repo, and the tooling (`flatpak`, `flatpak-builder`,
|
||||||
|
`appstreamcli`) lives in the devbox environment. The flatpak runtime is the one
|
||||||
|
dependency outside devbox; install it once:
|
||||||
|
|
||||||
|
flatpak install --user flathub org.gnome.Sdk//51 org.freedesktop.Sdk.Extension.rust-stable//26.08
|
||||||
|
|
||||||
|
The result is installed into the user flatpak and runs as
|
||||||
|
`flatpak run com.randogoth.carrier`. Inside the sandbox the app keeps its
|
||||||
|
config under `~/.var/app/com.randogoth.carrier/config/carrier`, so a flatpak
|
||||||
|
install starts with a fresh identity rather than the dev build's account.
|
||||||
|
|
|
||||||
69
com.randogoth.carrier.json
Normal file
69
com.randogoth.carrier.json
Normal file
|
|
@ -0,0 +1,69 @@
|
||||||
|
{
|
||||||
|
"id": "com.randogoth.carrier",
|
||||||
|
"runtime": "org.gnome.Platform",
|
||||||
|
"runtime-version": "51",
|
||||||
|
"sdk": "org.gnome.Sdk",
|
||||||
|
"command": "carrier",
|
||||||
|
"finish-args": [
|
||||||
|
"--socket=wayland",
|
||||||
|
"--socket=fallback-x11",
|
||||||
|
"--device=dri",
|
||||||
|
"--share=network"
|
||||||
|
],
|
||||||
|
"add-extensions": {
|
||||||
|
"org.freedesktop.Sdk.Extension.rust-stable": {
|
||||||
|
"directory": "/usr/lib/sdk/rust-stable",
|
||||||
|
"version": "stable",
|
||||||
|
"bundle": false,
|
||||||
|
"autodelete": false,
|
||||||
|
"disable-filesystem": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"build-options": {
|
||||||
|
"append-path": "/usr/lib/sdk/rust-stable/bin",
|
||||||
|
"build-args": [
|
||||||
|
"--share=network"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"cleanup": [
|
||||||
|
"/share/doc"
|
||||||
|
],
|
||||||
|
"modules": [
|
||||||
|
{
|
||||||
|
"name": "carrier",
|
||||||
|
"buildsystem": "simple",
|
||||||
|
"build-commands": [
|
||||||
|
"sed -i 's|../fumi/core|fumi/core|' Cargo.toml",
|
||||||
|
"cargo build --release --locked",
|
||||||
|
"install -Dm755 target/release/carrier /app/bin/carrier",
|
||||||
|
"install -Dm644 data/com.randogoth.carrier.desktop /app/share/applications/com.randogoth.carrier.desktop",
|
||||||
|
"install -Dm644 data/com.randogoth.carrier.metainfo.xml /app/share/metainfo/com.randogoth.carrier.metainfo.xml",
|
||||||
|
"install -Dm644 data/icons/com.randogoth.carrier.png /app/share/icons/hicolor/512x512/apps/com.randogoth.carrier.png",
|
||||||
|
"install -Dm644 data/icons/com.randogoth.carrier-256.png /app/share/icons/hicolor/256x256/apps/com.randogoth.carrier.png",
|
||||||
|
"install -Dm644 data/icons/com.randogoth.carrier-128.png /app/share/icons/hicolor/128x128/apps/com.randogoth.carrier.png"
|
||||||
|
],
|
||||||
|
"sources": [
|
||||||
|
{
|
||||||
|
"type": "dir",
|
||||||
|
"path": ".",
|
||||||
|
"skip": [
|
||||||
|
"target",
|
||||||
|
".git",
|
||||||
|
".jj",
|
||||||
|
".flatpak"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "dir",
|
||||||
|
"path": "../fumi",
|
||||||
|
"dest": "fumi",
|
||||||
|
"skip": [
|
||||||
|
".jj",
|
||||||
|
".git",
|
||||||
|
"target"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
10
data/com.randogoth.carrier.desktop
Normal file
10
data/com.randogoth.carrier.desktop
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Name=carrier
|
||||||
|
Comment=Minimalist smolmail client
|
||||||
|
Exec=carrier
|
||||||
|
Icon=com.randogoth.carrier
|
||||||
|
Terminal=false
|
||||||
|
Type=Application
|
||||||
|
Categories=Network;Email;
|
||||||
|
Keywords=mail;smolmail;fumi;
|
||||||
|
X-Purism-FormFactor=Workstation;Mobile;
|
||||||
20
data/com.randogoth.carrier.metainfo.xml
Normal file
20
data/com.randogoth.carrier.metainfo.xml
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<component type="desktop-application">
|
||||||
|
<id>com.randogoth.carrier</id>
|
||||||
|
<name>carrier</name>
|
||||||
|
<summary>Minimalist smolmail client</summary>
|
||||||
|
<metadata_license>CC0-1.0</metadata_license>
|
||||||
|
<project_license>Apache-2.0</project_license>
|
||||||
|
<description>
|
||||||
|
<p>carrier is a minimalist desktop client for Smol Mail: one compact
|
||||||
|
window — the list above, the article below — built on fumi-core, the
|
||||||
|
reference CLI's own library, with a Relm4 (GTK4) UI made from
|
||||||
|
libadwaita's own widgets. One 32-byte seed is the only secret; mail
|
||||||
|
stays sealed at rest and opens on demand.</p>
|
||||||
|
</description>
|
||||||
|
<launchable type="desktop-id">com.randogoth.carrier.desktop</launchable>
|
||||||
|
<releases>
|
||||||
|
<release version="0.1.0" date="2026-10-03"/>
|
||||||
|
</releases>
|
||||||
|
<content_rating type="oars-1.1"/>
|
||||||
|
</component>
|
||||||
BIN
data/icons/com.randogoth.carrier-128.png
Normal file
BIN
data/icons/com.randogoth.carrier-128.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 11 KiB |
BIN
data/icons/com.randogoth.carrier-256.png
Normal file
BIN
data/icons/com.randogoth.carrier-256.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 18 KiB |
BIN
data/icons/com.randogoth.carrier.png
Normal file
BIN
data/icons/com.randogoth.carrier.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 13 KiB |
|
|
@ -19,7 +19,10 @@
|
||||||
"nixpkgs#gdk-pixbuf",
|
"nixpkgs#gdk-pixbuf",
|
||||||
"nixpkgs#harfbuzz",
|
"nixpkgs#harfbuzz",
|
||||||
"nixpkgs#libadwaita",
|
"nixpkgs#libadwaita",
|
||||||
"nixpkgs#adwaita-icon-theme"
|
"nixpkgs#adwaita-icon-theme",
|
||||||
|
"nixpkgs#flatpak",
|
||||||
|
"nixpkgs#flatpak-builder",
|
||||||
|
"nixpkgs#appstream"
|
||||||
],
|
],
|
||||||
"shell": {
|
"shell": {
|
||||||
"init_hook": [
|
"init_hook": [
|
||||||
|
|
@ -40,6 +43,9 @@
|
||||||
],
|
],
|
||||||
"check": [
|
"check": [
|
||||||
"cargo fmt --check && cargo build && cargo test"
|
"cargo fmt --check && cargo build && cargo test"
|
||||||
|
],
|
||||||
|
"package": [
|
||||||
|
"flatpak-builder --force-clean --user --install-deps-from=flathub --install .flatpak com.randogoth.carrier.json"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
12
devbox.lock
12
devbox.lock
|
|
@ -47,10 +47,22 @@
|
||||||
"last_modified": "1970-01-01T00:00:00Z",
|
"last_modified": "1970-01-01T00:00:00Z",
|
||||||
"resolved": "path:/nix/store/v8ynlbrldn7k8byb1kx0j0wka8dsbrw9-source?narHash=sha256-BZWCi9ZRJiARTuKTbbtvFTj7t1TK4G3UEckT3HyNfRg%3D#adwaita-icon-theme"
|
"resolved": "path:/nix/store/v8ynlbrldn7k8byb1kx0j0wka8dsbrw9-source?narHash=sha256-BZWCi9ZRJiARTuKTbbtvFTj7t1TK4G3UEckT3HyNfRg%3D#adwaita-icon-theme"
|
||||||
},
|
},
|
||||||
|
"nixpkgs#appstream": {
|
||||||
|
"last_modified": "1970-01-01T00:00:00Z",
|
||||||
|
"resolved": "path:/nix/store/v8ynlbrldn7k8byb1kx0j0wka8dsbrw9-source?narHash=sha256-BZWCi9ZRJiARTuKTbbtvFTj7t1TK4G3UEckT3HyNfRg%3D#appstream"
|
||||||
|
},
|
||||||
"nixpkgs#cairo": {
|
"nixpkgs#cairo": {
|
||||||
"last_modified": "1970-01-01T00:00:00Z",
|
"last_modified": "1970-01-01T00:00:00Z",
|
||||||
"resolved": "path:/nix/store/v8ynlbrldn7k8byb1kx0j0wka8dsbrw9-source?narHash=sha256-BZWCi9ZRJiARTuKTbbtvFTj7t1TK4G3UEckT3HyNfRg%3D#cairo"
|
"resolved": "path:/nix/store/v8ynlbrldn7k8byb1kx0j0wka8dsbrw9-source?narHash=sha256-BZWCi9ZRJiARTuKTbbtvFTj7t1TK4G3UEckT3HyNfRg%3D#cairo"
|
||||||
},
|
},
|
||||||
|
"nixpkgs#flatpak": {
|
||||||
|
"last_modified": "1970-01-01T00:00:00Z",
|
||||||
|
"resolved": "path:/nix/store/v8ynlbrldn7k8byb1kx0j0wka8dsbrw9-source?narHash=sha256-BZWCi9ZRJiARTuKTbbtvFTj7t1TK4G3UEckT3HyNfRg%3D#flatpak"
|
||||||
|
},
|
||||||
|
"nixpkgs#flatpak-builder": {
|
||||||
|
"last_modified": "1970-01-01T00:00:00Z",
|
||||||
|
"resolved": "path:/nix/store/v8ynlbrldn7k8byb1kx0j0wka8dsbrw9-source?narHash=sha256-BZWCi9ZRJiARTuKTbbtvFTj7t1TK4G3UEckT3HyNfRg%3D#flatpak-builder"
|
||||||
|
},
|
||||||
"nixpkgs#gcc": {
|
"nixpkgs#gcc": {
|
||||||
"last_modified": "1970-01-01T00:00:00Z",
|
"last_modified": "1970-01-01T00:00:00Z",
|
||||||
"resolved": "path:/nix/store/v8ynlbrldn7k8byb1kx0j0wka8dsbrw9-source?narHash=sha256-BZWCi9ZRJiARTuKTbbtvFTj7t1TK4G3UEckT3HyNfRg%3D#gcc"
|
"resolved": "path:/nix/store/v8ynlbrldn7k8byb1kx0j0wka8dsbrw9-source?narHash=sha256-BZWCi9ZRJiARTuKTbbtvFTj7t1TK4G3UEckT3HyNfRg%3D#gcc"
|
||||||
|
|
|
||||||
BIN
smolmail.png
BIN
smolmail.png
Binary file not shown.
|
Before Width: | Height: | Size: 5.2 KiB |
Loading…
Add table
Add a link
Reference in a new issue