Skip to content

Make the desktop app buildable on Linux - #302

Open
NishanthNixx wants to merge 1 commit into
mainfrom
feat/linux-build
Open

Make the desktop app buildable on Linux#302
NishanthNixx wants to merge 1 commit into
mainfrom
feat/linux-build

Conversation

@NishanthNixx

Copy link
Copy Markdown
Collaborator

Everything needed to produce a Linux build. No CI/CD changes — builds are taken manually.

The one real blocker

keyring was pinned to apple-native, so the crate simply doesn't compile on Linux. Split it per target:

[target.'cfg(target_os = "macos")'.dependencies]
keyring = { version = "3", features = ["apple-native"] }

[target.'cfg(target_os = "linux")'.dependencies]
keyring = { version = "3", features = ["sync-secret-service"] }

db/device_key.rs needed no changes — it already uses only the portable Entry API, so the same code hits the macOS Keychain or the Linux Secret Service (GNOME Keyring / KWallet).

Deliberately not linux-native: that stores in kernel keyutils, which is session-scoped. A lost SQLCipher key means a user loses their local database.

Also in here

  • Bundle: added deb + appimage targets and the PNG icons Linux needs — the icons were already in the repo, just never referenced.
  • Top bar: the 92px traffic-light inset was applied on any desktop. titleBarStyle/trafficLightPosition are macOS-only, so on Linux that was an empty gap beside a native GTK title bar. Now gated to macOS.
  • RELEASING.md: Linux build + verification steps, including the libdbus-1-dev build dep the new backend pulls in.

Verification (all from macOS — no Linux machine needed)

  • cargo check passes on macOS → the mac build is not broken
  • cargo metadata --filter-platform x86_64-unknown-linux-gnukeyring + dbus-secret-service resolve, security-framework correctly absent
  • cargo metadata --filter-platform aarch64-apple-darwin → no dbus crates leaking into the mac graph
  • tsc clean

Cargo.lock gains dbus-secret-service 4.1.0 and zeroize_derive 1.5.0.

Not done / known follow-ups

  • Not built or run on Linux yet. The keyring path is the one thing that can compile fine and still fail at runtime — it needs a real desktop session. Test: create a note → reboot → confirm it's still there.
  • latest.json clobbering: the manifest is shared across platforms, so publishing Linux with --clobber would erase the darwin-* entries and silently break macOS auto-update. Needs merging, not overwriting, before Linux ships. Documented in RELEASING.md.
  • Only AppImage can self-update; .deb is manual-install only.

🤖 Generated with Claude Code

Everything needed for a Linux build; no CI changes (builds are taken manually).

- keyring: split the backend per target. macOS keeps apple-native; Linux uses
  sync-secret-service (GNOME Keyring / KWallet). db/device_key.rs already uses
  only the portable Entry API, so no code change was needed. Deliberately NOT
  linux-native: that stores in kernel keyutils, which is session-scoped, and a
  lost SQLCipher key means a lost local database.
- bundle: add deb + appimage targets and the PNG icons Linux needs (the icons
  were already in the repo, just unreferenced).
- top-bar: reserve the 92px traffic-light inset on macOS only. titleBarStyle and
  trafficLightPosition are macOS-only options, so on Linux the same inset was
  just an empty gap next to a native GTK title bar.
- RELEASING.md: Linux build/verify steps, incl. the libdbus-1-dev build dep and
  the latest.json clobbering hazard.

Verified from macOS: cargo check passes; cargo metadata --filter-platform shows
keyring+dbus-secret-service resolving for linux with security-framework absent,
and no dbus crates leaking into the darwin graph. tsc clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@vercel

vercel Bot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
mydevtools-tech Ready Ready Preview Aug 20, 2026 7:35am

@github-actions

Copy link
Copy Markdown

ThreatCrush Security Scan

0 finding(s)

No findings.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant