#!/usr/bin/env python3 # pylint: disable=invalid-name; script name import argparse import os import pathlib import subprocess import time def _get_password_store_prefix_path() -> pathlib.Path: # $ grep ^PREFIX $(which pass) return pathlib.Path( subprocess.run( ["pass", "git", "rev-parse", "--show-toplevel"], stdout=subprocess.PIPE, check=True, ) .stdout.rstrip() .decode() ) def _main(): argparser = argparse.ArgumentParser(allow_abbrev=False) argparser.add_argument("password_path", nargs="?") args = argparser.parse_args() if not args.password_path: prefix = _get_password_store_prefix_path() for password_path in prefix.rglob("*.gpg"): print( password_path.relative_to(prefix).as_posix()[ : -len(password_path.suffix) ] ) else: password = ( subprocess.run( ["pass", "show", args.password_path], stdout=subprocess.PIPE, check=True, ) .stdout.splitlines()[0] .decode() ) assert password.isprintable() assert "'" not in password os.close(1) # close rofi's window time.sleep(0.1) # wait for rofi's window to close subprocess.run( ["xdotool", "-"], input=f"type '{password}'".encode(), check=True ) if __name__ == "__main__": _main()