Commit graph

46 commits

Author SHA1 Message Date
randogoth
2dbf098c82 chore: bump version to 0.3.0
Some checks failed
CI / windows (push) Waiting to run
Release / windows (push) Waiting to run
CI / macos (push) Failing after 1m4s
Release / macos (push) Failing after 37s
CI / linux (push) Successful in 4m14s
Release / linux (push) Successful in 3m46s
Release / flatpak (push) Successful in 3m36s
Release / release (push) Successful in 34s
2026-10-14 17:40:02 +03:00
randogoth
32e2e2a8f2 feat: add multiple accounts with a sidebar switcher and per-account folders 2026-10-14 17:39:49 +03:00
randogoth
6172df3e00 docs: add license, third-party notices, AI declaration, and a download section
Some checks failed
CI / macos (push) Successful in 44s
CI / linux (push) Successful in 4m16s
CI / windows (push) Has been cancelled
2026-10-09 13:37:15 +03:00
randogoth
433573693c feat: ship an Inno Setup installer from the windows release job
All checks were successful
CI / macos (push) Successful in 43s
CI / windows (push) Successful in 2m15s
CI / linux (push) Successful in 2m16s
2026-10-09 10:42:50 +03:00
randogoth
6bb850b9af fix: no console window and a writable config dir on Windows 2026-10-09 10:42:50 +03:00
randogoth
4360e45233 feat: add windows runner CI and release jobs
Some checks are pending
CI / linux (push) Waiting to run
CI / macos (push) Successful in 43s
CI / windows (push) Successful in 9m5s
2026-10-09 07:04:47 +03:00
randogoth
e2795cfef9 chore: bump version to 0.2.0
Some checks failed
CI / macos (push) Successful in 52s
CI / linux (push) Successful in 2m37s
Release / linux (push) Successful in 2m33s
Release / flatpak (push) Successful in 1m39s
Release / macos (push) Successful in 39s
Release / release (push) Has been cancelled
2026-10-08 22:58:45 +03:00
randogoth
c2525fd0f0 refactor: flatten Fluent selectors into one message per variant 2026-10-08 22:32:52 +03:00
randogoth
06952cd20e docs: rewrite catalogue copy to the Microsoft Writing Style Guide 2026-10-08 22:27:25 +03:00
randogoth
57e75af3ac feat: extract all user-facing strings into a Fluent catalogue 2026-10-08 22:10:29 +03:00
randogoth
4c5665a6ff feat: gate first contact on a pinned server, confirm key changes 2026-10-08 21:36:02 +03:00
randogoth
743c388cfb feat: split settings into Identity, Server, Backup and Advanced tabs 2026-10-08 20:46:17 +03:00
randogoth
2892ea3fa7 feat: rework signup into a safer multi-step flow, add keep-mail setting 2026-10-08 19:58:50 +03:00
randogoth
53c9c4b8ce docs: mention factory reset in the feature list 2026-10-08 19:58:48 +03:00
randogoth
18befcc008 Revert flatpak to building from source; add appstream package
All checks were successful
CI / linux (push) Successful in 2m9s
Release / linux (push) Successful in 2m19s
Release / flatpak (push) Successful in 1m32s
Release / release (push) Successful in 10s
CI / macos (push) Successful in 39s
Release / macos (push) Successful in 34s
Reusing the linux job's binary (previous commit) doesn't work: it's
dynamically linked against ~100 libraries at absolute /nix/store
paths, including its own ELF interpreter, none of which exist inside
the Flatpak sandbox - confirmed locally via a real install+run
(execvp: No such file or directory). Reverted to building from source
inside flatpak-builder's sandbox via the rust-stable SDK extension,
same as the existing local `devbox run package` already does.

Also fixes two things needed for that in-sandbox build to work under
the forgejo-runner service (not an interactive session):
- appstreamcli (used by flatpak-builder to compose AppStream metadata)
  wasn't on PATH - added as a devbox package (linux-only, like
  gtk4/libadwaita) rather than a NixOS system package, keeping it
  scoped to the project.
- rofiles-fuse's mount/unmount cycle fails under the service context
  even though /dev/fuse itself is world-writable; --disable-rofiles-fuse
  is flatpak-builder's own documented workaround for this.

