VoidLink is a high-performance, keyboard-first Bluetooth manager for Linux terminals. Engineered in Rust for modern Wayland workflows, it provides a sleek, memory-safe interface to the BlueZ stack via D-Bus, eliminating the overhead of subprocess-heavy alternatives.
Legacy Bluetooth tools often rely on parsing the output of interactive shells, leading to fragile behavior and high resource churn. VoidLink takes a different path:
- Native D-Bus Integration: Talks directly to BlueZ using the
bluercrate. Nobluetoothctlsubprocesses. - Async Architecture: A dedicated Tokio worker handles the Bluetooth stack, ensuring the UI remains snappy and responsive.
- Zero-Polling: Redraws are strictly event-driven. The UI only wakes up when your adapter or devices actually change.
- Keyboard-First: Every action is a keystroke away, designed to fit perfectly into tiling window manager workflows (Hyprland, Sway, etc.).
- Full Lifecycle Management: Power, scan, pair, trust, connect, and remove devices with ease.
- Custom Bluetooth Agent: Seamlessly handles PIN and passkey forwarding directly within the TUI.
- Live Search & Filter: Instant device filtering using plain text, smart regex, or substring matching.
- Deep Device Insights: Detailed panel showing RSSI (Signal), Battery level, Device Class, and Connection status with live gauges.
- Persistent Configuration: Fully customizable keybindings and color palettes via
~/.config/voidlink/config.toml. - Modern TUI: Built with
ratatuiand Nerd Fonts for a beautiful, professional terminal experience.
VoidLink is available on the AUR. You can install it using your favorite AUR helper:
paru -S voidlink
# or
yay -S voidlinkEnsure you have the Rust toolchain installed.
git clone https://github.com/cptdawn/VoidLink.git
cd VoidLink
cargo build --release
install -Dm755 target/release/voidlink -t ~/.local/bin/VoidLink uses intuitive, Vim-like defaults. All keys are remappable in the config file.
| Key | Action |
|---|---|
j / k |
Move selection (or ↑/↓) |
Enter |
Toggle Connection (Connect/Disconnect) |
p |
Initiate Pairing |
t |
Toggle Trust Status |
r |
Remove/Forget Device |
a |
Toggle Adapter Power |
s |
Start/Stop Scanning |
S |
Cycle Sort Mode (Name, RSSI, Address, Default) |
/ |
Search Mode (prefix with / for Regex) |
A |
Rename Device (Alias) |
? |
Show Help Overlay |
q |
Quit |
On first run, VoidLink generates a default configuration at ~/.config/voidlink/config.toml.
[general]
tick_rate_ms = 16
scan_on_startup = false
device_list_percent = 55
sort_mode = "default" # default | name | rssi | address
search_mode = "smart" # smart | plain | regex
[theme.palette]
accent_primary = "#0891b2" # Plasma Cyan
accent_secondary = "#8b5cf6" # Nebula Violet
accent_error = "#ef4444" # Dawn Red
text_primary = "#f8fafc" # Starlight
text_dim = "#94a3b8" # Cosmic DustVoidLink follows a strict separation of concerns:
- Main Thread: Manages the
ratatuirender loop and processes user input. - Bluetooth Worker: A background Tokio task that owns the BlueZ session and adapter handles.
- Communication: Bounded
mpscchannels ensure safe, asynchronous communication between the UI and system layers.
We welcome contributions! Please feel free to open issues or submit pull requests.
- Fork the repo.
- Create your feature branch (
git checkout -b feat/new-feature). - Commit your changes.
- Push to the branch.
- Open a Pull Request.
VoidLink is released under the MIT License.
Crafted with by CPTDawn.