qmk-firmware/users/dennytom/chording_engine/keymap_def.schema.json
DennyTom e409fb47f2
DennyTom's buttery_engine (#8138)
* Selectively adding pieces

* Adding georgi keymap

* Adding more files, fixing make

* Smaller makefiles

* Fixing make rules

* README more inline with QMK's guidelines

* Turning off buggy assert

* Improving documentation based on a user feedback.

* Slightly better schema

* Resurrected state machine diagram
2020-04-07 21:13:17 +10:00

337 lines
11 KiB
JSON

{
"definitions": {},
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"title": "The Keymap definition",
"required": [
"keys",
"parameters",
"layers",
"chord_sets",
"pseudolayers",
"leader_sequences",
"extra_code",
"extra_dependencies"
],
"properties": {
"keys": {
"type": "array",
"title": "The Internal Keycodes",
"description": "Name Keycodes for the Chording Engine. These can be any string except already valid QMK keycodes.",
"items": {
"type": "string",
"title": "Individual Keycode",
"examples": [
"L1",
"R1",
"TOP1",
"THUMB_3",
"Bottom_6"
]
}
},
"parameters": {
"type": "object",
"title": "Keyboard Parameters",
"description": "Keyboard, user and layout specific parameters like timers, max length for buffers and default pseudolayer.",
"required": [
"layout_function_name",
"chord_timeout",
"dance_timeout",
"leader_timeout",
"tap_timeout",
"command_max_length",
"leader_max_length",
"dynamic_macro_max_length",
"string_max_length",
"long_press_multiplier",
"default_pseudolayer"
],
"properties": {
"layout_function_name": {
"type": "string",
"examples": [
"LAYOUT_ginny",
""
]
},
"chord_timeout": {
"type": "integer",
"title": "The Chord Timeout",
"description": "The time in ms you have to press additional keys before the engine assumes you finished pressing keys that are part of a chord.",
"default": 100
},
"dance_timeout": {
"type": "integer",
"title": "The Dance Timeout",
"description": "The time in ms you have to repeatedly activate a chord before the engine assumes you finished a dance.",
"default": 200
},
"leader_timeout": {
"type": "integer",
"title": "The Leader Timeout",
"description": "The time in ms you have to activate additional chords before the engine assumes you finished adding chords to a leader sequence.",
"default": 750
},
"tap_timeout": {
"type": "integer",
"title": "The Tap Timeout",
"description": "The time in ms you have to finish pressing a chord before the engine assumes that you didn't just tap it but are holding it down.",
"default": 50
},
"command_max_length": {
"type": "integer",
"title": "Command Max Length",
"description": "The maximum length for chords buffered in command mode.",
"default": 5
},
"leader_max_length": {
"type": "integer",
"title": "Leader Max Length",
"description": "The maximum length of leader sequences you can define in your keymap",
"default": 5
},
"dynamic_macro_max_length": {
"type": "integer",
"title": "Dynamic Macro Max Length",
"description": "The maximum number of chords (including Dynamic Macro Next) you can record to a Dynamic Macro",
"default": 20
},
"string_max_length": {
"type": "integer",
"title": "String Max Length",
"description": "The maximum length of a string that the STR() chord can accept.",
"default": 16
},
"long_press_multiplier": {
"type": "integer",
"title": "Long Press Multiplier",
"description": "How many times does the chord timer have expire before a chord is registered as not only held but in a long press (for example for Autoshift). Has to be integer.",
"default": 3
},
"default_pseudolayer": {
"type": "string",
"title": "Default Pseudolayer",
"description": "Which pseudolayer should be active when the keyboard starts / restarts.",
"examples": [
"BASE",
"QWERTY"
]
}
}
},
"layers": {
"type": "array",
"title": "QMK Layers",
"description": "The layers QMK needs to know about. Can contain chording engine's internal keycodes or QMK's keycodes. Do not define chords here, those belong in pseudolayers.",
"minItems": 1,
"uniqueItems": false,
"items": {
"type": "object",
"title": "Individual Layers",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"title": "Type of Individual Layers",
"description": "Auto layer fills all keycodes to be chording engine's internal keycodes, manual let's you place internal and QMK's keycodes however you wish.",
"examples": [
"auto",
"manual"
]
},
"keycodes": {
"type": "array",
"title": "Individual Chord",
"description": "A list of of keys that need to be pressed to activate this chord",
"items": {
"type": "string",
"title": "Individual Keycodes",
"description": "A keycode that is a part of the individual chord. Has to be an internal keycode."
}
}
}
}
},
"chord_sets": {
"type": "array",
"title": "Chord Sets Definitions",
"description": "Describes predefined sets of chords to ease defining a number of chords in a pseudolayer.",
"items": {
"type": "object",
"required": [
"name",
"chords"
],
"properties": {
"name": {
"type": "string",
"title": "Name of the Set",
"examples": [
"rows",
"asetniop"
]
},
"chords": {
"type": "array",
"title": "Chords",
"description": "List of all chords in this set",
"minItems": 1,
"uniqueItems": true,
"items": {
"type": "array",
"title": "Individual Chord",
"description": "A list of of keys that need to be pressed to activate this chord",
"items": {
"type": "string",
"title": "Individual Keycodes",
"description": "A keycode that is a part of the individual chord. Has to be an internal keycode."
}
}
}
}
}
},
"pseudolayers": {
"type": "array",
"title": "Pseudolayers",
"description": "The pseudolayers holding the chords to be processed by the chording engine.",
"minItems": 1,
"uniqueItems": true,
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"title": "Name of the Pseudolayer",
"default": null,
"examples": [
"ALWAYS_ON",
"QWERTY"
]
},
"chords": {
"type": "array",
"title": "Chords",
"description": "List of chords belonging on the pseudolayer.",
"items": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"title": "Type of the chord array",
"description": "Defines how this objects describes one or more chords.",
"examples": [
"visual_array",
"visual",
"simple",
"chord_set"
]
},
"keys": {
"type": "array",
"title": "Subset of keys",
"description": "Subset of internal keycodes that will be used when defining the chords. For visual_array type only.",
"examples": [
"[\"L1\", \"L2\", \"L3\", \"L4\", \"R1\", \"R2\", \"R3\", \"R4\"]"
],
"items": {
"type": "string"
}
},
"dictionary": {
"type": "array",
"title": "Dictionary",
"description": "A table. Each row defines in a visual way which keys have to be pressed and what is the desired outcome. For visual_array type only.",
"items": {
"type": "array",
"items": {
"type": "string",
"examples": [
"[\"X"\, \" "\, \" "\, \"X"\, \"X"\, \" "\, \" "\, \"X"\, \"MO(BASE, NUM)\"]
]
}
}
},
"keycode": {
"type": "string",
"title": "Keycode",
"description": "A keycode to be assigned to the chord when it is registered. For simple and visual types only."
},
"set": {
"type": "string",
"title": "Chord set",
"description": "Name of the chord set to be used. Has to be one already defined in the chord_sets array. For chord_set type only."
},
"keycodes": {
"type": "array",
"title": "Keycodes",
"description": "List of keycodes to be assigned to each chord when it is registered. For set type only.",
"items": {
"type": "string"
}
},
"chord": {
"type": "array",
"title": "Chord",
"description": "Array of \"X\"'s and \" \"'s that shows which keys have to be pressed to activate the chord. For visual type only ",
"items": {
"type": "string"
}
}
}
}
}
}
}
},
"leader_sequences": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"examples": ["fn_L1"]
},
"function": {
"type": "string",
"description": "C code the sequence should run. Instead of here, can be defined in extra_dependencies or extra_code",
"examples": ["void fn_L1(void) { SEND(KC_LCTL); SEND(KC_LALT); SEND(KC_DEL); }"]
},
"sequence": {
"type": "array",
"items": {
"type": "string"
},
"examples": [["KC_Q", "KC_Z"]]
}
}
}
},
"extra_code": {
"type": "string",
"label": "Extra Code",
"description": "C code to be inserted into the generated keymap",
"examples": ["void fn_L1(void) {\n SEND(KC_LCTL);\n SEND(KC_LALT);\n SEND(KC_DEL);\n}\n"],
"default": ""
},
"extra_dependencies": {
"type": "array",
"label": "Extra Dependencies",
"description": "List of files to be #include'd in the generated keymap",
"examples": [
"[\"user_functions.c\"]"
],
"default": ""
}
}
}