keymap.c 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  1. #include QMK_KEYBOARD_H
  2. #include "debug.h"
  3. #include "action_layer.h"
  4. #include "keymap_norwegian.h"
  5. #define BASE 0 // default layer
  6. #define BASE_MAC 1 // default layer mac
  7. #define NUMB_SYMB 2 // numbers and symbols
  8. #define NUMB_SYMB_MAC 3 // numbers and symbols mac
  9. #define FUNCTION 4 // function keys
  10. enum custom_keycodes {
  11. TILDE_NO = SAFE_RANGE,
  12. LESS_NO,
  13. GRTR_NO,
  14. CIRC_NO,
  15. ACUT_NO,
  16. GRV_NO,
  17. LESS_NO_MAC,
  18. GRTR_NO_MAC,
  19. ACUT_NO_MAC
  20. };
  21. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  22. /* Keymap 0: Basic layer PC
  23. *
  24. * ,--------------------------------------------------. ,--------------------------------------------------.
  25. * | \ | [ | ] | { | } | * |Mac/PC| | ^ | $ | ( | ) | < | > | @ |
  26. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  27. * | ? | Q | W | F | P | G | " | | ' | J | L | U | Y | Å | Æ |
  28. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  29. * | : | A | R | S | T | D |------| |------| H | N | E | I | O | Ø |
  30. * |--------+------+------+------+------+------| ; | | = |------+------+------+------+------+--------|
  31. * | ! | Z | X | C | V | B | | | | K | M | RIGHT| DOWN | UP | _ |
  32. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  33. * | Func | Lclk | Rclk | TAB |,/CTRL| | LEFT | Esc | ` | # | Num |
  34. * `----------------------------------' `----------------------------------'
  35. * ,-------------. ,--------------.
  36. * | & | | | |Insert| / |
  37. * ,------|------|------| |------+-------+------.
  38. * | | | + | | Del | | |
  39. * | Shift| ./Spc|------| |------| Enter |Space|
  40. * | | |-/Alt | | Bspc | | |
  41. * `--------------------' `---------------------'
  42. */
  43. [BASE] = LAYOUT_ergodox(
  44. // left hand
  45. NO_BSLS, NO_LBRC, NO_RBRC, NO_LCBR, NO_RCBR, NO_ASTR, TG(1),
  46. NO_QUES, KC_Q, KC_W, KC_F, KC_P, KC_G, NO_DQUO,
  47. NO_COLN, KC_A, KC_R, KC_S, KC_T, KC_D,
  48. KC_EXLM, KC_Z, KC_X, KC_C, KC_V, KC_B, NO_SCLN,
  49. MO(4), KC_BTN1, KC_BTN2, KC_TAB,GUI_T(KC_COMMA),
  50. NO_AMPR, NO_PIPE,
  51. NO_PLUS,
  52. OSM(MOD_LSFT),CTL_T(KC_DOT),ALT_T(NO_MINS),
  53. // right hand
  54. CIRC_NO, NO_DLR, NO_LPRN, NO_RPRN ,LESS_NO, GRTR_NO,NO_AT,
  55. NO_QUOT, KC_J, KC_L, KC_U, KC_Y, NO_ARNG, NO_AE ,
  56. KC_H, KC_N, KC_E, KC_I, KC_O, NO_OSTR,
  57. NO_EQL, KC_K, KC_M, KC_RIGHT, KC_DOWN, KC_UP, NO_UNDS,
  58. KC_LEFT, KC_ESC, GRV_NO, KC_HASH, MO(2),
  59. KC_INSERT, NO_SLSH,
  60. KC_DEL,
  61. KC_BSPC,KC_ENT,KC_SPC
  62. ),
  63. /* Keymap 1: Basic layer MACS (Same as pc, except for cmd/ctrl, which are swapped)
  64. *
  65. * ,--------------------------------------------------. ,--------------------------------------------------.
  66. * | \ | | | { | } | | | | | $ | | | < | > | @ |
  67. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  68. * | | | | | | | | | | | | | | | |
  69. * |--------+------+------+------+------+------| | | ' |------+------+------+------+------+--------|
  70. * | | | | | | |------| |------| | | | | | |
  71. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  72. * | | | | | | | | | | | | | | | |
  73. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  74. * | Func | | | |,/Ctrl| | | | ` | | Num |
  75. * `----------------------------------' `----------------------------------'
  76. * ,-------------. ,-------------.
  77. * | | | | | | |
  78. * ,------|------|------| |------+------+------.
  79. * | | | | | | | |
  80. * | |./Cmd |------| |------| | |
  81. * | | | | | | | |
  82. * `--------------------' `--------------------'
  83. */
  84. [BASE_MAC] = LAYOUT_ergodox(
  85. S(ALGR(NO_7)), KC_TRNS,KC_TRNS, S(ALGR(NO_8)),S(ALGR(NO_9)), KC_TRNS, KC_TRNS,
  86. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS , KC_TRNS,
  87. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  88. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  89. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, CTL_T(KC_COMMA),
  90. KC_TRNS, ALGR(NO_7),
  91. KC_TRNS,
  92. KC_TRNS,GUI_T(KC_DOT) , KC_TRNS,
  93. // right hand
  94. KC_TRNS, S(NO_4), KC_TRNS,KC_TRNS,LESS_NO_MAC, GRTR_NO_MAC,NO_QUOT,
  95. NO_LABK, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  96. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  97. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  98. KC_TRNS, KC_TRNS, ALGR(NO_BSLS), KC_TRNS, MO(3),
  99. KC_TRNS, KC_TRNS,
  100. KC_TRNS,
  101. KC_TRNS, KC_TRNS, KC_TRNS
  102. ),
  103. /* Keymap 2: Number ++ layer pc
  104. *
  105. * ,--------------------------------------------------. ,--------------------------------------------------.
  106. * | | | | | | | | | | | | | | | |
  107. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  108. * | | | | | % | | | | | | ~ | ´ | | | |
  109. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  110. * | | 3 | 2 | 1 | 0 | |------| |------| | 5 | 6 | 7 | 8 | |
  111. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  112. * | | | | | 4 | | | | | | 9 | END | PGDWN| PGUP | |
  113. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  114. * | | | | | | | HOME | | | | |
  115. * `----------------------------------' `----------------------------------'
  116. * ,-------------. ,-------------.
  117. * | | | | | |
  118. * ,------|------|------| |------+------+------.
  119. * | | | | | | | |
  120. * | | |------| |------| | |
  121. * | | | | | | | |
  122. * `--------------------' `--------------------'
  123. */
  124. [NUMB_SYMB] = LAYOUT_ergodox(
  125. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  126. KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_PERC, KC_TRNS , KC_TRNS,
  127. KC_TRNS, KC_3 , KC_2 , KC_1 , KC_0 , KC_TRNS,
  128. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_4, KC_TRNS, KC_TRNS,
  129. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  130. KC_TRNS, KC_TRNS,
  131. KC_TRNS,
  132. KC_TRNS, KC_TRNS, KC_TRNS,
  133. // right hand
  134. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  135. KC_TRNS, KC_TRNS, TILDE_NO, ACUT_NO , KC_TRNS, KC_TRNS, KC_TRNS,
  136. KC_TRNS, KC_5, KC_6, KC_7, KC_8, KC_TRNS,
  137. KC_TRNS, KC_HOME, KC_9, KC_END, KC_PGDN, KC_PGUP, KC_TRNS,
  138. KC_HOME, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  139. KC_TRNS, KC_TRNS,
  140. KC_TRNS,
  141. KC_TRNS, KC_TRNS, KC_TRNS
  142. ),
  143. /* Keymap 3: Number ++ layer mac. Some keys have to be repeated from the pc symbol layer, since transient keys inherit from the layer we jump from, not the layer above.
  144. *
  145. * ,--------------------------------------------------. ,--------------------------------------------------.
  146. * | | | | | | | | | | | | | | | |
  147. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  148. * | | | | | % | | | | | | ~ | ´ | | | |
  149. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  150. * | | 3 | 2 | 1 | 0 | |------| |------| | 5 | 6 | 7 | 8 | |
  151. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  152. * | | | | | 4 | | | | | | 9 | END | PGDWN| PGUP | |
  153. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  154. * | | | | | | | HOME | | | | |
  155. * `----------------------------------' `----------------------------------'
  156. * ,-------------. ,-------------.
  157. * | | | | | |
  158. * ,------|------|------| |------+------+------.
  159. * | | | | | | | |
  160. * | | |------| |------| | |
  161. * | | | | | | | |
  162. * `--------------------' `--------------------'
  163. */
  164. [NUMB_SYMB_MAC] = LAYOUT_ergodox(
  165. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  166. KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_PERC, KC_TRNS , KC_TRNS,
  167. KC_TRNS, KC_3 , KC_2 , KC_1 , KC_0 , KC_TRNS,
  168. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_4, KC_TRNS, KC_TRNS,
  169. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  170. KC_TRNS, KC_TRNS,
  171. KC_TRNS,
  172. KC_TRNS, KC_TRNS, KC_TRNS,
  173. // right hand
  174. KC_TRNS, KC_TRNS, KC_TRNS , KC_TRNS, KC_TRNS , KC_TRNS, KC_TRNS,
  175. KC_TRNS, KC_TRNS, TILDE_NO, ACUT_NO_MAC, KC_TRNS, KC_TRNS, KC_TRNS,
  176. KC_TRNS, KC_5, KC_6, KC_7, KC_8, KC_TRNS,
  177. KC_TRNS, KC_HOME, KC_9, KC_END, KC_PGDN, KC_PGUP, KC_TRNS,
  178. KC_HOME, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  179. KC_TRNS, KC_TRNS,
  180. KC_TRNS,
  181. KC_TRNS, KC_TRNS, KC_TRNS
  182. ),
  183. /* Keymap 4: Function layer mac + pc
  184. *
  185. * ,--------------------------------------------------. ,--------------------------------------------------.
  186. * | | | | | | | | | | | | | | | |
  187. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  188. * | | | | | | | | | | | | | | | |
  189. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  190. * | | F3 | F2 | F1 | | |------| |------| | F5 | F6 | F7 | F8 | |
  191. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  192. * | | | | | F4 | | | | | | F9 | F10 | F11 | F12 | |
  193. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  194. * | | | | | | | | | | | |
  195. * `----------------------------------' `----------------------------------'
  196. * ,-------------. ,-------------.
  197. * | | | | | |
  198. * ,------|------|------| |------+------+------.
  199. * | | | | | | | |
  200. * | | |------| |------| | |
  201. * | | | | | | | |
  202. * `--------------------' `--------------------'
  203. */
  204. [FUNCTION] = LAYOUT_ergodox(
  205. KC_5, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  206. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS , KC_TRNS,
  207. KC_TRNS, KC_F3 , KC_F2 , KC_F1 , KC_TRNS , KC_TRNS,
  208. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F4, KC_TRNS, KC_TRNS,
  209. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  210. KC_TRNS, KC_TRNS,
  211. KC_TRNS,
  212. KC_TRNS, KC_TRNS, KC_TRNS,
  213. // right hand
  214. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  215. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  216. KC_TRNS, KC_F5, KC_F6, KC_F7, KC_F8, KC_TRNS,
  217. KC_TRNS, NO_TILD, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS,
  218. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  219. KC_TRNS, KC_TRNS,
  220. KC_TRNS,
  221. KC_TRNS, KC_TRNS, KC_TRNS
  222. )
  223. };
  224. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  225. switch (keycode) {
  226. case TILDE_NO:
  227. if (record->event.pressed) {
  228. tap_code16(ALGR(KC_RBRC));
  229. tap_code(KC_SPC);
  230. }
  231. return false;
  232. case LESS_NO:
  233. if (record->event.pressed) {
  234. tap_code(KC_NUBS);
  235. }
  236. return false;
  237. case GRTR_NO:
  238. if (record->event.pressed) {
  239. tap_code16(S(KC_NUBS));
  240. }
  241. return false;
  242. case CIRC_NO:
  243. if (record->event.pressed) {
  244. tap_code16(S(KC_RBRC));
  245. tap_code(KC_SPC);
  246. }
  247. return false;
  248. case ACUT_NO:
  249. if (record->event.pressed) {
  250. tap_code16(ALGR(KC_EQL));
  251. tap_code(KC_SPC);
  252. }
  253. return false;
  254. case GRV_NO:
  255. if (record->event.pressed) {
  256. SEND_STRING(SS_LSFT("= "));
  257. }
  258. return false;
  259. case LESS_NO_MAC:
  260. if (record->event.pressed) {
  261. tap_code(KC_GRV);
  262. }
  263. return false;
  264. case GRTR_NO_MAC:
  265. if (record->event.pressed) {
  266. tap_code16(S(KC_GRV));
  267. }
  268. return false;
  269. case ACUT_NO_MAC:
  270. if (record->event.pressed) {
  271. tap_code(KC_EQL);
  272. tap_code(KC_SPC);
  273. }
  274. return false;
  275. }
  276. return true;
  277. }