The rofi callback's stdout is captured by rofi, so print() never reached the terminal. Callback now writes the selection to a cache file, and the initial process reads it after rofi exits — where stdout is the terminal and the original args (including --print) are available.
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
# install bw-menu
git clone https://git.navidsassan.ch/navid.sassan/bw-menu.git
cd bw-menu
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 |
| Escape | Cancel |
Keybindings are configurable via $XDG_CONFIG_HOME/bw-menu/config.yaml (defaults to ~/.config/bw-menu/config.yaml):
keybindings:
Return: password
Control+Return: username
Each entry maps a rofi key name to the vault field it copies. The first entry is bound to rofi's accept key, additional entries become custom keybindings.
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 |
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 10 entries. The most recent selection is at index 0.
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