A pinentry implementation that displays a native DankMaterialShell modal for passphrase entry. Works with GPG, SSH, and RBW (Bitwarden CLI).
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.
Follow instructions in dms-plugin-registry (id is dankPinentry.
Then enable the plugin in DMS settings.
Build with Nix:
nix build .#pinentry-dmsOr with Go:
CGO_ENABLED=0 go build ./cmd/pinentry-dms/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
- DankMaterialShell with the dankPinentry plugin enabled
dmsbinary on PATH (for IPC)