aboutsummaryrefslogtreecommitdiff
path: root/layouts
diff options
context:
space:
mode:
Diffstat (limited to 'layouts')
-rw-r--r--layouts/community/ergodox/issmirnov/README.md49
-rw-r--r--layouts/community/ergodox/issmirnov/asci-keymap.txt95
-rwxr-xr-xlayouts/community/ergodox/issmirnov/build.sh2
-rw-r--r--layouts/community/ergodox/issmirnov/config.h3
-rw-r--r--layouts/community/ergodox/issmirnov/keymap.c250
-rwxr-xr-xlayouts/community/ergodox/issmirnov/push.sh2
-rw-r--r--layouts/community/ergodox/issmirnov/template.txt17
7 files changed, 418 insertions, 0 deletions
diff --git a/layouts/community/ergodox/issmirnov/README.md b/layouts/community/ergodox/issmirnov/README.md
new file mode 100644
index 000000000..564edfe31
--- /dev/null
+++ b/layouts/community/ergodox/issmirnov/README.md
@@ -0,0 +1,49 @@
1# Ivan's Ergodox Config
2
3
4## Details about the layout
5
6- Shift and Cmd are One Shot Modifiers, so tapping them once will apply them to the next key. When tapped twice they will lock, until tapped again to clear.
7- When switching to other layers, any stuck modifiers are cleared in order to avoid unintended key combos
8- There are a few leader key combinations. Right now, `KC_LEAD` + `s` will open my wiki homepage.
9- All transparent keys have been replaced with noops to avoid layer bleeding.
10
11## Initial Setup
12
13### QMK
14
15```
16brew tap osx-cross/avr
17brew tap PX4/homebrew-px4
18brew update
19brew install avr-gcc
20brew install dfu-programmer
21brew install gcc-arm-none-eabi
22brew install avrdude
23
24git clone https://github.com/qmk/qmk_firmware.git
25git clone https://github.com/issmirnov/ergodox-layout.git \
26 layouts/community/ergodox/ismirnov
27```
28
29### Teensy utils
30
31Download and add both of these to $PATH
32
33- [hid_listen](https://www.pjrc.com/teensy/hid_listen.html)
34- [teensy loader cli](https://www.pjrc.com/teensy/loader_cli.html)
35
36## Flashing
37
38```
39make ergodox_ez:ismirnov
40teensy_loader_cli -mmcu=atmega32u4 -w -v ergodox_ez_ismirnov.hex
41
42# or just
43make ergodox_ez:ismirnov:flash
44```
45
46## Gotchas
47
48- If you get error: `dyld: Library not loaded: /usr/local/opt/isl/lib/libisl.15.dylib` then do `brew reinstall avr-gcc`
49- If `hid_listen` just prints out a ton of dots, update makefile with `CONSOLE_ENABLE = yes`
diff --git a/layouts/community/ergodox/issmirnov/asci-keymap.txt b/layouts/community/ergodox/issmirnov/asci-keymap.txt
new file mode 100644
index 000000000..9b023f664
--- /dev/null
+++ b/layouts/community/ergodox/issmirnov/asci-keymap.txt
@@ -0,0 +1,95 @@
1 Qwerty
2,--------------------------------------------. ,--------------------------------------------.
3| Escape | 1 | 2 | 3 | 4 | 5 | ! | | = | 6 | 7 | 8 | 9 | 0 | Escape |
4|--------+-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----+--------|
5|Lctl(Spa| Q | W | E | R | T | * | | + | Y | U | I | O | P |Lgui(Spa|
6|--------+-----+-----+-----+-----+-----| | | |-----+-----+-----+-----+-----+--------|
7| Tab | A | S | D | F | G |-----| |-----| H | J | K | L |TapTo|Mo(Navi)|
8|--------+-----+-----+-----+-----+-----| / | | - |-----+-----+-----+-----+-----+--------|
9|Osm(ModL| Z | X | C | V | B | | | | N | M | . |Comma|Tg(Nu| ' |
10`--------+-----+-----+-----+-----+-----------' `-----------+-----+-----+-----+-----+--------'
11 |Ctrl |Lsft(|Lsft(| Alt | Mod | |Escap| : | % | |Lgui(|
12 `-----------------------------' ,-----------. ,-----------. `-----------------------------'
13 | | | | ← | → |
14 ,-----|-----|-----| |-----+-----+-----.
15 | | | | | ↑ | | |
16 | ⎵ | ⌫ |-----| |-----| Tab |Enter|
17 | | | Del | | ↓ | | |
18 `-----------------' `-----------------'
19
20 Symb
21,--------------------------------------------. ,--------------------------------------------.
22| Escape | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | |
23|--------+-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----+--------|
24| | - | @ | { | } | ` | * | | + | * | ! | | | % | + |Mo(Navi)|
25|--------+-----+-----+-----+-----+-----| | | |-----+-----+-----+-----+-----+--------|
26| Tab | ^ | _ | ( | ) | $ |-----| |-----| # | = | : | ; |TapTo| Dquo |
27|--------+-----+-----+-----+-----+-----| / | | - |-----+-----+-----+-----+-----+--------|
28| Lshift | < | > | [ | ] | ~ | | | | & | ? | / | \ |Tg(Nu| ' |
29`--------+-----+-----+-----+-----+-----------' `-----------+-----+-----+-----+-----+--------'
30 |Ctrl |Lsft(|Lsft(| Alt |WkspL| |Escap| : | % | | |
31 `-----------------------------' ,-----------. ,-----------. `-----------------------------'
32 | | | | ← | → |
33 ,-----|-----|-----| |-----+-----+-----.
34 | | | | | ↑ | | |
35 |WkspR| ⌫ |-----| |-----| Tab |Enter|
36 | | | Del | | ↓ | | |
37 `-----------------' `-----------------'
38
39 Nump
40,--------------------------------------------. ,--------------------------------------------.
41| | | | | | | | | = | | | | | | Reset |
42|--------+-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----+--------|
43| | No | No |Lgui(| | | * | | + | , | 7 | 8 | 9 | | |
44|--------+-----+-----+-----+-----+-----| | | |-----+-----+-----+-----+-----+--------|
45| Tab | |Lgui(|Lgui(|Lgui(| |-----| |-----| 0 | 4 | 5 | 6 |To(Sy| |
46|--------+-----+-----+-----+-----+-----| / | | - |-----+-----+-----+-----+-----+--------|
47| | | | |Audio|Audio| | | | . | 1 | 2 | 3 |To(Qw| |
48`--------+-----+-----+-----+-----+-----------' `-----------+-----+-----+-----+-----+--------'
49 |To(0)| | | | | | 0 | | |To(3)| |
50 `-----------------------------' ,-----------. ,-----------. `-----------------------------'
51 | | | | ← | → |
52 ,-----|-----|-----| |-----+-----+-----.
53 | | | | | ↑ | | |
54 | ⎵ | ⌫ |-----| |-----| Alt |Shift|
55 | | | Del | | ↓ | | |
56 `-----------------' `-----------------'
57
58 Overwatch
59,--------------------------------------------. ,--------------------------------------------.
60| Escape | 1 | 2 | 3 | 4 | 5 |To(0)| | | | | | | | |
61|--------+-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----+--------|
62| Tab | Q | W | E | R | T | | | | | | | | | |
63|--------+-----+-----+-----+-----+-----| | | |-----+-----+-----+-----+-----+--------|
64| Ctrl | A | S | D | F | P |-----| |-----| | | | | | |
65|--------+-----+-----+-----+-----+-----| | | |-----+-----+-----+-----+-----+--------|
66| Lshift | Z | X | C | V |Grave| | | | | | | | | |
67`--------+-----+-----+-----+-----+-----------' `-----------+-----+-----+-----+-----+--------'
68 |Ctrl | F9 |Pscre| H | R | | | | | | |
69 `-----------------------------' ,-----------. ,-----------. `-----------------------------'
70 | | | | | |
71 ,-----|-----|-----| |-----+-----+-----.
72 | | | | | | | |
73 | ⎵ | |-----| |-----| | |
74 | | | | | | | |
75 `-----------------' `-----------------'
76
77 Navi
78,--------------------------------------------. ,--------------------------------------------.
79| Escape | 1 | 2 | 3 | 4 | 5 | 6 | | | | | | | | |
80|--------+-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----+--------|
81| | | | ↑ | | | | | | | | | | | |
82|--------+-----+-----+-----+-----+-----| | | |-----+-----+-----+-----+-----+--------|
83| | | ← | ↓ | → | |-----| |-----| |Ctrl | | | | |
84|--------+-----+-----+-----+-----+-----| | | |-----+-----+-----+-----+-----+--------|
85| | | | | | | | | | | | | | | |
86`--------+-----+-----+-----+-----+-----------' `-----------+-----+-----+-----+-----+--------'
87 | | | | |WkspL| | ⌘⇧ | | | | |
88 `-----------------------------' ,-----------. ,-----------. `-----------------------------'
89 | | | | | |
90 ,-----|-----|-----| |-----+-----+-----.
91 | | | | | | | |
92 |WkspR| |-----| |-----| | Mod |
93 | | | | | | | |
94 `-----------------' `-----------------'
95
diff --git a/layouts/community/ergodox/issmirnov/build.sh b/layouts/community/ergodox/issmirnov/build.sh
new file mode 100755
index 000000000..7bb694d8a
--- /dev/null
+++ b/layouts/community/ergodox/issmirnov/build.sh
@@ -0,0 +1,2 @@
1#!/bin/bash
2make ergodox_ez:issmirnov
diff --git a/layouts/community/ergodox/issmirnov/config.h b/layouts/community/ergodox/issmirnov/config.h
new file mode 100644
index 000000000..fe62a7d1d
--- /dev/null
+++ b/layouts/community/ergodox/issmirnov/config.h
@@ -0,0 +1,3 @@
1// Reference: https://beta.docs.qmk.fm/reference/config-options
2// and https://github.com/qmk/qmk_firmware/blob/master/docs/config_options.md
3#include QMK_KEYBOARD_CONFIG_H
diff --git a/layouts/community/ergodox/issmirnov/keymap.c b/layouts/community/ergodox/issmirnov/keymap.c
new file mode 100644
index 000000000..ce853f3d3
--- /dev/null
+++ b/layouts/community/ergodox/issmirnov/keymap.c
@@ -0,0 +1,250 @@
1#include QMK_KEYBOARD_H
2
3// Custom user includes
4#include "issmirnov.h"
5#include "tap_tog.h"
6
7const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
8[_QWERTY] = LAYOUT_ergodox_wrapper(
9KC_ESCAPE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_EXLM,
10LCTL(KC_SPACE), _________________QWERTY_L1_________________, KC_ASTR,
11KC_TAB, _________________QWERTY_L2_________________,
12OSM(MOD_LSFT), _________________QWERTY_L3_________________, KC_SLASH,
13KC_LCTL, LSFT(KC_LGUI), LSFT(KC_LALT), KC_LALT, KC_LGUI,
14 XXXXXXX, XXXXXXX,
15 XXXXXXX,
16 KC_SPACE, KC_BSPACE, KC_DEL,
17
18KC_EQL , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_ESCAPE ,
19KC_PLUS , _________________QWERTY_R1_________________ , LGUI(KC_SPACE) ,
20 _________________QWERTY_R2_________________ , MO(_NAVI) ,
21KC_MINS , _________________QWERTY_R3_________________ , KC_QUOTE ,
22KC_ESCAPE , KC_COLN , KC_PERC , XXXXXXX , LGUI(KC_L) ,
23
24KC_LEFT, KC_RGHT,
25KC_UP,
26KC_DOWN, KC_TAB, KC_ENTER
27),
28
29 // layer 1
30[_SYMB] = LAYOUT_ergodox_wrapper(
31KC_ESCAPE , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 ,
32XXXXXXX , _________________SYMB_L1___________________ ,KC_ASTR ,
33KC_TAB , _________________SYMB_L2___________________,
34KC_LSHIFT , _________________SYMB_L3___________________, KC_SLASH ,
35KC_LCTL , LSFT(KC_LGUI) , LSFT(KC_LALT) , KC_LALT , WKSP_LEFT ,
36
37 XXXXXXX, XXXXXXX,
38 XXXXXXX,
39 WKSP_RIGHT, KC_BSPACE, KC_DEL,
40
41KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , XXXXXXX ,
42KC_PLUS , _________________SYMB_R1___________________ , MO(_NAVI) ,
43 _________________SYMB_R2___________________ , KC_DQUO ,
44KC_MINS , _________________SYMB_R3___________________ , KC_QUOTE ,
45KC_ESCAPE , KC_COLN , KC_PERC , XXXXXXX , XXXXXXX ,
46
47KC_LEFT, KC_RGHT,
48KC_UP,
49KC_DOWN, KC_TAB, KC_ENTER
50),
51
52 // layer 2
53[_NUMP] = LAYOUT_ergodox_wrapper(
54XXXXXXX , ___________________XXXXX___________________, XXXXXXX ,
55XXXXXXX , _________________NUMP_L1___________________ , KC_ASTR ,
56KC_TAB , _________________NUMP_L2___________________ ,
57XXXXXXX , _________________NUMP_L3___________________ , KC_SLASH ,
58TO(0) , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
59
60 XXXXXXX , XXXXXXX ,
61 XXXXXXX ,
62 KC_SPACE , KC_BSPACE , KC_DEL ,
63
64KC_EQL , ___________________XXXXX___________________ , RESET ,
65KC_PLUS , _________________NUMP_R1___________________ , XXXXXXX ,
66 _________________NUMP_R2___________________ , XXXXXXX ,
67KC_MINS , _________________NUMP_R3___________________ , XXXXXXX ,
68 KC_0 , XXXXXXX , XXXXXXX , TO(3) , XXXXXXX ,
69
70KC_LEFT, KC_RGHT,
71KC_UP,
72KC_DOWN, KC_LALT, KC_LSFT
73),
74
75 // layer 3
76[_OVERWATCH] = LAYOUT_ergodox_wrapper(
77KC_ESCAPE, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , TO(0) ,
78______________OVERWATCH_L1_________________ , XXXXXXX ,
79______________OVERWATCH_L2_________________ ,
80______________OVERWATCH_L3_________________ , XXXXXXX ,
81______________OVERWATCH_L4_________________ ,
82
83XXXXXXX , XXXXXXX ,
84XXXXXXX ,
85KC_SPACE , XXXXXXX , XXXXXXX ,
86
87
88_______, _______, _______, _______, _______, _______, _______,
89_______, _______, _______, _______, _______, _______, _______,
90 _______, _______, _______, _______, _______, _______,
91_______, _______, _______, _______, _______, _______, _______,
92_______, _______, _______, _______, _______,
93
94_______, _______,
95_______,
96_______, _______, _______
97
98),
99// layer 4
100[_NAVI] = LAYOUT_ergodox_wrapper(
101KC_ESCAPE, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 ,
102XXXXXXX, _________________NAVI_L1___________________ , XXXXXXX ,
103XXXXXXX, _________________NAVI_L2___________________ ,
104XXXXXXX, _________________NAVI_L3___________________ , XXXXXXX ,
105XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, WKSP_LEFT,
106
107XXXXXXX , XXXXXXX ,
108XXXXXXX ,
109WKSP_RIGHT , XXXXXXX , XXXXXXX ,
110
111
112_______, _______, _______, _______, _______, _______, _______,
113_______, _________________NAVI_R1___________________, _______,
114 _________________NAVI_R2___________________, _______,
115_______, _________________NAVI_R3___________________, _______,
116MODSFT, _______, _______, _______, _______,
117
118_______, _______,
119_______,
120_______, _______, KC_LGUI
121
122),
123};
124
125
126// called by QMK during key processing before the actual key event is handled. Useful for macros.
127bool process_record_user(uint16_t keycode, keyrecord_t *record) {
128 uint8_t layer = biton32(layer_state);
129 switch (keycode) {
130 case TAP_TOG_LAYER:
131 process_tap_tog(_SYMB,record);
132 return false;
133 break;
134
135 case WKSP_LEFT:
136 // Only if TAP_TOG_LAYER is being held right now do we want to do actions.
137 if (record->event.pressed && (!tap_tog_layer_toggled_on || layer == _NAVI)) {
138 tap_code16(LGUI(LSFT(KC_Z)));
139 tap_tog_layer_other_key_pressed = true; // Add flag so layer resets
140 }
141 break;
142 case WKSP_RIGHT:
143 // Only if TAP_TOG_LAYER is being held right now do we want to do actions.
144 if (record->event.pressed && (!tap_tog_layer_toggled_on || layer == _NAVI)) {
145 tap_code16(LGUI(LSFT(KC_X)));
146 tap_tog_layer_other_key_pressed = true; // Add flag so layer resets
147 }
148 break;
149 default:
150 tap_tog_count = 0; // reset counter.
151 tap_tog_layer_other_key_pressed = true; // always set this to true, TAP_TOG_LAYER handlers will handle interpreting this
152 break;
153 }
154 return true;
155}
156
157// Runs constantly in the background, in a loop every 100ms or so.
158// Best used for LED status output triggered when user isn't actively typing.
159void matrix_scan_user(void) {
160 uint8_t layer = biton32(layer_state);
161 if (layer == 0) {
162 // Set up LED indicators for stuck modifier keys.
163 // https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/report.h#L118
164 switch (keyboard_report->mods) {
165 case MOD_BIT(KC_LSFT): // LSHIFT
166 ergodox_right_led_1_set (LED_BRIGHTNESS_LO);
167 ergodox_right_led_1_on ();
168 ergodox_right_led_2_set (LED_BRIGHTNESS_LO);
169 ergodox_right_led_2_on ();
170 ergodox_right_led_3_set (LED_BRIGHTNESS_HI);
171 ergodox_right_led_3_off ();
172 break;
173
174 case MOD_BIT(KC_LGUI): // LGUI
175 ergodox_right_led_1_set (LED_BRIGHTNESS_HI);
176 ergodox_right_led_1_off ();
177 ergodox_right_led_2_set (LED_BRIGHTNESS_LO);
178 ergodox_right_led_2_on ();
179 ergodox_right_led_3_set (LED_BRIGHTNESS_LO);
180 ergodox_right_led_3_on ();
181 break;
182
183 case MOD_BIT(KC_LSFT) ^ MOD_BIT(KC_LGUI):
184 ergodox_right_led_1_set (70);
185 ergodox_right_led_1_on ();
186 ergodox_right_led_2_set (70);
187 ergodox_right_led_2_on ();
188 ergodox_right_led_3_set (70);
189 ergodox_right_led_3_on ();
190 break;
191
192 default: // reset leds
193 ergodox_right_led_1_set (LED_BRIGHTNESS_HI);
194 ergodox_right_led_1_off ();
195 ergodox_right_led_2_set (LED_BRIGHTNESS_HI);
196 ergodox_right_led_2_off ();
197 ergodox_right_led_3_set (LED_BRIGHTNESS_HI);
198 ergodox_right_led_3_off ();
199 }
200 }
201}
202
203// only runs when when the layer is changed, good for updating LED's and clearing sticky state
204uint32_t layer_state_set_user(uint32_t state) {
205 uint8_t layer = biton32(state);
206
207 ergodox_board_led_off();
208 ergodox_right_led_1_off();
209 ergodox_right_led_2_off();
210 ergodox_right_led_3_off();
211
212 combo_enable(); // by default, enable combos.
213 switch (layer) {
214 case 0:
215 break;
216 case 1:
217 clear_mods();
218 ergodox_right_led_1_on();
219 break;
220 case 2:
221 clear_mods();
222 ergodox_right_led_2_on();
223 break;
224 case _OVERWATCH:
225 clear_mods();
226 combo_disable(); // We don't want combos in overwatch
227 ergodox_right_led_3_on();
228 break;
229 case 4:
230 ergodox_right_led_1_on();
231 ergodox_right_led_2_on();
232 break;
233 case 5:
234 ergodox_right_led_1_on();
235 ergodox_right_led_3_on();
236 break;
237 case 6:
238 ergodox_right_led_2_on();
239 ergodox_right_led_3_on();
240 break;
241 case 7:
242 ergodox_right_led_1_on();
243 ergodox_right_led_2_on();
244 ergodox_right_led_3_on();
245 break;
246 default:
247 break;
248 }
249 return state;
250};
diff --git a/layouts/community/ergodox/issmirnov/push.sh b/layouts/community/ergodox/issmirnov/push.sh
new file mode 100755
index 000000000..1a6c7c447
--- /dev/null
+++ b/layouts/community/ergodox/issmirnov/push.sh
@@ -0,0 +1,2 @@
1#!/bin/bash
2make ergodox_ez:issmirnov:teensy
diff --git a/layouts/community/ergodox/issmirnov/template.txt b/layouts/community/ergodox/issmirnov/template.txt
new file mode 100644
index 000000000..35c7920a1
--- /dev/null
+++ b/layouts/community/ergodox/issmirnov/template.txt
@@ -0,0 +1,17 @@
1,--------------------------------------------. ,--------------------------------------------.
2| 0 | 1 | 2 | 3 | 4 | 5 | 6 | | 38 | 39 | 40 | 41 | 42 | 43 | 44 |
3|--------+-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----+--------|
4| 7 | 8 | 9 | 10 | 11 | 12 | 13 | | 45 | 46 | 47 | 48 | 49 | 50 | 51 |
5|--------+-----+-----+-----+-----+-----| | | |-----+-----+-----+-----+-----+--------|
6| 14 | 15 | 16 | 17 | 18 | 19 |-----| |-----| 52 | 53 | 54 | 55 | 56 | 57 |
7|--------+-----+-----+-----+-----+-----| 26 | | 58 |-----+-----+-----+-----+-----+--------|
8| 20 | 21 | 22 | 23 | 24 | 25 | | | | 59 | 60 | 61 | 62 | 63 | 64 |
9`--------+-----+-----+-----+-----+-----------' `-----------+-----+-----+-----+-----+--------'
10 | 27 | 28 | 29 | 30 | 31 | | 65 | 66 | 67 | 68 | 69 |
11 `-----------------------------' ,-----------. ,-----------. `-----------------------------'
12 | 32 | 33 | | 70 | 71 |
13 ,-----|-----|-----| |-----+-----+-----.
14 | | | 34 | | 72 | | |
15 | 35 | 36 |-----| |-----| 74 | 75 |
16 | | | 37 | | 73 | | |
17 `-----------------' `-----------------'