You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

361 lines
16 KiB

  1. #include QMK_KEYBOARD_H
  2. #include "debug.h"
  3. #include "action_layer.h"
  4. #include "version.h"
  5. #include "keymap_french.h"
  6. #define BASE 0 // default Colemak Mod-DH layer
  7. #define SYMB 1 // symbols
  8. #define MDIA 2 // media keys
  9. #define ACC 3 // accented characters
  10. #define QCOPY 0 // Qubes OS VM to VM copy
  11. #define QPASTE 1 // Qubes OS VM to VM paste
  12. #define M_ACIRC 2 // â
  13. #define M_ECIRC 3 // ê
  14. #define M_ICIRC 4 // î
  15. #define M_OCIRC 5 // ô
  16. #define M_UCIRC 6 // û
  17. #define M_YCIRC 7 // ŷ
  18. #define M_AUMLT 8 // ä
  19. #define M_EUMLT 9 // ë
  20. #define M_IUMLT 10 // ï
  21. #define M_OUMLT 11 // ö
  22. #define M_UUMLT 12 // ü
  23. #define M_YUMLT 13 // ÿ
  24. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  25. /* Keymap 0: Base Colemak Mod-DH layer
  26. *
  27. * ,--------------------------------------------------. ,--------------------------------------------------.
  28. * | Esc | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | |
  29. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  30. * | | Q | W | F | P | B | TO(0)| |TO(2) | J | L | U | Y | ; | |
  31. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  32. * | Tab | A | R | S | T | G |------| |------| M | N | E | I | O | Bcksp |
  33. * |--------+------+------+------+------+------| TO(1)| |OSL(3)|------+------+------+------+------+--------|
  34. * | LShift | Z | X | C | D | V | | | | K | H | , | . | : | Rshift |
  35. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  36. * | Ins | Caps | Left | Right| MO(2)| | MO(2)| Down | Up | PgDn | PgUp |
  37. * `----------------------------------' `----------------------------------'
  38. * ,-------------. ,-------------.
  39. * |QCopy | Ralt | | Ralt |QPaste|
  40. * ,------|------|------| |------+------+------.
  41. * | | | Home | | End | | |
  42. * | Space| Ctrl |------| |------| Ctrl |Enter |
  43. * | | | LAlt | | LAlt | | |
  44. * `--------------------' `--------------------'
  45. */
  46. // If it accepts an argument (i.e, is a function), it doesn't need KC_.
  47. // Otherwise, it needs KC_*
  48. [BASE] = LAYOUT_ergodox( // layer 0 : default
  49. // left hand
  50. KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS,
  51. KC_TRNS, FR_Q, FR_W, KC_F, KC_P, KC_B, TO(BASE),
  52. KC_TAB, FR_A, KC_R, KC_S, KC_T, KC_G,
  53. KC_LSFT, FR_Z, KC_X, KC_C, KC_D, KC_V, TO(SYMB),
  54. KC_INS, KC_CAPS, KC_LEFT,KC_RIGHT, MO(SYMB),
  55. M(QCOPY), KC_RALT,
  56. KC_HOME,
  57. KC_SPC,KC_LCTRL, KC_LALT,
  58. // right hand
  59. KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
  60. TO(MDIA), KC_J, KC_L, KC_U, KC_Y, FR_SCLN, KC_TRNS,
  61. FR_M, KC_N, KC_E, KC_I, KC_O, KC_BSPC,
  62. OSL(ACC), KC_K, KC_H, FR_COMM, FR_DOT, FR_COLN, KC_RSFT,
  63. MO(SYMB), KC_DOWN, KC_UP, KC_PGDN, KC_PGUP,
  64. KC_RALT, M(QPASTE),
  65. KC_END,
  66. KC_LALT,KC_RCTL, KC_ENT
  67. ),
  68. /* Keymap 1: Symbol Layer
  69. * // TODO missing: ¤
  70. * ,--------------------------------------------------. ,--------------------------------------------------.
  71. * |Version | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
  72. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  73. * | | § | < | { | \ | ~ | | | | % | @ | } | > | µ | F12 |
  74. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  75. * | | ' | = | - | ( | + |------| |------| * | ) | _ | / | " | |
  76. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  77. * | | ` | ? | # | [ | | | | | | & | ] | $ | ! | ^ | |
  78. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  79. * | | £ | $ | | | | | | | ß | |
  80. * `----------------------------------' `----------------------------------'
  81. * ,-------------. ,-------------.
  82. * | | | | | |
  83. * ,------|------|------| |------+------+------.
  84. * | | | | | | | |
  85. * | | |------| |------| | |
  86. * | | | | | | | |
  87. * `--------------------' `--------------------'
  88. */
  89. // SYMBOLS
  90. [SYMB] = LAYOUT_ergodox(
  91. // left hand
  92. M(0), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
  93. KC_TRNS,FR_SECT,FR_LABK, FR_LCBR,FR_BSLS,FR_TILD,KC_TRNS,
  94. KC_TRNS,FR_QUOT,FR_EQL, FR_MINS,FR_LPRN,FR_PLUS,
  95. KC_TRNS,FR_GRV,FR_QUES,FR_HASH,FR_LBRC,FR_PIPE,KC_TRNS,
  96. FR_EURO,FR_PND,FR_DLR,KC_TRNS,KC_TRNS,
  97. KC_TRNS,KC_TRNS,
  98. KC_TRNS,
  99. KC_TRNS,KC_TRNS,KC_TRNS,
  100. // right hand
  101. KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
  102. KC_TRNS, FR_PERC, FR_AT, FR_RCBR, FR_RABK, FR_MICR, KC_F12,
  103. FR_ASTR, FR_RPRN, FR_UNDS, FR_SLSH, FR_DQUO, KC_TRNS,
  104. KC_TRNS, FR_AMPR, FR_RBRC, FR_DLR, FR_EXLM, FR_CIRC, KC_TRNS,
  105. KC_TRNS, KC_TRNS, KC_TRNS, ALGR(KC_S), KC_TRNS,
  106. KC_TRNS, KC_TRNS,
  107. KC_TRNS,
  108. KC_TRNS, KC_TRNS, KC_TRNS
  109. ),
  110. /* Keymap 2: Media and mouse keys
  111. *
  112. * ,--------------------------------------------------. ,--------------------------------------------------.
  113. * | | | | | | | | | | | | | | | |
  114. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  115. * | | | | MsUp | | | | | | | | | | | |
  116. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  117. * | | |MsLeft|MsDown|MsRght| |------| |------| | Lclk | Rclk | | | Play |
  118. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  119. * | | | | | | | | | | | | Prev | Next | | |
  120. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  121. * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
  122. * `----------------------------------' `----------------------------------'
  123. * ,-------------. ,-------------.
  124. * | | | | | |
  125. * ,------|------|------| |------+------+------.
  126. * | | | | | | |Brwser|
  127. * | | |------| |------| |Back |
  128. * | | | | | | | |
  129. * `--------------------' `--------------------'
  130. */
  131. // MEDIA AND MOUSE
  132. [MDIA] = LAYOUT_ergodox(
  133. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  134. KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
  135. KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
  136. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  137. KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
  138. KC_TRNS, KC_TRNS,
  139. KC_TRNS,
  140. KC_TRNS, KC_TRNS, KC_TRNS,
  141. // right hand
  142. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  143. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  144. KC_TRNS, KC_BTN1, KC_BTN2, KC_TRNS, KC_TRNS, KC_MPLY,
  145. KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
  146. KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
  147. KC_TRNS, KC_TRNS,
  148. KC_TRNS,
  149. KC_TRNS, KC_TRNS, KC_WBAK
  150. ),
  151. /* Keymap 3: accented characters
  152. *
  153. * ,--------------------------------------------------. ,--------------------------------------------------.
  154. * | | | | | | | | | | | | | | | |
  155. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  156. * | | | à | â | ä | | | | | | | î | ï | | |
  157. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  158. * | | é | è | ê | ë | |------| |------| | | ô | ö | | |
  159. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  160. * | | | ù | û | ü | | | | | | | ŷ | ÿ | | |
  161. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  162. * | | | | | | | | | | | |
  163. * `----------------------------------' `----------------------------------'
  164. * ,-------------. ,-------------.
  165. * | | | | | |
  166. * ,------|------|------| |------+------+------.
  167. * | | | | | | | |
  168. * | | |------| |------| | |
  169. * | | | | | | | |
  170. * `--------------------' `--------------------'
  171. */
  172. // ACCENTED CHARACTERS
  173. [ACC] = LAYOUT_ergodox(
  174. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  175. KC_TRNS, KC_TRNS, FR_AGRV, M(M_ACIRC), M(M_AUMLT), KC_TRNS, KC_TRNS,
  176. KC_TRNS, FR_EACU, FR_EGRV, M(M_ECIRC), M(M_EUMLT), KC_TRNS,
  177. KC_TRNS, KC_TRNS, FR_UGRV, M(M_UCIRC), M(M_UUMLT), KC_TRNS, KC_TRNS,
  178. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  179. KC_TRNS, KC_TRNS,
  180. KC_TRNS,
  181. KC_TRNS, KC_TRNS, KC_TRNS,
  182. // right hand
  183. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  184. KC_TRNS, KC_TRNS, KC_TRNS, M(M_ICIRC), M(M_IUMLT), KC_TRNS, KC_TRNS,
  185. KC_TRNS, KC_TRNS, M(M_OCIRC), M(M_OUMLT), KC_TRNS, KC_TRNS,
  186. KC_TRNS, KC_TRNS, KC_TRNS, M(M_YCIRC), M(M_YUMLT), KC_TRNS, KC_TRNS,
  187. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  188. KC_TRNS, KC_TRNS,
  189. KC_TRNS,
  190. KC_TRNS, KC_TRNS, KC_TRNS
  191. ),
  192. };
  193. const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
  194. {
  195. // MACRODOWN only works in this function
  196. switch(id) {
  197. case QCOPY:
  198. if (record->event.pressed) {
  199. return MACRO(I(255),
  200. D(LCTRL),
  201. T(C),
  202. D(LSFT),
  203. T(C),
  204. U(LCTRL),
  205. U(LSFT),
  206. END);
  207. }
  208. break;
  209. case QPASTE:
  210. if (record->event.pressed) {
  211. return MACRO(I(255),
  212. D(LCTRL),
  213. D(LSFT),
  214. T(V),
  215. U(LCTRL),
  216. T(INS),
  217. U(LSFT),
  218. END);
  219. }
  220. break;
  221. case M_ACIRC:
  222. if (record->event.pressed) {
  223. return MACRO(T(LBRC), // FR_CIRC
  224. T(Q), // FR_A
  225. END);
  226. }
  227. break;
  228. case M_ECIRC:
  229. if (record->event.pressed) {
  230. return MACRO(T(LBRC), // FR_CIRC
  231. T(E),
  232. END);
  233. }
  234. break;
  235. case M_UCIRC:
  236. if (record->event.pressed) {
  237. return MACRO(T(LBRC), // FR_CIRC
  238. T(U),
  239. END);
  240. }
  241. break;
  242. case M_ICIRC:
  243. if (record->event.pressed) {
  244. return MACRO(T(LBRC), // FR_CIRC
  245. T(I),
  246. END);
  247. }
  248. break;
  249. case M_OCIRC:
  250. if (record->event.pressed) {
  251. return MACRO(T(LBRC), // FR_CIRC
  252. T(O),
  253. END);
  254. }
  255. break;
  256. case M_YCIRC:
  257. if (record->event.pressed) {
  258. return MACRO(T(LBRC), // FR_CIRC
  259. T(Y),
  260. END);
  261. }
  262. break;
  263. case M_AUMLT:
  264. if (record->event.pressed) {
  265. return MACRO(D(LSFT),
  266. T(LBRC),
  267. U(LSFT),
  268. T(Q),
  269. END);
  270. }
  271. break;
  272. case M_EUMLT:
  273. if (record->event.pressed) {
  274. return MACRO(D(LSFT),
  275. T(LBRC),
  276. U(LSFT),
  277. T(E),
  278. END);
  279. }
  280. break;
  281. case M_UUMLT:
  282. if (record->event.pressed) {
  283. return MACRO(D(LSFT),
  284. T(LBRC),
  285. U(LSFT),
  286. T(U),
  287. END);
  288. }
  289. break;
  290. case M_IUMLT:
  291. if (record->event.pressed) {
  292. return MACRO(D(LSFT),
  293. T(LBRC),
  294. U(LSFT),
  295. T(I),
  296. END);
  297. }
  298. break;
  299. case M_OUMLT:
  300. if (record->event.pressed) {
  301. return MACRO(D(LSFT),
  302. T(LBRC),
  303. U(LSFT),
  304. T(O),
  305. END);
  306. }
  307. break;
  308. case M_YUMLT:
  309. if (record->event.pressed) {
  310. return MACRO(D(LSFT),
  311. T(LBRC),
  312. U(LSFT),
  313. T(Y),
  314. END);
  315. }
  316. break;
  317. }
  318. return MACRO_NONE;
  319. };
  320. // Runs just one time when the keyboard initializes.
  321. void matrix_init_user(void) {
  322. };
  323. // Runs constantly in the background, in a loop.
  324. void matrix_scan_user(void) {
  325. uint8_t layer = biton32(layer_state);
  326. ergodox_board_led_off();
  327. ergodox_right_led_1_off();
  328. ergodox_right_led_2_off();
  329. ergodox_right_led_3_off();
  330. switch (layer) {
  331. case SYMB:
  332. ergodox_right_led_1_on();
  333. break;
  334. case MDIA:
  335. ergodox_right_led_2_on();
  336. break;
  337. case ACC:
  338. ergodox_right_led_3_on();
  339. break;
  340. default:
  341. // none
  342. break;
  343. }
  344. };