[PR #241] Add new linux app #344

Open
opened 2026-03-02 12:40:46 +03:00 by kerem · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/kavishdevar/librepods/pull/241
Author: @kavishdevar
Created: 11/9/2025
Status: 🔄 Open

Base: mainHead: linux/rust


📝 Commits (10+)

  • 43bfbda linux-rust: implement basic connections
  • cf2a242 linux-rust: add tray icon
  • c0ae061 linux-rust: remove percent character from tray
  • b0561e9 linux-rust: add conversational awareness
  • 0f04290 linux-rust: fix conv-detect toggle in tray menu
  • ae5a701 linux-rust: fix battery parsing
  • 7dd029f linux-rust: add att
  • 9da4c93 linux-rust: add tipi
  • 221680f linux-rust: remove ATT temporarily
  • e5c2419 linux-rust: optimize for size and add cli options

📊 Changes

35 files changed (+12886 additions, -0 deletions)

View changed files

.envrc (+1 -0)
📝 .gitignore (+7 -0)
default.nix (+12 -0)
flake.lock (+143 -0)
flake.nix (+141 -0)
linux-rust/.gitignore (+7 -0)
linux-rust/Cargo.lock (+5667 -0)
linux-rust/Cargo.toml (+31 -0)
linux-rust/Justfile (+70 -0)
linux-rust/assets/font/DejaVuSans.ttf (+0 -0)
linux-rust/assets/font/sf_pro.otf (+0 -0)
linux-rust/assets/icon.png (+0 -0)
linux-rust/assets/me.kavishdevar.librepods.desktop (+6 -0)
linux-rust/flatpak/me.kavishdevar.librepods.metainfo.xml (+23 -0)
linux-rust/flatpak/me.kavishdevar.librepods.yaml (+43 -0)
linux-rust/src/bluetooth/aacp.rs (+1201 -0)
linux-rust/src/bluetooth/att.rs (+275 -0)
linux-rust/src/bluetooth/discovery.rs (+49 -0)
linux-rust/src/bluetooth/le.rs (+379 -0)
linux-rust/src/bluetooth/managers.rs (+48 -0)

...and 15 more files

📄 Description

not sure if this is gonna stay in this repo (reason below)

So, the current Qt app wasn’t really as updated as the Android app- the maintainer didn’t have time, and it was too different from the Android implementation for me to easily port new stuff.

This new app is built in Rust, using the iced library, and borrowing the AACP and ATT implementation from the Android app. This app also has a much better UI, and now isn’t just limited to AirPods! The AirPods basic implementation like ear detection and conversational awareness is already in place, along with battery and changing ANC mode.

linux-new-app

To-Do List

  • Add basic UI
  • Device state and connection handling skeleton
    • Handle new connections
    • Handle disconnections
  • Improve the tray
    • add a channel between window and tray to make the tray update when customized
    • handle multiple devices
    • handle disconnections
    • use devicemanagers instead of a channel between bluetooth thread and tray thread
  • Misc
    • take ear status from LE for taking ownership and audio, not received over AACP without taking control first
  • Add AACP settings
    • Implement the aacp handler
    • Add a advanced page which allows sending custom packets and control command values
    • Add everything to the UI
  • ATT related
    • Implement the manager
    • For some reason, connection is refused by AirPods sometimes; haven’t traced the cause yet
    • Handle ATT manager, while keeping it optional- not everyone would change their BlueZ config
    • Add the UI: Yet to decide if I want multiple settings pages for each device, or just out everything on a single page under different sections (like transparency settings, and hearing aid settings will take up space, and can be better of separated)
  • expose everything over dbus
  • Nothing will work on this after airpods so it can be merged first
    • Parse notifications
    • Read battery status from bluez (or something else- it's not sent over ATT)
  • Prepare for distribution
    • Add CI for Flatpak
    • Add flake.nix
    • Possibly, bundle it as an AppImage

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/kavishdevar/librepods/pull/241 **Author:** [@kavishdevar](https://github.com/kavishdevar) **Created:** 11/9/2025 **Status:** 🔄 Open **Base:** `main` ← **Head:** `linux/rust` --- ### 📝 Commits (10+) - [`43bfbda`](https://github.com/kavishdevar/librepods/commit/43bfbda21ef291d943baa89529297309b4c1b677) linux-rust: implement basic connections - [`cf2a242`](https://github.com/kavishdevar/librepods/commit/cf2a242d7c7b5e0f4e67d14577000ffddb946062) linux-rust: add tray icon - [`c0ae061`](https://github.com/kavishdevar/librepods/commit/c0ae061cc794f0df544812f33005ef0960cb85a5) linux-rust: remove percent character from tray - [`b0561e9`](https://github.com/kavishdevar/librepods/commit/b0561e96df4d22d7c3cca5b43cbb5348074a4506) linux-rust: add conversational awareness - [`0f04290`](https://github.com/kavishdevar/librepods/commit/0f04290fba8f35e2abb9d090462cd74c0adf5d42) linux-rust: fix conv-detect toggle in tray menu - [`ae5a701`](https://github.com/kavishdevar/librepods/commit/ae5a7012577b3d8ad03c9c80914b211b7b6c2751) linux-rust: fix battery parsing - [`7dd029f`](https://github.com/kavishdevar/librepods/commit/7dd029faa641959552f22ee7d2d0b1cccf106979) linux-rust: add att - [`9da4c93`](https://github.com/kavishdevar/librepods/commit/9da4c938ed113dcc479963be59e4c5e300aba0c9) linux-rust: add tipi - [`221680f`](https://github.com/kavishdevar/librepods/commit/221680ff32f3af0ed2c8914ebf0156432266fac0) linux-rust: remove ATT temporarily - [`e5c2419`](https://github.com/kavishdevar/librepods/commit/e5c2419ef6a87fb2b1193306bbb678dddba53b93) linux-rust: optimize for size and add cli options ### 📊 Changes **35 files changed** (+12886 additions, -0 deletions) <details> <summary>View changed files</summary> ➕ `.envrc` (+1 -0) 📝 `.gitignore` (+7 -0) ➕ `default.nix` (+12 -0) ➕ `flake.lock` (+143 -0) ➕ `flake.nix` (+141 -0) ➕ `linux-rust/.gitignore` (+7 -0) ➕ `linux-rust/Cargo.lock` (+5667 -0) ➕ `linux-rust/Cargo.toml` (+31 -0) ➕ `linux-rust/Justfile` (+70 -0) ➕ `linux-rust/assets/font/DejaVuSans.ttf` (+0 -0) ➕ `linux-rust/assets/font/sf_pro.otf` (+0 -0) ➕ `linux-rust/assets/icon.png` (+0 -0) ➕ `linux-rust/assets/me.kavishdevar.librepods.desktop` (+6 -0) ➕ `linux-rust/flatpak/me.kavishdevar.librepods.metainfo.xml` (+23 -0) ➕ `linux-rust/flatpak/me.kavishdevar.librepods.yaml` (+43 -0) ➕ `linux-rust/src/bluetooth/aacp.rs` (+1201 -0) ➕ `linux-rust/src/bluetooth/att.rs` (+275 -0) ➕ `linux-rust/src/bluetooth/discovery.rs` (+49 -0) ➕ `linux-rust/src/bluetooth/le.rs` (+379 -0) ➕ `linux-rust/src/bluetooth/managers.rs` (+48 -0) _...and 15 more files_ </details> ### 📄 Description not sure if this is gonna stay in this repo (reason below) So, the current Qt app wasn’t really as updated as the Android app- the maintainer didn’t have time, and it was too different from the Android implementation for me to easily port new stuff. This new app is built in Rust, using the iced library, and borrowing the AACP and ATT implementation from the Android app. This app also has a much better UI, and now isn’t just limited to AirPods! The AirPods basic implementation like ear detection and conversational awareness is already in place, along with battery and changing ANC mode. <img width="1220" height="839" alt="linux-new-app" src="https://github.com/user-attachments/assets/86b3c871-89a8-4e49-861a-5119de1e1d28" /> --- To-Do List - [x] Add basic UI - Device state and connection handling skeleton - [x] Handle new connections - [ ] Handle disconnections - Improve the tray - [ ] add a channel between window and tray to make the tray update when customized - [ ] handle multiple devices - [ ] handle disconnections - [ ] use devicemanagers instead of a channel between bluetooth thread and tray thread - Misc - [ ] take ear status from LE for taking ownership and audio, not received over AACP without taking control first - Add AACP settings - [x] Implement the aacp handler - [ ] Add a advanced page which allows sending custom packets and control command values - [ ] Add everything to the UI - ATT related - [x] Implement the manager - [ ] For some reason, connection is refused by AirPods sometimes; haven’t traced the cause yet - [ ] Handle ATT manager, while keeping it optional- not everyone would change their BlueZ config - [ ] Add the UI: Yet to decide if I want multiple settings pages for each device, or just out everything on a single page under different sections (like transparency settings, and hearing aid settings will take up space, and can be better of separated) - [ ] expose everything over dbus - ~Nothing~ will work on this after airpods so it can be merged first - [ ] ~Parse notifications~ - [ ] ~Read battery status from bluez (or something else- it's not sent over ATT)~ - Prepare for distribution - [x] Add CI for Flatpak - [ ] Add flake.nix - [x] Possibly, bundle it as an AppImage --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/librepods#344
No description provided.