]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/mitosis/keymaps/datagrok/readme.md
[Keyboard] Add QMK configurator JSON for Alice PCB (#6397)
[qmk_firmware.git] / keyboards / mitosis / keymaps / datagrok / readme.md
1 # a layout for the Mitosis
2
3 - Emphasis on momentary modifiers, all usable from either hand, arranged symmetrically, but left/right distinguishable by the OS.
4   I place left- and right-versions of Shift, GUI ("Super"), and Alt ("Meta"), and Henkan/Muhenkan (which I plan to overload for "Hyper").
5
6   I'm going for a [Space Cadet](https://en.wikipedia.org/wiki/Space-cadet_keyboard) aesthetic;
7   I want a keyboard that can (even just in theory) make use of all the bucky bits my operating system can support.
8
9 - Red key and Blue key momentary-enable (like a shift key) one of three layers:
10
11     - Red: Symbols layer
12     - Blue: Numbers layer
13     - "Purple" (both Red and Blue): Functions layer
14     
15   This tri-state layer mechanism is a bit similar to Planck and Preonic's "Raise," "Lower," and "Adjust."
16
17 - The base layer is QWERTY.
18   [Colemak][], [Dvorak][], and [Workman][] may be toggled using `Red`+`Blue`+`Z`.
19   When you find the one you like, save it with `Shift`+`Red`+`Blue`+`Z`.
20
21 - Minimize hand travel, so as not to lose orientation with home row.
22
23 - `?` and `!` are moved to take the place of `<` and `>`.
24   Rationale: unmodded and shifted keys should be for prose, while symbols useful for programming should be colocated on their own layer.
25
26 - Key positions chosen for mnemonics.
27   For example, you can distinguish between alphanumeric numerals and keypad numerals, but they occupy the same key positions.
28
29 ## Layout Images
30
31 ![mitosis:datagrok layout base layer](https://i.imgur.com/tap5Pjf.png)
32
33 Base layer. Notes:
34 - customized comma and period, which have exclamation point and question mark on their shift layer.
35 - tap right-shift for underscore, tap left-shift for tab.
36
37 ![mitosis:datagrok layout red layer](https://i.imgur.com/sMGr34T.png)
38
39 Red layer. Intended for common navigation and programming symbols. Notes:
40 - symmetric layout of paired braces/brackets/slashes for easier memorization
41 - arrows placed directly on home position
42
43 ![mitosis:datagrok layout blue layer](https://i.imgur.com/dDb2563.png)
44
45 Blue layer. Intended for "number pad." Notes:
46 - Keycodes generated for numbers, enter key, and mathematical symbols are from the alphanumeric keys, not keypad.
47   This way they are not influenced by the state of Num Lock.
48   If you want to send the keypad equivalents, just press Blue as well to access keypad numbers in the same positions in the Purple layer.
49
50 ![mitosis:datagrok layout purple layer](https://i.imgur.com/pESzy2u.png)
51
52 Purple (Red+Blue) layer. Intended for "true keypad" and various functions. Notes:
53 - Numbers on this layer send Keypad codes, so the result will be affected by the state of Num Lock.
54 - "Switch Layout" toggles the alphabet keys between QWERTY, Colemak, Dvorak, and Workman.
55   Shift + "Switch Layout" stores the currently selected alphabet layout in eeprom, so the selection persists across reboots and computers.
56 - Page Up / Page Down / Home / End are placed on corresponding arrow keys.
57
58 Keyboard layout editor sources:
59 [base](http://www.keyboard-layout-editor.com/#/gists/bc2d06a3203d1bc3a14ed2245cf39643)
60 [red](http://www.keyboard-layout-editor.com/#/gists/dbbf65f726a5522824b75117a62a321e)
61 [blue](http://www.keyboard-layout-editor.com/#/gists/240e807f3d7e1d3ddabe1b69ee675048)
62 [purple](http://www.keyboard-layout-editor.com/#/gists/9559f0f8bb1ee47677c8f2b4d766829d)
63
64 [Imgur album](https://imgur.com/a/hm4bbdM)
65
66 ## Indicators
67
68 - When Red layer is active, the RGB indicator turns red.
69 - When Blue layer is active, the RGB indicator turns blue.
70 - When Purple layer is active, the RGB indicator turns purple.
71 - When the Workman layer is active, the RGB indicator turns green.
72   Currently, this means that activating the Red layer while using the Workman layout will make the indicator show yellow. (red + green.)
73 - The Num Lock status is shown on the Pro Micro tx LED.
74 - If you attach a speaker to PC6 (pin 5) and compile with AUDIO_ENABLE=yes, music will be played at startup, when switching default layers, and when saving the default layer.
75
76 ## Variants
77
78 Some additional compile-time options for this layout are available by editing rules.mk or compiling like so:
79
80 Normal compilation:
81
82 ```make mitosis:datagrok```
83
84 Swap Space onto bottom thumb row: swaps Red/Backspace/Space/Red with Blue/Shift/Shift/Blue:
85
86 ```make mitosis:datagrok MITOSIS_DATAGROK_BOTTOMSPACE=yes```
87
88 Lower baud UART. Useful when using an 8Mhz pro micro; corresponding changes required in wireless firmware. See rules.mk for details.
89
90 ```make mitosis:datagrok MITOSIS_DATAGROK_SLOWUART=yes```
91
92 ## Design notes
93
94 ### Workman layout
95
96 - I'm learning a new physical key placement, so I might as well go all-out and use an optimal non-QWERTY layout.
97   Bonus: it's easy to switch back to QWERTY on a traditional row-staggered keyboard.
98   The designer of the Mitosis had [a similar experience](https://www.reddit.com/r/MechanicalKeyboards/comments/66588f/wireless_split_qmk_mitosis/dgfr22q/).
99
100 - I like the way Workman feels and some of its advantages over Colemak.
101   Unfortunately, it was designed using a weighting system based on a standard
102   row-staggered keyboard so is probably not as optimal as one could achieve
103   on an ergonomic board like the Mitosis. Maybe run an optimizer routine after I
104   determine good values for key difficulty on the Mitosis.
105
106 ### 8Mhz Pro Micro
107
108 - I (used to) use a 3.3v Pro Micro clocked at 8Mhz rather than the 5v 16Mhz specified in the Mitosis design.
109   That can't communicate with the connected wireless module at the default speed of 1M baud.
110   The next fastest baudrate that works without errors is 250k baud.
111   So if you want to do the same:
112
113     - Set the Pro Micro clock and baud rate correctly in `rules.mk`:
114       ```
115       F_CPU = 800000
116       MITOSIS_DATAGROK_SLOWUART = yes
117       ```
118     - Configure the receiver's wireless module to communicate at 250k baud in `main.c`. See https://github.com/reversebias/mitosis/pull/10
119       ```
120       -          UART_BAUDRATE_BAUDRATE_Baud1M
121       +          UART_BAUDRATE_BAUDRATE_Baud250000
122       ```
123
124 ### Layout mnemonics
125
126 - Paired programming symbols (braces, brackets, parentheses) are arranged symmetrically in the Red layer.
127
128 - Arrow keys are in the home position on the Red layer.
129
130   - Blue+Arrows = PgUp/PgDn/Home/End, which is intuitive for me and similar to what is done on Apple and some Dell keyboards.
131
132 - The number pad: I placed the ten-key number pad on the Blue layer.
133   However, this would do the wrong thing when Num Lock was not enabled.
134   Rather than attempt to manage the state of Num Lock, I arranged the normal number keys in a ten-key layout on the Blue layer instead.
135   If you explicitly want the keypad keys, they're in the same position on the Red+Blue layer.
136
137 - Number-pad add, subtract, multiply, and divide are located on the same keys as alphanumeric plus, dash, asterisk, and slash, respectively.
138
139 - The Function-keys are arranged to mimic the order of the ten-key pad.
140
141 - Enter is now in a more qwerty-familiar location, and may be activated with one hand.
142   Numpad Enter is in the same position for mnemonics.
143
144 - Why do I dislike [snake\_case](https://en.wikipedia.org/wiki/Snake_case) (`__variable_names_that_use_underscores_`)?
145   Maybe because it's hard to type all those underscores requiring the shift key?
146   Hypothesis: I'll be less annoyed by snake case by placing `_` at an unmodded position, right near the `space` key.
147
148
149 ## Changelog
150
151 ### Current
152
153 - Discard "intentionally difficult backspace" idea.
154   Tab returns to left-shift.
155   Del returns to Red+Backspace
156 - "High Profile mode:" Swap Red/Backspace/Space/Red with Blue/Shift/Shift/Blue (placing space on lower thumb keys) using `MITOSIS_DATAGROK_BOTTOMSPACE=yes` when compiling.
157 - Move Print Screen / Scroll Lock / Pause to pinky column on Blue layer.
158 - Let's try using TT instead of MO so we can e.g. lock-on the keypad.
159   - We still use MO for first modifier, so e.g. Red + tapping Blue will lock purple.
160     So far it feels a bit janky, we'll see.
161 - One key `KC_LAYO` to cycle through available base layers instead of a dedicated key for each;
162   Shift + `KC_LAYO` stores current base layer selection in eeprom so it comes back after disconnecting or a reset.
163 - Added Colemak and Dvorak as default layers that may be selected.
164 - Set UART to 250kbaud with make argument `MITOSIS_DATAGROK_SLOWUART=yes`, for use with 8Mhz Pro Micros.
165 - Display Num Lock status on tx LED
166
167 ### 0.6.60
168
169 - Experiment: no-modifier underscore on right shift key.
170 - New combined numbers + keypad arrangement.
171   No more worrying about Num Lock key.
172 - Move F-keys to left board to make room.
173   Calling them "the Numbers layer" and "the Functions layer" is now less accurate but the arrangement feels better.
174 - Audio working!
175 - Move Tab and Space to upper thumb row.
176   I discarded the high-profile acrylic case from my Mitosis.
177   With a low-profile case, it's easier to hit the upper row of thumb keys.
178 - Discard all my `#defines` for "Meta", "Super", and "Hyper".
179   I can call them that without making the code confusing to others.
180 - Move Backspace to Red+A. I shouldn't be using it much anyway.
181   This means Tab and Shift might as well be separate keys again.
182 - Distribute paired symbols symmetrically across boards like `\<{([ ])}>/`.
183   Opening-symbols on the right hand was a failed experiment. 
184 - Change default back to target a 16Mhz/5v Pro Micro.
185   I damaged the 8Mhz Pro Micro I was using so now I'm back to using a 16mhz Pro Micro again.
186
187 ### 0.6.1
188
189 - Place Tab on Shift without a modifier. We use it frequently for autocomplete.
190 - Make QWERTY the default layout. So more people can try it out. My customized Workman is easily toggled-on.
191 - Don't use redundant `#define` for `KC_TRNS`
192 - Place Num Lock somewhere. Otherwise (if it gets turned off) we can't type any numbers!
193 - Add some media keys
194
195 ### 0.5.155
196
197 - Enable use with my 3.3v Pro Micro
198 - Add a toggle-able QWERTY layer
199 - Golf down the LED-setting code
200 - Place `!` and `?` on `Shift`+`,` and `Shift`+`.`.
201 - Distribute paired symbols symmetrically across boards like `\)}]> <[{(/`
202
203 ### 0.5.129
204
205 - A modified Workman variant for Mitosis
206 - Arrows in home position, modifier + Arrow = PgUp/PgDn/Home/End
207 - Load all paired symbols onto angle-bracket keys.
208
209 ### Abandoned ideas
210
211 - Abandoned: intentionally-difficult backspace.
212   "Backspace is one of the keys I most dislike on a QWERTY keyboard because it moves me away from homerow and I need to use it so often.
213   Rather than make it easier to strike, I want to discourage myself from using it and train myself to type more accurately."
214   
215     - Many other people like an easy-to-reach backspace.
216     - Many other split-spacebar ergo boards place backspace at the thumbs.
217     - I can still train myself to type well with it in an easy location.
218     - I couldn't think of anything really better to put opposite space.
219
220 - Abandoned: pile all brackets onto one pair of keys.
221   "Since QWERTY and Workman keep angle brackets together, place other enclosing symbols on the same keys."
222
223     - I didn't like having to pick the right modifier to get the right flavor of bracket.
224       Instead, now, one modifier activates a symbols layer where all brackets are easily accessible.
225
226 - Abandoned: chorded Enter without proper chording detection
227
228     - I tried to make Red+Space = Enter with the intention that I could hit both with my thumb.
229       That didn't work well; I always trigger space first when mashing the keys
230       simultaneously. ~~This might not continue to be true if I change the angle
231       at which I strike the keys e.g. with a neoprene base or a wrist support.~~
232       Even with a wrist rest or low-profile, this is hard to do with one hand.
233       Need to adjust the firmware to understand chorded thumb keys.
234
235 ## To do
236
237 - Ctrl+'+' doesn't seem to work; fix.
238 - **Shared Layouts.**
239   Figure out how to make use of QMK's common `layouts/`
240 - **Chorded Combos.**
241   Since the thumb keys are arranged such that it's easy to smash pairs of keys with just one thumb, figure out how to enable chording.
242   For example, a single-finger Shift+Space or Red+Space that doesn't do the wrong thing if Space happens to trigger first.
243 - Improve **LED indications** (may require modding bluetooth firmware):
244     - Num Lock status
245     - Is any board nonresponsive (which one?)
246     - Does either board have a low battery?
247 - **Num Lock management.**
248   Num lock currently occupies prime real estate, but I never use it except to fix it when it's wrong.
249   Do any of my applications use it?
250   Should I have the firmware ensure it is set how I want it?
251   Maybe cause it to be momentary active with Blue?
252   See [@drashna's comment](https://github.com/qmk/qmk_firmware/pull/2366#issuecomment-404951953) for code to force it always-on, which I don't know if I want.
253 - ~~Store default layer in eeprom?~~
254 - Allow "!? on ,." to be easily toggled-off.
255 - Modularize "!? on ,." so it can be easily used on any QMK keyboard. (about half done)
256 - See if the henkan/muhenkan placement is at all useful for Japanese speakers,
257   or abuse different keysyms for Left/Right Hyper. (Original space cadet used
258   scancodes 145/175. 145 is LANG2, 175 is "reserved" in USB HID spec.)
259 - Implement "layer lock" key
260 - Feature parity with popular boards e.g. Planck?
261   - Layers for ~~Dvorak, Coleman,~~ Plover
262   - More music and midi stuff
263   - Macros?
264 - Improve tri-layer behavior
265 - Find out what `update_tri_layer_state` offers that my simple layers arrangement lacks.
266 - ~~Find a better location for Caps Lock, PrintScr/SysRq, Scroll Lock, Pause/Break,~~.
267   Placed on Blue layer. Caps will be Shift+"Layer Lock," once I get that working.
268 - ~~Figure out where to place non-numpad numbers so we don't need num lock turned on to type them?~~
269 - ~~Add Insert, PrintScr, Pause/Break~~
270 - ~~Make QWERTY base layer for people who customize layout in software?~~
271   I default to QWERTY now.
272 - ~~Mod a buzzer onto my receiver and enable tones~~ Easy and works!
273
274 [Workman]: https://viralintrospection.wordpress.com/2010/09/06/a-different-philosophy-in-designing-keyboard-layouts/