summaryrefslogtreecommitdiff
path: root/keyboards/handwired/terminus_mini
diff options
context:
space:
mode:
authormogranjm <32807665+mogranjm@users.noreply.github.com>2017-10-18 03:42:27 +1100
committerJack Humbert <jack.humb@gmail.com>2017-10-17 06:42:27 -1000
commitd3fe6a0588965b71c6876b060d05abfceabacbb5 (patch)
treefd38fecbd5b0f962e411a35c30e0ed163fad1740 /keyboards/handwired/terminus_mini
parentaf4697cba5114d79027b900d94fc1462324c006a (diff)
Add terminus_mini keyboard and nyquist/DivergeJM layout (#1851)
* First commit of the Terminus_Mini firmware and the DivergeJM version of the Nyquist firmware * Fix terminus_mini & nyquist/DivergeJM readme files Previously an outdated copy of the default readme. Updated to match the Nyquist/DivergeJM format (DivergeJM is a split 5x12 implementation of the terminus_mini layout) * Update makefiles to rules.mk Renamed both Makefiles to rules.mk, removed references to makefiles * Updated rules.mk Inadvertantly removed important code from the rules.mk in previous commit. This has been restored. Also disabled Tap_Dance in both rules.mk files * Moved terminus_mini to handwired Realised that existing directory was not appropriate for the terminus_mini project, moved to handwired.
Diffstat (limited to 'keyboards/handwired/terminus_mini')
-rw-r--r--keyboards/handwired/terminus_mini/config.h190
-rw-r--r--keyboards/handwired/terminus_mini/keymaps/default/config.h24
-rw-r--r--keyboards/handwired/terminus_mini/keymaps/default/keymap.c218
-rw-r--r--keyboards/handwired/terminus_mini/keymaps/default/readme.md122
-rw-r--r--keyboards/handwired/terminus_mini/keymaps/default/rules.mk34
-rw-r--r--keyboards/handwired/terminus_mini/rules.mk69
-rw-r--r--keyboards/handwired/terminus_mini/terminus_mini.c43
-rw-r--r--keyboards/handwired/terminus_mini/terminus_mini.h40
8 files changed, 740 insertions, 0 deletions
diff --git a/keyboards/handwired/terminus_mini/config.h b/keyboards/handwired/terminus_mini/config.h
new file mode 100644
index 0000000000..5e32cbaf0a
--- /dev/null
+++ b/keyboards/handwired/terminus_mini/config.h
@@ -0,0 +1,190 @@
+/*
+Copyright 2017 James Morgan <ja.morgan1@outlook.com>
+
+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/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER James Morgan
+#define PRODUCT terminus_mini
+#define DESCRIPTION A custom keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 12
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { B5, B4, D7, D6 }
+#define MATRIX_COL_PINS { B0, D0, D5, B6, D4, C7, F7, F6, F5, F4, F1, F0 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+//define tapping-toggle count
+#define TAPPING_TOGGLE 1
+
+//define maximum duration of hold required to register a tap vs hold default is 200
+#define TAPPING_TERM 150 //reduce time required so fast typing doesn't disrupt
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * rules.mk for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+#endif
diff --git a/keyboards/handwired/terminus_mini/keymaps/default/config.h b/keyboards/handwired/terminus_mini/keymaps/default/config.h
new file mode 100644
index 0000000000..f52a97bbc8
--- /dev/null
+++ b/keyboards/handwired/terminus_mini/keymaps/default/config.h
@@ -0,0 +1,24 @@
+/* Copyright 2017 REPLACE_WITH_YOUR_NAME
+ *
+ * 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/>.
+ */
+
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+// place overrides here
+
+#endif
diff --git a/keyboards/handwired/terminus_mini/keymaps/default/keymap.c b/keyboards/handwired/terminus_mini/keymaps/default/keymap.c
new file mode 100644
index 0000000000..5227cb6a99
--- /dev/null
+++ b/keyboards/handwired/terminus_mini/keymaps/default/keymap.c
@@ -0,0 +1,218 @@
+/* Copyright 2017 MogranJM
+ *
+ * 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/>.
+ */
+#include "terminus_mini.h"
+#include "action_layer.h"
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+#endif
+#include "eeconfig.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 terminus_mini_layers {
+ _COLEMAK,
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _FUNCTION,
+ _MOUSE,
+ _ADJUST,
+};
+
+enum terminus_mini_keycodes {
+ COLEMAK = SAFE_RANGE,
+ QWERTY,
+ LOWER,
+ RAISE,
+ FUNCTION,
+ MOUSE,
+ ADJUST,
+};
+
+ // Enable these functions using FUNC(n) macro.
+ const uint16_t PROGMEM fn_actions[] = { //ACTION_LAYER_TAP_TOGGLE requires that number of taps be defined in *config.h* - default set to 5
+ [0] = ACTION_LAYER_TAP_KEY(_LOWER, KC_SPC), //Hold for momentary Lower layer, Tap for Space,
+ [1] = ACTION_LAYER_TAP_KEY(_RAISE, KC_ENT), //Hold for momentary Mouse layer, Tap for Enter,
+ [2] = ACTION_LAYER_TAP_TOGGLE(_LOWER), //Hold for momentary Lower, Tap for toggle Lower
+ [3] = ACTION_LAYER_TAP_TOGGLE(_MOUSE), //Hold for momentary Mouse, Tap for toggle Mouse
+ [4] = ACTION_LAYER_MOMENTARY(_FUNCTION), //Hold for momentary Function
+ };
+#define SPC_LW FUNC(0)
+#define ENT_RS FUNC(1)
+#define LWR FUNC(2)
+#define MSE FUNC(3)
+#define FNC FUNC(4)
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Colemak -
+ * ,----------------------------------------------------------------------------------.
+ * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Del |
+ * |-----+------+------+------+------+-------------+------+------+------+------+------|
+ * | BS | A | R | S | T | D | H | N | E | I | O | " |
+ * |-----+------+------+------+------+-------------+------+------+------+------+------|
+ * | LSPO| Z | X | C | V | B | K | M | , | . | / | RSPC |
+ * |-----+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl| LGUI | LAlt | Lower| SpaceLW | RSEnter | Fn | Mouse| Menu | Ctrl |
+ * `----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = TERMINUS_MINI(
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL , \
+ KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
+ KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, \
+ KC_LCTL, KC_LGUI, KC_LALT, LWR, SPC_LW, ENT_RS, FNC, MSE, KC_APP, KC_RCTL \
+ ),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | PgUp | Home | Up | End | / | 7 | 8 | 9 | * | | Del |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | BS | PgDn | Left | Down |Right | - | 4 | 5 | 6 | + | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | LSPO | Z | X | C | V | = | 1 | 2 | 3 | Enter| | RSPC |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | LGUI | Alt | Lower| Space/Lower | 0 | . | Fn | Menu | Ctrl |
+ * `-----------------------------------------------------------------------------------'
+ Want to add tap-dance function to 0 key: Tap=0, doubleTap=Ent
+ */
+
+[_LOWER] = TERMINUS_MINI(
+ KC_TAB, KC_PGUP, KC_HOME, KC_UP, KC_END, KC_PSLS, KC_7, KC_8, KC_9, KC_PAST, XXXXXXX, _______, \
+ _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_MINS, KC_4, KC_5, KC_6, KC_PPLS, XXXXXXX, _______, \
+ _______, _______, _______, _______, _______, KC_EQL, KC_1, KC_2, KC_3, KC_PENT, XXXXXXX, _______, \
+ _______, _______, _______, _______, _______, KC_0, KC_DOT, FNC, _______, _______ \
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | ! | @ | # | $ | % | ^ | & | * | - | + | Del |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | BS | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | " |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | LSPO | | | { | [ | ` | \ | ] | } | . | ? | RSPC |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | LGUI | Alt | | Space/Lower | Raise/Enter | Fn | Mouse| Menu | Ctrl |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+[_RAISE] = TERMINUS_MINI(
+ KC_ESC, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_MINS, KC_EQL, _______, \
+ _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, \
+ _______, XXXXXXX, XXXXXXX, KC_LCBR, KC_LBRC, KC_GRV, KC_BSLS, KC_RBRC, KC_RCBR, KC_DOT, KC_SLSH, _______, \
+ _______, _______, _______, _______, SPC_LW, ENT_RS, FNC, MSE, _______, _______ \
+ ),
+
+/*Function
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | Mute | Vol- | Vol+ | | RESET| POWER| F1 | F2 | F3 | F4 | Ins |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Caps | Stop | |<< | >/|| | >>| | | | F5 | F6 | F7 | F8 |PrtSc |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | LSOB | | | | | | | F9 | F10 | F11 | F12 |ScrLk |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | LGUI | Alt | | Space/Lower | Enter/Raise | Fn | | |PsBrk |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+[_FUNCTION] = TERMINUS_MINI(
+ _______, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, RESET, KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_INS , \
+ KC_CAPS, KC_MSTP, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX, KC_F5, KC_F6, KC_F7, KC_F8, KC_PSCR, \
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_F9, KC_F10, KC_F11, KC_F12, KC_SLCK, \
+ _______, _______, _______, _______, _______, _______, FNC, _______, _______, KC_PAUS \
+ ),
+
+/* MOUSE
+ * ,---------------------------------------------------------------------------------------.
+ * | Esc | WhlU | WhlL | MsUp | WhlR | | | M1 | M2 | M3 | | |
+ * |------+-------+------+-------+------+------+------+-------+-------+------+------+------|
+ * | | WhlD | MsL | MsDn | MsR | | |LClick |RClick | | | |
+ * |------+-------+------+-------+------+------+------+-------+-------+------+------+------|
+ * | LSPO | | | | | | | | | | | RSCB |
+ * |------+-------+------+-------+------+------+------+-------+-------+------+------+------|
+ * | Ctrl | | | | Sensitivity | Sensitivity | |MOUSE | | Ctrl |
+ * `---------------------------------------------------------------------------------------'
+ */
+
+[_MOUSE] = TERMINUS_MINI(
+ KC_ESC, KC_WH_U, KC_WH_L, KC_MS_U, KC_WH_R, XXXXXXX, XXXXXXX, KC_BTN3, KC_BTN4, KC_BTN5, XXXXXXX, XXXXXXX, \
+ KC_BSPC, KC_WH_D, KC_MS_L, KC_MS_D, KC_MS_R, XXXXXXX, XXXXXXX, KC_BTN1, KC_BTN2, XXXXXXX, XXXXXXX, XXXXXXX, \
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_RSPC, \
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, KC_ACL1, KC_ACL0, XXXXXXX, MSE, XXXXXXX, KC_RCTL \
+ ),
+
+};
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case COLEMAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_colemak, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_COLEMAK);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/handwired/terminus_mini/keymaps/default/readme.md b/keyboards/handwired/terminus_mini/keymaps/default/readme.md
new file mode 100644
index 0000000000..66ca566ed6
--- /dev/null
+++ b/keyboards/handwired/terminus_mini/keymaps/default/readme.md
@@ -0,0 +1,122 @@
+Copyright 2017 James Morgan <ja.morgan1@outlook.com>
+
+#MogranJM's terminus_mini layout - A handwired keyboard inspired by the UniKeyboard Terminus Mini 2.
+
+This keymap is modified from the Planck default layout. Credit for the layout name goes to UniKeyboard & reddit's /u/blahlicus)
+
+The terminus_mini is a handwired 4x12 ortholinear keyboard with two 2U thumb bar keys. The microcontroller is a Teensy 2.0
+
+The TERMINUS_MINI layout (../../../terminus_mini/terminus_mini.h) is handwired and the 2U keys are handled using KC_NO to detail that two columns do not have a 4th column.
+
+> .----------------------------------------. .-----------------------------------------. \
+> | Tab | Q | W | F | P | G | | J | L | U | Y | ; | Del | \
+> |-----+------+------+------+------+------| |------+------+------+------+------+------| \
+> | BS | A | R | S | T | D | | H | N | E | I | O | ' | \
+> |-----+------+------+------+------+------| |------+------+------+------+------+------| \
+> | LSPO| Z | X | C | V | B | | K | M | , | \. | / | RSPC | \
+> |-----+------+------+------+------+------| |------+------+------+------+------+------| \
+> | Ctrl| LGUI | LAlt | Lower| Space/Lower | | Enter/Raise | Fn | Mouse| Menu | Ctrl | \
+> '----------------------------------------' '-----------------------------------------' \
+\
+> [_COLEMAK] = KEYMAP( \
+> KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL , \
+> KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
+> KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, \
+> KC_LCTL, KC_LGUI, KC_LALT, LWR, SPC_LW, SPC_LW, ENT_RS, ENT_RS, FNC, MSE, KC_APP, KC_RCTL \
+> ),
+
+##Layers
+
+### Base Layer - Colemak
+ * The base layout is Colemak. Since the CapsLock key is replaced with BackSpace, this layout has the delete key in the traditional backspace location.
+ * QWERTY and Dvorak layers have been removed from the keymap that was initially developed from the default Planck keymap.
+ * I've implemented COLEMAK = SAFE_RANGE when enumerating the custom_keycodes, but I don't actually know what this does...
+
+ * Space cadet is implemented in the shift keys (hold for shift, tap for respective parentheses)
+ * I never find myself using the right-modifiers on a standard keyboard, so I've only implemented LGUI and LALT. I have intentions of improving my use of the ctrl key in correct hand alternation, so CTRL is implemented in both outside corners of the home row.
+
+
+ #### Layer Shifting
+ * The 4th key on the bottom row of the left hand PCB is a **TAP_TOGGLE** macro for the *LOWER* layer
+ * The left 2U key is a **TAP_KEY** macro - Hold for momentary *LOWER* layer, Tap for Space.
+ * The right 2U key is a **TAP_KEY** macro - Hold for momentary *RAISE* layer, Tap for Enter
+ * The 2nd key on the bottom row of the right hand PCB is a **LAYER_MOMENTARY** for the *FUNCTION* layer
+ * The 3rd key on the bottom row of the right hand PCB is a **TAP_TOGGLE** macro for the *MOUSE* layer
+
+### LOWER - Numpad & Navigation keys
+
+ ,-----------------------------------------. .-----------------------------------------. \
+ | Tab | PgUp | Home | Up | End | | | 7 | 8 | 9 | \+ | | Del | \
+ |------+------+------+------+------+------| |------+------+------+------+------+------| \
+ | BS | PgDn | Left | Down |Right | | | 4 | 5 | 6 | Enter| | ' | \
+ |------+------+------+------+------+------| |------+------+------+------+------+------| \
+ | LSPO | Z | X | C | V | | | 1 | 2 | 3 | Enter| | RSPC | \
+ |------+------+------+------+-------------| |-------------+------+------+------+------| \
+ | Ctrl | LGUI | Alt | LOWER| Space/Lower | | 0 | \. | Fn | Menu | Ctrl | \
+ '-----------------------------------------' '-----------------------------------------' \
+
+ * The *LOWER* layer contains a navigation cluster on the left hand and a numpad on the right. This layer is momentary when the left thumb-bar or LOWER key is held and toggled on/off when the LOWER key is tapped.
+
+ * The Navigation cluster is offset to the right compared to the traditional **WASD** nav cluster. With this implementation, you don't need to move your hand from the home position when navigating. Page Up & Down keys are found on the far left of the cluster.
+
+
+ * All unused (blank on the above keymap) keys are locked out using the XXXXXXX filler (KC_NO), all modifiers (edge |_| keys \[except 0, \. & Fn\] on the above keymap) and the ZXCV cluster are transparent (_______) to the Base layer.
+
+ - [] TO DO!! - It would be nice to have a **TAP_DANCE_DOUBLE** implementation whereby a double tap of the right 2U key sends KC_PENT
+ * Couldn't get this to work in Rev1, produced an error in the Make process.
+ * When this is done, I can remove the clunky double Enter on the 4th column of the right hand PCB.
+
+### RAISE - Symbol Layer
+
+ > ,-----------------------------------------. .-----------------------------------------. \
+ > | Esc | | | | | | | | | | | | Del | \
+ > |------+------+------+------+------+------| |------+------+------+------+------+------| \
+ > | BS | \! | @ | \# | $ | % | | ^ | & | \* | \- | \+ | ' | \
+ > |------+------+------+------+------+------| |------+------+------+------+------+------| \
+ > | LSBO | | | \{ | \[ | \` | | | | \] | \} | \. | ? | RSBC | \
+ > |------+------+------+------+------+------| |------+------+------+------+------+------| \
+ > | Ctrl | LGUI | Alt | | Space/Lower | | Enter/Raise | Fn | Mouse| Menu | Ctrl | \
+ > '-----------------------------------------' '-----------------------------------------' \
+
+ * The *RAISE* layer contains the symbols. This layer is momentary when the right thumb bar is held.
+ * Standard symbols can be found on the home row, in the traditional number row order as they occur on a standard keyboard.
+ * Shifted symbols can be found on the second-from bottom row, abovee the bars - these include brackets, braces, grave and pipe keys.
+ * At this stage, you need to shift to get to the Tilde key. I'd like to remove the shift requirement as I've done with the Pipe, but we'll see.
+ * The Terminus_Mini implements the symbols on the top row, with numbers implemented on the home row. Implementing a third set of number keys (Base, *LOWER*, *RAISE*) in this keymap is probably overkill, but the current *RAISE* layout replicates the standard number row, so I don't see reason to change it.
+ * The bottom row of this layer is a replication of that of the Base layer, except that the **TAP_TOGGLE** *LOWER* key is blocked with **XXXXXXX**.
+
+### FUNCTION - Function & Media keys
+
+ > ,-----------------------------------------. .-----------------------------------------. \
+ > | Esc | Mute | Vol- | Vol+ | | RESET| | POWER| | | | | Ins | \
+ > |------+------+------+------+------+------| |------+------+------+------+------+------| \
+ > | Caps | Stop | |<< | >/|| | >>| | | | | | | | |PrtSc | \
+ > |------+------+------+------+------+------| |------+------+------+------+------+------| \
+ > | LSOB | | | | | | | | | | | |ScrLk | \
+ > |------+------+------+------+------+------| |------+------+------+------+------+------| \
+ > | Ctrl | LGUI | Alt | | Space/Lower | | Enter/Raise | Fn | Mouse| |PsBrk | \
+ > '-----------------------------------------' '-----------------------------------------' \
+
+ * The *FUNCTION* layer contains media keys as well as the F-row. This layer is momentary and requires Fn to be held.
+ * The media cluster is based on the nav cluster in the *LOWER* layer, with RW, PP & FF in the Left, Down & Right positions.
+ * Mute, and Vol +/- are next to each other in ascending (L->R) volume order, Stop is below Mute.
+ * Insert, Print Screen, Scroll Lock & Pause Break are all implemented on the far right column.
+ I don't really use these keys so their position is not optimised.
+ * Caps lock is implemented on this layer, in the traditional position, in place of BackSpace on the Base layer.
+ * The RESET key will reset the Teensy for flashing and the Power key will initiate a shutdown of the PC. I've placed these in the far-reach index positions so that they are least likely to be pressed on accident. The power key is particularly dangerous, so I've placed it conciously on the right hand so that it becomes very awkward to activate with one hand (Fn needs to be held with the middle finger at the same time)
+
+### MOUSE - Mouse keys: The functionality of this layer is not as optimal as using a true mouse, generally slower but will work in a pinch.
+ > ,----------------------------------------. .----------------------------------------.
+ > | Tab | WhlU | WhlL | MsUp | WhlR | | | | M3 | M4 | M5 | | | \
+ > |------+------+------+------+------+-----| |-----+------+------+------+------+------| \
+ > | | WhlD | MsL | MsDn | MsR | | | |LClick|RClick| | | | \
+ > |------+------+------+------+------+-----| |-----+------+------+------+------+------| \
+ > | LSPO | | | | | | | | | | | | RSCB | \
+ > |------+------+------+------+------+-----| |-----+------+------+------+------+------| \
+ > | Ctrl | | | |Sensitivity | | Sensitivity| |MOUSE | | Ctrl | \
+ > '----------------------------------------' '----------------------------------------' \
+
+ * The *MOUSE* layer contains keys replicating functions found on the mouse.
+ * The navigation cluster (Up, Down, Left, Right) is a replication of the Navigation cluster on the *LOWER* layer. The scroll keys are nalagous to the Page Up & Down keys.
+ *) The primary click (right & left) buttons are on the right home row (index & middle fingers)
+ * Secondary click buttons are above the standard keys (M3/Wheel click, M4, M5) but I do not use this function. \ No newline at end of file
diff --git a/keyboards/handwired/terminus_mini/keymaps/default/rules.mk b/keyboards/handwired/terminus_mini/keymaps/default/rules.mk
new file mode 100644
index 0000000000..1485c08320
--- /dev/null
+++ b/keyboards/handwired/terminus_mini/keymaps/default/rules.mk
@@ -0,0 +1,34 @@
+# Copyright 2013 Jun Wako <wakojun@gmail.com>
+#
+# 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/>.
+
+
+# QMK Build Options
+# change to "no" to disable the options, or define them in the rules.mk in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+TAP_DANCE_ENABLE = no # Enable Tap Dance
diff --git a/keyboards/handwired/terminus_mini/rules.mk b/keyboards/handwired/terminus_mini/rules.mk
new file mode 100644
index 0000000000..d7acbf7d52
--- /dev/null
+++ b/keyboards/handwired/terminus_mini/rules.mk
@@ -0,0 +1,69 @@
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=512
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+TAP_DANCE_ENABLE = no # Enable tap dance
diff --git a/keyboards/handwired/terminus_mini/terminus_mini.c b/keyboards/handwired/terminus_mini/terminus_mini.c
new file mode 100644
index 0000000000..58edca7687
--- /dev/null
+++ b/keyboards/handwired/terminus_mini/terminus_mini.c
@@ -0,0 +1,43 @@
+/* Copyright 2017 James Morgan <ja.morgan1@outlook.com>
+ *
+ * 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/>.
+ */
+#include "terminus_mini.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/handwired/terminus_mini/terminus_mini.h b/keyboards/handwired/terminus_mini/terminus_mini.h
new file mode 100644
index 0000000000..44590a191e
--- /dev/null
+++ b/keyboards/handwired/terminus_mini/terminus_mini.h
@@ -0,0 +1,40 @@
+/* Copyright 2017 James Morgan <ja.morgan1@outlook.com>
+ *
+ * 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/>.
+ */
+#ifndef TERMINUS_MINI_H
+#define TERMINUS_MINI_H
+
+#include "quantum.h"
+
+// This a shortcut to help you visually see your layout.
+// The following is an example using the Terminus Mini layout
+// The first section contains all of the arguments
+// The second converts the arguments into a two-dimensional array
+#define TERMINUS_MINI( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
+ k30, k31, k32, k33, k35, k37, k38, k39, k3a, k3b \
+) \
+{ \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \
+ { k30, k31, k32, k33, KC_NO, k35, KC_NO, k37, k38, k39, k3a, k3b } \
+}
+
+#define KC_ KC_TRNS
+
+#endif \ No newline at end of file