keymap.c 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. #include QMK_KEYBOARD_H
  2. //The current Nordic and Norwegian layout files are a mess. I'll do it myself:
  3. //Norwegian
  4. #define NO_AE KC_QUOT // Æ
  5. #define NO_AO KC_LBRC // Å
  6. #define NO_BSLS KC_EQL // Backslash
  7. #define NO_LT KC_NUBS // <
  8. #define NO_MINS KC_SLSH // -
  9. #define NO_OE KC_SCLN // Ø
  10. #define NO_PIPE KC_GRV // |
  11. #define NO_PLUS KC_MINS // +
  12. #define NO_QUOT KC_NUHS // '
  13. #define NO_UMLA KC_RBRC // ¨
  14. //Norwegian - Modifier dependant definitions
  15. #define NO_EXLM LSFT(KC_1) // !
  16. #define NO_DQT LSFT(KC_2) // "
  17. #define NO_AT RALT(KC_2) // @
  18. #define NO_HASH LSFT(KC_3) // #
  19. #define NO_EUR LSFT(KC_4) // €
  20. #define NO_DLR RALT(KC_4) // $
  21. #define NO_PERC LSFT(KC_5) // %
  22. #define NO_AND LSFT(KC_6) // &
  23. #define NO_SLSH LSFT(KC_7) // /
  24. #define NO_PO LSFT(KC_8) // (
  25. #define NO_PC LSFT(KC_9) // )
  26. #define NO_EQL LSFT(KC_0) // =
  27. #define NO_LCBR RALT(KC_7) // {
  28. #define NO_LBRC RALT(KC_8) // [
  29. #define NO_RBRC RALT(KC_9) // ]
  30. #define NO_RCBR RALT(KC_0) // }
  31. #define NO_COLN LSFT(KC_DOT) // :
  32. #define NO_SCLN LSFT(KC_COMM) // ;
  33. #define NO_MU RALT(KC_M) // µ
  34. #define NO_EURO RALT(KC_E) // €
  35. #define NO_SECT LSFT(KC_GRV) // §
  36. #define NO_GERC RALT(KC_COMM) // ¸
  37. #define NO_QUAR LSFT(RALT(KC_4)) // ¼
  38. //Norwegian layout - dependant on previous definitions
  39. #define NO_UNDS LSFT(NO_MINS) // _
  40. #define NO_QUES LSFT(NO_PLUS) // ?
  41. #define NO_ACUT RALT(NO_BSLS) // Acute
  42. #define NO_GRAV LSFT(NO_BSLS) // `
  43. #define NO_GT LSFT(NO_LT) // >
  44. #define NO_HALF RALT(NO_LT) // ½
  45. #define NO_HAT LSFT(NO_UMLA) // ^
  46. #define NO_ASTR LSFT(NO_QUOT) // *
  47. #define NO_TILD RALT(NO_UMLA) // ~
  48. //One Shot Modifier
  49. #define OSM_LCTL OSM(MOD_LCTL)
  50. #define OSM_LALT OSM(MOD_LALT)
  51. #define OSM_LSFT OSM(MOD_LSFT)
  52. #define OSM_LGUI OSM(MOD_LGUI)
  53. #define OSM_RCTL OSM(MOD_RCTL)
  54. #define OSM_RALT OSM(MOD_RALT)
  55. #define OSM_RSFT OSM(MOD_RSFT)
  56. #define OSM_RGUI OSM(MOD_RGUI)
  57. //CTRL on hold, ESC on tap
  58. #define CTL_ESC CTL_T(KC_ESC)
  59. //Layers
  60. #define L1 0
  61. #define L2 1
  62. #define L3 2
  63. #define L4 3
  64. #define L5 4
  65. // Momentary switch to layer
  66. #define MO_L2 MO(L2)
  67. #define MO_L4 MO(L4)
  68. #define MO_L5 MO(L5)
  69. // Momentary switch to layer - One Shot Layer
  70. #define OSL_L2 OSL(L2)
  71. #define OSL_L3 OSL(L3)
  72. #define OSL_L4 OSL(L4)
  73. //Tap Dance Declarations
  74. enum {
  75. SCLN_OE = 0,
  76. QUOT_AE,
  77. DQT_AO
  78. };
  79. //Tap Dance Definitions
  80. qk_tap_dance_action_t tap_dance_actions[] = {
  81. //Tap once for semicolon, twice for ø
  82. [SCLN_OE] = ACTION_TAP_DANCE_DOUBLE(NO_SCLN, NO_OE),
  83. //Tap once for single quote, twice for æ
  84. [QUOT_AE] = ACTION_TAP_DANCE_DOUBLE(NO_QUOT, NO_AE),
  85. //Tap once for double quote, twice for å
  86. [DQT_AO] = ACTION_TAP_DANCE_DOUBLE(NO_DQT, NO_AO),
  87. // Other declarations would go here, separated by commas, if you have them
  88. };
  89. //Tap Dance keys
  90. #define TD_SCLN_OE TD(SCLN_OE)
  91. #define TD_QUOT_AE TD(QUOT_AE)
  92. #define TD_DQT_AO TD(DQT_AO)
  93. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  94. [L1] = LAYOUT(
  95. KC_LGUI, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_RGUI,
  96. KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, TD_DQT_AO,
  97. KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, TD_SCLN_OE, TD_QUOT_AE,
  98. OSM_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, NO_MINS, OSM_RSFT,
  99. CTL_ESC, MO_L5, KC_TAB, OSM_LALT, MO_L4, OSL_L3, KC_SPC, KC_ENT, OSL_L3, MO_L4, OSM_LALT, NO_EQL, NO_PLUS, KC_RCTL
  100. ),
  101. [L2] = LAYOUT(
  102. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  103. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, NO_DQT,
  104. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, NO_SCLN, NO_QUOT,
  105. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  106. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  107. ),
  108. [L3] = LAYOUT(
  109. NO_LBRC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, NO_RBRC,
  110. NO_LCBR, XXXXXXX, XXXXXXX, NO_AT, XXXXXXX, NO_TILD, NO_QUES, NO_EXLM, NO_PIPE, XXXXXXX, XXXXXXX, NO_RCBR,
  111. _______, NO_ASTR, NO_BSLS, NO_DLR, NO_HASH, XXXXXXX, NO_HAT, XXXXXXX, NO_COLN, NO_SLSH, NO_SCLN, NO_QUOT,
  112. NO_PO, KC_0, NO_SECT, NO_PERC, XXXXXXX, NO_GRAV, NO_AND, NO_UMLA, NO_LT, NO_GT, NO_UNDS, NO_PC,
  113. XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX
  114. ),
  115. [L4] = LAYOUT(
  116. KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  117. XXXXXXX, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_HOME, KC_PGDN, KC_PGUP, KC_END, XXXXXXX, XXXXXXX,
  118. _______, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, XXXXXXX, KC_DEL,
  119. XXXXXXX, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, XXXXXXX, KC_APP, XXXXXXX, XXXXXXX, KC_VOLD, XXXXXXX,
  120. OSM_LCTL, _______, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, OSM_RALT, KC_MUTE, KC_VOLU, OSM_RCTL
  121. ),
  122. [L5] = LAYOUT(
  123. XXXXXXX, TO(L1), TO(L2), TO(L3), TO(L4), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  124. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  125. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  126. XXXXXXX, XXXXXXX, XXXXXXX, KC_CAPS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  127. XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
  128. )
  129. };
  130. //TODO: Is there productivity gain in the use of unicode?
  131. // - Won't work in xterm.
  132. // Create a layer for macros and/or unicode?
  133. // Are macros useful?
  134. // - Found no gain in having sendstring for commands.
  135. // - Find repeated tasks that cannot be done easily on the OS.
  136. // - Most other keymaps have macros for game/fun stuff, hard to find "serious" onces.
  137. // Screw Norwegian layout, switch to US with unicode æøå or US/English International?
  138. // - Will be different from laptop keyboard, requiring a switch on the OS side when only using the laptop.