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.

201 lines
11 KiB

  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_FUNC 2 // numbers and function keys
  8. enum custom_keycodes {
  9. TILDE_NO = SAFE_RANGE,
  10. LESS_NO,
  11. GRTR_NO,
  12. CIRC_NO,
  13. ACUT_NO,
  14. GRV_NO,
  15. LESS_NO_MAC,
  16. GRTR_NO_MAC,
  17. ACUT_NO_MAC
  18. };
  19. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  20. /* Keymap 0: Basic layer PC
  21. *
  22. * ,--------------------------------------------------. ,--------------------------------------------------.
  23. * | * | [ | ] | { | } | ~ |Mac/PC| | ^ | $ | ( | ) | < | > | @ |
  24. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  25. * | + | Q | W | E | R | T | " | | ' | Y | U | I | O | P | Å |
  26. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  27. * | / | A | S | D | F | G |------| |------| H | J | K | L | Ø | Æ |
  28. * |--------+------+------+------+------+------| ; | | = |------+------+------+------+------+--------|
  29. * | - | Z | X | C | V | B | | | | N | M | RIGHT| DOWN | UP | _ |
  30. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  31. * |Alt/esc| ! | ? | : | TAB | | LEFT | _ | & | | |Num/fn|
  32. * `----------------------------------' `----------------------------------'
  33. * ,-------------. ,--------------.
  34. * | # | ` | |Insert| % |
  35. * ,------|------|------| |------+-------+------.
  36. * | | | ´ | | Del | | |
  37. * | Shift|Ctrl/.|------| |------| Enter |Space |
  38. * | | |GUI/, | | Bspc | | |
  39. * `--------------------' `---------------------'
  40. */
  41. [BASE] = LAYOUT_ergodox(
  42. // left hand
  43. KC_PAST, NO_LBRC, NO_RBRC, NO_LCBR, NO_RCBR, TILDE_NO, TG(1),
  44. KC_PPLS, KC_Q, KC_W, KC_E, KC_R, KC_T, NO_DQUO,
  45. KC_PSLS, KC_A, KC_S, KC_D, KC_F, KC_G,
  46. KC_PMNS, KC_Z, KC_X, KC_C, KC_V, KC_B, NO_SCLN,
  47. ALT_T(KC_ESC), KC_EXLM , NO_QUES, NO_COLN, KC_TAB,
  48. KC_HASH, GRV_NO,
  49. ACUT_NO,
  50. OSM(MOD_LSFT),CTL_T(KC_DOT),GUI_T(KC_COMMA),
  51. // right hand
  52. CIRC_NO, NO_DLR, NO_LPRN, NO_RPRN ,LESS_NO, GRTR_NO,NO_AT,
  53. NO_QUOT, KC_Y, KC_U, KC_I, KC_O, KC_P, NO_ARNG,
  54. KC_H, KC_J, KC_K, KC_L, NO_OSTR, NO_AE,
  55. NO_EQL, KC_N, KC_M, KC_RIGHT, KC_DOWN, KC_UP, NO_BSLS,
  56. KC_LEFT, NO_UNDS, NO_AMPR, NO_PIPE, OSL(2),
  57. KC_INSERT, KC_PERC,
  58. KC_DEL,
  59. KC_BSPC,KC_ENT,KC_SPC
  60. ),
  61. /* Keymap 1: Basic layer MACS (Same as pc, except for cmd/ctrl, which are swapped)
  62. *
  63. * ,--------------------------------------------------. ,--------------------------------------------------.
  64. * | \ | | | { | } | | | | | $ | | | < | > | @ |
  65. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  66. * | | | | | | | | | | | | | | | |
  67. * |--------+------+------+------+------+------| | | ' |------+------+------+------+------+--------|
  68. * | | | | | | |------| |------| | | | | | |
  69. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  70. * | | | | | | | | | | | | | | | |
  71. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  72. * | | | | |,/Ctrl| | | | ` | |Num/fn|
  73. * `----------------------------------' `----------------------------------'
  74. * ,-------------. ,-------------.
  75. * | | ` | | | |
  76. * ,------|------|------| |------+------+------.
  77. * | | | ´ | | | | |
  78. * | |GUI/. |------| |------| | |
  79. * | | |crtl/,| | | | |
  80. * `--------------------' `--------------------'
  81. */
  82. [BASE_MAC] = LAYOUT_ergodox(
  83. KC_TRNS, KC_TRNS,KC_TRNS, S(ALGR(NO_8)),S(ALGR(NO_9)), KC_TRNS, KC_TRNS,
  84. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS , KC_TRNS,
  85. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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,
  88. KC_TRNS, ALGR(NO_BSLS),
  89. ACUT_NO_MAC,
  90. KC_TRNS,GUI_T(KC_DOT) , CTL_T(KC_COMMA),
  91. // right hand
  92. KC_TRNS, S(NO_4), KC_TRNS,KC_TRNS,LESS_NO_MAC, GRTR_NO_MAC,NO_QUOT,
  93. NO_LABK, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  94. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  95. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, S(ALGR(NO_7)),
  96. KC_TRNS, KC_TRNS, KC_TRNS, ALGR(NO_7), OSL(2),
  97. KC_TRNS, KC_TRNS,
  98. KC_TRNS,
  99. KC_TRNS, KC_TRNS, KC_TRNS
  100. ),
  101. /* Keymap 2: Number ++´ánd Fn layer
  102. *
  103. * ,--------------------------------------------------. ,--------------------------------------------------.
  104. * | | | | | | | | | | | F9 | F10 | F11 | F12 | |
  105. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  106. * | | 8 | 7 | 6 | 5 | 9 | | | | | F5 | F6 | F7 | F8 | |
  107. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  108. * | | 4 | 3 | 2 | 1 | 0 |------| |------| | F1 | F2 | F3 | F4 | |
  109. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  110. * | | | | | | | | | | | | END | PGDWN| PGUP | |
  111. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  112. * | | | | | | | HOME | | | | |
  113. * `----------------------------------' `----------------------------------'
  114. * ,-------------. ,-------------.
  115. * | | | | | |
  116. * ,------|------|------| |------+------+------.
  117. * | | | | | | | |
  118. * | | |------| |------| | |
  119. * | | | | | | | |
  120. * `--------------------' `--------------------'
  121. */
  122. [NUMB_FUNC] = LAYOUT_ergodox(
  123. NO_ASTR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  124. NO_PLUS, KC_8, KC_7,KC_6,KC_5, KC_9 , KC_TRNS,
  125. NO_SLSH , KC_4 , KC_3 , KC_2 , KC_1 , KC_0,
  126. NO_MINS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  127. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  128. KC_TRNS, KC_TRNS,
  129. KC_TRNS,
  130. KC_TRNS, KC_TRNS, KC_TRNS,
  131. // right hand
  132. KC_TRNS, KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS,
  133. KC_TRNS, KC_TRNS, KC_F5, KC_F6 , KC_F7, KC_F8, KC_TRNS,
  134. KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_TRNS,
  135. KC_TRNS, KC_HOME, KC_TRNS, KC_END, KC_PGDN, KC_PGUP, KC_TRNS,
  136. KC_HOME, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
  137. KC_TRNS, KC_TRNS,
  138. KC_TRNS,
  139. KC_TRNS, KC_TRNS, KC_TRNS
  140. )
  141. };
  142. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  143. switch (keycode) {
  144. case TILDE_NO:
  145. if (record->event.pressed) {
  146. tap_code16(ALGR(KC_RBRC));
  147. tap_code(KC_SPC);
  148. }
  149. return false;
  150. case LESS_NO:
  151. if (record->event.pressed) {
  152. tap_code(KC_NUBS);
  153. }
  154. return false;
  155. case GRTR_NO:
  156. if (record->event.pressed) {
  157. tap_code16(S(KC_NUBS));
  158. }
  159. return false;
  160. case CIRC_NO:
  161. if (record->event.pressed) {
  162. tap_code16(S(KC_RBRC));
  163. tap_code(KC_SPC);
  164. }
  165. return false;
  166. case ACUT_NO:
  167. if (record->event.pressed) {
  168. tap_code16(ALGR(KC_EQL));
  169. tap_code(KC_SPC);
  170. }
  171. return false;
  172. case GRV_NO:
  173. if (record->event.pressed) {
  174. SEND_STRING(SS_LSFT("= "));
  175. }
  176. return false;
  177. case LESS_NO_MAC:
  178. if (record->event.pressed) {
  179. tap_code(KC_GRV);
  180. }
  181. return false;
  182. case GRTR_NO_MAC:
  183. if (record->event.pressed) {
  184. tap_code16(S(KC_GRV));
  185. }
  186. return false;
  187. case ACUT_NO_MAC:
  188. if (record->event.pressed) {
  189. tap_code(KC_EQL);
  190. tap_code(KC_SPC);
  191. }
  192. return false;
  193. }
  194. return true;
  195. }