e409fb47f2
* 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
337 lines
No EOL
11 KiB
JSON
337 lines
No EOL
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": ""
|
|
}
|
|
}
|
|
} |