Add config.h and rules.mk support for data driven keymaps (#12859)
* Add config.h and rules.mk support for data driven keymaps
* tidy up after rebase
* Rename key as it can contain more than just keyboard overrides
* tidy up after rebase
* Add validation
@cli.argument('-o','--output',arg_only=True,type=normpath,help='File to write to')
@cli.argument('-o','--output',arg_only=True,type=normpath,help='File to write to')
@cli.argument('-q','--quiet',arg_only=True,action='store_true',help="Quiet mode, only output error messages")
@cli.argument('-q','--quiet',arg_only=True,action='store_true',help="Quiet mode, only output error messages")
@cli.argument('-kb','--keyboard',type=keyboard_folder,completer=keyboard_completer,help='Keyboard to generate config.h for.')
@cli.argument('-kb','--keyboard',arg_only=True,type=keyboard_folder,completer=keyboard_completer,required=True,help='Keyboard to generate config.h for.')
@cli.argument('-km','--keymap',arg_only=True,help='Keymap to generate config.h for.')
@cli.subcommand('Used by the make system to generate info_config.h from info.json',hidden=True)
@cli.subcommand('Used by the make system to generate info_config.h from info.json',hidden=True)
@cli.argument('-o','--output',arg_only=True,type=normpath,help='File to write to')
@cli.argument('-o','--output',arg_only=True,type=normpath,help='File to write to')
@cli.argument('-q','--quiet',arg_only=True,action='store_true',help="Quiet mode, only output error messages")
@cli.argument('-q','--quiet',arg_only=True,action='store_true',help="Quiet mode, only output error messages")
@cli.argument('-kb','--keyboard',type=keyboard_folder,completer=keyboard_completer,required=True,help='Keyboard to generate keyboard.h for.')
@cli.argument('-kb','--keyboard',arg_only=True,type=keyboard_folder,completer=keyboard_completer,required=True,help='Keyboard to generate keyboard.h for.')
@cli.subcommand('Used by the make system to generate keyboard.h from info.json',hidden=True)
@cli.subcommand('Used by the make system to generate keyboard.h from info.json',hidden=True)
@cli.argument('-o','--output',arg_only=True,type=normpath,help='File to write to')
@cli.argument('-o','--output',arg_only=True,type=normpath,help='File to write to')
@cli.argument('-q','--quiet',arg_only=True,action='store_true',help="Quiet mode, only output error messages")
@cli.argument('-q','--quiet',arg_only=True,action='store_true',help="Quiet mode, only output error messages")
@cli.argument('-e','--escape',arg_only=True,action='store_true',help="Escape spaces in quiet mode")
@cli.argument('-e','--escape',arg_only=True,action='store_true',help="Escape spaces in quiet mode")
@cli.argument('-kb','--keyboard',type=keyboard_folder,completer=keyboard_completer,help='Keyboard to generate config.h for.')
@cli.subcommand('Used by the make system to generate info_config.h from info.json',hidden=True)
@automagic_keyboard
@automagic_keymap
@cli.argument('-kb','--keyboard',arg_only=True,type=keyboard_folder,completer=keyboard_completer,required=True,help='Keyboard to generate rules.mk for.')
@cli.argument('-km','--keymap',arg_only=True,help='Keymap to generate rules.mk for.')
@cli.subcommand('Used by the make system to generate rules.mk from info.json',hidden=True)