DEV Community

mafflerbach
mafflerbach

Posted on

Use pass and rofi to get a fancy password manager

I am using pass as my main password manager. It is completely cli based under version control and gpg2 encrypted. But use pass only in the cli makes no sense, when you have browsers or other applications which are asking for a password. To get a more handy usage of pass and autotype function, we have to be a little bit creative.

rofi is a windows switcher and application launcher which is high configurable. I combined both in one script. To get the auto type feature I am using xdotool which should be standard installed on every Linux machine.

Depend on the rofi.conf you will get a nice password manager, which is full integrated in your system.

pass and rofi in action

#!/bin/bash

shopt -s nullglob globstar

# switch for autotyping
typeit=0
if [[ $1 == "--type" ]]; then
    typeit=1
    shift
fi

# get all the saved password files
prefix=${PASSWORD_STORE_DIR-~/.password-store}
password_files=( "$prefix"/**/*.gpg )
password_files=( "${password_files[@]#"$prefix"/}" )
password_files=( "${password_files[@]%.gpg}" )

# shows a list of all password files and saved the selected one in a variable
password=$(printf '%s\n' "${password_files[@]}" | rofi -dmenu "$@" -theme ~/dotfiles/i3/rofi.rasi)
[[ -n $password ]] || exit


# pass -c copied the password in clipboard. The additional output from pass is piped in to /dev/null 
if [[ $typeit -eq 0 ]]; then
    pass show -c "$password" | head -n1  2>/dev/null
else
    # If i want to use autotype i save the user name and the password in to a variable 
    # the actual password files are simple text file. 
    # The password has to be on the first line,
    # because if you using `pass -i` the first line will be replaced with a new password

    passw=$(pass show $password | head -n1 )
    uname=$(pass show $password | tail -n1 )
    # xdotool types the username on the active spot (cli or inputfield from a browser)
    xdotool type "$uname"
    # type a TAB (for moving forward in browser input fields)
    xdotool key Tab
    # type the password in the active input
    xdotool type "$passw"
    xdotool key Tab
fi
Enter fullscreen mode Exit fullscreen mode

I'm using i3wm as window manager, so I can easily use short keys to activate my password manager.

bindsym $mod+p mode "password"
mode "password" {
    bindsym p exec "/home/maren/dotfiles/scripts/passScript.sh"
    bindsym t exec "/home/maren/dotfiles/scripts/passScript.sh --type"

    bindsym Return mode "default"
    bindsym Escape mode "default"
    bindsym $mod+r mode "default"
}
Enter fullscreen mode Exit fullscreen mode

Top comments (0)