diff options
-rw-r--r-- | keyboards/minidox/keymaps/norman/config.h | 5 | ||||
-rw-r--r-- | keyboards/minidox/keymaps/norman/keymap.c | 69 | ||||
-rw-r--r-- | keyboards/minidox/keymaps/norman/readme.md | 56 | ||||
-rw-r--r-- | quantum/keymap_extras/keymap_norman.h | 54 | ||||
-rw-r--r-- | quantum/keymap_extras/sendstring_norman.h | 39 |
5 files changed, 223 insertions, 0 deletions
diff --git a/keyboards/minidox/keymaps/norman/config.h b/keyboards/minidox/keymaps/norman/config.h new file mode 100644 index 000000000..0d3542a03 --- /dev/null +++ b/keyboards/minidox/keymaps/norman/config.h | |||
@@ -0,0 +1,5 @@ | |||
1 | #pragma once | ||
2 | |||
3 | #define PERMISSIVE_HOLD | ||
4 | #define QMK_KEYS_PER_SCAN 4 | ||
5 | #define TAPPING_TERM 160 | ||
diff --git a/keyboards/minidox/keymaps/norman/keymap.c b/keyboards/minidox/keymaps/norman/keymap.c new file mode 100644 index 000000000..2786b7dd9 --- /dev/null +++ b/keyboards/minidox/keymaps/norman/keymap.c | |||
@@ -0,0 +1,69 @@ | |||
1 | #include QMK_KEYBOARD_H | ||
2 | |||
3 | #include <sendstring_norman.h> | ||
4 | |||
5 | |||
6 | extern keymap_config_t keymap_config; | ||
7 | |||
8 | // Each layer gets a name for readability, which is then used in the keymap matrix below. | ||
9 | // The underscores don't mean anything - you can have a layer called STUFF or any other name. | ||
10 | // Layer names don't all need to be of the same length, obviously, and you can also skip them | ||
11 | // entirely and just use numbers. | ||
12 | enum layers { | ||
13 | _NORMAN, | ||
14 | _LOWER, | ||
15 | _RAISE, | ||
16 | _ADJUST | ||
17 | }; | ||
18 | |||
19 | enum custom_keycodes { | ||
20 | QWERTY = SAFE_RANGE, | ||
21 | LOWER, | ||
22 | RAISE, | ||
23 | ADJUST | ||
24 | }; | ||
25 | |||
26 | // Defines for task manager and such | ||
27 | #define CALTDEL LCTL(LALT(KC_DEL)) | ||
28 | #define TSKMGR LCTL(LSFT(KC_ESC)) | ||
29 | #define DSK_LFT LGUI(LCTL(KC_LEFT)) | ||
30 | #define DSK_RT LGUI(LCTL(KC_RIGHT)) | ||
31 | |||
32 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||
33 | |||
34 | |||
35 | [_NORMAN] = LAYOUT( \ | ||
36 | NM_Q, NM_W, NM_D, NM_F, NM_K, NM_J, NM_U, NM_R, NM_L, NM_SCLN, \ | ||
37 | NM_A, NM_S, NM_E, NM_T, NM_G, NM_Y, NM_N, NM_I, NM_O, NM_H, \ | ||
38 | NM_Z, NM_X, NM_C, NM_V, NM_B, NM_P, NM_M, NM_COMM, NM_DOT, NM_SLSH, \ | ||
39 | LGUI_T(KC_ENT), LT(_RAISE, KC_ESC), SFT_T(KC_BSPC), CTL_T(KC_SPC), LT(_LOWER, KC_TAB), ALT_T(KC_ENT) \ | ||
40 | ), | ||
41 | |||
42 | [_RAISE] = LAYOUT( \ | ||
43 | KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_PLUS, KC_7, KC_8, KC_9, KC_0, \ | ||
44 | KC_CIRC, KC_AMPR, KC_TILD, KC_PIPE, KC_BSLS, KC_MINUS, KC_4, KC_5, KC_6, KC_EQL, \ | ||
45 | KC_DQT, KC_QUOT, KC_UNDS, KC_GRV, _______, KC_ASTR, KC_1, KC_2, KC_3, _______, \ | ||
46 | _______, _______, _______, _______, MO(_ADJUST), _______ \ | ||
47 | ), | ||
48 | |||
49 | |||
50 | [_LOWER] = LAYOUT( \ | ||
51 | KC_ESC, KC_HOME, KC_UP, KC_END, _______, _______, KC_LPRN, KC_RPRN, _______, _______, | ||
52 | KC_VOLU, KC_LEFT, KC_DOWN, KC_RIGHT, KC_PGUP, _______, KC_LBRC, KC_RBRC, _______, _______, \ | ||
53 | KC_VOLD, KC_MPRV, KC_MPLY, KC_MNXT, KC_PGDN, _______, KC_LCBR, KC_RCBR, _______, _______, \ | ||
54 | _______, MO(_ADJUST), _______, _______, _______, _______ \ | ||
55 | ), | ||
56 | |||
57 | [_ADJUST] = LAYOUT( \ | ||
58 | KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, \ | ||
59 | _______, DSK_LFT, _______, DSK_RT, _______, TSKMGR, CALTDEL, _______, KC_F11, KC_F12, \ | ||
60 | RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ | ||
61 | _______, _______, _______, _______, _______, _______ \ | ||
62 | ) | ||
63 | |||
64 | }; | ||
65 | |||
66 | void persistant_default_layer_set(uint16_t default_layer) { | ||
67 | eeconfig_update_default_layer(default_layer); | ||
68 | default_layer_set(default_layer); | ||
69 | } | ||
diff --git a/keyboards/minidox/keymaps/norman/readme.md b/keyboards/minidox/keymaps/norman/readme.md new file mode 100644 index 000000000..018e43632 --- /dev/null +++ b/keyboards/minidox/keymaps/norman/readme.md | |||
@@ -0,0 +1,56 @@ | |||
1 | # Minidox Norman Layout by LeHoff | ||
2 | Based on the QWERTY layout created by Khitsule. | ||
3 |  | ||
4 | |||
5 | [KLE link](http://www.keyboard-layout-editor.com/#/gists/86ec49f9f820a8b9b36f6e0d2ef8fff7) | ||
6 | |||
7 | ## Layers | ||
8 | | Layer | Legend | | ||
9 | | ----- | ------ | | ||
10 | | Base | Top left (black) | | ||
11 | | Lower | Bottom right (red) | | ||
12 | | Raise | Top right (orange) | | ||
13 | | Adjust | Front print | | ||
14 | |||
15 | ## Features | ||
16 | * Raise/lower layers focus first on one-handed use | ||
17 | * Numpad on right hand with raise layer | ||
18 | * Navigation on left hand with lower layer (ESDF) | ||
19 | * D refers to desktop left/right on Win 10 (win+ctrl+left/right) | ||
20 | * Heavy use of hold/tap dual function keys - from left to right: | ||
21 | * Cmd/Enter | ||
22 | * Raise/Esc | ||
23 | * Shift/Backspace | ||
24 | * Ctrl/Space | ||
25 | * Lower/Tab | ||
26 | * Alt/Enter | ||
27 | |||
28 | |||
29 | ## Modifier Placement Rationale | ||
30 | |||
31 | There are several major driving forces at play: | ||
32 | |||
33 | * I use MacOS. | ||
34 | * I'm Danish so the Alt and Shift-Alt layers in MacOS simply have to work. | ||
35 | * I use Vim for coding. | ||
36 | * I use org-mode in Emacs to keep track of my time. | ||
37 | |||
38 | * Space is on the right hand side because I almost exclusively use my right hand thumb for | ||
39 | space. | ||
40 | * Cmd is on the left since I often use Cmd+click to open a link in a new tab in Safari. | ||
41 | * Due to my usage of Vim Esc got a spot on the modifier row. | ||
42 | * Tab is on the right to enable easy navigation between winows with Cmd+Tab. | ||
43 | * Shift is on the left since org-mode uses Ctrl+arrows to manipulate task state quickly, | ||
44 | and since the arrow keys are activated using Lower (which has been moved to the right) and S, E, T, | ||
45 | and D, it works well that way. | ||
46 | * Ctrl is on the right since Ctrl+<0-9> is used in MacOS to switch between spaces. | ||
47 | * Enter is on both sides since Enter is often used together with all of the modifiers. E.g., | ||
48 | Cmd+Enter to send mails in most situations, but Ctrl+Enter is used in Emacs to create a | ||
49 | new task in org-mode. | ||
50 | |||
51 | This means that arrows and digits are being modified from the other hand, which could be | ||
52 | bad for gaming, so if you're into that you might want to re-think a few things, but in | ||
53 | that case you are probably using a Windows machine and then there are other constraints | ||
54 | you have to deal with. | ||
55 | |||
56 | |||
diff --git a/quantum/keymap_extras/keymap_norman.h b/quantum/keymap_extras/keymap_norman.h new file mode 100644 index 000000000..995b1b8a0 --- /dev/null +++ b/quantum/keymap_extras/keymap_norman.h | |||
@@ -0,0 +1,54 @@ | |||
1 | |||
2 | /* Copyright 2019 Torben Hoffmann | ||
3 | * | ||
4 | * This program is free software: you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License as published by | ||
6 | * the Free Software Foundation, either version 2 of the License, or | ||
7 | * (at your option) any later version. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
16 | */ | ||
17 | #pragma once | ||
18 | |||
19 | #include "keymap.h" | ||
20 | // For software implementation of norman | ||
21 | #define NM_Q KC_Q | ||
22 | #define NM_W KC_W | ||
23 | #define NM_D KC_E | ||
24 | #define NM_F KC_R | ||
25 | #define NM_K KC_T | ||
26 | #define NM_J KC_Y | ||
27 | #define NM_U KC_U | ||
28 | #define NM_R KC_I | ||
29 | #define NM_L KC_O | ||
30 | #define NM_SCLN KC_P | ||
31 | #define NM_COLN LSFT(NM_SCLN) | ||
32 | |||
33 | #define NM_A KC_A | ||
34 | #define NM_S KC_S | ||
35 | #define NM_E KC_D | ||
36 | #define NM_T KC_F | ||
37 | #define NM_G KC_G | ||
38 | #define NM_Y KC_H | ||
39 | #define NM_N KC_J | ||
40 | #define NM_I KC_K | ||
41 | #define NM_O KC_L | ||
42 | #define NM_H KC_SCLN | ||
43 | |||
44 | #define NM_Z KC_Z | ||
45 | #define NM_X KC_X | ||
46 | #define NM_C KC_C | ||
47 | #define NM_V KC_V | ||
48 | #define NM_B KC_B | ||
49 | #define NM_P KC_N | ||
50 | #define NM_M KC_M | ||
51 | #define NM_COMM KC_COMM | ||
52 | #define NM_DOT KC_DOT | ||
53 | #define NM_SLSH KC_SLSH | ||
54 | |||
diff --git a/quantum/keymap_extras/sendstring_norman.h b/quantum/keymap_extras/sendstring_norman.h new file mode 100644 index 000000000..57d450ca8 --- /dev/null +++ b/quantum/keymap_extras/sendstring_norman.h | |||
@@ -0,0 +1,39 @@ | |||
1 | /* Copyright 2019 Torben Hoffmann | ||
2 | * | ||
3 | * This program is free software: you can redistribute it and/or modify | ||
4 | * it under the terms of the GNU General Public License as published by | ||
5 | * the Free Software Foundation, either version 2 of the License, or | ||
6 | * (at your option) any later version. | ||
7 | * | ||
8 | * This program is distributed in the hope that it will be useful, | ||
9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
11 | * GNU General Public License for more details. | ||
12 | * | ||
13 | * You should have received a copy of the GNU General Public License | ||
14 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
15 | */ | ||
16 | /* Sendstring definitions for the Colemak layout */ | ||
17 | #pragma once | ||
18 | |||
19 | #include "keymap_norman.h" | ||
20 | |||
21 | const uint8_t ascii_to_keycode_lut[0x80] PROGMEM = { | ||
22 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
23 | KC_BSPC, KC_TAB, KC_ENT, 0, 0, 0, 0, 0, | ||
24 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
25 | 0, 0, 0, KC_ESC, 0, 0, 0, 0, | ||
26 | KC_SPC, KC_1, KC_QUOT, KC_3, KC_4, KC_5, KC_7, KC_QUOT, | ||
27 | KC_9, KC_0, KC_8, KC_EQL, KC_COMM, KC_MINS, KC_DOT, KC_SLSH, | ||
28 | KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, | ||
29 | KC_8, KC_9, NM_SCLN, NM_SCLN, KC_COMM, KC_EQL, KC_DOT, KC_SLSH, | ||
30 | KC_2, NM_A, NM_B, NM_C, NM_D, NM_E, NM_F, NM_G, | ||
31 | NM_H, NM_I, NM_J, NM_K, NM_L, NM_M, NM_N, NM_O, | ||
32 | NM_P, NM_Q, NM_R, NM_S, NM_T, NM_U, NM_V, NM_W, | ||
33 | NM_X, NM_Y, NM_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_6, KC_MINS, | ||
34 | KC_GRV, NM_A, NM_B, NM_C, NM_D, NM_E, NM_F, NM_G, | ||
35 | NM_H, NM_I, NM_J, NM_K, NM_L, NM_M, NM_N, NM_O, | ||
36 | NM_P, NM_Q, NM_R, NM_S, NM_T, NM_U, NM_V, NM_W, | ||
37 | NM_X, NM_Y, NM_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_GRV, KC_DEL | ||
38 | }; | ||
39 | |||