keymap.c 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367
  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. RLOCK,
  27. LLOCK,
  28. DUAL,
  29. CONFIG,
  30. };
  31. /* Tap Dance */
  32. enum {
  33. TD_LGUIAPP,
  34. TD_SHIFTCAPS,
  35. };
  36. /* NOOP Key and Transparent */
  37. #define KC_ KC_TRNS
  38. #define KC_XXXX KC_NO
  39. /* LAYERS */
  40. #define KC_LLAY LLAYER
  41. #define KC_RLAY RLAYER
  42. #define KC_RLOK RLOCK
  43. #define KC_LLOK LLOCK
  44. #define KC_QWER QWERTY
  45. #define KC_DVOR DVORAK
  46. #define KC_COLE COLEMAK
  47. #define KC_ONER ONEHANDR
  48. #define KC_ONEL ONEHANDL
  49. #define KC_DUAL DUAL
  50. #define KC_CONF CONFIG
  51. /* Custom Shortened Keys */
  52. #define KC_MCTB LCTL(KC_TAB)
  53. #define KC_MCST LCTL(LSFT(KC_TAB))
  54. #define KC_MCAD LALT(LCTL(KC_DEL))
  55. #define KC_CTEC CTL_T(KC_ESC)
  56. #define KC_SINS LSFT(KC_INS)
  57. #define KC_LGU1 LGUI(KC_1)
  58. #define KC_LGU2 LGUI(KC_2)
  59. #define KC_LGU3 LGUI(KC_3)
  60. #define KC_LGU4 LGUI(KC_4)
  61. #define KC_LGU5 LGUI(KC_5)
  62. #define KC_LGU6 LGUI(KC_6)
  63. #define KC_LGU7 LGUI(KC_7)
  64. #define KC_LGU8 LGUI(KC_8)
  65. #define KC_LGU9 LGUI(KC_9)
  66. #define KC_LGU0 LGUI(KC_0)
  67. #define KC_BLUP BL_INC
  68. #define KC_BLDN BL_DEC
  69. #define KC_SYSR KC_SYSREQ
  70. #define KC_REST RESET
  71. /* Tap Dance */
  72. #define KC_LGUA TD(TD_LGUIAPP)
  73. #define KC_SHCL TD(TD_SHIFTCAPS)
  74. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  75. [_QWERTY] = LAYOUT_kc(
  76. //,----+----+----+----+----+----. ,----+----+----+----+----+----.
  77. XXXX, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,BSPC,
  78. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  79. TAB , Q , W , E , R , T , Y , U , I , O , P ,DEL ,
  80. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  81. CTEC, A , S , D , F , G , H , J , K , L ,SCLN,ENT ,
  82. //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
  83. SHCL, Z , X , C , V , B ,LLOK, RLOK, N , M ,COMM,DOT ,SLSH,RSFT,
  84. //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
  85. LALT,LLAY,TAB , SPC ,RLAY,LGUA
  86. // `----+----+----' `----+----+----'
  87. ),
  88. [_COLEMAK] = LAYOUT_kc(
  89. //,----+----+----+----+----+----. ,----+----+----+----+----+----.
  90. XXXX, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,BSPC,
  91. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  92. TAB , Q , W , F , P , G , J , L , U , Y ,SCLN,DEL ,
  93. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  94. CTEC, A , R , S , T , D , H , N , E , I , O ,ENT ,
  95. //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
  96. SHCL, Z , X , C , V , B ,LLOK, RLOK, K , M ,COMM,DOT ,SLSH,RSFT,
  97. //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
  98. LALT,LLAY,TAB , SPC ,RLAY,LGUA
  99. // `----+----+----' `----+----+----'
  100. ),
  101. [_DVORAK] = LAYOUT_kc(
  102. //,----+----+----+----+----+----. ,----+----+----+----+----+----.
  103. XXXX, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,BSPC,
  104. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  105. TAB ,QUOT,COMM,DOT , P , Y , F , G , C , R , L ,SLSH,
  106. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  107. CTEC, A , O , E , U , I , D , H , T , N , S ,ENT ,
  108. //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
  109. SHCL,SCLN, Q , J , K , X ,LLOK, RLOK, B , M , W , V , Z ,EQL ,
  110. //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
  111. LALT,LLAY,TAB , SPC ,RLAY,LGUA
  112. // `----+----+----' `----+----+----'
  113. ),
  114. [_ONEHANDR] = LAYOUT_kc(
  115. //,----+----+----+----+----+----. ,----+----+----+----+----+----.
  116. XXXX,XXXX,XXXX,XXXX,XXXX,XXXX, 6 , 7 , 8 , 9 , 0 ,BSPC,
  117. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  118. XXXX,XXXX,XXXX,XXXX,XXXX,XXXX, Y , U , I , O , P ,DEL ,
  119. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  120. XXXX,XXXX,XXXX,XXXX,XXXX,XXXX, H , J , K , L ,SCLN,QUOT,
  121. //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
  122. XXXX,XXXX,XXXX,XXXX,XXXX,XXXX,QWER, XXXX, N , M ,COMM,DOT ,SLSH,RSFT,
  123. //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
  124. XXXX,XXXX,XXXX, SPC ,ONEL,ENT
  125. // `----+----+----' `----+----+----'
  126. ),
  127. [_ONEHANDL] = LAYOUT_kc(
  128. //,----+----+----+----+----+----. ,----+----+----+----+----+----.
  129. XXXX,XXXX,XXXX,XXXX,XXXX,XXXX, 5 , 4 , 3 , 2 , 1 ,XXXX,
  130. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  131. XXXX,XXXX,XXXX,XXXX,XXXX,XXXX, T , R , E , W , Q ,TAB ,
  132. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  133. XXXX,XXXX,XXXX,XXXX,XXXX,XXXX, G , F , D , S , A ,ENT ,
  134. //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
  135. XXXX,XXXX,XXXX,XXXX,XXXX,XXXX,XXXX, XXXX, B , V , C , X , Z ,SHCL,
  136. //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
  137. XXXX,XXXX,XXXX, SPC ,ONEL,ENT
  138. // `----+----+----' `----+----+----'
  139. ),
  140. [_RLAYER] = LAYOUT_kc(
  141. //,----+----+----+----+----+----. ,----+----+----+----+----+----.
  142. ,SLCK,SYSR,PSCR,INS ,PAUS, MUTE,VOLD,VOLU,BLDN,BLUP, ,
  143. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  144. ,TILD,GRV ,EQL ,LBRC,RBRC, ASTR,HOME, UP ,PGUP,PLUS, ,
  145. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  146. ,EXLM,PIPE,DLR ,LPRN,RPRN, AMPR,LEFT,DOWN,RGHT,MINS,QUOT,
  147. //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
  148. , AT ,HASH,PERC,LCBR,RCBR, , ,CIRC,END ,UNDS,PGDN,BSLS, ,
  149. //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
  150. , , , , ,
  151. // `----+----+----' `----+----+----'
  152. ),
  153. [_LLAYER] = LAYOUT_kc(
  154. //,----+----+----+----+----+----. ,----+----+----+----+----+----.
  155. , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 , ,
  156. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  157. ,XXXX,XXXX, UP , F5 ,XXXX, ASTR, 7 , 8 , 9 ,PLUS, ,
  158. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  159. ,XXXX,MCST,DOWN,MCTB,ENT , SLSH, 4 , 5 , 6 ,MINS, ,
  160. //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
  161. ,XXXX,XXXX,BSPC,SINS,SPC ,F11 , F12 ,EQL , 1 , 2 , 3 ,DOT , ,
  162. //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
  163. , , , 0 , ,
  164. // `----+----+----' `----+----+----'
  165. ),
  166. [_DUAL] = LAYOUT_kc(
  167. //,----+----+----+----+----+----. ,----+----+----+----+----+----.
  168. ,XXXX,XXXX,XXXX,XXXX,XXXX, XXXX,XXXX,XXXX,XXXX,XXXX,XXXX,
  169. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  170. ,XXXX,XXXX,XXXX,XXXX,XXXX, XXXX,XXXX,MS_U,XXXX,XXXX,MCAD,
  171. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  172. ,XXXX,XXXX,XXXX,XXXX,XXXX, BTN2,MS_L,MS_D,MS_R,BTN1,XXXX,
  173. //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
  174. ,LGU1,LGU2,LGU3,LGU4,LGU5,CONF, XXXX,LGU6,LGU7,LGU8,LGU9,LGU0, ,
  175. //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
  176. , , , , ,
  177. // `----+----+----' `----+----+----'
  178. ),
  179. [_CONFIG] = LAYOUT_kc(
  180. //,----+----+----+----+----+----. ,----+----+----+----+----+----.
  181. REST,XXXX,XXXX,XXXX,XXXX,XXXX, XXXX,XXXX,XXXX,XXXX,XXXX,XXXX,
  182. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  183. XXXX,QWER,XXXX,XXXX,XXXX,XXXX, XXXX,XXXX,XXXX,ONER,XXXX,XXXX,
  184. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  185. XXXX,XXXX,XXXX,DVOR,XXXX,XXXX, XXXX,XXXX,XXXX,XXXX,XXXX,XXXX,
  186. //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
  187. XXXX,XXXX,XXXX,COLE,XXXX,XXXX, , ,XXXX,XXXX,XXXX,XXXX,XXXX,XXXX,
  188. //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
  189. XXXX, ,XXXX, XXXX, ,XXXX
  190. // `----+----+----' `----+----+----'
  191. ),
  192. };
  193. /* TAP DANCE */
  194. void shift_caps_down (qk_tap_dance_state_t *state, void *user_data) {
  195. if (state->count >= 3) {
  196. register_code (KC_CAPS);
  197. } else {
  198. register_code (KC_LSFT);
  199. }
  200. }
  201. void shift_caps_up (qk_tap_dance_state_t *state, void *user_data) {
  202. if (state->count >= 3) {
  203. unregister_code (KC_CAPS);
  204. } else {
  205. unregister_code (KC_LSFT);
  206. }
  207. }
  208. qk_tap_dance_action_t tap_dance_actions[] = {
  209. [TD_LGUIAPP] = ACTION_TAP_DANCE_DOUBLE(KC_LGUI, KC_APP),
  210. [TD_SHIFTCAPS] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, shift_caps_down, shift_caps_up)
  211. };
  212. /* END TAP DANCE */
  213. void persistent_default_layer_set(uint16_t default_layer) {
  214. eeconfig_update_default_layer(default_layer);
  215. default_layer_set(default_layer);
  216. }
  217. /* Variables for layer light toggling */
  218. static uint16_t currentBL = 0;
  219. static uint16_t rlocked = 0;
  220. static uint16_t llocked = 0;
  221. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  222. switch (keycode) {
  223. case QWERTY:
  224. if (record->event.pressed) {
  225. set_single_persistent_default_layer(_QWERTY);
  226. }
  227. return false;
  228. break;
  229. case COLEMAK:
  230. if (record->event.pressed) {
  231. set_single_persistent_default_layer(_COLEMAK);
  232. }
  233. return false;
  234. break;
  235. case ONEHANDR:
  236. if (record->event.pressed) {
  237. set_single_persistent_default_layer(_ONEHANDR);
  238. }
  239. return false;
  240. break;
  241. case DVORAK:
  242. if (record->event.pressed) {
  243. set_single_persistent_default_layer(_DVORAK);
  244. }
  245. return false;
  246. break;
  247. case CONFIG:
  248. if (record->event.pressed) {
  249. set_single_persistent_default_layer(_CONFIG);
  250. backlight_toggle();
  251. }
  252. return false;
  253. break;
  254. case RLAYER:
  255. if (record->event.pressed) {
  256. layer_on(_RLAYER);
  257. update_tri_layer(_RLAYER, _LLAYER, _DUAL);
  258. /* add logic to toggle backlight change when on a layer */
  259. currentBL = get_backlight_level();
  260. if ( currentBL == 0 || currentBL == 1 ) {
  261. backlight_set(5);
  262. } else {
  263. backlight_set(0);
  264. }
  265. } else {
  266. unregister_code(KC_LGUI);
  267. rlocked = 0;
  268. layer_off(_RLAYER);
  269. update_tri_layer(_RLAYER, _LLAYER, _DUAL);
  270. if ( llocked == 0 ) {
  271. backlight_set(currentBL);
  272. } else {
  273. }
  274. }
  275. return false;
  276. break;
  277. case LLAYER:
  278. if (record->event.pressed) {
  279. layer_on(_LLAYER);
  280. update_tri_layer(_RLAYER, _LLAYER, _DUAL);
  281. /* add logic to toggle backlight change when on a layer */
  282. currentBL = get_backlight_level();
  283. if ( currentBL == 0 || currentBL == 1 ) {
  284. backlight_set(5);
  285. } else {
  286. backlight_set(0);
  287. }
  288. } else {
  289. llocked = 0;
  290. layer_off(_LLAYER);
  291. update_tri_layer(_RLAYER, _LLAYER, _DUAL);
  292. if ( rlocked == 0 ) {
  293. backlight_set(currentBL);
  294. } else {
  295. }
  296. }
  297. return false;
  298. break;
  299. case RLOCK:
  300. if (record->event.pressed) {
  301. layer_on(_RLAYER);
  302. /* add logic to toggle backlight change when on a layer */
  303. rlocked = 1;
  304. currentBL = get_backlight_level();
  305. if ( currentBL == 0 || currentBL == 1 ) {
  306. backlight_set(5);
  307. } else {
  308. backlight_set(0);
  309. }
  310. } else {
  311. }
  312. return false;
  313. break;
  314. case LLOCK:
  315. if (record->event.pressed) {
  316. layer_on(_LLAYER);
  317. /* add logic to toggle backlight change when on a layer */
  318. llocked = 1;
  319. currentBL = get_backlight_level();
  320. if ( currentBL == 0 || currentBL == 1 ) {
  321. backlight_set(5);
  322. } else {
  323. backlight_set(0);
  324. }
  325. } else {
  326. }
  327. return false;
  328. break;
  329. case ONEHANDL:
  330. if (record->event.pressed) {
  331. layer_on(_ONEHANDL);
  332. } else {
  333. layer_off(_ONEHANDL);
  334. }
  335. return false;
  336. break;
  337. }
  338. return true;
  339. }