use argp subparsers instead of copying common code