Verified locally: full build, appstreamcli compose, bundle install,
and the installed binary actually executing inside the sandbox.
2026-10-07 21:26:53 +03:00
randogoth
cf57009eeb Disable flatpak-builder's rofiles-fuse under the CI runner
Some checks failed
CI / macos (push) Waiting to run
CI / linux (push) Successful in 2m7s
Release / linux (push) Successful in 2m20s
Release / flatpak (push) Failing after 10s
Release / release (push) Has been skipped
Release / macos (push) Successful in 34s
rofiles-fuse's mount/unmount cycle fails under the forgejo-runner
systemd service ("Permission denied" / "Operation not permitted" on
fusermount3) even though /dev/fuse itself is world-writable - services
don't get the same mount-namespace treatment an interactive session
does. --disable-rofiles-fuse is flatpak-builder's own documented
workaround for exactly this class of environment (containers/CI).
2026-10-07 21:14:12 +03:00
randogoth
3183f15da6 Fix flatpak-builder defaulting to system scope in bundle-flatpak
Some checks failed
CI / macos (push) Waiting to run
CI / linux (push) Successful in 2m17s
Release / linux (push) Successful in 2m21s
Release / flatpak (push) Failing after 27s
Release / release (push) Has been skipped
Release / macos (push) Successful in 37s
Missing --user (present on the existing package script, omitted here
by mistake) made flatpak-builder try to install missing deps
system-wide, which this unprivileged CI user can't authorize via
polkit: "Flatpak system operation GetRevokefsFd not allowed for user".
2026-10-07 21:02:27 +03:00
randogoth
5d097143a5 Decouple macOS from the release job
Some checks failed
CI / macos (push) Waiting to run
CI / linux (push) Successful in 2m30s
Release / linux (push) Successful in 2m24s
Release / macos (push) Has been cancelled
Release / release (push) Has been cancelled
Release / flatpak (push) Has been cancelled
apfel is a laptop that's frequently asleep/offline; gating the release
on it (needs: [macos, linux, flatpak]) meant the whole release stalled
whenever it wasn't reachable. macos now appends its own asset directly
via the Forgejo API once it finishes, polling for the release that
linux+flatpak already created/overrode, instead of going through
actions/forgejo-release (which can only blind-create, not append to an
existing release).
2026-10-07 20:53:22 +03:00
randogoth
2d18caa500 Add Flatpak bundle to the release workflow
Some checks failed
Release / macos (push) Has been cancelled
Release / linux (push) Has been cancelled
Release / flatpak (push) Has been cancelled
Release / release (push) Has been cancelled
CI / macos (push) Has been cancelled
CI / linux (push) Has been cancelled
Builds carrier-x86_64.flatpak from the linux job's already-built binary
rather than recompiling inside flatpak-builder's sandbox (which can't
see the shared cargo cache anyway, making an in-sandbox build pure
duplicate work). com.randogoth.carrier.release.json is a separate
manifest from the main one, which stays as-is for local
`devbox run package` dev-from-source builds.
2026-10-07 20:39:57 +03:00
randogoth
1bbc961bd6 Fix release workflow: use Forgejo's upload/download-artifact fork
All checks were successful
CI / macos (push) Successful in 37s
Release / macos (push) Successful in 36s
CI / linux (push) Successful in 3m43s
Release / linux (push) Successful in 2m49s
Release / release (push) Successful in 11s
actions/upload-artifact@v4 and download-artifact@v4 use GitHub's newer
Artifacts-v2 protocol, which Forgejo's server explicitly refuses
("not currently supported on GHES"). Forgejo maintains its own forks
(forgejo/upload-artifact@v5, forgejo/download-artifact@v7) with that
check disabled. Also drops archive: false, an input that fork doesn't
expose - the earlier binary rename already keeps filenames distinct
through the default zip/extract round-trip.
2026-10-07 20:07:09 +03:00
randogoth
73408bdf24 Add tag-triggered release workflow
Some checks failed
CI / macos (push) Successful in 39s
Release / macos (push) Failing after 33s
CI / linux (push) Has been cancelled
Release / linux (push) Failing after 3m11s
Release / release (push) Has been skipped
Builds macos-arm64 and linux-x86_64 release binaries in parallel and
uploads them as build artifacts; a single release job gated on both
then downloads and publishes them to one Forgejo release. Splitting it
this way avoids a real race in actions/forgejo-release itself: its
script always does a blind create-then-upload for the tag with no
merge path, so two parallel callers against the same tag either
hard-fail or stomp each other's uploaded assets.
2026-10-07 20:03:18 +03:00
randogoth
d85427156e feat: add a Linux CI job alongside macOS, in one shared workflow
All checks were successful
CI / macos (push) Successful in 43s
CI / linux (push) Successful in 4m42s
Renamed macos.yml to ci.yml with two jobs (macos, linux) under one
push/PR/dispatch trigger, so both run from the same commit instead of
needing separate files. Cache keys are now OS-prefixed (cargo-macos-/
cargo-linux-): target/ artifacts are platform-specific and would
otherwise collide under a shared key.
2026-10-07 19:47:41 +03:00
randogoth
15fdbe4dbd chore: update devbox.lock for gtk4/libadwaita on Linux 2026-10-07 19:47:41 +03:00
randogoth
ba97f63841 feat: make devbox.json cross-platform for GTK4/libadwaita
Linux now gets gtk4/libadwaita declared as nix devbox packages (scoped
to linux platforms, with the dev output requested explicitly - nixpkgs
splits runtime libs from headers/pkgconfig, and devbox only installs
the default output unless told otherwise). macOS keeps using Homebrew's
build exactly as before (nixpkgs' GTK build is much rockier there).

PKG_CONFIG_PATH moved out of the static env block (which can't be
platform-conditional) into init_hook, which can branch on uname.
Verified building clean with 0 warnings on both this machine (Linux)
and apfel (macOS).
2026-10-07 19:45:20 +03:00
randogoth
2447e9bcb5 feat: cache cargo registry and target dirs keyed on Cargo.lock
All checks were successful
macOS / check (push) Successful in 48s
2026-10-07 15:30:17 +03:00
randogoth
648f041cf3 fix: pin fumi checkout to main, skipping a default-branch API lookup the carrier-scoped token can't make
All checks were successful
macOS / check (push) Successful in 38s
2026-10-07 13:46:37 +03:00
randogoth
5d68f3e245 feat: checkout fumi as a sibling dir in CI to match the local path dependency
Some checks failed
macOS / check (push) Failing after 43s
2026-10-07 13:45:14 +03:00
randogoth
69fd6d58e7 feat: clear the Forgejo-injected GITHUB_TOKEN before devbox run check
Some checks failed
macOS / check (push) Failing after 3s
2026-10-07 13:34:00 +03:00
randogoth
402e108634 feat: add macOS CI workflow targeting the Forgejo runner
Some checks failed
macOS / check (push) Failing after 3s
2026-10-07 13:11:09 +03:00
randogoth
cda8985218 feat: ask whether a reply carries the sender's frontmatter 2026-10-07 13:10:09 +03:00
randogoth
dacbc9de38 feat: show received frontmatter fields in the message detail 2026-10-07 13:10:09 +03:00
randogoth
68f5620d35 feat: let composes carry custom frontmatter headers 2026-10-07 13:10:09 +03:00
74ec9a2492 feat: simplify devbox config for macOS aarch64
On Apple Silicon Macs, many GTK-related nixpkgs packages are marked as
unsupported on aarch64-darwin. Instead of using nixpkgs for the GUI stack,
use Homebrew which provides pre-built bottles for gtk4, libadwaita, and
all their dependencies (glib, pango, cairo, gdk-pixbuf, graphene, etc.).

The devbox config now provides only the Rust toolchain (rustc, cargo,
pkg-config, rustfmt) and sets environment variables to locate the
Homebrew-installed libraries:
- PKG_CONFIG_PATH: /opt/homebrew/lib/pkgconfig
- PKG_CONFIG_PATH_arm64_apple_darwin: /opt/homebrew/lib/pkgconfig
- PATH: Includes /opt/homebrew/bin and /opt/homebrew/sbin

This allows building the project with: devbox run build
All 16 tests pass with: devbox run check

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-10-07 12:48:09 +03:00
randogoth
0b20b56cba feat: embed the carrier icon in the Windows exe 2026-10-03 14:01:10 +03:00
randogoth
65c0ad2c77 feat: add a one-command windows build script 2026-10-03 12:31:19 +03:00
randogoth
080b47b24f feat: package the app as a flatpak 2026-10-03 12:17:15 +03:00
randogoth
8e9d2a92a6 feat: make senders tappable and replace the toasts with a fixed status line 2026-10-03 11:22:35 +03:00
randogoth
22c20427f0 feat: unify the detail view with QR sharing and default pane layout 2026-10-03 11:03:21 +03:00
randogoth
84650e50bd feat: stash composes closed by sidebar trips as drafts 2026-10-03 09:46:55 +03:00
randogoth
f55821213d fix: drop the duplicate envelope from the empty article pane 2026-10-03 09:38:33 +03:00
randogoth
7fdcd0d811 refactor: migrate the UI to GTK4 with Relm4 and libadwaita 2026-10-03 00:40:53 +03:00
randogoth
517d938c46 feat: adopt a notational-velocity layout with larger text 2026-10-02 00:08:59 +03:00
randogoth
7ed2889966 feat: list the store live while a fetch runs 2026-10-02 00:02:36 +03:00
randogoth
50299547e5 chore: pin a linker in the devbox environment 2026-10-02 00:02:36 +03:00
randogoth
96f3748086 fix: handle operation results before the busy guard so they clear it 2026-10-01 23:45:24 +03:00
randogoth
e9e40bca36 feat: build carrier, a minimalist Iced smolmail client on fumi-core 2026-10-01 23:45:24 +03:00