2
0

keymap.c 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. #include QMK_KEYBOARD_H
  2. /*
  3. NQN is not-quite-neo
  4. A layout based on neo2
  5. */
  6. #include "action_layer.h"
  7. #include "version.h"
  8. #include "nqn-keys-on-quertz-de-latin1.h"
  9. #include "nqn-basic-layout.h"
  10. // Since our quirky block definitions are basically a list of comma separated
  11. // arguments, we need a wrapper in order for these definitions to be
  12. // expanded before being used as arguments to the LAYOUT_xxx macro.
  13. #define LAYOUT_ergodox_wrapper(...) LAYOUT_ergodox(__VA_ARGS__)
  14. #ifdef LEADER_TIMEOUT
  15. #undef LEADER_TIMEOUT
  16. #endif
  17. #define LEADER_TIMEOUT 300
  18. #define TAP_ONCE(code) \
  19. register_code (code); \
  20. unregister_code (code)
  21. // Automatic number generation of important keywords
  22. enum my_keycodes{
  23. // Layer numbers follow the neo2 terminology, i.e. base layer = layer 1
  24. L01 = 0,
  25. /* L02, SHIFT is not (yet) implemented as a fully customizable layer */
  26. L03,
  27. L04,
  28. L05,
  29. /* L06, UNSPECIFIED not (yet) needed */
  30. LFN
  31. };
  32. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  33. /* L01 -> default: BASE LAYER
  34. * ,--------------------------------------------------. ,--------------------------------------------------.
  35. * | TAB | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | BACKSP |
  36. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  37. * | ESC | | LEADR| | LEADR| | ENTER |
  38. * |--------+ | | | | +--------|
  39. * | L03 | L01_LEFT |------| |------| L01_RIGHT | L03 |
  40. * |--------+ | LFN | | LFN | +--------|
  41. * | SHIFT | | | | | | SHIFT |
  42. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  43. * | CTRL | GUI | ALT | L05 | L04 | | L04 | L05 | ALTGR| LFN | CTRL |
  44. * `----------------------------------' `----------------------------------'
  45. * ,-------------. ,-------------.
  46. * | HOME | END | | LEFT | RIGHT|
  47. * ,------|------|------| |------+------+------.
  48. * | | | PGUP | | UP | | |
  49. * | SPACE| SHIFT|------| |------| SHIFT| SPACE|
  50. * | | | PGDN | | DOWN | | |
  51. * `--------------------' `--------------------'
  52. */
  53. [L01] = LAYOUT_ergodox_wrapper(
  54. KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, XXXXXXX,
  55. KC_ESC, L01_LEFT_01, KC_LEAD,
  56. MO(L03), L01_LEFT_02,
  57. KC_LSHIFT, L01_LEFT_03, MO(LFN),
  58. KC_LCTRL,KC_LGUI,KC_LALT, MO(L05), MO(L04),
  59. XXXXXXX, XXXXXXX,
  60. KC_PGUP,
  61. KC_SPACE,KC_LSHIFT,KC_PGDN,
  62. //--
  63. XXXXXXX, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPACE,
  64. KC_LEAD, L01_RIGHT_01, KC_ENTER,
  65. L01_RIGHT_02, MO(L03),
  66. MO(LFN), L01_RIGHT_03, KC_RSHIFT,
  67. MO(L04), MO(L05), KC_RALT, MO(LFN), KC_RCTRL,
  68. KC_LEFT, KC_RIGHT,
  69. KC_UP,
  70. KC_DOWN, KC_RSHIFT, KC_SPACE
  71. ),
  72. /*
  73. L02 -> MO(L02): SHIFT (as a layer not used, not defined, not reachable)
  74. */
  75. /* L03 -> MO(L03): PROGRAMMING
  76. * ,--------------------------------------------------. ,--------------------------------------------------.
  77. * | | | | | | | | | | | | | | | |
  78. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  79. * | | | | | | | |
  80. * |--------+ | | | | +--------|
  81. * | | L03_LEFT |------| |------| L03_RIGHT | |
  82. * |--------+ | | | | +--------|
  83. * | | | | | | | |
  84. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  85. * | | | | | | | | | | | |
  86. * `----------------------------------' `----------------------------------'
  87. * ,-------------. ,-------------.
  88. * | | | | | |
  89. * ,------|------|------| |------+------+------.
  90. * | | | | | | | |
  91. * | | |------| |------| | |
  92. * | | | | | | | |
  93. * `--------------------' `--------------------'
  94. */
  95. [L03] = LAYOUT_ergodox_wrapper(
  96. _______, _______, _______, _______, _______, _______, _______,
  97. _______, L03_LEFT_01, _______,
  98. _______, L03_LEFT_02,
  99. _______, L03_LEFT_03, _______,
  100. _______, _______, _______, _______, _______,
  101. _______, _______,
  102. _______,
  103. _______, _______, _______,
  104. //--
  105. _______, _______, _______, _______, _______, _______, _______,
  106. _______, L03_RIGHT_01, _______,
  107. L03_RIGHT_02, _______,
  108. _______, L03_RIGHT_03, _______,
  109. _______, _______, _______, _______, _______,
  110. _______, _______,
  111. _______,
  112. _______, _______, _______
  113. ),
  114. /* L04 -> MO(L04): NAVIGATION AND NUMBERS
  115. * ,--------------------------------------------------. ,--------------------------------------------------.
  116. * | | | | | | | | | | | | | | | |
  117. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  118. * | | | | | | | |
  119. * |--------+ | | | | +--------|
  120. * | | L04_LEFT |------| |------| L04_RIGHT | |
  121. * |--------+ | | | | +--------|
  122. * | | | | | | | |
  123. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  124. * | | | | | | | | | | | |
  125. * `----------------------------------' `----------------------------------'
  126. * ,-------------. ,-------------.
  127. * | | | | | |
  128. * ,------|------|------| |------+------+------.
  129. * | | | | | | | |
  130. * | 0 | |------| |------| | 0 |
  131. * | | | | | | | |
  132. * `--------------------' `--------------------'
  133. */
  134. [L04] = LAYOUT_ergodox_wrapper(
  135. _______, _______, _______, _______, _______, _______, _______,
  136. _______, L04_LEFT_01, _______,
  137. _______, L04_LEFT_02,
  138. _______, L04_LEFT_03, _______,
  139. _______, _______, _______, _______, _______,
  140. _______, _______,
  141. _______,
  142. KC_0, _______, _______,
  143. //--
  144. _______, _______, _______, _______, _______, _______, _______,
  145. _______, L04_RIGHT_01, _______,
  146. L04_RIGHT_02, _______,
  147. _______, L04_RIGHT_03, _______,
  148. _______, _______, _______, _______, _______,
  149. _______, _______,
  150. _______,
  151. _______, _______, KC_0
  152. ),
  153. /* L05 -> MO(L05): ALTERNATE
  154. * ,--------------------------------------------------. ,--------------------------------------------------.
  155. * | | | | | | | | | | | | | | | |
  156. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  157. * | | | | | | | |
  158. * |--------+ | | | | +--------|
  159. * | | L05_LEFT |------| |------| L05_RIGHT | |
  160. * |--------+ | | | | +--------|
  161. * | | | | | | | |
  162. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  163. * | | | | | | | | | | | |
  164. * `----------------------------------' `----------------------------------'
  165. * ,-------------. ,-------------.
  166. * | | | | | |
  167. * ,------|------|------| |------+------+------.
  168. * | | | | | | | |
  169. * | | |------| |------| | |
  170. * | | | | | | | |
  171. * `--------------------' `--------------------'
  172. */
  173. [L05] = LAYOUT_ergodox_wrapper(
  174. _______, _______, _______, _______, _______, _______, _______,
  175. _______, L05_LEFT_01, _______,
  176. _______, L05_LEFT_02,
  177. _______, L05_LEFT_03, _______,
  178. _______, _______, _______, _______, _______,
  179. _______, _______,
  180. _______,
  181. _______, _______, _______,
  182. //--
  183. _______, _______, _______, _______, _______, _______, _______,
  184. _______, L05_RIGHT_01, _______,
  185. L05_RIGHT_02, _______,
  186. _______, L05_RIGHT_03, _______,
  187. _______, _______, _______, _______, _______,
  188. _______, _______,
  189. _______,
  190. _______, _______, _______
  191. ),
  192. /*
  193. L06 -> <TBD>: UNSPECIFIED
  194. */
  195. /* LFN -> MO(FN): FUNCTION
  196. * ,--------------------------------------------------. ,--------------------------------------------------.
  197. * | RESET | | | | | | | | | | | | | | RESET |
  198. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  199. * | | | | | | | BACKSPC|
  200. * |--------+ | | | | +--------|
  201. * | | L06_LEFT |------| |------| L06_RIGHT | INSERT |
  202. * |--------+ | | | | +--------|
  203. * | | | | | | | DELETE |
  204. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  205. * | | | | | | | VOL+ | VOL- | MUTE | | |
  206. * `----------------------------------' `----------------------------------'
  207. * ,-------------. ,-------------.
  208. * | | | | | |
  209. * ,------|------|------| |------+------+------.
  210. * | | | | | | | |
  211. * | | |------| |------| | |
  212. * | | | | | | | |
  213. * `--------------------' `--------------------'
  214. */
  215. [LFN] = LAYOUT_ergodox_wrapper(
  216. RESET, _______, _______, _______, _______, _______, _______,
  217. _______, L06_LEFT_01, _______,
  218. _______, L06_LEFT_02,
  219. _______, L06_LEFT_03, _______,
  220. _______, _______, _______, _______, _______,
  221. _______, _______,
  222. _______,
  223. _______, _______, _______,
  224. //--
  225. _______, _______, _______, _______, _______, _______, RESET,
  226. _______, L06_RIGHT_01, KC_BSPACE,
  227. L06_RIGHT_02, KC_INSERT,
  228. _______, L06_RIGHT_03, KC_DELETE,
  229. KC_VOLU, KC_VOLD, KC_MUTE, _______, _______,
  230. _______, _______,
  231. _______,
  232. _______, _______, _______
  233. )
  234. };
  235. // Runs just one time when the keyboard initializes.
  236. void matrix_init_user(void) {
  237. set_unicode_input_mode(UC_LNX);
  238. };
  239. LEADER_EXTERNS();
  240. // Runs constantly in the background, in a loop.
  241. void matrix_scan_user(void) {
  242. LEADER_DICTIONARY() {
  243. leading = false;
  244. leader_end();
  245. SEQ_ONE_KEY (KC_1) {
  246. // ¯\_(ツ)_/¯
  247. unicode_input_start(); register_hex(0xaf); unicode_input_finish();
  248. register_code (KC_RALT); TAP_ONCE (KC_MINS); unregister_code (KC_RALT);
  249. register_code (KC_RSFT); TAP_ONCE (KC_8); unregister_code (KC_RSFT);
  250. unicode_input_start (); register_hex(0x30c4); unicode_input_finish();
  251. register_code (KC_RSFT); TAP_ONCE (KC_9); TAP_ONCE(KC_7); unregister_code (KC_RSFT);
  252. unicode_input_start (); register_hex(0xaf); unicode_input_finish();
  253. }
  254. SEQ_ONE_KEY (KC_2) {
  255. // 凸(ツ)凸
  256. unicode_input_start(); register_hex(0x51F8); unicode_input_finish();
  257. register_code (KC_RSFT); TAP_ONCE (KC_8); unregister_code (KC_RSFT);
  258. unicode_input_start (); register_hex(0x30c4); unicode_input_finish();
  259. register_code (KC_RSFT); TAP_ONCE (KC_9); unregister_code (KC_RSFT);
  260. unicode_input_start (); register_hex(0x51F8); unicode_input_finish();
  261. }
  262. }
  263. }