├── README.md ├── heatmaps ├── ctgap2_heatmap.png ├── ctgap3_heatmap.png ├── ctgap4_heatmap.png └── ctgap_heatmap.png ├── kle ├── kle.json └── kle.png └── qmk ├── README.md ├── dactyl_manuform_4x5 ├── config.h └── keymap.c └── reviung34 ├── config.h └── keymap.c /README.md: -------------------------------------------------------------------------------- 1 | # CTGAP's Keyboard Layouts 2 | 3 | This is a log of the layouts I have created. If you are interested in using one, you are responsible for your own implementation. 4 | 5 | ## CTGAP - Final Version 6 | 7 | The goal of this version was to combine the general consonant cluster of version 3.0 and the vowel cluster pioneered by version 2.0. Because this vowel cluster calls for a consonant to be placed on the index finger, this allowed some previously problematic consonants, `d` and `f`, to be moved off of the consonant hand. As much as I would like to say that everything about this layout was intentional, the reality was that the layout put itself together in a way. After a few initial planned swaps, I simply moved letters to places that "made sense" without much thought and ended up with this final arrangement. This is why there are several changes that I am unable to explain in detail; I don't have a conscious understanding as to why I made them myself. As some may say, "it just works." It indeed works; out of all versions, this has the lowest SFB rate, DSFB rate, and top row pinky usage. 8 | 9 | ``` 10 | q p l c j x f o u / 11 | r n t s g y h e i a 12 | z b m w v k d ' , . 13 | ``` 14 | 15 | ### [Genkey](https://github.com/semilin/geney) Breakdown 16 | 17 | ``` 18 | Rolls (l): 17.95% 19 | Inward: ~11.40% 20 | Outward: ~6.55% 21 | Rolls (r): 25.79% 22 | Inward: ~7.16% 23 | Outward: ~18.64% 24 | Alternates: ~41.53% 25 | Onehands: ~1.89% 26 | Redirects: ~3.98% 27 | Finger Speed (weighted): [0.18 0.70 2.36 2.46 1.40 2.03 1.22 0.61] 28 | Finger Speed (unweighted): [0.27 2.52 11.34 13.51 7.68 9.73 4.39 0.92] 29 | Highest Speed (weighted): 2.46 (LI) 30 | Highest Speed (unweighted): 13.51 (LI) 31 | Index Usage: 14.6% 13.3% 32 | SFBs: 0.872% 33 | DSFBs: 6.731% 34 | LSBs: 1.27% 35 | ``` 36 | 37 | ### Heatmap 38 | 39 | ![Heatmap](https://github.com/CTGAP/ctgap-keyboard-layout/blob/main/heatmaps/ctgap_heatmap.png?raw=true) 40 | 41 | ## CTGAP 4.0 42 | 43 | This is a return to form after the failed experiment that was version 3.0. The goal was to polish the experimental version 2.0 into something more usable. This once existed in the form of Apsu's [APT](https://github.com/Apsu/APT), but it has morphed into something that no longer remotely resembles any of my layouts (or anything I would peronally use, for that matter). One of the most common criticisms of version 2.0 was the index imbalance; the right index was severely underused compared to the left index. That issue is resolved in this version, with only a 0.8% difference in usage between the index fingers compared to 3.8% in version 2.0. I also reduced top row pinky usage, swapping out `w` in exchange for `x`. 44 | 45 | ``` 46 | x c l m k j y o u / 47 | r s t h b p n e i a 48 | q g w d v z f ' , . 49 | ``` 50 | 51 | ### [Genkey](https://github.com/semilin/geney) Breakdown 52 | 53 | ``` 54 | Rolls (l): 18.34% 55 | Inward: ~14.35% 56 | Outward: ~3.99% 57 | Rolls (r): 26.81% 58 | Inward: ~15.55% 59 | Outward: ~11.25% 60 | Alternates: ~37.94% 61 | Onehands: ~2.27% 62 | Redirects: ~5.17% 63 | Finger Speed (weighted): [0.21 1.60 2.52 2.39 1.46 2.03 1.22 0.61] 64 | Finger Speed (unweighted): [0.31 5.75 12.09 13.14 8.02 9.73 4.39 0.92] 65 | Highest Speed (weighted): 2.52 (LM) 66 | Highest Speed (unweighted): 13.14 (LI) 67 | Index Usage: 14.0% 13.2% 68 | SFBs: 1.062% 69 | DSFBs: 6.816% 70 | LSBs: 1.30% 71 | ``` 72 | 73 | ### Heatmap 74 | 75 | ![Heatmap](https://github.com/CTGAP/ctgap-keyboard-layout/blob/main/heatmaps/ctgap4_heatmap.png?raw=true) 76 | 77 | ## CTGAP 3.0 78 | 79 | This originally began as an attempt to fit IanDoug's X1 layout into a 3x10 grid. I then stumbled onto BEAKL mod Ian, which was essentially that. X1 seemed to have everything I looked for in a layout: high middle finger usage, low travel distance, and lower index usage than Colemak-DH. BEAKL mod Ian maintained that while keeping alphas and common punctuation within the main 3x10 area. Because I'm more used to vowels on the right hand, I mirrored it. After further experimentation, I realized that the original BEAKL 4 vowel hand was more comfortable for me. The resulting layout has the consonant arrangement of BEAKL mod Ian with `v` and `z` swapped to accomodate for angle mod on ANSI boards and the vowel arrangement of BEAKL 4, with punctuation rearranged to accomodate for standard US shift states. 80 | 81 | ``` 82 | v p l c f k u o y j 83 | r n t s d ' a e i h 84 | z b m g w x , . ; q 85 | ``` 86 | 87 | ### [Genkey](https://github.com/semilin/genkey) Breakdown 88 | 89 | ``` 90 | Rolls (l): 21.73% 91 | Inward: ~14.06% 92 | Outward: ~7.67% 93 | Rolls (r): 20.36% 94 | Inward: ~16.98% 95 | Outward: ~3.37% 96 | Alternates: ~43.98% 97 | Onehands: ~1.52% 98 | Redirects: ~1.94% 99 | Finger Speed (weighted): [1.36 0.70 2.36 4.32 2.45 2.70 0.38 0.03] 100 | Finger Speed (unweighted): [2.04 2.52 11.33 23.74 13.49 12.97 1.37 0.05] 101 | Highest Speed (weighted): 4.32 (LI) 102 | Highest Speed (unweighted): 23.74 (LI) 103 | Index Usage: 19.1% 13.3% 104 | SFBs: 1.508% 105 | DSFBs: 7.863% 106 | LSBs: 1.14% 107 | ``` 108 | 109 | ### Heatmap 110 | 111 | ![Heatmap](https://github.com/CTGAP/ctgap-keyboard-layout/blob/main/heatmaps/ctgap3_heatmap.png?raw=true) 112 | 113 | ## CTGAP 2.0 114 | 115 | This is an experimental version of my layout referred to by Apsu's [APT](https://github.com/Apsu/APT). I deleted the original repo in mid June 2021, but I feel that it makes sense to address it here. The original goal of this layout was to reduce the frequency of pinky-ring NFBs on MTGAP while maintaining its low DSFB rate and distance. The punctuation was taken from Alan Reiser's [Hands Down Reference](https://sites.google.com/alanreiser.com/handsdown#h.s6920vg5spfm). 116 | 117 | ``` 118 | w c l d k j y o u / 119 | r s t h m p n e i a 120 | q v g f b z x ' , . 121 | ``` 122 | 123 | ### [Genkey](https://github.com/semilin/genkey) Breakdown 124 | 125 | ``` 126 | Rolls (l): 19.17% 127 | Inward: ~14.25% 128 | Outward: ~4.93% 129 | Rolls (r): 25.43% 130 | Inward: ~15.54% 131 | Outward: ~9.89% 132 | Alternates: ~39.09% 133 | Onehands: ~2.19% 134 | Redirects: ~4.78% 135 | Finger Speed (weighted): [1.13 1.60 2.24 2.29 1.31 2.03 1.22 0.61] 136 | Finger Speed (unweighted): [1.70 5.74 10.73 12.59 7.23 9.73 4.39 0.92] 137 | Highest Speed (weighted): 2.29 (LI) 138 | Highest Speed (unweighted): 12.59 (LI) 139 | Index Usage: 15.1% 11.3% 140 | SFBs: 1.007% 141 | DSFBs: 6.803% 142 | LSBs: 1.33% 143 | ``` 144 | 145 | ### Heatmap 146 | 147 | ![Heatmap](https://github.com/CTGAP/ctgap-keyboard-layout/blob/main/heatmaps/ctgap2_heatmap.png?raw=true) 148 | -------------------------------------------------------------------------------- /heatmaps/ctgap2_heatmap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTGAP/ctgap-keyboard-layout/5245db2bce473c95e0b6232c9f8fb69d64d034bb/heatmaps/ctgap2_heatmap.png -------------------------------------------------------------------------------- /heatmaps/ctgap3_heatmap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTGAP/ctgap-keyboard-layout/5245db2bce473c95e0b6232c9f8fb69d64d034bb/heatmaps/ctgap3_heatmap.png -------------------------------------------------------------------------------- /heatmaps/ctgap4_heatmap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTGAP/ctgap-keyboard-layout/5245db2bce473c95e0b6232c9f8fb69d64d034bb/heatmaps/ctgap4_heatmap.png -------------------------------------------------------------------------------- /heatmaps/ctgap_heatmap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTGAP/ctgap-keyboard-layout/5245db2bce473c95e0b6232c9f8fb69d64d034bb/heatmaps/ctgap_heatmap.png -------------------------------------------------------------------------------- /kle/kle.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "backcolor": "#464646" 4 | }, 5 | [ 6 | { 7 | "c": "#737574", 8 | "t": "#c6c8c6", 9 | "a": 7 10 | }, 11 | "Q", 12 | "P", 13 | "L", 14 | "C", 15 | "J", 16 | { 17 | "x": 1 18 | }, 19 | "X", 20 | "F", 21 | "O", 22 | "U", 23 | "/" 24 | ], 25 | [ 26 | "R\n\n\n\nAlt", 27 | "N\n\n\n\nGUI", 28 | "T\n\n\n\nShift", 29 | { 30 | "n": true 31 | }, 32 | "S\n\n\n\nCtrl", 33 | "G", 34 | { 35 | "x": 1 36 | }, 37 | "Y", 38 | { 39 | "n": true 40 | }, 41 | "H\n\n\n\nCtrl", 42 | "E\n\n\n\nShift", 43 | "I\n\n\n\nGUI", 44 | "A\n\n\n\nAlt" 45 | ], 46 | [ 47 | "Z", 48 | "B", 49 | "M", 50 | "W", 51 | "V", 52 | { 53 | "x": 1 54 | }, 55 | "K", 56 | "D", 57 | "'", 58 | ",", 59 | "." 60 | ], 61 | [ 62 | { 63 | "x": 3 64 | }, 65 | "Nav", 66 | { 67 | "n": true 68 | }, 69 | "Spc", 70 | { 71 | "x": 1, 72 | "n": true 73 | }, 74 | "Sym", 75 | "Sym2" 76 | ], 77 | [ 78 | { 79 | "y": 1 80 | }, 81 | "", 82 | "Insert", 83 | "𝌆", 84 | "PrtScn", 85 | "", 86 | { 87 | "x": 1 88 | }, 89 | "Page Up", 90 | "Home", 91 | "↑", 92 | "End", 93 | "" 94 | ], 95 | [ 96 | "Alt", 97 | "GUI", 98 | "Shift", 99 | { 100 | "n": true 101 | }, 102 | "Ctrl", 103 | "", 104 | { 105 | "x": 1 106 | }, 107 | "Page Down", 108 | { 109 | "n": true 110 | }, 111 | "←", 112 | "↓", 113 | "→", 114 | "⌦" 115 | ], 116 | [ 117 | "", 118 | "", 119 | "", 120 | "Caps Lock", 121 | "", 122 | { 123 | "x": 1 124 | }, 125 | "", 126 | { 127 | "f": 4 128 | }, 129 | "⌫", 130 | { 131 | "f": 3 132 | }, 133 | "⭾", 134 | "Esc", 135 | "" 136 | ], 137 | [ 138 | { 139 | "x": 3, 140 | "c": "#ff0000" 141 | }, 142 | "", 143 | { 144 | "c": "#737574", 145 | "n": true 146 | }, 147 | "", 148 | { 149 | "x": 1, 150 | "n": true 151 | }, 152 | "⏎", 153 | "" 154 | ], 155 | [ 156 | { 157 | "y": 1 158 | }, 159 | "!", 160 | "@", 161 | "#", 162 | "$", 163 | "%", 164 | { 165 | "x": 1 166 | }, 167 | "=", 168 | "7", 169 | "8", 170 | "9", 171 | "+" 172 | ], 173 | [ 174 | ";\n\n\n\nAlt", 175 | ":\n\n\n\nGUI", 176 | "{\n\n\n\nShift", 177 | { 178 | "n": true 179 | }, 180 | "(\n\n\n\nCtrl", 181 | "[", 182 | { 183 | "x": 1 184 | }, 185 | "*", 186 | { 187 | "n": true 188 | }, 189 | "4\n\n\n\nCtrl", 190 | "5\n\n\n\nShift", 191 | "6\n\n\n\nGUI", 192 | "-\n\n\n\nAlt" 193 | ], 194 | [ 195 | "^", 196 | "&", 197 | "}", 198 | ")", 199 | "]", 200 | { 201 | "x": 1 202 | }, 203 | "0", 204 | "1", 205 | "2", 206 | "3", 207 | "/" 208 | ], 209 | [ 210 | { 211 | "x": 3 212 | }, 213 | "", 214 | { 215 | "n": true 216 | }, 217 | "", 218 | { 219 | "x": 1, 220 | "c": "#ff0000", 221 | "n": true 222 | }, 223 | "", 224 | { 225 | "c": "#737574" 226 | }, 227 | "" 228 | ], 229 | [ 230 | { 231 | "y": 1 232 | }, 233 | "", 234 | "", 235 | "", 236 | "", 237 | "", 238 | { 239 | "x": 1 240 | }, 241 | "", 242 | "", 243 | "", 244 | "", 245 | "" 246 | ], 247 | [ 248 | "`", 249 | "~", 250 | "\\", 251 | { 252 | "n": true 253 | }, 254 | "|", 255 | "", 256 | { 257 | "x": 1 258 | }, 259 | "", 260 | { 261 | "n": true 262 | }, 263 | "Ctrl", 264 | "Shift", 265 | "GUI", 266 | "Alt" 267 | ], 268 | [ 269 | "", 270 | "", 271 | "", 272 | "_", 273 | "", 274 | { 275 | "x": 1 276 | }, 277 | "", 278 | "", 279 | "", 280 | "", 281 | "" 282 | ], 283 | [ 284 | { 285 | "x": 3 286 | }, 287 | "", 288 | { 289 | "n": true 290 | }, 291 | "", 292 | { 293 | "x": 1, 294 | "n": true 295 | }, 296 | "", 297 | { 298 | "c": "#ff0000" 299 | }, 300 | "" 301 | ], 302 | [ 303 | { 304 | "y": 1, 305 | "c": "#737574" 306 | }, 307 | "", 308 | { 309 | "f": 4 310 | }, 311 | "🕩", 312 | "🕨", 313 | "🕪", 314 | { 315 | "f": 3 316 | }, 317 | "", 318 | { 319 | "x": 1 320 | }, 321 | "F12", 322 | "F7", 323 | "F8", 324 | "F9", 325 | "" 326 | ], 327 | [ 328 | "Alt", 329 | "GUI", 330 | "Shift", 331 | { 332 | "n": true 333 | }, 334 | "Ctrl", 335 | "", 336 | { 337 | "x": 1 338 | }, 339 | "F11", 340 | { 341 | "n": true 342 | }, 343 | "F4", 344 | "F5", 345 | "F6", 346 | "Boot" 347 | ], 348 | [ 349 | "", 350 | "", 351 | "", 352 | "", 353 | "", 354 | { 355 | "x": 1 356 | }, 357 | "F10", 358 | "F1", 359 | "F2", 360 | "F3", 361 | "" 362 | ], 363 | [ 364 | { 365 | "x": 3, 366 | "c": "#ff0000" 367 | }, 368 | "", 369 | { 370 | "c": "#737574", 371 | "n": true 372 | }, 373 | "", 374 | { 375 | "x": 1, 376 | "n": true 377 | }, 378 | "", 379 | { 380 | "c": "#ff0000" 381 | }, 382 | "" 383 | ] 384 | ] -------------------------------------------------------------------------------- /kle/kle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CTGAP/ctgap-keyboard-layout/5245db2bce473c95e0b6232c9f8fb69d64d034bb/kle/kle.png -------------------------------------------------------------------------------- /qmk/README.md: -------------------------------------------------------------------------------- 1 | # My Implementation 2 | Depicted below is my implementation, which uses 34 keys and home row mods. Although many people have issues with triggering home row mods while typing, my naturally staccato typing style combined with ignore mod tap interrupt allows me to circumvent this. 3 | 4 | ![KLE](https://github.com/CTGAP/ctgap-keyboard-layout/blob/main/kle/kle.png?raw=true) 5 | -------------------------------------------------------------------------------- /qmk/dactyl_manuform_4x5/config.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #define USE_SERIAL 3 | #define EE_HANDS 4 | #undef TAPPING_TERM 5 | #define TAPPING_TERM 200 6 | #define IGNORE_MOD_TAP_INTERRUPT 7 | #undef PERMISSIVE_HOLD 8 | #define TAPPING_FORCE_HOLD 9 | -------------------------------------------------------------------------------- /qmk/dactyl_manuform_4x5/keymap.c: -------------------------------------------------------------------------------- 1 | #include QMK_KEYBOARD_H 2 | 3 | 4 | #define _LAYER0 0 5 | #define _LAYER1 1 6 | #define _LAYER2 2 7 | #define _LAYER3 3 8 | #define _LAYER4 4 9 | 10 | enum custom_keycodes { 11 | LAYER0 = SAFE_RANGE, 12 | LAYER1, 13 | LAYER2, 14 | LAYER3, 15 | LAYER4, 16 | }; 17 | 18 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 19 | 20 | [_LAYER0] = LAYOUT(KC_Q, KC_P, KC_L, KC_C, KC_J, KC_X, KC_F, KC_O, KC_U, KC_SLSH, LALT_T(KC_R), LGUI_T(KC_N), LSFT_T(KC_T), LCTL_T(KC_S), KC_G, KC_Y, LCTL_T(KC_H), LSFT_T(KC_E), LGUI_T(KC_I), LALT_T(KC_A), KC_Z, KC_B, KC_M, KC_W, KC_V, KC_K, KC_D, KC_QUOT, KC_COMM, KC_DOT, KC_NO, KC_NO, KC_NO, KC_NO, MO(1), KC_SPC, MO(2), MO(3), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO), 21 | 22 | [_LAYER1] = LAYOUT(KC_NO, KC_INS, KC_APP, KC_PSCR, KC_NO, KC_PGUP, KC_HOME, KC_UP, KC_END, KC_NO, KC_LALT, KC_LGUI, KC_LSFT, KC_LCTL, KC_NO, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_NO, KC_NO, KC_NO, KC_CAPS, KC_NO, KC_NO, KC_BSPC, KC_TAB, KC_ESC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_ENT, MO(4), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO), 23 | 24 | [_LAYER2] = LAYOUT(KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_EQL, KC_7, KC_8, KC_9, KC_PLUS, LALT_T(KC_SCLN), LGUI_T(KC_COLN), LSFT_T(KC_LCBR), LCTL_T(KC_LPRN), KC_LBRC, KC_ASTR, LCTL_T(KC_4), LSFT_T(KC_5), LGUI_T(KC_6), LALT_T(KC_MINS), KC_CIRC, KC_AMPR, KC_RCBR, KC_RPRN, KC_RBRC, KC_0, KC_1, KC_2, KC_3, KC_SLSH, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO), 25 | 26 | [_LAYER3] = LAYOUT(KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_GRV, KC_TILD, KC_BSLS, KC_PIPE, KC_NO, KC_NO, KC_LCTL, KC_LSFT, KC_LGUI, KC_LALT, KC_NO, KC_NO, KC_NO, KC_UNDS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MO(4), KC_NO, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO), 27 | 28 | [_LAYER4] = LAYOUT(KC_NO, KC_VOLD, KC_MUTE, KC_VOLU, KC_NO, KC_F12, KC_F7, KC_F8, KC_F9, KC_NO, KC_LALT, KC_LGUI, KC_LSFT, KC_LCTL, KC_NO, KC_F11, KC_F4, KC_F5, KC_F6, QK_BOOT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F10, KC_F1, KC_F2, KC_F3, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO) 29 | 30 | }; 31 | 32 | bool process_record_user(uint16_t keycode, keyrecord_t *record) { 33 | switch (keycode) { 34 | case LGUI_T(KC_COLN): 35 | if (record->tap.count && record->event.pressed) { 36 | tap_code16(KC_COLN); 37 | return false; 38 | } 39 | break; 40 | case LSFT_T(KC_LCBR): 41 | if (record->tap.count && record->event.pressed) { 42 | tap_code16(KC_LCBR); 43 | return false; 44 | } 45 | break; 46 | case LCTL_T(KC_LPRN): 47 | if (record->tap.count && record->event.pressed) { 48 | tap_code16(KC_LPRN); 49 | return false; 50 | } 51 | break; 52 | } 53 | return true; 54 | } -------------------------------------------------------------------------------- /qmk/reviung34/config.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #undef TAPPING_TERM 3 | #define TAPPING_TERM 200 4 | #define IGNORE_MOD_TAP_INTERRUPT 5 | #undef PERMISSIVE_HOLD 6 | #define TAPPING_FORCE_HOLD 7 | -------------------------------------------------------------------------------- /qmk/reviung34/keymap.c: -------------------------------------------------------------------------------- 1 | #include QMK_KEYBOARD_H 2 | 3 | 4 | #define _LAYER0 0 5 | #define _LAYER1 1 6 | #define _LAYER2 2 7 | #define _LAYER3 3 8 | #define _LAYER4 4 9 | 10 | enum custom_keycodes { 11 | LAYER0 = SAFE_RANGE, 12 | LAYER1, 13 | LAYER2, 14 | LAYER3, 15 | LAYER4, 16 | }; 17 | 18 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 19 | 20 | [_LAYER0] = LAYOUT_reviung34(KC_Q, KC_P, KC_L, KC_C, KC_J, KC_X, KC_F, KC_O, KC_U, KC_SLSH, LALT_T(KC_R), LGUI_T(KC_N), LSFT_T(KC_T), LCTL_T(KC_S), KC_G, KC_Y, LCTL_T(KC_H), LSFT_T(KC_E), LGUI_T(KC_I), LALT_T(KC_A), KC_Z, KC_B, KC_M, KC_W, KC_V, KC_K, KC_D, KC_QUOT, KC_COMM, KC_DOT, MO(1), KC_SPC, MO(2), MO(3)), 21 | 22 | [_LAYER1] = LAYOUT_reviung34(KC_NO, KC_INS, KC_APP, KC_PSCR, KC_NO, KC_PGUP, KC_HOME, KC_UP, KC_END, KC_NO, KC_LALT, KC_LGUI, KC_LSFT, KC_LCTL, KC_NO, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_NO, KC_NO, KC_NO, KC_CAPS, KC_NO, KC_NO, KC_BSPC, KC_TAB, KC_ESC, KC_NO, KC_TRNS, KC_NO, KC_ENT, MO(4)), 23 | 24 | [_LAYER2] = LAYOUT_reviung34(KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_EQL, KC_7, KC_8, KC_9, KC_PLUS, LALT_T(KC_SCLN), LGUI_T(KC_COLN), LSFT_T(KC_LCBR), LCTL_T(KC_LPRN), KC_LBRC, KC_ASTR, LCTL_T(KC_4), LSFT_T(KC_5), LGUI_T(KC_6), LALT_T(KC_MINS), KC_CIRC, KC_AMPR, KC_RCBR, KC_RPRN, KC_RBRC, KC_0, KC_1, KC_2, KC_3, KC_SLSH, KC_NO, KC_NO, KC_TRNS, KC_NO), 25 | 26 | [_LAYER3] = LAYOUT_reviung34(KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_GRV, KC_TILD, KC_BSLS, KC_PIPE, KC_NO, KC_NO, KC_LCTL, KC_LSFT, KC_LGUI, KC_LALT, KC_NO, KC_NO, KC_NO, KC_UNDS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MO(4), KC_NO, KC_NO, KC_TRNS), 27 | 28 | [_LAYER4] = LAYOUT_reviung34(KC_NO, KC_VOLD, KC_MUTE, KC_VOLU, KC_NO, KC_F12, KC_F7, KC_F8, KC_F9, KC_NO, KC_LALT, KC_LGUI, KC_LSFT, KC_LCTL, KC_NO, KC_F11, KC_F4, KC_F5, KC_F6, QK_BOOT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F10, KC_F1, KC_F2, KC_F3, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_TRNS), 29 | 30 | }; 31 | 32 | bool process_record_user(uint16_t keycode, keyrecord_t *record) { 33 | switch (keycode) { 34 | case LGUI_T(KC_COLN): 35 | if (record->tap.count && record->event.pressed) { 36 | tap_code16(KC_COLN); 37 | return false; 38 | } 39 | break; 40 | case LSFT_T(KC_LCBR): 41 | if (record->tap.count && record->event.pressed) { 42 | tap_code16(KC_LCBR); 43 | return false; 44 | } 45 | break; 46 | case LCTL_T(KC_LPRN): 47 | if (record->tap.count && record->event.pressed) { 48 | tap_code16(KC_LPRN); 49 | return false; 50 | } 51 | break; 52 | } 53 | return true; 54 | } --------------------------------------------------------------------------------