When launching bw-menu via swaymsg exec, ~/.cargo/bin is not on PATH,
so the hardcoded "rbw" subprocess calls fail. The new rbw_path config
option lets users point to the full path of their rbw binary. Tilde
expansion is supported. The config loader now treats each key
independently so a config with only rbw_path (no keybindings) works.
- config.py: warn and fall back to defaults on invalid keybinding
fields instead of raising an unhandled ValueError
- clipboard.py: replace check=True with manual returncode check for
a friendly error message instead of a raw traceback
- __main__.py: rename __handle_* to _handle_* (double-underscore
name mangling is meaningless at module level)
- rofi.py: check that rofi is installed before launching
- history.py: warn on corrupted history file instead of silently
returning empty
- README: fix install path (cd bw-menu/python), add name to
available keybinding fields
Parse the `type` field from `rbw list --raw` (Login, SecureNote, Card,
Identity) and display a corresponding icon for each entry in rofi.
History entries keep their `document-open-recent` icon. The type field
uses `compare=False` so it doesn't affect entry identity or history
matching.
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.
- Guard against empty ROFI_INFO before calling decode_info to prevent IndexError
- Use .get() chain for password field access to prevent KeyError
- Raise ValueError for unknown field names instead of silently returning empty string
- Validate config keybinding values against allowed fields (password, username, totp)
- Warn to stderr when config file exists but has invalid structure
- Set history file permissions to 0o600
- Extract shared prepare_entries() helper to deduplicate selector logic
- Add --version flag
- Delete legacy src/bitwarden.py and src/main.py
- Update CLAUDE.md to reflect pyyaml dependency
Replace --custom-field, --kb-accept, and --kb-custom CLI flags with a
YAML config file at $XDG_CONFIG_HOME/bw-menu/config.yaml. The config
maps rofi key names to vault fields (e.g. Return: password), making
keybinding configuration simpler and more intuitive.
Replace bw-serve/Ansible-based implementation with a clean rewrite:
- rbw CLI wrapper for listing entries and fetching credentials
- Rofi script-mode and fzf selectors with history-first sorting
- JSON-backed frecency history at ~/.cache/bw-menu/
- Clipboard support via wl-copy/xclip auto-detection
- uv + hatchling packaging with bw-menu entry point