password-store-ivy
password-store-ivy
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.
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-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
.
Usage
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 autotypeM-p
. Type passwordM-u
. Type usernameM-U
. Type urlM-f
. Select a field to type
Customization
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 forpassword-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:
<pass>
username: thexcloud@gmail.com
url: <url>
sequence-autotype: (wait (field . "username") (key . "Tab") (key . "Tab") (field . secret) (key . "Return"))