Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Installation

Bindrune talks to BlueZ, so the Bluetooth service has to run:

sudo systemctl enable --now bluetooth

File transfers also need obexd (often packaged as bluez-obex). The state of each radio of a device and the choice of radio to connect over need BlueZ’s experimental features (Experimental = true in /etc/bluetooth/main.conf). Kernel errors for an input device need read access to the system journal; without it, they are not shown.

Try it from a checkout

On any distribution with Nix and flakes enabled:

git clone https://codeberg.org/wvhulle/bindrune
cd bindrune
nix develop
cargo run -p bindrune-gtk

Or run the packaged binary without cloning:

nix run git+https://codeberg.org/wvhulle/bindrune

NixOS and home-manager

Add the flake as an input. Both modules install the package and run Bindrune as a systemd user service, so pairing requests and incoming files are handled while the window is closed.

{
  inputs.bindrune = {
    url = "git+https://codeberg.org/wvhulle/bindrune";
    inputs.nixpkgs.follows = "nixpkgs";
  };
}
  • NixOS: import bindrune.nixosModules.default and set services.bindrune.enable = true;.
  • home-manager: import bindrune.homeManagerModules.default and set services.bindrune.enable = true;.

Debian and Ubuntu

Each release has a package attached, and its notes name the supported versions:

sudo apt install ./bindrune_*.deb

The path has to start with ./, so that apt reads the file and installs the dependencies. The package does not add an apt repository, so install new versions the same way. On older releases, such as Debian 13, use the Flatpak.

Flatpak

Each release has a bundle attached:

flatpak install --user bindrune-*.flatpak

Other distributions

Build and install with cargo. This needs Rust (preferably through rustup, which picks up the pinned version) and the development packages for GTK 4, libadwaita, D-Bus, udev, systemd and PulseAudio. The build reports any that are missing or too old.

cargo build --release --locked --package bindrune-gtk --package xtask
sudo target/release/xtask install      # --prefix defaults to /usr/local
sudo target/release/xtask uninstall

xtask install --destdir … --prefix /usr stages the files for distribution packages. The data folder is laid out like the installed prefix, so its share and lib folders show exactly what gets installed.

Running in the background

Closing the window keeps Bindrune running, and pairing requests and incoming files show a notification. On desktops with tray support, a tray icon reopens the window. A remote device never opens a hidden window by itself.

To start Bindrune hidden at login, enable its user service:

systemctl --user enable --now bindrune

Coming from Overskride

Bindrune installs next to Overskride as a separate application, so nothing is carried over: set the folder for received files and the devices that may send files without asking again. Pairings and trust live in BlueZ, so paired devices stay paired. Run only one of the two at a time, because both register as the pairing agent and answer file transfers.