2
0

keymap.c 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. #include "iris.h"
  2. #include "action_layer.h"
  3. #include "eeconfig.h"
  4. // config settings
  5. #define TAPPING_TERM 250
  6. #define ONESHOT_TAP_TOGGLE 1
  7. #define ONESHOT_TIMEOUT 10000
  8. extern keymap_config_t keymap_config;
  9. #define _QWERTY 0
  10. #define _COLEMAK 1
  11. #define _DVORAK 2
  12. #define _ONEHANDR 3
  13. #define _ONEHANDL 4
  14. #define _RLAYER 5
  15. #define _LLAYER 6
  16. #define _DUAL 7
  17. #define _CONFIG 8
  18. enum custom_keycodes {
  19. QWERTY = SAFE_RANGE,
  20. COLEMAK,
  21. DVORAK,
  22. ONEHANDR,
  23. ONEHANDL,
  24. RLAYER,
  25. LLAYER,
  26. DUAL,
  27. CONFIG,
  28. };
  29. /* Tap Dance */
  30. enum {
  31. TD_LGUIAPP,
  32. TD_SHIFTCAPS,
  33. };
  34. /* NOOP Key and Transparent */
  35. #define KC_ KC_TRNS
  36. #define KC_XXXX KC_NO
  37. /* LAYERS */
  38. #define KC_LLAY LLAYER
  39. #define KC_RLAY RLAYER
  40. #define KC_QWER QWERTY
  41. #define KC_DVOR DVORAK
  42. #define KC_COLE COLEMAK
  43. #define KC_ONER ONEHANDR
  44. #define KC_ONEL ONEHANDL
  45. #define KC_DUAL DUAL
  46. #define KC_CONF OSL(_CONFIG)
  47. /* Custom Shortened Keys */
  48. #define KC_MCTB LCTL(KC_TAB)
  49. #define KC_MCST LCTL(LSFT(KC_TAB))
  50. #define KC_MCAD LALT(LCTL(KC_DEL))
  51. #define KC_CTEC CTL_T(KC_ESC)
  52. #define KC_SINS LSFT(KC_INS)
  53. #define KC_LGU1 LGUI(KC_1)
  54. #define KC_LGU2 LGUI(KC_2)
  55. #define KC_LGU3 LGUI(KC_3)
  56. #define KC_LGU4 LGUI(KC_4)
  57. #define KC_LGU5 LGUI(KC_5)
  58. #define KC_LGU6 LGUI(KC_6)
  59. #define KC_LGU7 LGUI(KC_7)
  60. #define KC_LGU8 LGUI(KC_8)
  61. #define KC_LGU9 LGUI(KC_9)
  62. #define KC_LGU0 LGUI(KC_0)
  63. #define KC_BLUP BL_INC
  64. #define KC_BLDN BL_DEC
  65. #define KC_SYSR KC_SYSREQ
  66. #define KC_FLASH RESET
  67. /* Tap Dance */
  68. #define KC_LGUA TD(TD_LGUIAPP)
  69. #define KC_SHCL TD(TD_SHIFTCAPS)
  70. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  71. [_QWERTY] = LAYOUT_kc(
  72. //,----+----+----+----+----+----. ,----+----+----+----+----+----.
  73. LEAD, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,BSPC,
  74. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  75. TAB , Q , W , E , R , T , Y , U , I , O , P ,DEL ,
  76. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  77. CTEC, A , S , D , F , G , H , J , K , L ,SCLN,ENT ,
  78. //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
  79. SHCL, Z , X , C , V , B ,XXXX, XXXX, N , M ,COMM,DOT ,SLSH,RSFT,
  80. //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
  81. LALT,LLAY,TAB , SPC ,RLAY,LGUA
  82. // `----+----+----' `----+----+----'
  83. ),
  84. [_COLEMAK] = LAYOUT_kc(
  85. //,----+----+----+----+----+----. ,----+----+----+----+----+----.
  86. LEAD, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,BSPC,
  87. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  88. TAB , Q , W , F , P , G , J , L , U , Y ,SCLN,DEL ,
  89. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  90. CTEC, A , R , S , T , D , H , N , E , I ,SCLN,ENT ,
  91. //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
  92. SHCL, Z , X , C , V , B ,XXXX, XXXX, K , M ,COMM,DOT ,SLSH,RSFT,
  93. //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
  94. LALT,LLAY,TAB , SPC ,RLAY,LGUA
  95. // `----+----+----' `----+----+----'
  96. ),
  97. [_DVORAK] = LAYOUT_kc(
  98. //,----+----+----+----+----+----. ,----+----+----+----+----+----.
  99. LEAD, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,BSPC,
  100. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  101. TAB ,QUOT,COMM,DOT , P , Y , F , G , C , R , L ,SLSH,
  102. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  103. CTEC, A , O , E , U , I , D , H , T , N , S ,ENT ,
  104. //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
  105. SHCL,SCLN, Q , J , K , X ,XXXX, XXXX, B , M , W , V , Z ,EQL ,
  106. //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
  107. LALT,LLAY,TAB , SPC ,RLAY,LGUA
  108. // `----+----+----' `----+----+----'
  109. ),
  110. [_ONEHANDR] = LAYOUT_kc(
  111. //,----+----+----+----+----+----. ,----+----+----+----+----+----.
  112. XXXX,XXXX,XXXX,XXXX,XXXX,XXXX, 6 , 7 , 8 , 9 , 0 ,BSPC,
  113. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  114. XXXX,XXXX,XXXX,XXXX,XXXX,XXXX, Y , U , I , O , P ,DEL ,
  115. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  116. XXXX,XXXX,XXXX,XXXX,XXXX,XXXX, H , J , K , L ,SCLN,QUOT,
  117. //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
  118. XXXX,XXXX,XXXX,XXXX,XXXX,XXXX,QWER, XXXX, N , M ,COMM,DOT ,SLSH,RSFT,
  119. //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
  120. XXXX,XXXX,XXXX, SPC ,ONEL,ENT
  121. // `----+----+----' `----+----+----'
  122. ),
  123. [_ONEHANDL] = LAYOUT_kc(
  124. //,----+----+----+----+----+----. ,----+----+----+----+----+----.
  125. XXXX,XXXX,XXXX,XXXX,XXXX,XXXX, 5 , 4 , 3 , 2 , 1 ,LEAD,
  126. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  127. XXXX,XXXX,XXXX,XXXX,XXXX,XXXX, T , R , E , W , Q ,TAB ,
  128. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  129. XXXX,XXXX,XXXX,XXXX,XXXX,XXXX, G , F , D , S , A ,ENT ,
  130. //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
  131. XXXX,XXXX,XXXX,XXXX,XXXX,XXXX,XXXX, XXXX, B , V , C , X , Z ,SHCL,
  132. //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
  133. XXXX,XXXX,XXXX, SPC ,ONEL,ENT
  134. // `----+----+----' `----+----+----'
  135. ),
  136. [_RLAYER] = LAYOUT_kc(
  137. //,----+----+----+----+----+----. ,----+----+----+----+----+----.
  138. ,XXXX,XXXX,XXXX,XXXX,XXXX, MUTE,VOLD,VOLU,BLDN,BLUP, ,
  139. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  140. ,TILD,GRV ,EQL ,LBRC,RBRC, PGUP,ASTR, UP ,AMPR,CIRC, ,
  141. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  142. ,EXLM,PIPE,DLR ,LPRN,RPRN, HOME,LEFT,DOWN,RGHT,END ,QUOT,
  143. //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
  144. , AT ,HASH,PERC,LCBR,RCBR,LGUI, ,PGDN,UNDS,MINS,PLUS,BSLS, ,
  145. //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
  146. , , , , ,
  147. // `----+----+----' `----+----+----'
  148. ),
  149. [_LLAYER] = LAYOUT_kc(
  150. //,----+----+----+----+----+----. ,----+----+----+----+----+----.
  151. , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 , ,
  152. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  153. ,XXXX,XXXX, UP , F5 ,XXXX, ASTR, 7 , 8 , 9 ,PLUS, ,
  154. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  155. ,XXXX,MCST,DOWN,MCTB,ENT , SLSH, 4 , 5 , 6 ,MINS, ,
  156. //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
  157. ,XXXX,XXXX,BSPC,SPC ,SINS,F11 , F12 ,EQL , 1 , 2 , 3 ,DOT , ,
  158. //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
  159. , , , 0 , ,
  160. // `----+----+----' `----+----+----'
  161. ),
  162. [_DUAL] = LAYOUT_kc(
  163. //,----+----+----+----+----+----. ,----+----+----+----+----+----.
  164. ,XXXX,XXXX,PSCR,INS ,XXXX, XXXX,SLEP,SLCK,PAUS,SYSR,XXXX,
  165. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  166. ,XXXX,XXXX,XXXX,XXXX,XXXX, XXXX,XXXX,MS_U,XXXX,XXXX,MCAD,
  167. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  168. ,XXXX,XXXX,XXXX,XXXX,XXXX, BTN2,MS_L,MS_D,MS_R,BTN1,XXXX,
  169. //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
  170. ,LGU1,LGU2,LGU3,LGU4,LGU5,CONF, XXXX,LGU6,LGU7,LGU8,LGU9,LGU0, ,
  171. //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
  172. , , , , ,
  173. // `----+----+----' `----+----+----'
  174. ),
  175. [_CONFIG] = LAYOUT_kc(
  176. //,----+----+----+----+----+----. ,----+----+----+----+----+----.
  177. FLASH,XXXX,XXXX,XXXX,XXXX,XXXX, XXXX,XXXX,XXXX,XXXX,XXXX,XXXX,
  178. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  179. XXXX,QWER,XXXX,XXXX,XXXX,XXXX, XXXX,XXXX,XXXX,ONER,XXXX,XXXX,
  180. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  181. XXXX,XXXX,XXXX,DVOR,XXXX,XXXX, XXXX,XXXX,XXXX,XXXX,XXXX,XXXX,
  182. //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
  183. XXXX,XXXX,XXXX,COLE,XXXX,XXXX, , ,XXXX,XXXX,XXXX,XXXX,XXXX,XXXX,
  184. //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
  185. XXXX, ,XXXX, XXXX, ,XXXX
  186. // `----+----+----' `----+----+----'
  187. ),
  188. };
  189. /* TAP DANCE */
  190. void shift_caps_down (qk_tap_dance_state_t *state, void *user_data) {
  191. if (state->count >= 3) {
  192. register_code (KC_CAPS);
  193. } else {
  194. register_code (KC_LSFT);
  195. }
  196. }
  197. void shift_caps_up (qk_tap_dance_state_t *state, void *user_data) {
  198. if (state->count >= 3) {
  199. unregister_code (KC_CAPS);
  200. } else {
  201. unregister_code (KC_LSFT);
  202. }
  203. }
  204. qk_tap_dance_action_t tap_dance_actions[] = {
  205. [TD_LGUIAPP] = ACTION_TAP_DANCE_DOUBLE(KC_LGUI, KC_APP),
  206. [TD_SHIFTCAPS] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, shift_caps_down, shift_caps_up)
  207. };
  208. /* END TAP DANCE */
  209. void persistent_default_layer_set(uint16_t default_layer) {
  210. eeconfig_update_default_layer(default_layer);
  211. default_layer_set(default_layer);
  212. }
  213. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  214. switch (keycode) {
  215. case QWERTY:
  216. if (record->event.pressed) {
  217. set_single_persistent_default_layer(_QWERTY);
  218. }
  219. return false;
  220. break;
  221. case COLEMAK:
  222. if (record->event.pressed) {
  223. set_single_persistent_default_layer(_COLEMAK);
  224. }
  225. return false;
  226. break;
  227. case ONEHANDR:
  228. if (record->event.pressed) {
  229. set_single_persistent_default_layer(_ONEHANDR);
  230. }
  231. return false;
  232. break;
  233. case DVORAK:
  234. if (record->event.pressed) {
  235. set_single_persistent_default_layer(_DVORAK);
  236. }
  237. return false;
  238. break;
  239. case RLAYER:
  240. if (record->event.pressed) {
  241. layer_on(_RLAYER);
  242. update_tri_layer(_RLAYER, _LLAYER, _DUAL);
  243. } else {
  244. unregister_code(KC_LGUI);
  245. layer_off(_RLAYER);
  246. update_tri_layer(_RLAYER, _LLAYER, _DUAL);
  247. }
  248. return false;
  249. break;
  250. case LLAYER:
  251. if (record->event.pressed) {
  252. layer_on(_LLAYER);
  253. update_tri_layer(_RLAYER, _LLAYER, _DUAL);
  254. } else {
  255. layer_off(_LLAYER);
  256. update_tri_layer(_RLAYER, _LLAYER, _DUAL);
  257. }
  258. return false;
  259. break;
  260. case ONEHANDL:
  261. if (record->event.pressed) {
  262. layer_on(_ONEHANDL);
  263. } else {
  264. layer_off(_ONEHANDL);
  265. }
  266. return false;
  267. break;
  268. }
  269. return true;
  270. }