Fixed passing arguments to bemenu and dmenu correctly, to allow setting custom options for them on the command line. Removed redundant argument passing for rofi.
🗝 pass-pick ⛏
Easily select, copy, and auto-fill your pass passwords from a drop-down menu.
- Works on both
dmenuand custom pickers
- Has customizable auto-filling behavior to enter your username and password
- Can alternatively be used to paste password data
- Can select individual secret or metadata entries to paste or auto-fill
- Contains simple shortcuts for the above functionality
- Works with metadata obscuring pass extensions like pass-tomb or pass-coffin
pass-pick allows you to interact with your password store through a variety of different dmenu-like selection tools, supporting rofi, bemenu and of course dmenu itself. It works on systems running X11 and both Wayland configurations. It allows you to quickly copy or fill individual password data, or dive into individual password entries and similarly interact with the password's metadata.
The prerequisites depend mostly on your choice of compositor and personal preference and are used for the different functionalities of this program:
wl-clipboard - for copying and pasting your password wtype/ydotool - for auto-filling your password bemenu/rofi/wofi - as a menu for displaying and selecting from your password store
xclip/xsel - for copying and pasting your password xdotool/ydotool - for auto-filling your password bemenu/rofi/dmenu - as a menu for displaying and selecting from your password store
In other words, the choice of display menu is relatively free while that of the typing and pasting functionality is mostly restricted to what is available on your setup.
ydotool works as a typing tool on both,
it does not seem as reliable and a bit more cumbersome to set up than either of the other options but the option exists.
Pull requests or information to make the tool work correctly on a non-linux system welcome,
I have no experience of interacting with clipboards or typing automation tools on other systems.
The Wayland combination of
bemenu is the most heavily used by me,
though any combination above should work well.
Lastly, if you wish to hide the metadata of your password store as well,
pass-pick integrates smoothly with either the
pass-coffin extensions for the password manager.
If it finds a password store directory which seems to be locked by one of these extensions,
it will automatically prompt you to open it before interacting with your passwords.
Afterwards it will close your password store again, hiding all metadata.
Clone the repository somewhere you wish:
git clone https://git.martyoeh.me/Marty/pass-pick.git
And sym-link the script from your path:
ln -s pass-pick/pass-pick /usr/bin/pass-pick
Then simply start the program with
pass-pick and you're good to go.
pass-pick and the program should figure out most of the details for you and present you with a dropdown from which you can select an entry in your password store.
The default behavior on selecting an entry is to fill out both your username and password for the currently selected form fields in whatever application.
The standard auto-filling procedure works by typing your username,
tab to move to the next field,
typing your password and leaving you only to hit send.
username <tab> password
This behavior, like many others, can be configured according to your needs.
pass-pick comes with a variety of quick key mappings that you can use while you're in the menu.
Be aware that the mapped keys are only working in
rofi and only reconfigurable in
|Return||Auto-fill username & password||KEY_AUTOFILL|
|Alt+Return||Open individual entry||KEY_ENTRY_OPEN|
|Ctrl+Alt+u||Send username to clipboard||KEY_CLIP_USER|
|Ctrl+Alt+p||Send password to clipboard||KEY_CLIP_PASS|
|From opened entry:|
|Return||Auto-fill selected field||KEY_ENTRYMENU_FILL|
|Alt+Return||Send selected field to clipboard||KEY_ENTRYMENU_CLIP|
|Alt+s||Reveal contents of the password field||KEY_ENTRYMENU_SHOWFIELD|
|Alt+BackSpace||Return to password list overview||KEY_ENTRYMENU_QUIT|
|Return||Auto-fill username & password|
|Alt+6||Open individual entry|
|Alt+2||Send username to clipboard|
|Alt+3||Send password to clipboard|
|From opened entry:|
|Return||Auto-fill selected field|
|Alt+2||Send selected field to clipboard|
|Alt+4||Reveal contents of the password field|
|Alt+3||Return to password list overview|
The key mappings, as well as any additional configuration can be changed by setting the corresponding environment variable or through a configuration file. The script tries to follow XDG-specification, meaning it looks for a configuration file in the following directories (in descending order):
or, alternatively, a custom directory if the
PP_CONFIGURATION_FILE variable points to a configuration file.
To use environment variables to configure any of these options or keys, prefix them with
PP_, so that e.g.
Environment variables take precedence over configuration file settings.
Look in the table above for the names of the options to remap keys.
Additional configuration options with their default values:
sets the tool to be used as interactive menu.
Can be used either to prefer an alternative to one of the default pickers for the program (
dmenu) if multiple are installed. Can also be used to invoke a completely different picker program whose functionality needs to mimic
dmenuin that it takes its arguments trough
sets the auto-filling tool used, one of
AUTOFILL_CHAIN='username :tab password'
sets the chain of keys that should be sent to auto-fill an entry.
Can use the following special fields:
The default chain is
username :tab password, which will enter the username, simulate the tab-key to switch from the username to the password field, and enter the password. This can be changed to suit your needs. To, for example, log in fully automatically at the end of the sequence, change it to
username :tab password :return, and there will be no further user input for the login required.
sets the time for the typing tool to wait in-between simulated actions.
If some letters appear missing or the fields are not switched between quickly enough, it can usually be fixed by increasing this delay (though typing will also take longer).
PASS_USERNAME_FIELD='username user login'
sets the name of the field in the pass entry which contains the username.
Usually, the default setting should be fine (it will look for
login) but custom field names can be supplied. If multiple field names are given, it will use the first supplied field name a secret contains.
if using a metadata-obscuring pass extension sets the location the coffin or tomb file.
By default, pass-pick just expects the file to be in the same directory as the root password store. This option allows choosing a custom location for the rare occasion where it is necessary.
if using a metadata-obscuring pass extension sets the time the metadata is made visible.
By default, pass-pick sets the time to
0which means it will close the password store as soon as it has finished its operation. If you wish to keep the store open longer you can enter a time frame here, which will be passed through to the extension.
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change. Otherwise, do not hesitate to contact me for issues or ideas.