DankPinentry
April 22, 2026 ยท View on GitHub
A pinentry implementation that displays a native DankMaterialShell modal for passphrase entry. Works with GPG, SSH, and RBW (Bitwarden CLI).
How it works
There are two parts that work together:
- pinentry-dms: Go binary that speaks the Assuan protocol on stdin/stdout and communicates with DMS via IPC
- DMS plugin: Daemon plugin that shows a themed FloatingWindow for passphrase entry
Pinentry client (gpg-agent or rbw) starts pinentry-dms and speaks to it with Assuan.
When the client runs GETPIN (to request the password), pinentry-dms opens a Unix socket
then sends an IPC call with the dms command to the DankPinentry plugin to show the modal
requesting the password. Once the user enters the password, the plugin writes it to the socket
which the pinentry-dms command picks up and prints for the pinentry client.
Installation
DMS Plugin
Follow instructions in dms-plugin-registry (id is dankPinentry.
Then enable the plugin in DMS settings.
Pinentry binary
Build with Nix:
nix build .#pinentry-dms
Or with Go:
CGO_ENABLED=0 go build ./cmd/pinentry-dms/
Configuration
Point your GPG agent or RBW to the binary:
RBW (~/.config/rbw/config.json):
{
"pinentry": "/path/to/pinentry-dms"
}
GPG (~/.gnupg/gpg-agent.conf):
pinentry-program /path/to/pinentry-dms
Requirements
- DankMaterialShell with the dankPinentry plugin enabled
dmsbinary on PATH (for IPC)