arsenik.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. #pragma once
  2. // ╭─────────────────────────────────────────────────────────╮
  3. // │ Syntaxic sugar and generic definitions │
  4. // ╰─────────────────────────────────────────────────────────╯
  5. // Generic shorthand definitions
  6. #define AG(keycode) RALT(keycode)
  7. #define XX KC_NO
  8. #define __ KC_TRNS
  9. // Lafayette-layer-specific shorthand definitions
  10. #ifdef ARSENIK_ENABLE_LAFAYETTE_LAYER
  11. # define LAFAYETTE MO(_lafayette)
  12. # define LAFAYETTE_T(keycode) LT(_lafayette, keycode)
  13. #else
  14. # define LAFAYETTE KC_RALT
  15. # define LAFAYETTE_T(keycode) RALT_T(keycode)
  16. #endif
  17. // TODO: find better names for those macros ?
  18. #ifdef ARSENIK_MAC_MODIFIERS
  19. # define _GUI_T LALT_T
  20. # define _CTL_T LGUI_T
  21. # define _ALT_T LCTL_T
  22. # define _GUI KC_LALT
  23. # define _CTL KC_LGUI
  24. # define _ALT KC_LCTL
  25. #else
  26. # define _GUI_T LGUI_T
  27. # define _CTL_T LCTL_T
  28. # define _ALT_T LALT_T
  29. # define _GUI KC_LGUI
  30. # define _CTL KC_LCTL
  31. # define _ALT KC_LALT
  32. #endif
  33. #ifdef ARSENIK_ENABLE_HRM
  34. # define KC_SS _GUI_T(KC_S)
  35. # define KC_DD _CTL_T(KC_D)
  36. # define KC_FF _ALT_T(KC_F)
  37. # define KC_JJ _ALT_T(KC_J)
  38. # define KC_KK _CTL_T(KC_K)
  39. # define KC_LL _GUI_T(KC_L)
  40. #else
  41. # define KC_SS KC_S
  42. # define KC_DD KC_D
  43. # define KC_FF KC_F
  44. # define KC_JJ KC_J
  45. # define KC_KK KC_K
  46. # define KC_LL KC_L
  47. #endif
  48. // Extra simple config for beginners with bigger keyboards
  49. #if defined ARSENIK_DISABLE_THUMB_TAP_HOLDS
  50. # define AS_TL_TUCK _ALT
  51. # define AS_TL_HOME _CTL
  52. # define AS_TL_REACH _GUI
  53. # define AS_TR_REACH MO(_num_nav)
  54. # define AS_TR_HOME KC_SPC
  55. # define AS_TR_TUCK LAFAYETTE
  56. #elif defined ARSENIK_ENABLE_SELENIUM_VARIANT
  57. # define AS_TL_REACH XX
  58. # define AS_TR_REACH XX
  59. # define AS_TL_TUCK LT(_vim_nav, KC_ESC)
  60. # define AS_TR_TUCK LT(_num_row, KC_ENT)
  61. # if defined SELENIUM_LEFT_HAND_SPACE
  62. # define AS_TL_HOME LSFT_T(KC_SPC)
  63. # define AS_TR_HOME LAFAYETTE_T(KC_BSPC)
  64. # else
  65. # define AS_TL_HOME LSFT_T(KC_BSPC)
  66. # define AS_TR_HOME LAFAYETTE_T(KC_SPC)
  67. # endif
  68. #else
  69. # define AS_TL_TUCK LSFT_T(KC_BSPC)
  70. # define AS_TL_HOME LT(_num_nav, KC_BSPC)
  71. # define AS_TL_REACH XX
  72. # define AS_TR_REACH XX
  73. # define AS_TR_HOME AS_TL_HOME
  74. # define AS_TR_TUCK LAFAYETTE_T(KC_ENT)
  75. #endif
  76. // ╭─────────────────────────────────────────────────────────╮
  77. // │ Keyboard layout specific declarations │
  78. // ╰─────────────────────────────────────────────────────────╯
  79. #if defined ARSENIK_HOST_LAYOUT_QWERTY
  80. # define AS(stripped_keycode) KC_##stripped_keycode
  81. #elif defined ARSENIK_HOST_LAYOUT_AZERTY
  82. # define AS(stripped_keycode) FR_##stripped_keycode
  83. # define SHIFTED_NUMBERS
  84. # include "keymap_french.h"
  85. # include "sendstring_french.h"
  86. #elif defined ARSENIK_HOST_LAYOUT_ERGOL
  87. # define AS(stripped_keycode) EL_##stripped_keycode
  88. # include "keymap_ergol.h"
  89. # define ODK1_SEQUENCE tap_code(EL_ODK); tap_code(KC_1)
  90. # define ODK2_SEQUENCE tap_code(EL_ODK); tap_code(KC_2)
  91. # define ODK3_SEQUENCE tap_code(EL_ODK); tap_code(KC_3)
  92. # define ODK4_SEQUENCE tap_code(EL_ODK); tap_code(KC_4)
  93. # define ODK5_SEQUENCE tap_code(EL_ODK); tap_code(KC_5)
  94. #elif defined ARSENIK_HOST_LAYOUT_BEPO
  95. # define AS(stripped_keycode) BE_##stripped_keycode
  96. # define SHIFTED_NUMBERS
  97. # include "keymap_bepo.h"
  98. # include "sendstring_bepo.h"
  99. #elif defined ARSENIK_HOST_LAYOUT_DVORAK
  100. # define AS(stripped_keycode) DV_##stripped_keycode
  101. # include "keymap_dvorak.h"
  102. # include "sendstring_dvorak.h"
  103. #elif defined ARSENIK_HOST_LAYOUT_COLEMAK
  104. # define AS(stripped_keycode) CM_##stripped_keycode
  105. # include "keymap_colemak.h"
  106. # include "sendstring_colemak.h"
  107. #elif defined ARSENIK_HOST_LAYOUT_WORKMAN
  108. # define AS(stripped_keycode) WK_##stripped_keycode
  109. # include "keymap_workman.h"
  110. # include "sendstring_workman.h"
  111. #else
  112. # error "No `ARSENIK_HOST_LAYOUT_*` option was found or recognised"
  113. #endif
  114. #ifndef ODK1_SEQUENCE
  115. # define ODK1_SEQUENCE tap_code(KC_NO)
  116. #endif
  117. #ifndef ODK2_SEQUENCE
  118. # define ODK2_SEQUENCE tap_code(KC_NO)
  119. #endif
  120. #ifndef ODK3_SEQUENCE
  121. # define ODK3_SEQUENCE tap_code(KC_NO)
  122. #endif
  123. #ifndef ODK4_SEQUENCE
  124. # define ODK4_SEQUENCE tap_code(KC_NO)
  125. #endif
  126. #ifndef ODK5_SEQUENCE
  127. # define ODK5_SEQUENCE tap_code(KC_NO)
  128. #endif
  129. #ifdef SHIFTED_NUMBERS
  130. # define AS_S0 KC_0
  131. # define AS_S1 KC_1
  132. # define AS_S2 KC_2
  133. # define AS_S3 KC_3
  134. # define AS_S4 KC_4
  135. # define AS_S5 KC_5
  136. # define AS_S6 KC_6
  137. # define AS_S7 KC_7
  138. # define AS_S8 KC_8
  139. # define AS_S9 KC_9
  140. #else
  141. # define AS_S0 S(KC_0)
  142. # define AS_S1 S(KC_1)
  143. # define AS_S2 S(KC_2)
  144. # define AS_S3 S(KC_3)
  145. # define AS_S4 S(KC_4)
  146. # define AS_S5 S(KC_5)
  147. # define AS_S6 S(KC_6)
  148. # define AS_S7 S(KC_7)
  149. # define AS_S8 S(KC_8)
  150. # define AS_S9 S(KC_9)
  151. #endif
  152. // ╭─────────────────────────────────────────────────────────╮
  153. // │ QMK layouts definitions │
  154. // ╰─────────────────────────────────────────────────────────╯
  155. // ──────────────────────────< Generic layouts >──────────────────────────
  156. #if defined ARSENIK_LAYOUT_split_3x5_2
  157. #define ARSENIK_LAYOUT(\
  158. k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c,\
  159. k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c,\
  160. k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c,\
  161. k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c,\
  162. k51, k52, k53, k54, k55, k56\
  163. )\
  164. LAYOUT_split_3x5_2(\
  165. k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b,\
  166. k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b,\
  167. k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b,\
  168. k51, k52, k55, k56\
  169. )
  170. #elif defined ARSENIK_LAYOUT_split_3x5_3
  171. #define ARSENIK_LAYOUT(\
  172. k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c,\
  173. k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c,\
  174. k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c,\
  175. k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c,\
  176. k51, k52, k53, k54, k55, k56\
  177. )\
  178. LAYOUT_split_3x5_3(\
  179. k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b,\
  180. k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b,\
  181. k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b,\
  182. k51, k52, k53, k54, k55, k56\
  183. )
  184. #elif defined ARSENIK_LAYOUT_split_3x6_3
  185. #define ARSENIK_LAYOUT(\
  186. k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c,\
  187. k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c,\
  188. k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c,\
  189. k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c,\
  190. k51, k52, k53, k54, k55, k56\
  191. )\
  192. LAYOUT_split_3x6_3(\
  193. k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c,\
  194. k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c,\
  195. k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c,\
  196. k51, k52, k53, k54, k55, k56\
  197. )
  198. #elif defined ARSENIK_LAYOUT_ortho_4x10
  199. #define ARSENIK_LAYOUT(\
  200. k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c,\
  201. k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c,\
  202. k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c,\
  203. k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c,\
  204. k51, k52, k53, k54, k55, k56\
  205. )\
  206. LAYOUT_ortho_4x10(\
  207. k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b,\
  208. k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b,\
  209. k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b,\
  210. XX, XX, k51, k52, k53, k54, k55, k56, XX, XX,\
  211. )
  212. #elif defined ARSENIK_LAYOUT_ortho_4x12
  213. #define ARSENIK_LAYOUT(\
  214. k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c,\
  215. k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c,\
  216. k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c,\
  217. k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c,\
  218. k51, k52, k53, k54, k55, k56\
  219. )\
  220. LAYOUT_ortho_4x12(\
  221. k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c,\
  222. k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c,\
  223. k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c,\
  224. XX, XX, XX, k51, k52, k53, k54, k55, k56, XX, XX, XX,\
  225. )
  226. #elif defined ARSENIK_LAYOUT_ortho_5x10
  227. #define ARSENIK_LAYOUT(\
  228. k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c,\
  229. k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c,\
  230. k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c,\
  231. k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c,\
  232. k51, k52, k53, k54, k55, k56\
  233. )\
  234. LAYOUT_ortho_4x10(\
  235. k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b,\
  236. k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b,\
  237. k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b,\
  238. k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b,\
  239. XX, XX, k51, k52, k53, k54, k55, k56, XX, XX,\
  240. )
  241. #elif defined ARSENIK_LAYOUT_ortho_5x12
  242. #define ARSENIK_LAYOUT(\
  243. k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c,\
  244. k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c,\
  245. k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c,\
  246. k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c,\
  247. k51, k52, k53, k54, k55, k56\
  248. )\
  249. LAYOUT_ortho_5x12(\
  250. k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c,\
  251. k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c,\
  252. k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c,\
  253. k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c,\
  254. XX, XX, XX, k51, k52, k53, k54, k55, k56, XX, XX, XX,\
  255. )
  256. // ─────────────────< Custom keyboard-specific layouts >──────────────
  257. #elif defined ARSENIK_LAYOUT_planck_grid
  258. #define ARSENIK_LAYOUT(\
  259. k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c,\
  260. k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c,\
  261. k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c,\
  262. k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c,\
  263. k51, k52, k53, k54, k55, k56\
  264. LAYOUT_planck_grid(\
  265. k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c,\
  266. k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c,\
  267. k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c,\
  268. k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c,\
  269. XX, XX, XX, k53, k51, k55, k56, k54, XX, XX, XX,\
  270. )
  271. #elif defined ARSENIK_LAYOUT_keebio_iris
  272. #define ARSENIK_LAYOUT(\
  273. k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c,\
  274. k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c,\
  275. k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c,\
  276. k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c,\
  277. k51, k52, k53, k54, k55, k56\
  278. ) LAYOUT(\
  279. k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c,\
  280. k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c,\
  281. k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c,\
  282. k41, k42, k43, k44, k45, k46, XX, XX, k47, k48, k49, k4a, k4b, k4c,\
  283. k51, k52, k53, k54, k55, k56\
  284. )
  285. #else
  286. # error "Arsenik: Unknown layout"
  287. #endif