]> git.donarmstrong.com Git - qmk_firmware.git/commitdiff
Norman layout for the minidox keyboard (#5747)
authorTorben Hoffmann <torben.lehoff@gmail.com>
Fri, 10 May 2019 05:12:11 +0000 (07:12 +0200)
committerDrashna Jaelre <drashna@live.com>
Fri, 10 May 2019 05:12:11 +0000 (22:12 -0700)
* Norman layout with Lower and Raise layers working

* Add keymap_extra def for Norman layout
* Re-org'ed the modifiers as explained in the Readme
* Corrected colour legend for KLE that the Readme links to

* Use #pragma once in header file

* Use pragma once and move user config to config.h

* Move definitions to the right file and correct link in Readme

* Move def of NM_COLN to the logical place in header file

* Add sendstring_norman.h for when the laptop layout is not QWERTY

* Update quantum/keymap_extras/sendstring_norman.h

Co-Authored-By: lehoff <torben.lehoff@gmail.com>
keyboards/minidox/keymaps/norman/config.h [new file with mode: 0644]
keyboards/minidox/keymaps/norman/keymap.c [new file with mode: 0644]
keyboards/minidox/keymaps/norman/readme.md [new file with mode: 0644]
quantum/keymap_extras/keymap_norman.h [new file with mode: 0644]
quantum/keymap_extras/sendstring_norman.h [new file with mode: 0644]

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