import argparse from importlib.metadata import version def parse_args(): parser = argparse.ArgumentParser(prog="bw-menu") parser.add_argument( "--version", action="version", version=f"%(prog)s {version('bw-menu')}" ) subparsers = parser.add_subparsers(dest="command", required=True) # select subcommand select_parser = subparsers.add_parser("select") select_parser.add_argument("--selector", default="rofi", choices=["rofi", "fzf"]) select_parser.add_argument( "--field", default="password", choices=["username", "password", "totp", "name"] ) select_parser.add_argument("--print", dest="print_result", action="store_true") # rofi script-mode passes the selected title as a positional arg — accept and ignore it select_parser.add_argument("_rofi_arg", nargs="?", help=argparse.SUPPRESS) # history subcommand history_parser = subparsers.add_parser("history") history_sub = history_parser.add_subparsers(dest="history_command", required=True) history_sub.add_parser("list") get_parser = history_sub.add_parser("get") get_parser.add_argument("index", type=int) get_parser.add_argument( "--field", default="password", choices=["username", "password", "totp", "name"] ) get_parser.add_argument("--print", dest="print_result", action="store_true") return parser.parse_args()