password-store-completion
password-store-completion
A completion-based pass frontend inspired by rofi-pass. Integrates with Ivy or Embark.
The main purpose is typing passwords with xdotool (useful in EXWM).
Also take a look at Nicolas Petton’s pass. password-store-completion is designed as complementary to Nicolas’ package.
Installation
As the package isn’t yet available anywhere but in this repository, you can clone the repository, add it to the load-path, and require the package. My preferred way is use-package with straight:
(use-package password-store-completion
:straight (:host github :repo "SqrtMinusOne/password-store-completion"))
xdotool has to be available in $PATH.
For Ivy integration:
(require 'password-store-ivy)
Also be sure to load the main package before Ivy.
For Embark integration:
(require 'password-store-embark)
(password-store-embark-mode)
Usage
Emacs’ built-in password store integration has to be set up.
For Ivy integration, the command is M-x password-store-ivy, which invokes Ivy to select an entry from the pass database. Available commands in the selection buffer:
M-a: Perform autotypeM-p: Type passwordM-u: Type usernameM-U: Type URLM-f: Select a field to type
For other completion frameworks, run M-x password-store-completion. If Embark integration is enabled, the same actions are added.
Customization
The following parameters control delays:
password-store-completion-initial-waitcontrols the initial delay before starting to type a sequence (in milliseconds)password-store-completion-delaycontrols the delay between typing characters (in milliseconds)
password-store-completion-sequences determines the steps of sequences. It is an alist; the keys correspond to the default sequences:
autotypepasswordusernameurl
The values are lists of the following elements:
wait: Wait forpassword-store-completion-initial-waitmilliseconds(wait <milliseconds>): Wait for<milliseconds>(key <key>): Type<key>(field <field>): Type<field>of entry
The default value is as follows:
'((autotype . (wait
(field . "username")
(key . "Tab")
(field . secret)
(key . "Return")))
(password . (wait (field . secret)))
(username . (wait (field . "username")))
(url . (wait (field . "url"))))
Sequences can also be overridden in a particular entry with a field called sequence-<name>, where <name> is a key of password-store-completion-sequences.
For example, to press Tab twice in the autotype sequence:
<pass>
username: thexcloud@gmail.com
url: <url>
sequence-autotype: (wait (field . "username") (key . "Tab") (key . "Tab") (field . secret) (key . "Return"))
Or, create a custom sequence:
<pass>
username: thexcloud@gmail.com
url: <url>
sequence-doubletab: (wait (field . "username") (key . "Tab") (key . "Tab") (field . secret) (key . "Return"))
Custom sequences can be run in the field selection interface (M-f in Ivy, M-x embark-act f in Embark).