layouts.h 48 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771
  1. #pragma once
  2. /*
  3. Copyright 2018 Eric Gebhart <e.a.gebhart@gmail.com>
  4. This program is free software: you can redistribute it and/or modify
  5. it under the terms of the GNU General Public License as published by
  6. the Free Software Foundation, either version 2 of the License, or
  7. (at your option) any later version.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. GNU General Public License for more details.
  12. You should have received a copy of the GNU General Public License
  13. along with this program. If not, see <http://www.gnu.org/licenses/>.
  14. */
  15. #include "base_layers.h"
  16. #include "mod_layer.h"
  17. #include "edge_keys.h"
  18. #include "thumbs.h"
  19. #include QMK_KEYBOARD_H
  20. /******************************************************************/
  21. /* This is where I put my Keyboard layouts. */
  22. /* The mod layer can be modified in mod_layer.h */
  23. /* can be applied here. The physical shape of the keyboard is */
  24. /* also accounted for here. This makes it very simple to add a */
  25. /* new keyboard and reuse all of my layouts and layers */
  26. /* */
  27. /* With all of that in hand, we then create a LAYOUT wrapper */
  28. /* macro that takes a list of keys, to create a keyboard matrix */
  29. /* that fits the keyboard. Simple. */
  30. /* */
  31. /* The thumb keys, the bottom rows, etc. */
  32. /* */
  33. /* An attempt has been made to adapt the kinesis and ergodox */
  34. /* Thumb keys to the rectangular shapes of the xd75, viterbi, */
  35. /* and rebound. */
  36. /******************************************************************/
  37. /******************************************************************/
  38. /* * The XD75 is a 5x15 Ortholinear matrix which means it has 3 */
  39. /* keys inbetween the usual left and right hand keys */
  40. /* * The Viterbi is a split 5x14 Ortholinear with 2 middle keys. */
  41. /* * The Ergodox is a split 5x14 Ortholinear with 2 middle keys, */
  42. /* thumbkeys. It is missing middle keys on (home) row 3. */
  43. /* * The Corne is a split 3x12 with 6 thumb keys. It has no */
  44. /* extra middle keys */
  45. /* * The Kinesis is 4x6 + 4 and 6 thumb keys. */
  46. /* * My Dactyl is 4x6 + 5 and 8 thumb keys. */
  47. /******************************************************************/
  48. /******************************************************************/
  49. /* In all cases these keyboards are defined in a matrix which is */
  50. /* a set of rows. Maybe like so, or not. */
  51. /* */
  52. /* -------------------------|------------------------ */
  53. /* | Left0 | Numbers L | mid|dle0 | numbers R | Right0 | */
  54. /* | Left1 | keys0-5 | mid|dle1 | Keys6-10 | Right1 | */
  55. /* | Left2 | keys11-15 | mid|dle2 | Keys16-20 | Right2 | */
  56. /* | Left3 | keys20-25 | mid|dle3 | Keys25-30 | Right3 | */
  57. /* | Row5L | Row5R | */
  58. /* | ThumbsL | ThumbsR | */
  59. /* -------------------------|------------------------ */
  60. /* Generally speaking, the keys on the right and left don't change. */
  61. /* Neither does the bottom row or the thumbs. Frequently the numbers */
  62. /* row is identical across layers. Mostly, we want our Base layers to */
  63. /* be predctable. */
  64. // Since our quirky block definitions are basically a list of comma separated
  65. // arguments, we need a wrapper in order for these definitions to be
  66. // expanded before being used as arguments to the LAYOUT_xxx macro.
  67. #if (!defined(LAYOUT) && defined(KEYMAP))
  68. #define LAYOUT KEYMAP
  69. #endif
  70. // every keyboard has it's Layout. We start there and make a var args
  71. // out of it.
  72. #define LVARG_ergodox(...) LAYOUT_ergodox(__VA_ARGS__)
  73. #define LVARG_edox(...) LAYOUT_ergodox_pretty(__VA_ARGS__)
  74. #define LAYOUT_VARG(...) LAYOUT(__VA_ARGS__)
  75. #define LAYOUT_PVARG(...) LAYOUT_pretty(__VA_ARGS__)
  76. #define LVARG_4x12(...) LAYOUT_ortho_4x12(__VA_ARGS__)
  77. #define LVARG_5x12(...) LAYOUT_ortho_5x12(__VA_ARGS__)
  78. #define LVARG_5x14(...) LAYOUT_ortho_5x14(__VA_ARGS__)
  79. #define LVARG_5x15(...) LAYOUT_ortho_5x15(__VA_ARGS__)
  80. /*
  81. | Left | Numbers L | middle | numbers R | Right |
  82. | Left | keys0-5 | middle | Keys6-10 | Right |
  83. | Left | keys11-15 | middle | Keys16-20 | Right |
  84. | Left | keys20-25 | middle | Keys25-30 | Right |
  85. |Row5L Row5R |
  86. |ThumbsL ThumbsR |
  87. */
  88. /* Assuming that left, midddle, right, row5, and thumbs stay the same, */
  89. /* numbers, no numbers, numbers never change, whatever. */
  90. /* we can have a layout macro that takes a nice rectangle of keys. */
  91. /*Some keyboards need number rows, some don't. there is a setting for that */
  92. /* the keymap will give number rows if BASE_NUMBER_ROW is defined.*/
  93. /* in that case, the layout should take 4 rows of 10. */
  94. /* If all the layouts you might ever want would have the same top row,*/
  95. /* Then it could be defined like that here, and it could take 3x10.*/
  96. /* All layouts are relatively simple to make. */
  97. /* The ROW macros add a universal mod layer so that mods can be defined once */
  98. /* and used everywhere. No matter the keymap or layer. this allows actual maps */
  99. /* like dvorak, qwerty, colemak, beakl, etc., to be defined simply. */
  100. /* Additional, usage examples can be found in keyboards.*/
  101. /* crkbd/keymaps/ericgebhart */
  102. /* kinesis/keymaps/ericgebhart */
  103. /* ergodox_ez/keymaps/ericgebhart */
  104. /* keebio/viterbi/keymaps/ericgebhart */
  105. /* xiudi/xd75/keymaps/ericgebhart */
  106. /* montsinger/rebound/rev4/keymaps/ericgebhart */
  107. /********************************************************************/
  108. /* xiudi/xd75 - Ortholinear 5x15 */
  109. /********************************************************************/
  110. /// These first two base layout templates take sets of 5 keys, left and right.
  111. // Using 4 sets allows for changing the number row if you have one.
  112. // if you never change the number row, then use 3 sets of left and right.
  113. // and define the number row here.
  114. #define Base_5x15( \
  115. K01, K02, K03, K04, K05, \
  116. K06, K07, K08, K09, K0A, \
  117. K11, K12, K13, K14, K15, \
  118. K16, K17, K18, K19, K1A, \
  119. K21, K22, K23, K24, K25, \
  120. K26, K27, K28, K29, K2A, \
  121. K31, K32, K33, K34, K35, \
  122. K36, K37, K38, K39, K3A) \
  123. LVARG_5x15( \
  124. MOD_ROW(ROW0L)(K01, K02, K03, K04, K05), \
  125. MAP_CHUNK(___3_MIDDLE_T), \
  126. MOD_ROW(ROW0R)(K06, K07, K08, K09, K0A), \
  127. \
  128. MOD_ROW(ROW1L)(K11, K12, K13, K14, K15), \
  129. MAP_CHUNK(___3_MIDDLE_1), \
  130. MOD_ROW(ROW1R)(K16, K17, K18, K19, K1A), \
  131. \
  132. MOD_ROW(ROW2L)(K21, K22, K23, K24, K25), \
  133. MAP_CHUNK(___3_MIDDLE_2), \
  134. MOD_ROW(ROW2R)(K26, K27, K28, K29, K2A), \
  135. \
  136. MOD_ROW(ROW3L)(K31, K32, K33, K34, K35), \
  137. MAP_CHUNK(___3_MIDDLE_3), \
  138. MOD_ROW(ROW3R)(K36, K37, K38, K39, K3A), \
  139. MAP_CHUNK(___15_BOTTOM) \
  140. )
  141. #define Base_5x15t6( \
  142. K01, K02, K03, K04, K05, K06, \
  143. K07, K08, K09, K0A, K0B, K0C, \
  144. K11, K12, K13, K14, K15, K16, \
  145. K17, K18, K19, K1A, K1B, K1C, \
  146. K21, K22, K23, K24, K25, K26, \
  147. K27, K28, K29, K2A, K2B, K2C, \
  148. K31, K32, K33, K34, K35, K36, \
  149. K37, K38, K39, K3A, K3B, K3C) \
  150. LVARG_5x15( \
  151. MOD_ROW(ROW0L)(K01, K02, K03, K04, K05, K06), \
  152. MAP_CHUNK(___3_MIDDLE_T), \
  153. MOD_ROW(ROW0R)(K07, K08, K09, K0A, K0B, K0C), \
  154. MOD_ROW(ROW1L)(K11, K12, K13, K14, K15, K16), \
  155. MAP_CHUNK(___3_MIDDLE_1), \
  156. MOD_ROW(ROW1R)(K17, K18, K19, K1A, K1B, K1C), \
  157. MOD_ROW(ROW2L)(K21, K22, K23, K24, K25, K26), \
  158. MAP_CHUNK(___3_MIDDLE_2), \
  159. MOD_ROW(ROW2R)(K27, K28, K29, K2A, K2B, K2C), \
  160. MOD_ROW(ROW3L)(K31, K32, K33, K34, K35, K36), \
  161. MAP_CHUNK(___3_MIDDLE_3), \
  162. MOD_ROW(ROW3R)(K37, K38, K39, K3A, K3B, K3C), \
  163. MAP_CHUNK(___15_BOTTOM) \
  164. )
  165. // 4 rows of 12. 3 columns transparent in the middle.
  166. #define Transient_5x15( \
  167. K01, K02, K03, K04, K05, \
  168. K07, K08, K09, K0A, K0B, \
  169. K11, K12, K13, K14, K15, \
  170. K17, K18, K19, K1A, K1B, \
  171. K21, K22, K23, K24, K25, \
  172. K27, K28, K29, K2A, K2B \
  173. ) \
  174. LVARG_5x15( \
  175. ___15___, \
  176. ___, K01, K02, K03, K04, K05, \
  177. ___3___, \
  178. K07, K08, K09, K0A, K0B, ___, \
  179. ___, K11, K12, K13, K14, K15, \
  180. ___3___, \
  181. K17, K18, K19, K1A, K1B, ___, \
  182. ___, K21, K22, K23, K24, K25, \
  183. ___3___, \
  184. K27, K28, K29, K2A, K2B, ___, \
  185. MAP_CHUNK(___15_BOTTOM) \
  186. ) \
  187. /********************************************************************/
  188. /********************************************************************/
  189. /* viterbi - Ortholinear 5x14 */
  190. /********************************************************************/
  191. #define Base_5x14( \
  192. K01, K02, K03, K04, K05, \
  193. K06, K07, K08, K09, K0A, \
  194. K11, K12, K13, K14, K15, \
  195. K16, K17, K18, K19, K1A, \
  196. K21, K22, K23, K24, K25, \
  197. K26, K27, K28, K29, K2A, \
  198. K31, K32, K33, K34, K35, \
  199. K36, K37, K38, K39, K3A) \
  200. LVARG_5x14( \
  201. MOD_ROW(ROW0L)(K01, K02, K03, K04, K05), \
  202. MAP_CHUNK(___2_MIDDLE_T), \
  203. MOD_ROW(ROW0R)(K06, K07, K08, K09, K0A), \
  204. \
  205. MOD_ROW(ROW1L)(K11, K12, K13, K14, K15), \
  206. MAP_CHUNK(___2_MIDDLE_1), \
  207. MOD_ROW(ROW1R)(K16, K17, K18, K19, K1A), \
  208. \
  209. MOD_ROW(ROW2L)(K21, K22, K23, K24, K25), \
  210. MAP_CHUNK(___2_MIDDLE_2), \
  211. MOD_ROW(ROW2R)(K26, K27, K28, K29, K2A), \
  212. \
  213. MOD_ROW(ROW3L)(K31, K32, K33, K34, K35), \
  214. MAP_CHUNK(___2_MIDDLE_3), \
  215. MOD_ROW(ROW3R)(K36, K37, K38, K39, K3A), \
  216. MAP_CHUNK(___14_BOTTOM) \
  217. )
  218. #define Base_5x14t6( \
  219. K01, K02, K03, K04, K05, K06, \
  220. K07, K08, K09, K0A, K0B, K0C, \
  221. K11, K12, K13, K14, K15, K16, \
  222. K17, K18, K19, K1A, K1B, K1C, \
  223. K21, K22, K23, K24, K25, K26, \
  224. K27, K28, K29, K2A, K2B, K2C, \
  225. K31, K32, K33, K34, K35, K36, \
  226. K37, K38, K39, K3A, K3B, K3C) \
  227. LVARG_5x15( \
  228. MOD_ROW(ROW0L)(K01, K02, K03, K04, K05, K06), \
  229. MAP_CHUNK(___2_MIDDLE_T), \
  230. MOD_ROW(ROW0R)(K07, K08, K09, K0A, K0B, K0C), \
  231. MOD_ROW(ROW1L)(K11, K12, K13, K14, K15, K16), \
  232. MAP_CHUNK(___2_MIDDLE_1), \
  233. MOD_ROW(ROW1R)(K17, K18, K19, K1A, K1B, K1C), \
  234. MOD_ROW(ROW2L)(K21, K22, K23, K24, K25, K26), \
  235. MAP_CHUNK(___2_MIDDLE_2), \
  236. MOD_ROW(ROW2R)(K27, K28, K29, K2A, K2B, K2C), \
  237. MOD_ROW(ROW3L)(K31, K32, K33, K34, K35, K36), \
  238. MAP_CHUNK(___2_MIDDLE_3), \
  239. MOD_ROW(ROW3R)(K37, K38, K39, K3A, K3B, K3C), \
  240. MAP_CHUNK(___14_BOTTOM) \
  241. )
  242. // 4 rows of 12. 2 columns transparent in the middle.
  243. #define Transient_5x14( \
  244. K01, K02, K03, K04, K05, \
  245. K07, K08, K09, K0A, K0B, \
  246. K11, K12, K13, K14, K15, \
  247. K17, K18, K19, K1A, K1B, \
  248. K21, K22, K23, K24, K25, \
  249. K27, K28, K29, K2A, K2B \
  250. ) \
  251. LVARG_5x14( \
  252. ___14___, \
  253. ___, K01, K02, K03, K04, K05, \
  254. ___2___, \
  255. K07, K08, K09, K0A, K0B, ___, \
  256. \
  257. ___, K11, K12, K13, K14, K15, \
  258. ___2___, \
  259. K17, K18, K19, K1A, K1B, ___, \
  260. \
  261. ___, K21, K22, K23, K24, K25, \
  262. ___2___, \
  263. K27, K28, K29, K2A, K2B, ___, \
  264. MAP_CHUNK(___14_BOTTOM) \
  265. ) \
  266. /********************************************************************/
  267. /* Ortholinear 4x12 */
  268. /********************************************************************/
  269. #define LAYOUT_4x12_base( \
  270. K01, K02, K03, K04, K05, \
  271. K06, K07, K08, K09, K0A, \
  272. K11, K12, K13, K14, K15, \
  273. K16, K17, K18, K19, K1A, \
  274. K21, K22, K23, K24, K25, \
  275. K26, K27, K28, K29, K2A \
  276. ) \
  277. LVARG_4x12( \
  278. MOD_CORE_3x5(K01, K02, K03, K04, K05, \
  279. K06, K07, K08, K09, K0A, \
  280. K11, K12, K13, K14, K15, \
  281. K16, K17, K18, K19, K1A, \
  282. K21, K22, K23, K24, K25, \
  283. K26, K27, K28, K29, K2A), \
  284. ___12_BOTTOM___ \
  285. )
  286. // Just for bepo because it's a 3x6 matrix on each side.
  287. // So 3 pairs of 6 keys, left and right.
  288. // takes 3 makes 4 rows of 12.
  289. #define LAYOUT_4x12_transient( \
  290. K01, K02, K03, K04, K05, K06, \
  291. K07, K08, K09, K0A, K0B, K0C, \
  292. K11, K12, K13, K14, K15, K16, \
  293. K17, K18, K19, K1A, K1B, K1C, \
  294. K21, K22, K23, K24, K25, K26, \
  295. K27, K28, K29, K2A, K2B, K2C \
  296. ) \
  297. LVARG_4x12( \
  298. K01, K02, K03, K04, K05, K06, \
  299. K07, K08, K09, K0A, K0B, K0C, \
  300. K11, K12, K13, K14, K15, K16, \
  301. K17, K18, K19, K1A, K1B, K1C, \
  302. K21, K22, K23, K24, K25, K26, \
  303. K27, K28, K29, K2A, K2B, K2C, \
  304. ___12_BOTTOM___ \
  305. ) \
  306. /********************************************************************/
  307. /* CRKBD Corne or any other 3x5/6 with 3 thumbs on each side. */
  308. /* The Corne has 3x6 matrix on both sides with 6 thumbs total */
  309. /* This Macro takes 2x3x5 and gives it pinkies, and thumbs. */
  310. /* Arg chunks are in the middle with the passthrough modifiers as */
  311. /* needed. Sama Sama apres cette fois. */
  312. /********************************************************************/
  313. #define Base_3x6_3( \
  314. K01, K02, K03, K04, K05, \
  315. K06, K07, K08, K09, K0A, \
  316. K11, K12, K13, K14, K15, \
  317. K16, K17, K18, K19, K1A, \
  318. K21, K22, K23, K24, K25, \
  319. K26, K27, K28, K29, K2A) \
  320. LAYOUT_VARG( \
  321. MOD_CORE_3x5(K01, K02, K03, K04, K05, \
  322. K06, K07, K08, K09, K0A, \
  323. K11, K12, K13, K14, K15, \
  324. K16, K17, K18, K19, K1A, \
  325. K21, K22, K23, K24, K25, \
  326. K26, K27, K28, K29, K2A), \
  327. ___6_ERGO_THUMBS___ \
  328. )
  329. #define Base_3x6_3t6( \
  330. K01, K02, K03, K04, K05, K06, \
  331. K07, K08, K09, K0A, K0B, K0C, \
  332. K11, K12, K13, K14, K15, K16, \
  333. K17, K18, K19, K1A, K1B, K1C, \
  334. K21, K22, K23, K24, K25, K26, \
  335. K27, K28, K29, K2A, K2B, K2C) \
  336. LAYOUT_VARG( \
  337. MOD_CORE_3x6( \
  338. K01, K02, K03, K04, K05, K06, \
  339. K07, K08, K09, K0A, K0B, K0C, \
  340. K11, K12, K13, K14, K15, K16, \
  341. K17, K18, K19, K1A, K1B, K1C, \
  342. K21, K22, K23, K24, K25, K26, \
  343. K27, K28, K29, K2A, K2B, K2C), \
  344. ___6_ERGO_THUMBS___ \
  345. )
  346. // All we really need is to add the see through thumbs to the end.
  347. #define Transient_3x6_3( \
  348. K01, K02, K03, K04, K05, \
  349. K07, K08, K09, K0A, K0B, \
  350. K11, K12, K13, K14, K15, \
  351. K17, K18, K19, K1A, K1B, \
  352. K21, K22, K23, K24, K25, \
  353. K27, K28, K29, K2A, K2B \
  354. ) \
  355. LAYOUT_VARG( \
  356. ___, K01, K02, K03, K04, K05, \
  357. K07, K08, K09, K0A, K0B, ___, \
  358. ___, K11, K12, K13, K14, K15, \
  359. K17, K18, K19, K1A, K1B, ___, \
  360. ___, K21, K22, K23, K24, K25, \
  361. K27, K28, K29, K2A, K2B, ___, \
  362. ___6_ERGO_THUMBS___ \
  363. )
  364. //___6_ERGO_THUMBS___
  365. /********************************************************************/
  366. /* Kinesis*/
  367. /********************************************************************/
  368. // A 4x6 on each side, with a 4 column fifth row, and 6 thumbs on
  369. // each side. - 4x6_4_6.
  370. // Then a giant row up top, 9 keys on each side, for function keys.
  371. #define Base_4x6_4_6( \
  372. K01, K02, K03, K04, K05, \
  373. K06, K07, K08, K09, K0A, \
  374. K11, K12, K13, K14, K15, \
  375. K16, K17, K18, K19, K1A, \
  376. K21, K22, K23, K24, K25, \
  377. K26, K27, K28, K29, K2A, \
  378. K31, K32, K33, K34, K35, \
  379. K36, K37, K38, K39, K3A \
  380. ) \
  381. LAYOUT_PVARG( \
  382. ___KINTFUNC_L___, ___KINTFUNC_R___, \
  383. MOD_CORE_4x5(K01, K02, K03, K04, K05, \
  384. K06, K07, K08, K09, K0A, \
  385. K11, K12, K13, K14, K15, \
  386. K16, K17, K18, K19, K1A, \
  387. K21, K22, K23, K24, K25, \
  388. K26, K27, K28, K29, K2A, \
  389. K31, K32, K33, K34, K35, \
  390. K36, K37, K38, K39, K3A), \
  391. MAP_CHUNK(___4_BOTTOM_LEFT), \
  392. MAP_CHUNK(___4_BOTTOM_RIGHT), \
  393. MAP_CHUNK(___12_DOX_ALL_THUMBS) \
  394. )
  395. #define Base_4x6_4_6t6( \
  396. K01, K02, K03, K04, K05, K06, \
  397. K07, K08, K09, K0A, K0B, K0C, \
  398. K11, K12, K13, K14, K15, K16, \
  399. K17, K18, K19, K1A, K1B, K1C, \
  400. K21, K22, K23, K24, K25, K26, \
  401. K27, K28, K29, K2A, K2B, K2C, \
  402. K31, K32, K33, K34, K35, K36, \
  403. K37, K38, K39, K3A, K3B, K3C) \
  404. LAYOUT_PVARG( \
  405. MOD_CORE_4x6( \
  406. K01, K02, K03, K04, K05, K06, \
  407. K07, K08, K09, K0A, K0B, K0C, \
  408. K11, K12, K13, K14, K15, K16, \
  409. K17, K18, K19, K1A, K1B, K1C, \
  410. K21, K22, K23, K24, K25, K26, \
  411. K27, K28, K29, K2A, K2B, K2C, \
  412. K31, K32, K33, K34, K35, K36, \
  413. K37, K38, K39, K3A, K3B, K3C), \
  414. MAP_CHUNK(___4_BOTTOM_LEFT), \
  415. MAP_CHUNK(___4_BOTTOM_RIGHT), \
  416. MAP_CHUNK(___12_DOX_ALL_THUMBS) \
  417. )
  418. #define Transient_4x6_4_6( \
  419. K01, K02, K03, K04, K05, \
  420. K07, K08, K09, K0A, K0B, \
  421. K11, K12, K13, K14, K15, \
  422. K17, K18, K19, K1A, K1B, \
  423. K21, K22, K23, K24, K25, \
  424. K27, K28, K29, K2A, K2B \
  425. ) \
  426. LAYOUT_PVARG( \
  427. ___12___, ___6___, \
  428. ___12___, \
  429. ___, K01, K02, K03, K04, K05, \
  430. K07, K08, K09, K0A, K0B, ___, \
  431. ___, K11, K12, K13, K14, K15, \
  432. K17, K18, K19, K1A, K1B, ___, \
  433. ___, K21, K22, K23, K24, K25, \
  434. K27, K28, K29, K2A, K2B, ___, \
  435. ___4___, ___4___, \
  436. MAP_CHUNK(___12_DOX_ALL_THUMBS) \
  437. )
  438. /* ___KINTFUNC_L___, ___KINTFUNC_R___, \ */
  439. /* This keyboard is a split, 4x6 + a row of 5 and a thumb cluster of 8. */
  440. /* So We need Base_4x6_5_8 As a layout template to add mods, and fill */
  441. /* out the perimeter keys of the keyboard. Perimeter keys being the */
  442. /* number row, outside pinky keys, the 5th row, and thumbs. */
  443. /********************************************************************/
  444. /* Dactyl with 8 thumb keys*/
  445. /********************************************************************/
  446. // Basically an ergodox ez without the 3 pairs of middle keys.
  447. // electrically 7 columns in the 5th row. 6 in the rest.
  448. // Left, right, bottom, and thumbs all stay the same.
  449. #define Base_4x6_5_8( \
  450. K01, K02, K03, K04, K05, \
  451. K06, K07, K08, K09, K0A, \
  452. K11, K12, K13, K14, K15, \
  453. K16, K17, K18, K19, K1A, \
  454. K21, K22, K23, K24, K25, \
  455. K26, K27, K28, K29, K2A, \
  456. K31, K32, K33, K34, K35, \
  457. K36, K37, K38, K39, K3A \
  458. ) \
  459. LAYOUT_PVARG( \
  460. MOD_CORE_4x5(K01, K02, K03, K04, K05, \
  461. K06, K07, K08, K09, K0A, \
  462. K11, K12, K13, K14, K15, \
  463. K16, K17, K18, K19, K1A, \
  464. K21, K22, K23, K24, K25, \
  465. K26, K27, K28, K29, K2A, \
  466. K31, K32, K33, K34, K35, \
  467. K36, K37, K38, K39, K3A \
  468. ), \
  469. MAP_CHUNK(___5_BOTTOM_LEFT), MAP_CHUNK(___5_BOTTOM_RIGHT), \
  470. MAP_CHUNK(___16_ALL_THUMBSa) \
  471. )
  472. #define Base_4x6_5_8t6( \
  473. K01, K02, K03, K04, K05, K06, \
  474. K07, K08, K09, K0A, K0B, K0C, \
  475. K11, K12, K13, K14, K15, K16, \
  476. K17, K18, K19, K1A, K1B, K1C, \
  477. K21, K22, K23, K24, K25, K26, \
  478. K27, K28, K29, K2A, K2B, K2C, \
  479. K31, K32, K33, K34, K35, K36, \
  480. K37, K38, K39, K3A, K3B, K3C) \
  481. LAYOUT_PVARG( \
  482. MOD_CORE_4x6( \
  483. K01, K02, K03, K04, K05, K06, \
  484. K07, K08, K09, K0A, K0B, K0C, \
  485. K11, K12, K13, K14, K15, K16, \
  486. K17, K18, K19, K1A, K1B, K1C, \
  487. K21, K22, K23, K24, K25, K26, \
  488. K27, K28, K29, K2A, K2B, K2C, \
  489. K31, K32, K33, K34, K35, K36, \
  490. K37, K38, K39, K3A, K3B, K3C), \
  491. MAP_CHUNK(___5_BOTTOM_LEFT), MAP_CHUNK(___5_BOTTOM_RIGHT), \
  492. MAP_CHUNK(___16_ALL_THUMBSa) \
  493. )
  494. // so far no need for mods on the transient layers.
  495. // switching to 3x5 transients. 10 column defines.
  496. // I like 3x10 maps even on big keyboards.
  497. # define Transient_4x6_5_8( \
  498. K01, K02, K03, K04, K05, \
  499. K06, K07, K08, K09, K0A, \
  500. K11, K12, K13, K14, K15, \
  501. K16, K17, K18, K19, K1A, \
  502. K21, K22, K23, K24, K25, \
  503. K26, K27, K28, K29, K2A \
  504. ) \
  505. LAYOUT_PVARG( \
  506. ___6___, ___6___, \
  507. ___, K01, K02, K03, K04, K05, \
  508. K06, K07, K08, K09, K0A, ___, \
  509. ___, K11, K12, K13, K14, K15, \
  510. K16, K17, K18, K19, K1A, ___, \
  511. ___, K21, K22, K23, K24, K25, \
  512. K26, K27, K28, K29, K2A, ___, \
  513. ___5___, ___5___, \
  514. MAP_CHUNK(___16_ALL_THUMBSa) \
  515. )
  516. /********************************************************************/
  517. /* Ergodox EZ */
  518. /********************************************************************/
  519. // This one is is set up to pass in the number row.
  520. // Beakl and bepo both change the number row.
  521. // Left, middle, right, bottom, and thumbs all stay the same.
  522. #define Base_dox( \
  523. K01, K02, K03, K04, K05, \
  524. K06, K07, K08, K09, K0A, \
  525. K11, K12, K13, K14, K15, \
  526. K16, K17, K18, K19, K1A, \
  527. K21, K22, K23, K24, K25, \
  528. K26, K27, K28, K29, K2A, \
  529. K31, K32, K33, K34, K35, \
  530. K36, K37, K38, K39, K3A \
  531. ) \
  532. LVARG_edox( \
  533. MOD_ROW(ROW0L)(K01, K02, K03, K04, K05), \
  534. MAP_CHUNK(___2_MIDDLE_1), \
  535. MOD_ROW(ROW0R)(K06, K07, K08, K09, K0A), \
  536. \
  537. MOD_ROW(ROW1L)(K11, K12, K13, K14, K15), \
  538. MAP_CHUNK(___2_MIDDLE_2), \
  539. MOD_ROW(ROW1R)(K16, K17, K18, K19, K1A), \
  540. \
  541. MOD_ROW(ROW2L)(K21, K22, K23, K24, K25), \
  542. MOD_ROW(ROW2R)(K26, K27, K28, K29, K2A), \
  543. \
  544. MOD_ROW(ROW3L)(K31, K32, K33, K34, K35), \
  545. MAP_CHUNK(___2_MIDDLE_3), \
  546. MOD_ROW(ROW3R)(K36, K37, K38, K39, K3A), \
  547. MAP_CHUNK(___5_BOTTOM_LEFT), MAP_CHUNK(___5_BOTTOM_RIGHT), \
  548. MAP_CHUNK(___12_DOX_ALL_THUMBS) \
  549. )
  550. #define Base_doxt6( \
  551. K01, K02, K03, K04, K05, K06, \
  552. K07, K08, K09, K0A, K0B, K0C, \
  553. K11, K12, K13, K14, K15, K16, \
  554. K17, K18, K19, K1A, K1B, K1C, \
  555. K21, K22, K23, K24, K25, K26, \
  556. K27, K28, K29, K2A, K2B, K2C, \
  557. K31, K32, K33, K34, K35, K36, \
  558. K37, K38, K39, K3A, K3B, K3C) \
  559. LVARG_edox(MOD_ROW(ROW0L)(K01, K02, K03, K04, K05, K06), \
  560. MAP_CHUNK(___2_MIDDLE_1), \
  561. MOD_ROW(ROW0R)(K07, K08, K09, K0A, K0B, K0C), \
  562. MOD_ROW(ROW1L)(K11, K12, K13, K14, K15, K16), \
  563. MAP_CHUNK(___2_MIDDLE_2), \
  564. MOD_ROW(ROW1R)(K17, K18, K19, K1A, K1B, K1C), \
  565. MOD_ROW(ROW2L)(K21, K22, K23, K24, K25, K26), \
  566. MOD_ROW(ROW2R)(K27, K28, K29, K2A, K2B, K2C), \
  567. MOD_ROW(ROW3L)(K31, K32, K33, K34, K35, K36), \
  568. MAP_CHUNK(___2_MIDDLE_3), \
  569. MOD_ROW(ROW3R)(K37, K38, K39, K3A, K3B, K3C), \
  570. MAP_CHUNK(___5_BOTTOM_LEFT), \
  571. MAP_CHUNK(___5_BOTTOM_RIGHT), \
  572. MAP_CHUNK(___12_DOX_ALL_THUMBS))
  573. #define Transient_dox( \
  574. K01, K02, K03, K04, K05, \
  575. K07, K08, K09, K0A, K0B, \
  576. K11, K12, K13, K14, K15, \
  577. K17, K18, K19, K1A, K1B, \
  578. K21, K22, K23, K24, K25, \
  579. K27, K28, K29, K2A, K2B) \
  580. LVARG_edox( \
  581. ___14___, \
  582. ___, K01, K02, K03, K04, K05, \
  583. ___2___, \
  584. K07, K08, K09, K0A, K0B, ___, \
  585. ___, K11, K12, K13, K14, K15, \
  586. K17, K18, K19, K1A, K1B, ___, \
  587. ___, K21, K22, K23, K24, K25, \
  588. ___2___, \
  589. K27, K28, K29, K2A, K2B, ___, \
  590. ___5___, ___5___, \
  591. MAP_CHUNK(___12_DOX_ALL_THUMBS) \
  592. )
  593. /********************************************************************/
  594. /* Rebound 4 rows, 1x12, 3x13 */
  595. /********************************************************************/
  596. #define LVARG_rebound(...) LAYOUT_all(__VA_ARGS__)
  597. #define Base_rebound( \
  598. K01, K02, K03, K04, K05, \
  599. K06, K07, K08, K09, K0A, \
  600. K11, K12, K13, K14, K15, \
  601. K16, K17, K18, K19, K1A, \
  602. K21, K22, K23, K24, K25, \
  603. K26, K27, K28, K29, K2A \
  604. ) \
  605. LVARG_rebound( \
  606. MOD_ROW(ROW1L)(K01, K02, K03, K04, K05), \
  607. MOD_ROW(ROW1R)(K06, K07, K08, K09, K0A), \
  608. \
  609. MOD_ROW(ROW2L)(K11, K12, K13, K14, K15), \
  610. KC_CCCV, \
  611. MOD_ROW(ROW2R)(K16, K17, K18, K19, K1A), \
  612. \
  613. MOD_ROW(ROW3L)(K21, K22, K23, K24, K25), \
  614. MO_ADJUST, \
  615. MOD_ROW(ROW3R)(K26, K27, K28, K29, K2A), \
  616. MAP_CHUNK(___13_BOTTOM) \
  617. )
  618. #define Base_reboundt6( \
  619. K01, K02, K03, K04, K05, K06, \
  620. K07, K08, K09, K0A, K0B, K0C, \
  621. K11, K12, K13, K14, K15, K16, \
  622. K17, K18, K19, K1A, K1B, K1C, \
  623. K21, K22, K23, K24, K25, K26, \
  624. K27, K28, K29, K2A, K2B, K2C \
  625. ) \
  626. LVARG_rebound( \
  627. MOD_ROW(ROW1L)(K01, K02, K03, K04, K05, K06), \
  628. MOD_ROW(ROW1R)(K07, K08, K09, K0A, K0B, K0C), \
  629. MOD_ROW(ROW2L)(K11, K12, K13, K14, K15, K16), \
  630. KC_CCCV, \
  631. MOD_ROW(ROW2R)(K17, K18, K19, K1A, K1B, K1C), \
  632. MOD_ROW(ROW3L)(K21, K22, K23, K24, K25, K26), \
  633. MO_ADJUST, \
  634. MOD_ROW(ROW3R)(K27, K28, K29, K2A, K2B, K2C), \
  635. MAP_CHUNK(___13_BOTTOM) \
  636. )
  637. #define Rebound_transient( \
  638. K01, K02, K03, K04, K05, \
  639. K07, K08, K09, K0A, K0B, \
  640. K11, K12, K13, K14, K15, \
  641. K17, K18, K19, K1A, K1B, \
  642. K21, K22, K23, K24, K25, \
  643. K27, K28, K29, K2A, K2B \
  644. ) \
  645. LVARG_rebound( \
  646. ___, K01, K02, K03, K04, K05, \
  647. K07, K08, K09, K0A, K0B, ___, \
  648. ___, K11, K12, K13, K14, K15, \
  649. ___, \
  650. K17, K18, K19, K1A, K1B, ___, \
  651. ___, K21, K22, K23, K24, K25, \
  652. ___, \
  653. K27, K28, K29, K2A, K2B, ___, \
  654. MAP_CHUNK(___13_BOTTOM) \
  655. )
  656. /********************************************************************/
  657. /* Kyria or any other 3x5/6 with 4 keys in the middle of the last */
  658. /* Row. Followed by 5 thumb keys on each side. 7 thumb keys total. */
  659. /********************************************************************/
  660. #define Base_2x6_8_5( \
  661. K01, K02, K03, K04, K05, \
  662. K06, K07, K08, K09, K0A, \
  663. K11, K12, K13, K14, K15, \
  664. K16, K17, K18, K19, K1A, \
  665. K21, K22, K23, K24, K25, \
  666. K26, K27, K28, K29, K2A) \
  667. LAYOUT_VARG( \
  668. MOD_ROW(ROW1L)(K01, K02, K03, K04, K05), \
  669. MOD_ROW(ROW1R)(K06, K07, K08, K09, K0A), \
  670. \
  671. MOD_ROW(ROW2L)(K11, K12, K13, K14, K15), \
  672. MOD_ROW(ROW2R)(K16, K17, K18, K19, K1A), \
  673. \
  674. MOD_ROW(ROW3L)(K21, K22, K23, K24, K25), \
  675. MAP_CHUNK(___4_THUMBS), \
  676. MOD_ROW(ROW3R)(K26, K27, K28, K29, K2A), \
  677. MAP_CHUNK(___10_ERGO_THUMBS) \
  678. )
  679. #define Base_2x6_8_5t6( \
  680. K01, K02, K03, K04, K05, K06, \
  681. K07, K08, K09, K0A, K0B, K0C, \
  682. K11, K12, K13, K14, K15, K16, \
  683. K17, K18, K19, K1A, K1B, K1C, \
  684. K21, K22, K23, K24, K25, K26, \
  685. K27, K28, K29, K2A, K2B, K2C) \
  686. LAYOUT_VARG( \
  687. MOD_ROW(ROW1L)(K01, K02, K03, K04, K05, K06), \
  688. MOD_ROW(ROW1R)(K07, K08, K09, K0A, K0B, K0C), \
  689. MOD_ROW(ROW2L)(K11, K12, K13, K14, K15, K16), \
  690. MOD_ROW(ROW2R)(K17, K18, K19, K1A, K1B, K1C), \
  691. MOD_ROW(ROW3L)(K21, K22, K23, K24, K25, K26), \
  692. MAP_CHUNK(___4_THUMBS), \
  693. MOD_ROW(ROW3R)(K27, K28, K29, K2A, K2B, K2C), \
  694. MAP_CHUNK(___10_ERGO_THUMBS) \
  695. )
  696. // All we really need is to add the see through thumbs to the end.
  697. #define Transient_2x6_8_5( \
  698. K01, K02, K03, K04, K05, \
  699. K07, K08, K09, K0A, K0B, \
  700. K11, K12, K13, K14, K15, \
  701. K17, K18, K19, K1A, K1B, \
  702. K21, K22, K23, K24, K25, \
  703. K27, K28, K29, K2A, K2B \
  704. ) \
  705. LAYOUT_VARG( \
  706. ___, K01, K02, K03, K04, K05, \
  707. K07, K08, K09, K0A, K0B, ___, \
  708. ___, K11, K12, K13, K14, K15, \
  709. K17, K18, K19, K1A, K1B, ___, \
  710. ___, K21, K22, K23, K24, K25, \
  711. ___4___, \
  712. K27, K28, K29, K2A, K2B, ___, \
  713. MAP_CHUNK(___10_ERGO_THUMBS) \
  714. )