Dmenu/Rofi frontend for Keepass databases
  • Python 94.5%
  • Roff 2.7%
  • Makefile 1.5%
  • Nix 1.3%
Find a file
2026-08-22 17:25:37 -07:00
.github/workflows Hardcode the version in __init__.py instead of deriving it from git tags with hatch-vcs. 2026-08-14 07:47:59 -07:00
docs Add -l/--lock, and stop stale auth files from hanging keepmenu 2026-08-22 17:09:14 -07:00
keepmenu Bump version to 1.6.0 2026-08-22 17:11:10 -07:00
tests Add -l/--lock, and stop stale auth files from hanging keepmenu 2026-08-22 17:09:14 -07:00
.gitignore Add CLAUDE.md and ignore local Claude Code settings 2026-08-22 17:22:42 -07:00
CLAUDE.md Add CLAUDE.md and ignore local Claude Code settings 2026-08-22 17:22:42 -07:00
config.ini.example Support {DELAY=x} for autotype typing speed and a configurable global typing speed setting key_delay. Closes #63 and #184 2026-03-22 15:35:59 -07:00
flake.lock Update flake.lock 2026-01-12 12:37:16 -08:00
flake.nix Stop make and the nix devShell from fighting over the venv 2026-08-20 19:49:34 -07:00
keepmenu.1 Bump version to 1.6.0 2026-08-22 17:11:10 -07:00
keepmenu.1.md Bump version to 1.6.0 2026-08-22 17:11:10 -07:00
LICENSE Change license to GPLv3 (which pykeepass uses). Fix #25. Version 0.5.7. 2019-02-03 12:35:17 -08:00
Makefile Stop make and the nix devShell from fighting over the venv 2026-08-20 19:49:34 -07:00
pyproject.toml Support CLI-only usage with a new --field flag for --show to print any entry field(s) to stdout. 2026-08-14 17:11:57 -07:00
README.md Support CLI-only usage with a new --field flag for --show to print any entry field(s) to stdout. 2026-08-14 17:11:57 -07:00

Keepmenu

PyPI - Python Version PyPI GitHub contributors

Fully featured Bemenu/Dmenu/Wmenu/Fuzzel/Rofi/Tofi/Wofi/Yofi frontend for autotype and managing of Keepass databases.

Inspired in part by Passhole, but more dmenu and less command line focused.

Installation

pip install --user keepmenu

Ensure ~/.local/bin is in your $PATH. Run keepmenu and enter your database path, keyfile path, and password.

For full installation documention see the [installation docs][docs/install.md].

Full Documentation

Installation - Configuration - Usage

Requirements

  1. Python 3.7+
  2. Pykeepass >= 4.0.0

Everything below is only needed for the interactive (launcher) mode. --show works with nothing but Pykeepass installed:

  1. pynput (pip install keepmenu[autotype]), or one of the alternate type libraries below
  2. Bemenu, Dmenu, Wmenu, Fuzzel, Rofi, Tofi, Wofi, or Yofi
  3. xsel or wl-copy, for clipboard support
  4. (optional) Pinentry
  5. (optional) xdotool (for X), ydotool or wtype(for Wayland), dotool or dotoolc (X or Wayland).

Features

  • Supports .kdbx databases, not .kdb.
  • Auto-type username and/or password on selection. Select to clipboard if desired (clears clipboard after 30s).
  • Background process allows selectable time-out for locking the database.
  • Multiple databases can be unlocked and switched on the fly.
  • Use a custom Keepass 2.x style auto-type sequence.
  • Type, view or edit any field.
  • Open the URL in the default web browser.
  • Edit notes using terminal or gui editor.
  • Add and Delete entries.
  • Add, delete, rename and move groups.
  • Hide selected groups from the default and 'View/Type Individual entries' views.
  • Configure the characters and groups of characters used during password generation.
  • Optional Pinentry support for secure passphrase entry.
  • Keepass field references are supported.
  • Display and manage expired passwords.
  • Add, edit and type TOTP codes.
  • Add, edit, type and delete custom attributes.
  • Run once mode to copy or print any field(s) to stdout, usable as a CLI-only password manager with no launcher or GUI installed

License

  • GPLv3

Usage

keepmenu [-h] [-a AUTOTYPE] [-c CONF_FILE] [-C] [-d DATABASE] [-k KEY_FILE] [-t] [-n] [-s SEARCH] [-f FIELD] [-V]

  • Run keepmenu or bind to keystroke combination.
  • Enter database path on first run.
  • Start typing to match entries.
  • Configure config.ini as desired.
  • More detailed usage information.

Tests

To run tests in a venv: make test

Development

  • To install keepmenu in a venv: make

  • Build man page from Markdown source: make man

  • The version is hardcoded in keepmenu/__init__.py (make version or keepmenu -V). Anything else needing a version number reads from there.

  • Using hatch:

    • hatch shell: provides venv with editable installation.
    • hatch build && hatch publish: build and publish to Pypi.
  • Using nix:

    • nix develop: Provides development shell/venv with all dependencies.
    • make test and hatch build/publish work as usual.
  • GitHub Action will upload to TestPyPi on each push to main. To create a GitHub and PyPi release, run make release VERSION=x.y.z. It bumps __version__, updates and rebuilds the man page, commits, and opens an editor for the annotated tag, prefilled with the version as the subject and one bullet per commit since the last tag.

      <tag name on first line, prefilled>
    
      * Release note 1
      * Release note 2
      * ...
    

    Then push the commit and tag: git push origin main --follow-tags. The GitHub Action fails the build if a pushed tag does not match __version__, so nothing mismatched can reach PyPi.