A pass frontend based on Ivy, made primarily to use with EXWM and ivy-posframe. Types fields from entries.

Also take a look at Nicolas Petton’s pass, password-store-ivy is designed as complementary to the Nicolas’ package.

This package is made with Ivy because I need some fine-tuning like actions and turning off sorting in some completions, and Ivy happens to be the completion system I’m using now.


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-ivy
  :straight (:host github :repo "SqrtMinusOne/password-store-ivy")
  :after (exwm))

This package types stuff with xdotool, so you need to have that available in your $PATH.


Emacs’ built-in password store integration has to be set up.

The only 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 autotype
  • M-p. Type password
  • M-u. Type username
  • M-U. Type url
  • M-f. Select a field to type


There are a few parameters that control delays:

  • password-store-ivy-initial-wait controls the initial delay before starting to type a sequence (in milliseconds)
  • password-store-ivy-delay controls the delay between typing characters (in milliseconds)

There is also password-store-ivy-sequences that determines the sequence of actions password-store-ivy performs.

It is an alist with the following required keys (corresponding to the basic actions):

  • autotype
  • password
  • username
  • url

The values are lists of the following elements:

  • wait. Wait for password-store-ivy-initial-wait milliseconds
  • (wait <milliseconds>). Wait for <milliseconds>.
  • (key <key>). Type <key>.
  • (field <field>). Type <field> of entry.

For example, the starting values:

'((autotype . (wait
	       (field . "username")
	       (key . "Tab")
	       (field . secret)
	       (key . "Return")))
  (password . (wait (field . secret)))
  (username . (wait (field . "username")))
  (url . (wait (field . "url"))))

In addition to the global override, sequences can be overriden per-entry with a field called sequence-<name>, where <name> is a key of password-store-ivy-sequences.

For example, here is an override to press Tab twice:

url: <url>
sequence-autotype: (wait (field . "username") (key . "Tab") (key . "Tab") (field . secret) (key . "Return"))