A privacy-focused native Linux email client for Gmail, built with Rust, GTK4, and libadwaita.
- Gmail-only via IMAP with Google OAuth2 (XOAUTH2)
- Privacy by default -- remote images blocked, tracking pixels removed, link trackers stripped
- One-click unsubscribe (RFC 8058 / RFC 2369)
- Offline-first -- SQLite cache with offline operation queue
- Multi-account with unified inbox view
- Adaptive layout -- works at any window size, including tiling WMs
- CONDSTORE delta sync for efficient incremental updates
- Desktop notifications via GIO
- Nix-native -- flake with NixOS and home-manager modules
Coming soon
Add to your flake inputs:
inputs.mq-mail.url = "github:mssnyder/mqueue";{ inputs, ... }:
{
imports = [ inputs.mq-mail.homeManagerModules.default ];
programs.mq-mail = {
enable = true;
settings = {
oauth = {
# Plaintext (for testing):
# clientId = "your-client-id";
# clientSecret = "your-client-secret";
# File-based (for sops-nix / agenix):
clientIdFile = "/run/user/1000/secrets/mqueue/googleClientId";
clientSecretFile = "/run/user/1000/secrets/mqueue/googleSecretKey";
};
};
};
}{ inputs, ... }:
{
imports = [ inputs.mq-mail.nixosModules.default ];
programs.mq-mail = {
enable = true;
settings.oauth.clientIdFile = "/run/secrets/mqueue/googleClientId";
settings.oauth.clientSecretFile = "/run/secrets/mqueue/googleSecretKey";
};
}Requires Rust 1.92+, GTK4, libadwaita 1.5+, WebKitGTK 6, and SQLite.
nix develop # sets up the full dev environment
cargo build --releasem'Queue requires you to create your own Google Cloud project:
- Go to Google Cloud Console
- Create a new project
- Enable the Gmail API
- Create OAuth 2.0 credentials (Desktop application)
- Add
http://127.0.0.1as an authorized redirect URI - Provide the client ID and secret via your Nix config or
~/.config/mq-mail/config.toml:
[oauth]
client_id = "your-client-id.apps.googleusercontent.com"
client_secret = "your-client-secret"Base config is loaded from ~/.config/mq-mail/config.toml (managed by Nix if using the module). User preferences set in the app are saved separately to ~/.config/mq-mail/preferences.toml and merged on top, so Nix-managed settings are never overwritten.
Tokens are stored securely in GNOME Keyring via the oo7 crate.
crates/
mq-core/ # Domain logic: IMAP, SMTP, OAuth, email parsing, privacy
mq-db/ # SQLite database layer (sqlx)
mq-net/ # Network awareness (NetworkManager D-Bus) + offline queue
mq-app/ # GTK4/libadwaita UI
- Remote images are blocked by default (per-sender allowlist available)
- Tracking pixels (1x1 images, known tracker domains) are unconditionally removed
- Link tracking parameters (
utm_*,fbclid,gclid, etc.) are stripped on click - Unsubscribe via RFC 8058 one-click POST or mailto fallback