bw-menu/README.md

4.7 KiB

bw-menu

A rofi/fzf frontend for Bitwarden via the rbw CLI.

Installation

# dependencies
sudo dnf install -y rofi fzf wl-clipboard # or xclip instead of wl-clipboard
cargo install rbw # requires rbw >= 1.14.0

# install bw-menu
git clone https://git.navidsassan.ch/navid.sassan/bw-menu.git
uv sync

Usage

# interactive selection (rofi)
bw-menu select

# interactive selection (fzf)
bw-menu select --selector fzf

# select and print to stdout instead of clipboard
bw-menu select --field username --print

# list recent selections
bw-menu history list

# get password of last selected entry
bw-menu history get 0 --field password

# get username and print to stdout
bw-menu history get 0 --field username --print

Selectors

rofi

Runs in rofi's script mode. Recently used entries appear at the top with a clock icon. Custom input is disabled — only existing vault entries can be selected.

Default keybindings:

Key Action
Enter Copy password
Ctrl+Enter Copy username
Shift+Enter Copy totp
Escape Cancel

Keybindings are configurable — see Configuration for details.

fzf

Launches fzf in the terminal with fuzzy matching. Recently used entries appear at the top, prefixed with *. Sorting is disabled so history entries stay on top.

Key Action
Enter Select the highlighted entry and copy to clipboard
Ctrl-C / Esc Cancel without selecting

Options

Flag Description Default
--selector rofi|fzf Which selector UI to use rofi
--field password|username|totp|name Which field to retrieve (fzf / history) password
--print Print to stdout instead of clipboard off

The selected field is copied to the clipboard using wl-copy (Wayland) or xclip (X11). When --print is passed, the value is printed to stdout instead.

History

Selections are saved to $XDG_CACHE_HOME/bw-menu/history.json (defaults to ~/.cache/bw-menu/history.json), up to max_history_entries entries (default 5). The most recent selection is at index 0.

Configuration

Config file location: $XDG_CONFIG_HOME/bw-menu/config.yaml (or config.yml), defaults to ~/.config/bw-menu/config.yaml.

rbw_path: '~/.cargo/bin/rbw'
max_history_entries: 5

keybindings:
  password: 'Return'
  username: 'Control+Return'
  totp: 'Shift+Return'
Key Description Default
rbw_path Path to the rbw binary (~ is expanded) rbw
max_history_entries Maximum number of history entries to keep/display 5
keybindings Map of vault fields to rofi key names (see below) see above

keybindings

Each entry maps a vault field to a rofi key name. Available fields: password, username, totp, name.

The first entry is bound to rofi's accept key (kb-accept-entry). Additional entries become custom keybindings (kb-custom-1, kb-custom-2, …).

rbw_path

By default, bw-menu calls rbw from $PATH. If rbw is not on your PATH (e.g. when launching via swaymsg exec), set rbw_path to the full path of the binary.

Note: rbw must be unlocked before launching bw-menu from a window manager keybinding. rbw unlock requires pinentry, which cannot run without a terminal. Run rbw unlock manually in a terminal once after login — the session stays unlocked until the configured idle timeout.

Inspired by

Limitations

  • No collections support. Entries are displayed with their folder path (e.g. foldername/itemname), but Bitwarden collections are not shown. This is a limitation of rbw, which does not expose collection data.

Sway keybindings

Example keybindings for ~/.config/sway/config:

# open bw-menu selector
bindsym $mod+p exec bw-menu select

# copy password of last selected entry
bindsym $mod+Shift+p exec bw-menu history get 0 --field password

# copy username of last selected entry
bindsym $mod+Shift+u exec bw-menu history get 0 --field username