summaryrefslogtreecommitdiff
path: root/keyboards/keyhive
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/keyhive')
-rw-r--r--keyboards/keyhive/absinthe/absinthe.c17
-rw-r--r--keyboards/keyhive/absinthe/absinthe.h68
-rw-r--r--keyboards/keyhive/absinthe/config.h99
-rw-r--r--keyboards/keyhive/absinthe/info.json148
-rw-r--r--keyboards/keyhive/absinthe/keymaps/ansi/keymap.c32
-rw-r--r--keyboards/keyhive/absinthe/keymaps/ansi/readme.md3
-rw-r--r--keyboards/keyhive/absinthe/keymaps/default/keymap.c43
-rw-r--r--keyboards/keyhive/absinthe/keymaps/default/readme.md6
-rw-r--r--keyboards/keyhive/absinthe/keymaps/via/keymap.c70
-rw-r--r--keyboards/keyhive/absinthe/keymaps/via/rules.mk2
-rw-r--r--keyboards/keyhive/absinthe/readme.md15
-rw-r--r--keyboards/keyhive/absinthe/rules.mk20
-rw-r--r--keyboards/keyhive/ergosaurus/config.h144
-rw-r--r--keyboards/keyhive/ergosaurus/ergosaurus.c17
-rw-r--r--keyboards/keyhive/ergosaurus/ergosaurus.h40
-rw-r--r--keyboards/keyhive/ergosaurus/info.json80
-rw-r--r--keyboards/keyhive/ergosaurus/keymaps/default/keymap.c47
-rw-r--r--keyboards/keyhive/ergosaurus/keymaps/default/readme.md3
-rw-r--r--keyboards/keyhive/ergosaurus/keymaps/via/keymap.c51
-rw-r--r--keyboards/keyhive/ergosaurus/keymaps/via/rules.mk2
-rw-r--r--keyboards/keyhive/ergosaurus/readme.md15
-rw-r--r--keyboards/keyhive/ergosaurus/rules.mk20
-rwxr-xr-xkeyboards/keyhive/honeycomb/config.h45
-rwxr-xr-xkeyboards/keyhive/honeycomb/honeycomb.c76
-rwxr-xr-xkeyboards/keyhive/honeycomb/honeycomb.h32
-rw-r--r--keyboards/keyhive/honeycomb/info.json30
-rwxr-xr-xkeyboards/keyhive/honeycomb/keymaps/default/keymap.c91
-rwxr-xr-xkeyboards/keyhive/honeycomb/matrix.c190
-rwxr-xr-xkeyboards/keyhive/honeycomb/readme.md20
-rwxr-xr-xkeyboards/keyhive/honeycomb/rules.mk23
-rw-r--r--keyboards/keyhive/lattice60/config.h98
-rw-r--r--keyboards/keyhive/lattice60/info.json17
-rw-r--r--keyboards/keyhive/lattice60/keymaps/default/config.h20
-rw-r--r--keyboards/keyhive/lattice60/keymaps/default/keymap.c40
-rw-r--r--keyboards/keyhive/lattice60/keymaps/default/readme.md5
-rw-r--r--keyboards/keyhive/lattice60/keymaps/default_hhkb/config.h20
-rw-r--r--keyboards/keyhive/lattice60/keymaps/default_hhkb/keymap.c40
-rw-r--r--keyboards/keyhive/lattice60/keymaps/default_hhkb/readme.md5
-rw-r--r--keyboards/keyhive/lattice60/keymaps/emdarcher/config.h20
-rw-r--r--keyboards/keyhive/lattice60/keymaps/emdarcher/keymap.c48
-rw-r--r--keyboards/keyhive/lattice60/keymaps/emdarcher/readme.md5
-rw-r--r--keyboards/keyhive/lattice60/lattice60.c37
-rw-r--r--keyboards/keyhive/lattice60/lattice60.h64
-rw-r--r--keyboards/keyhive/lattice60/readme.md21
-rw-r--r--keyboards/keyhive/lattice60/rules.mk23
-rw-r--r--keyboards/keyhive/navi10/.noci0
-rw-r--r--keyboards/keyhive/navi10/info.json10
-rw-r--r--keyboards/keyhive/navi10/keymaps/default/keymap.c131
-rw-r--r--keyboards/keyhive/navi10/keymaps/default/readme.md11
-rw-r--r--keyboards/keyhive/navi10/keymaps/default/rules.mk1
-rw-r--r--keyboards/keyhive/navi10/keymaps/devdev/config.h35
-rw-r--r--keyboards/keyhive/navi10/keymaps/devdev/keymap.c263
-rw-r--r--keyboards/keyhive/navi10/keymaps/devdev/rules.mk2
-rw-r--r--keyboards/keyhive/navi10/keymaps/emdarcher/keymap.c182
-rw-r--r--keyboards/keyhive/navi10/keymaps/emdarcher/readme.md16
-rw-r--r--keyboards/keyhive/navi10/keymaps/emdarcher/rules.mk1
-rw-r--r--keyboards/keyhive/navi10/readme.md19
-rw-r--r--keyboards/keyhive/navi10/rev0/.noci0
-rw-r--r--keyboards/keyhive/navi10/rev0/config.h50
-rw-r--r--keyboards/keyhive/navi10/rev0/rev0.c30
-rw-r--r--keyboards/keyhive/navi10/rev0/rev0.h34
-rw-r--r--keyboards/keyhive/navi10/rev0/rules.mk18
-rw-r--r--keyboards/keyhive/navi10/rev2/.noci0
-rw-r--r--keyboards/keyhive/navi10/rev2/config.h50
-rw-r--r--keyboards/keyhive/navi10/rev2/rev2.c30
-rw-r--r--keyboards/keyhive/navi10/rev2/rev2.h34
-rw-r--r--keyboards/keyhive/navi10/rev2/rules.mk18
-rw-r--r--keyboards/keyhive/navi10/rev3/config.h50
-rw-r--r--keyboards/keyhive/navi10/rev3/rev3.c30
-rw-r--r--keyboards/keyhive/navi10/rev3/rev3.h34
-rw-r--r--keyboards/keyhive/navi10/rev3/rules.mk18
-rw-r--r--keyboards/keyhive/navi10/rules.mk1
-rw-r--r--keyboards/keyhive/opus/config.h45
-rw-r--r--keyboards/keyhive/opus/info.json59
-rw-r--r--keyboards/keyhive/opus/keymaps/default/keymap.c51
-rw-r--r--keyboards/keyhive/opus/keymaps/default/readme.md17
-rw-r--r--keyboards/keyhive/opus/keymaps/thefoxcodes/config.h21
-rw-r--r--keyboards/keyhive/opus/keymaps/thefoxcodes/keymap.c94
-rw-r--r--keyboards/keyhive/opus/keymaps/thefoxcodes/readme.md1
-rw-r--r--keyboards/keyhive/opus/keymaps/thefoxcodes/rules.mk1
-rw-r--r--keyboards/keyhive/opus/opus.c17
-rw-r--r--keyboards/keyhive/opus/opus.h39
-rw-r--r--keyboards/keyhive/opus/readme.md15
-rw-r--r--keyboards/keyhive/opus/rules.mk18
-rw-r--r--keyboards/keyhive/smallice/config.h86
-rw-r--r--keyboards/keyhive/smallice/info.json10
-rw-r--r--keyboards/keyhive/smallice/keymaps/default/keymap.c32
-rw-r--r--keyboards/keyhive/smallice/keymaps/default/readme.md3
-rw-r--r--keyboards/keyhive/smallice/keymaps/via/keymap.c44
-rw-r--r--keyboards/keyhive/smallice/keymaps/via/readme.md3
-rw-r--r--keyboards/keyhive/smallice/keymaps/via/rules.mk2
-rw-r--r--keyboards/keyhive/smallice/readme.md21
-rw-r--r--keyboards/keyhive/smallice/rules.mk18
-rw-r--r--keyboards/keyhive/smallice/smallice.c17
-rw-r--r--keyboards/keyhive/smallice/smallice.h40
-rw-r--r--keyboards/keyhive/southpole/config.h45
-rw-r--r--keyboards/keyhive/southpole/info.json95
-rw-r--r--keyboards/keyhive/southpole/keymaps/default/keymap.c20
-rw-r--r--keyboards/keyhive/southpole/keymaps/foobeard/keymap.c72
-rw-r--r--keyboards/keyhive/southpole/readme.md13
-rw-r--r--keyboards/keyhive/southpole/rules.mk18
-rw-r--r--keyboards/keyhive/southpole/southpole.c1
-rw-r--r--keyboards/keyhive/southpole/southpole.h18
-rw-r--r--keyboards/keyhive/uno/config.h21
-rw-r--r--keyboards/keyhive/uno/info.json10
-rw-r--r--keyboards/keyhive/uno/keymaps/copypasta/keymap.c85
-rw-r--r--keyboards/keyhive/uno/keymaps/copypasta/readme.md4
-rw-r--r--keyboards/keyhive/uno/keymaps/default/keymap.c63
-rw-r--r--keyboards/keyhive/uno/keymaps/default/readme.md5
-rw-r--r--keyboards/keyhive/uno/keymaps/demo/keymap.c123
-rw-r--r--keyboards/keyhive/uno/keymaps/demo/readme.md4
-rw-r--r--keyboards/keyhive/uno/readme.md34
-rw-r--r--keyboards/keyhive/uno/rev1/config.h74
-rw-r--r--keyboards/keyhive/uno/rev1/rev1.h25
-rw-r--r--keyboards/keyhive/uno/rev1/rules.mk18
-rw-r--r--keyboards/keyhive/uno/rev2/config.h49
-rw-r--r--keyboards/keyhive/uno/rev2/rev2.h25
-rw-r--r--keyboards/keyhive/uno/rev2/rules.mk19
-rw-r--r--keyboards/keyhive/uno/rules.mk1
-rw-r--r--keyboards/keyhive/uno/uno.c17
-rw-r--r--keyboards/keyhive/uno/uno.h25
-rw-r--r--keyboards/keyhive/ut472/config.h59
-rw-r--r--keyboards/keyhive/ut472/info.json10
-rwxr-xr-xkeyboards/keyhive/ut472/keymaps/annihilator6000/UT472_Annihilator6000_Configurator_file.json1
-rw-r--r--keyboards/keyhive/ut472/keymaps/annihilator6000/config.h19
-rw-r--r--keyboards/keyhive/ut472/keymaps/annihilator6000/keymap.c256
-rw-r--r--keyboards/keyhive/ut472/keymaps/annihilator6000/readme.md15
-rw-r--r--keyboards/keyhive/ut472/keymaps/default/keymap.c100
-rw-r--r--keyboards/keyhive/ut472/keymaps/default/readme.md5
-rw-r--r--keyboards/keyhive/ut472/keymaps/hvp/config.h20
-rw-r--r--keyboards/keyhive/ut472/keymaps/hvp/keymap.c67
-rw-r--r--keyboards/keyhive/ut472/keymaps/hvp/readme.md10
-rw-r--r--keyboards/keyhive/ut472/keymaps/hvp/rules.mk1
-rw-r--r--keyboards/keyhive/ut472/keymaps/stefanopace/config.h21
-rw-r--r--keyboards/keyhive/ut472/keymaps/stefanopace/keymap.c185
-rw-r--r--keyboards/keyhive/ut472/keymaps/stefanopace/readme.md6
-rw-r--r--keyboards/keyhive/ut472/keymaps/stefanopace/rules.mk7
-rw-r--r--keyboards/keyhive/ut472/keymaps/tucznak/config.h16
-rw-r--r--keyboards/keyhive/ut472/keymaps/tucznak/keymap.c111
-rw-r--r--keyboards/keyhive/ut472/keymaps/tucznak/readme.md5
-rw-r--r--keyboards/keyhive/ut472/keymaps/tucznak/rules.mk17
-rw-r--r--keyboards/keyhive/ut472/keymaps/via/keymap.c34
-rw-r--r--keyboards/keyhive/ut472/keymaps/via/rules.mk2
-rw-r--r--keyboards/keyhive/ut472/readme.md20
-rw-r--r--keyboards/keyhive/ut472/rules.mk18
-rw-r--r--keyboards/keyhive/ut472/ut472.c1
-rw-r--r--keyboards/keyhive/ut472/ut472.h33
147 files changed, 5557 insertions, 0 deletions
diff --git a/keyboards/keyhive/absinthe/absinthe.c b/keyboards/keyhive/absinthe/absinthe.c
new file mode 100644
index 0000000000..502139ed0c
--- /dev/null
+++ b/keyboards/keyhive/absinthe/absinthe.c
@@ -0,0 +1,17 @@
+/* Copyright 2020 cfbender
+ *
+ * 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 "absinthe.h"
diff --git a/keyboards/keyhive/absinthe/absinthe.h b/keyboards/keyhive/absinthe/absinthe.h
new file mode 100644
index 0000000000..890aff643e
--- /dev/null
+++ b/keyboards/keyhive/absinthe/absinthe.h
@@ -0,0 +1,68 @@
+/* Copyright 2020 cfbender
+ *
+ * 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
+
+#define XXX KC_NO
+
+#include "quantum.h"
+
+/* This is a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+#define LAYOUT_default( \
+ K00, K10, K01, K11, K02, K12, K03, K13, K04, K14, K05, K15, K06, K16, K07, K17, K08, K18, \
+ K20, K21, K31, K22, K32, K23, K33, K24, K34, K25, K35, K26, K36, K27, K37, K28, K38, \
+ K40, K41, K51, K42, K52, K43, K53, K44, K54, K45, K55, K46, K56, \
+ K60, K61, K71, K62, K72, K63, K73, K64, K74, K65, K75, K66, K67, K68, \
+ K80, K81, K82, K83, K76, K86, K87, K77, K88, K78 \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08 },\
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18 },\
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28 },\
+ { XXX, K31, K32, K33, K34, K35, K36, K37, K38 },\
+ { K40, K41, K42, K43, K44, K45, K46, XXX, XXX },\
+ { XXX, K51, K52, K53, K54, K55, K56, XXX, XXX },\
+ { K60, K61, K62, K63, K64, K65, K66, K67, K68 },\
+ { XXX, K71, K72, K73, K74, K75, K76, K77, K78 },\
+ { K80, K81, K82, K83, XXX, XXX, K86, K87, K88 } \
+}
+
+#define LAYOUT_ansi( \
+ K00, K10, K01, K11, K02, K12, K03, K13, K04, K14, K05, K15, K06, K16, K17, K08, K18, \
+ K20, K21, K31, K22, K32, K23, K33, K24, K34, K25, K35, K26, K36, K27, K37, K28, K38, \
+ K40, K41, K51, K42, K52, K43, K53, K44, K54, K45, K55, K46, K56, \
+ K60, K61, K71, K62, K72, K63, K73, K64, K74, K65, K75, K66, K68, \
+ K80, K81, K82, K83, K85, K76, K86, K87, K77, K88, K78 \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, XXX, K08 },\
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18 },\
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28 },\
+ { XXX, K31, K32, K33, K34, K35, K36, K37, K38 },\
+ { K40, K41, K42, K43, K44, K45, K46, XXX, XXX },\
+ { XXX, K51, K52, K53, K54, K55, K56, XXX, XXX },\
+ { K60, K61, K62, K63, K64, K65, K66, XXX, K68 },\
+ { XXX, K71, K72, K73, K74, K75, K76, K77, K78 },\
+ { K80, K81, K82, K83, XXX, K85, K86, K87, K88 } \
+}
+
diff --git a/keyboards/keyhive/absinthe/config.h b/keyboards/keyhive/absinthe/config.h
new file mode 100644
index 0000000000..d6acd350cc
--- /dev/null
+++ b/keyboards/keyhive/absinthe/config.h
@@ -0,0 +1,99 @@
+/*
+Copyright 2020 cfbender
+
+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 "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xB00B
+#define PRODUCT_ID 0xFEED
+#define DEVICE_VER 0x0001
+#define MANUFACTURER cfbender
+#define PRODUCT absinthe
+
+/* key matrix size */
+#define MATRIX_ROWS 9
+#define MATRIX_COLS 9
+
+/*
+ * 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 { D2, D1, B6, D4, C6, D7, E6, B4, B5 }
+#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2, D3, D0 }
+#define UNUSED_PINS
+
+#define ENCODERS_PAD_A { B7 }
+#define ENCODERS_PAD_B { D5 }
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/*
+ * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
+ */
+//#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+#define RGB_DI_PIN B0
+#ifdef RGB_DI_PIN
+ #define RGBLED_NUM 32
+ #define RGBLIGHT_HUE_STEP 8
+ #define RGBLIGHT_SAT_STEP 8
+ #define RGBLIGHT_VAL_STEP 8
+ #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
+ #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
+/*== all animations enable ==*/
+// #define RGBLIGHT_ANIMATIONS
+// /*== or choose animations ==*/
+ #define RGBLIGHT_EFFECT_BREATHING
+ #define RGBLIGHT_EFFECT_RAINBOW_MOOD
+ #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+// #define RGBLIGHT_EFFECT_SNAKE
+// #define RGBLIGHT_EFFECT_KNIGHT
+// #define RGBLIGHT_EFFECT_CHRISTMAS
+ #define RGBLIGHT_EFFECT_STATIC_GRADIENT
+// #define RGBLIGHT_EFFECT_RGB_TEST
+// #define RGBLIGHT_EFFECT_ALTERNATING
+// /*== customize breathing effect ==*/
+// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
+// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
+// /*==== use exp() and sin() ====*/
+// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
+// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
+#endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* 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
diff --git a/keyboards/keyhive/absinthe/info.json b/keyboards/keyhive/absinthe/info.json
new file mode 100644
index 0000000000..f92e9e10ee
--- /dev/null
+++ b/keyboards/keyhive/absinthe/info.json
@@ -0,0 +1,148 @@
+{
+ "keyboard_name": "absinthe",
+ "url": "https://github.com/cfbender/keyboards/tree/master/absinthe",
+ "maintainer": "cfbender",
+ "layouts": {
+ "LAYOUT_default": {
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"!", "x":1, "y":0},
+ {"label":"@", "x":2, "y":0},
+ {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0},
+ {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0},
+ {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0},
+ {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0},
+ {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0},
+ {"label":"|", "x":13, "y":0}, {"label":"~", "x":14, "y":0},
+ {"label":"Insert", "x":15.25, "y":0},
+ {"label":"Home", "x":16.25, "y":0},
+ {"label":"PgUp", "x":17.25, "y":0},
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"{", "x":11.5, "y":1},
+ {"label":"}", "x":12.5, "y":1},
+ {"label":"Backspace", "x":13.5, "y":1, "w":1.5},
+ {"label":"Delete", "x":15.25, "y":1},
+ {"label":"End", "x":16.25, "y":1},
+ {"label":"PgDn", "x":17.25, "y":1},
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":":", "x":10.75, "y":2},
+ {"label":"\"", "x":11.75, "y":2},
+ {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+ {"label":"Shift", "x":0, "y":3, "w":2.25},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":"<", "x":9.25, "y":3},
+ {"label":">", "x":10.25, "y":3},
+ {"label":"?", "x":11.25, "y":3},
+ {"label":"Shift", "x":12.25, "y":3, "w":1.75},
+ {"label":"MO(1)", "x":14, "y":3},
+ {"label":"\u2191", "x":16.25, "y":3},
+ {"label":"Ctrl", "x":0, "y":4, "w":1.5},
+ {"label":"Win", "x":1.5, "y":4},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.5},
+ {"x":4, "y":4, "w":7},
+ {"label":"Alt", "x":11, "y":4, "w":1.5},
+ {"label":"Win", "x":12.5, "y":4},
+ {"label":"Ctrl", "x":13.5, "y":4, "w":1.5},
+ {"label":"\u2190", "x":15.25, "y":4},
+ {"label":"\u2193", "x":16.25, "y":4}, {"label":"\u2192", "x":17.25, "y":4}]
+ },
+ "LAYOUT_ansi": {
+ "layout": [{"label":"Esc", "x":0, "y":0},
+ {"label":"!", "x":1, "y":0},
+ {"label":"@", "x":2, "y":0},
+ {"label":"#", "x":3, "y":0},
+ {"label":"$", "x":4, "y":0},
+ {"label":"%", "x":5, "y":0},
+ {"label":"^", "x":6, "y":0},
+ {"label":"&", "x":7, "y":0},
+ {"label":"*", "x":8, "y":0},
+ {"label":"(", "x":9, "y":0},
+ {"label":")", "x":10, "y":0},
+ {"label":"_", "x":11, "y":0},
+ {"label":"+", "x":12, "y":0},
+ {"label":"Backspace", "x":13, "y":0, "w":2},
+ {"label":"Insert", "x":15.25, "y":0},
+ {"label":"Home", "x":16.25, "y":0},
+ {"label":"PgUp", "x":17.25, "y":0},
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"{", "x":11.5, "y":1},
+ {"label":"}", "x":12.5, "y":1},
+ {"label":"|", "x":13.5, "y":1, "w":1.5},
+ {"label":"Delete", "x":15.25, "y":1},
+ {"label":"End", "x":16.25, "y":1},
+ {"label":"PgDn", "x":17.25, "y":1},
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":":", "x":10.75, "y":2},
+ {"label":"\"", "x":11.75, "y":2},
+ {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+ {"label":"Shift", "x":0, "y":3, "w":2.25},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":"<", "x":9.25, "y":3},
+ {"label":">", "x":10.25, "y":3},
+ {"label":"?", "x":11.25, "y":3},
+ {"label":"Shift", "x":12.25, "y":3, "w":2.75},
+ {"label":"\u2191", "x":16.25, "y":3},
+ {"label":"Ctrl", "x":0, "y":4, "w":1.25},
+ {"label":"Win", "x":1.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.25},
+ {"x":3.75, "y":4, "w":6.25},
+ {"label":"Alt", "x":10, "y":4, "w":1.25},
+ {"label":"Win", "x":11.25, "y":4, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":4, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":4, "w":1.25},
+ {"label":"\u2190", "x":15.25, "y":4},
+ {"label":"\u2193", "x":16.25, "y":4},
+ {"label":"\u2192", "x":17.25, "y":4}]
+ }
+ }
+}
diff --git a/keyboards/keyhive/absinthe/keymaps/ansi/keymap.c b/keyboards/keyhive/absinthe/keymaps/ansi/keymap.c
new file mode 100644
index 0000000000..2177f18146
--- /dev/null
+++ b/keyboards/keyhive/absinthe/keymaps/ansi/keymap.c
@@ -0,0 +1,32 @@
+/* Copyright 2020 cfbender
+ *
+ * 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 QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ansi(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ [1] = LAYOUT_ansi(
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_TOG, RGB_RMOD, RGB_MOD, RGB_HUD,RGB_HUI,RGB_SAD,RGB_SAI,RGB_VAD,RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_TRNS)
+};
diff --git a/keyboards/keyhive/absinthe/keymaps/ansi/readme.md b/keyboards/keyhive/absinthe/keymaps/ansi/readme.md
new file mode 100644
index 0000000000..e88d0cf9dd
--- /dev/null
+++ b/keyboards/keyhive/absinthe/keymaps/ansi/readme.md
@@ -0,0 +1,3 @@
+# The all ANSI keymap for absinthe
+
+![default absinthe keymap](https://i.imgur.com/td0vfz0.png)
diff --git a/keyboards/keyhive/absinthe/keymaps/default/keymap.c b/keyboards/keyhive/absinthe/keymaps/default/keymap.c
new file mode 100644
index 0000000000..e5c74366c0
--- /dev/null
+++ b/keyboards/keyhive/absinthe/keymaps/default/keymap.c
@@ -0,0 +1,43 @@
+/* Copyright 2020 cfbender
+ *
+ * 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 QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_default(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_DEL, KC_END, KC_PGDN,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ [1] = LAYOUT_default(
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_TOG, RGB_RMOD, RGB_MOD, RGB_HUD,RGB_HUI,RGB_SAD,RGB_SAI,RGB_VAD,RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_TRNS)
+};
+
+bool encoder_update_user(uint8_t index, bool clockwise) {
+ if (index == 0) { /* First encoder */
+ if (clockwise) {
+ tap_code(KC_VOLU);
+ } else {
+ tap_code(KC_VOLD);
+ }
+ }
+ return true;
+}
diff --git a/keyboards/keyhive/absinthe/keymaps/default/readme.md b/keyboards/keyhive/absinthe/keymaps/default/readme.md
new file mode 100644
index 0000000000..f9ec78d7b4
--- /dev/null
+++ b/keyboards/keyhive/absinthe/keymaps/default/readme.md
@@ -0,0 +1,6 @@
+# The default keymap for absinthe
+
+
+Tsangan HHKB style with split backspace and split right shift.
+
+![default absinthe keymap](https://i.imgur.com/9Xxx6Rd.png)
diff --git a/keyboards/keyhive/absinthe/keymaps/via/keymap.c b/keyboards/keyhive/absinthe/keymaps/via/keymap.c
new file mode 100644
index 0000000000..797d14226d
--- /dev/null
+++ b/keyboards/keyhive/absinthe/keymaps/via/keymap.c
@@ -0,0 +1,70 @@
+/* Copyright 2021 alittlepeace
+ *
+ * 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 QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_default(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_DEL, KC_END, KC_PGDN,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ [1] = LAYOUT_default(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [2] = LAYOUT_default(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [3] = LAYOUT_default(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
+
+};
+
+bool encoder_update_user(uint8_t index, bool clockwise) {
+ if (index == 0) { /* First encoder */
+ switch(get_highest_layer(layer_state)){
+ case 1:
+ if (clockwise){
+ tap_code(KC_VOLU);
+ } else{
+ tap_code(KC_VOLD);
+ }
+ break;
+ default:
+ if (clockwise) {
+ tap_code(KC_WH_D);
+ } else {
+ tap_code(KC_WH_U);
+ }
+ break;
+ }
+ }
+ return true;
+}
+
diff --git a/keyboards/keyhive/absinthe/keymaps/via/rules.mk b/keyboards/keyhive/absinthe/keymaps/via/rules.mk
new file mode 100644
index 0000000000..eb5b445ddf
--- /dev/null
+++ b/keyboards/keyhive/absinthe/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+MOUSEKEY_ENABLE = yes
diff --git a/keyboards/keyhive/absinthe/readme.md b/keyboards/keyhive/absinthe/readme.md
new file mode 100644
index 0000000000..518e13e8f0
--- /dev/null
+++ b/keyboards/keyhive/absinthe/readme.md
@@ -0,0 +1,15 @@
+# absinthe
+
+![absinthe](https://i.imgur.com/fK215Tx.jpg)
+
+A budget-friendly F-rowless TKL with a rotary encoder
+
+* Keyboard Maintainer: [cfbender](https://cfbender.design)
+* Hardware Supported: Absinthe PCB, Elite-C (for rotary encoder support - alternatively you can use a Pro Micro without an encoder)
+* Hardware Availability: [GitHub](https://github.com/cfbender/keyboards/tree/master/absinthe)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make keyhive/absinthe:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/keyhive/absinthe/rules.mk b/keyboards/keyhive/absinthe/rules.mk
new file mode 100644
index 0000000000..5b1bf3cdf3
--- /dev/null
+++ b/keyboards/keyhive/absinthe/rules.mk
@@ -0,0 +1,20 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+ENCODER_ENABLE = yes
+RGBLIGHT_ENABLE = yes
diff --git a/keyboards/keyhive/ergosaurus/config.h b/keyboards/keyhive/ergosaurus/config.h
new file mode 100644
index 0000000000..41f9a09311
--- /dev/null
+++ b/keyboards/keyhive/ergosaurus/config.h
@@ -0,0 +1,144 @@
+/*
+Copyright 2019 cfbender
+
+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 "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x434B
+#define PRODUCT_ID 0xE590
+#define DEVICE_VER 0x0001
+#define MANUFACTURER reggalicious
+#define PRODUCT ergosaurus
+
+/* key matrix size */
+#define MATRIX_ROWS 9
+#define MATRIX_COLS 8
+
+/*
+ * 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, E6, D4, F6, D3, D2, F4, F5 }
+#define MATRIX_COL_PINS \
+ { D7, C6, D0, D1, F7, B1, B3, B2 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/*
+ * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
+ */
+#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+#ifdef RGBLIGHT_ENABLE
+# define RGB_DI_PIN B6
+ #define RGBLED_NUM 32
+ #define RGBLIGHT_HUE_STEP 8
+ #define RGBLIGHT_SAT_STEP 8
+ #define RGBLIGHT_VAL_STEP 8
+ #define RGBLIGHT_LIMIT_VAL 200 /* The maximum brightness level */
+ #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
+// /*== all animations enable ==*/
+// #define RGBLIGHT_ANIMATIONS
+// /*== or choose animations ==*/
+ #define RGBLIGHT_EFFECT_BREATHING
+ #define RGBLIGHT_EFFECT_RAINBOW_MOOD
+ #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+// #define RGBLIGHT_EFFECT_SNAKE
+// #define RGBLIGHT_EFFECT_KNIGHT
+// #define RGBLIGHT_EFFECT_CHRISTMAS
+ #define RGBLIGHT_EFFECT_STATIC_GRADIENT
+// #define RGBLIGHT_EFFECT_RGB_TEST
+// #define RGBLIGHT_EFFECT_ALTERNATING
+// /*== customize breathing effect ==*/
+// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
+// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
+// /*==== use exp() and sin() ====*/
+// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
+// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
+ #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* 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
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * 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
+ * makefile 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
+
+/*
+ * 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
+
+/* Bootmagic Lite key configuration */
+#define BOOTMAGIC_LITE_ROW 0
+#define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/keyhive/ergosaurus/ergosaurus.c b/keyboards/keyhive/ergosaurus/ergosaurus.c
new file mode 100644
index 0000000000..4c31455128
--- /dev/null
+++ b/keyboards/keyhive/ergosaurus/ergosaurus.c
@@ -0,0 +1,17 @@
+
+/* Copyright 2019 cfbender
+ *
+ * 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 "ergosaurus.h"
diff --git a/keyboards/keyhive/ergosaurus/ergosaurus.h b/keyboards/keyhive/ergosaurus/ergosaurus.h
new file mode 100644
index 0000000000..cef594993d
--- /dev/null
+++ b/keyboards/keyhive/ergosaurus/ergosaurus.h
@@ -0,0 +1,40 @@
+/* Copyright 2019 cfbender
+ *
+ * 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 "quantum.h"
+
+#define KNO KC_NO
+
+#define LAYOUT_alice_split_bs( \
+ K00, K10, K01, K11, K02, K12, K03, K13, K04, K14, K05, K15, K06, K16, K07, K17, \
+ K20, K30, K21, K31, K22, K32, K23, K33, K24, K34, K25, K35, K26, K36, K27, \
+ K40, K50, K41, K51, K42, K52, K43, K53, K44, K54, K45, K55, K46, K47, \
+ K60, K61, K71, K62, K72, K63, K73, K64, K74, K65, K75, K66, K76, K67, \
+ K80, K81, K82, K83, K84, K85, K87 \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07 }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17 }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27 }, \
+ { K30, K31, K32, K33, K34, K35, K36, KNO }, \
+ { K40, K41, K42, K43, K44, K45, K46, K47 }, \
+ { K50, K51, K52, K53, K54, K55, KNO, KNO }, \
+ { K60, K61, K62, K63, K64, K65, K66, K67 }, \
+ { KNO, K71, K72, K73, K74, K75, K76, KNO }, \
+ { K80, K81, K82, K83, K84, K85, KNO, K87 } \
+}
+
+#define LAYOUT LAYOUT_alice_split_bs
diff --git a/keyboards/keyhive/ergosaurus/info.json b/keyboards/keyhive/ergosaurus/info.json
new file mode 100644
index 0000000000..8048896be2
--- /dev/null
+++ b/keyboards/keyhive/ergosaurus/info.json
@@ -0,0 +1,80 @@
+{
+ "keyboard_name": "Ergosaurus",
+ "maintainer": "cfbender",
+ "layouts": {
+ "LAYOUT_alice_split_bs": {
+ "layout": [
+ {"label":"`", "x":0.5, "y":0},
+ {"label":"Esc", "x":1.75, "y":0.25},
+ {"label":"1", "x":2.75, "y":0.25},
+ {"label":"2", "x":3.75, "y":0},
+ {"label":"3", "x":4.75, "y":0.25},
+ {"label":"4", "x":5.75, "y":0.25},
+ {"label":"5", "x":6.75, "y":0.25},
+ {"label":"6", "x":7.75, "y":0.25},
+ {"label":"7", "x":11, "y":0.25},
+ {"label":"8", "x":12, "y":0.25},
+ {"label":"9", "x":13, "y":0.25},
+ {"label":"0", "x":14, "y":0.25},
+ {"label":"-", "x":15, "y":0},
+ {"label":"=", "x":16, "y":0.25},
+ {"label":"|", "x":17, "y":0.25},
+ {"label":"Del", "x":18, "y":0.25},
+
+ {"label":"PgUp", "x":0.25, "y":1},
+ {"label":"Tab", "x":1.5, "y":1.25, "w":1.5},
+ {"label":"Q", "x":3, "y":1.25},
+ {"label":"W", "x":4.25, "y":1.25},
+ {"label":"E", "x":5.25, "y":1.25},
+ {"label":"R", "x":6.25, "y":1.25},
+ {"label":"T", "x":7.25, "y":1.25},
+ {"label":"Y", "x":10.5, "y":1.25},
+ {"label":"U", "x":11.5, "y":1.25},
+ {"label":"I", "x":12.5, "y":1.25},
+ {"label":"O", "x":13.5, "y":1.25},
+ {"label":"P", "x":14.75, "y":1.25},
+ {"label":"{", "x":15.75, "y":1.25},
+ {"label":"}", "x":16.75, "y":1.25},
+ {"label":"Backspace", "x":17.75, "y":1.25, "w":1.5},
+
+ {"label":"PgDn", "x":0, "y":2},
+ {"label":"Caps Lock", "x":1.5, "y":2.25, "w":1.75},
+ {"label":"A", "x":3.25, "y":2.25},
+ {"label":"S", "x":4.5, "y":2.25},
+ {"label":"D", "x":5.5, "y":2.25},
+ {"label":"F", "x":6.5, "y":2.25},
+ {"label":"G", "x":7.5, "y":2.25},
+ {"label":"H", "x":10.75, "y":2.25},
+ {"label":"J", "x":11.75, "y":2.25},
+ {"label":"K", "x":12.75, "y":2.25},
+ {"label":"L", "x":13.75, "y":2.25},
+ {"label":":", "x":15.25, "y":2.25},
+ {"label":"\"", "x":16.25, "y":2.25},
+ {"label":"Enter", "x":17.25, "y":2.25, "w":2.25},
+
+ {"label":"Shift", "x":1.5, "y":3.25, "w":2.25},
+ {"label":"Z", "x":3.75, "y":3.25},
+ {"label":"X", "x":5, "y":3.25},
+ {"label":"C", "x":6, "y":3.25},
+ {"label":"V", "x":7, "y":3.25},
+ {"label":"B", "x":8, "y":3.25},
+ {"label":"B", "x":10.25, "y":3.25},
+ {"label":"N", "x":11.25, "y":3.25},
+ {"label":"M", "x":12.25, "y":3.25},
+ {"label":"<", "x":13.25, "y":3.25},
+ {"label":">", "x":15, "y":3.25},
+ {"label":"?", "x":16, "y":3.25},
+ {"label":"Shift", "x":17, "y":3.25, "w":1.75},
+ {"label":"Fn", "x":18.75, "y":3.25},
+
+ {"label":"Os", "x":1.5, "y":4.25, "w":1.5},
+ {"label":"Alt", "x":5, "y":4.25, "w":1.5},
+ {"label":"Enter", "x":6.5, "y":4.25, "w":2},
+ {"label":"Fn", "x":8.5, "y":4.25},
+ {"label":"Space", "x":10.25, "y":4.25, "w":2.25},
+ {"label":"Alt", "x":12.5, "y":4.25, "w":1.5},
+ {"label":"Ctrl", "x":18, "y":4.25, "w":1.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/keyhive/ergosaurus/keymaps/default/keymap.c b/keyboards/keyhive/ergosaurus/keymaps/default/keymap.c
new file mode 100644
index 0000000000..42cf9082e4
--- /dev/null
+++ b/keyboards/keyhive/ergosaurus/keymaps/default/keymap.c
@@ -0,0 +1,47 @@
+/* Copyright 2019 cfbender
+ *
+ * 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 QMK_KEYBOARD_H
+
+#define BASE 0
+#define LOWER 1
+#define RAISE 2
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [BASE] = LAYOUT_alice_split_bs(
+ KC_GRV, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL,
+ KC_PGUP, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
+ KC_PGDN, KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(LOWER),
+ KC_LGUI, KC_LALT, KC_ENT, MO(RAISE), KC_SPC, KC_RALT, KC_RCTL
+ ),
+
+ [LOWER] = LAYOUT_alice_split_bs(
+ _______, KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_RIGHT, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DOWN, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [RAISE] = LAYOUT_alice_split_bs(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, RESET
+ )
+};
diff --git a/keyboards/keyhive/ergosaurus/keymaps/default/readme.md b/keyboards/keyhive/ergosaurus/keymaps/default/readme.md
new file mode 100644
index 0000000000..acd1216c79
--- /dev/null
+++ b/keyboards/keyhive/ergosaurus/keymaps/default/readme.md
@@ -0,0 +1,3 @@
+# The default keymap for ergosaurus
+
+![ergosaurus_default](https://imgur.com/gsjk8yD.jpg)
diff --git a/keyboards/keyhive/ergosaurus/keymaps/via/keymap.c b/keyboards/keyhive/ergosaurus/keymaps/via/keymap.c
new file mode 100644
index 0000000000..5ae73bfd47
--- /dev/null
+++ b/keyboards/keyhive/ergosaurus/keymaps/via/keymap.c
@@ -0,0 +1,51 @@
+/* Copyright 2021 littleferris
+ *
+ * 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 QMK_KEYBOARD_H
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_alice_split_bs(
+ KC_GRV, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL,
+ KC_PGUP, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
+ KC_PGDN, KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_LGUI, KC_LALT, KC_ENT, MO(2), KC_SPC, KC_RALT, KC_RCTL
+ ),
+
+ [1] = LAYOUT_alice_split_bs(
+ _______, KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_RIGHT, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DOWN, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [2] = LAYOUT_alice_split_bs(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, RESET
+ ),
+
+ [3] = LAYOUT_alice_split_bs(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, RESET
+ )
+};
diff --git a/keyboards/keyhive/ergosaurus/keymaps/via/rules.mk b/keyboards/keyhive/ergosaurus/keymaps/via/rules.mk
new file mode 100644
index 0000000000..36b7ba9cbc
--- /dev/null
+++ b/keyboards/keyhive/ergosaurus/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/keyhive/ergosaurus/readme.md b/keyboards/keyhive/ergosaurus/readme.md
new file mode 100644
index 0000000000..ed01f650f3
--- /dev/null
+++ b/keyboards/keyhive/ergosaurus/readme.md
@@ -0,0 +1,15 @@
+# Ergosaurus
+
+![ergosaurus](https://i.imgur.com/9yLCcpH.jpg)
+
+An Arduino Pro Micro driven Alice-clone PCB. Supports all Alice-style cases, given the clearance for the Pro Micro. Ergosaurus specific acrylic case files available [here](https://github.com/cfbender/Lubrigante).
+
+* Keyboard Maintainer: [cfbender](https://github.com/cfbender)
+* Hardware Supported: Ergosaurus PCB, Pro Micro
+* Hardware Availability: [KeyHive](https://keyhive.xyz)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make keyhive/ergosaurus:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/keyhive/ergosaurus/rules.mk b/keyboards/keyhive/ergosaurus/rules.mk
new file mode 100644
index 0000000000..a00db322a6
--- /dev/null
+++ b/keyboards/keyhive/ergosaurus/rules.mk
@@ -0,0 +1,20 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+
+LAYOUTS = alice_split_bs
diff --git a/keyboards/keyhive/honeycomb/config.h b/keyboards/keyhive/honeycomb/config.h
new file mode 100755
index 0000000000..6780c2d41b
--- /dev/null
+++ b/keyboards/keyhive/honeycomb/config.h
@@ -0,0 +1,45 @@
+/*
+Copyright 2019 @filoxo
+
+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 "config_common.h"
+
+/* USB Device descriptor parameter */
+
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0xACC8
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Keyhive
+#define PRODUCT Honeycomb Macropad
+
+/* key matrix size */
+#define MATRIX_ROWS 1
+#define MATRIX_COLS 16
+
+#define ONESHOT_TIMEOUT 500
+
+/* 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
diff --git a/keyboards/keyhive/honeycomb/honeycomb.c b/keyboards/keyhive/honeycomb/honeycomb.c
new file mode 100755
index 0000000000..603400c7a3
--- /dev/null
+++ b/keyboards/keyhive/honeycomb/honeycomb.c
@@ -0,0 +1,76 @@
+#include "honeycomb.h"
+#include "pointing_device.h"
+#include "report.h"
+
+void pointing_device_task(void){
+ /*report_mouse_t currentReport = {};
+ uint32_t timeout = 0;
+
+ //the m character requests the RF slave to send the mouse report
+ uart_write('m');
+
+ //trust the external inputs completely, erase old data
+ uint8_t uart_data[5] = {0};
+
+ //there are 10 bytes corresponding to 10 columns, and an end byte
+ for (uint8_t i = 0; i < 5; i++) {
+ //wait for the serial data, timeout if it's been too long
+ //this only happened in testing with a loose wire, but does no
+ //harm to leave it in here
+ while(!uart_available()){
+ timeout++;
+ if (timeout > 10000){
+ xprintf("\r\nTIMED OUT");
+ break;
+ }
+ }
+ xprintf("\r\nGOT DATA for %d",i);
+ uart_data[i] = uart_read();
+ }
+
+ //check for the end packet, bytes 1-4 are movement and scroll
+ //but byte 5 has bits 0-3 for the scroll button state
+ //(1000 if pressed, 0000 if not) and bits 4-7 are always 1
+ //We can use this to verify the report sent properly.
+ if (uart_data[4] == 0x0F || uart_data[4] == 0x8F)
+ {
+ xprintf("\r\nREQUESTED MOUSE, RECEIVED %i, %i, %i, %i, %i",uart_data[0],uart_data[1],uart_data[2],uart_data[3],uart_data[4]);
+ currentReport = pointing_device_get_report();
+ //shifting and transferring the info to the mouse report varaible
+ //mouseReport.x = 127 max -127 min
+ currentReport.x = (int8_t) uart_data[0];
+ //mouseReport.y = 127 max -127 min
+ currentReport.y = (int8_t) uart_data[1];
+ //mouseReport.v = 127 max -127 min (scroll vertical)
+ currentReport.v = (int8_t) uart_data[2];
+ //mouseReport.h = 127 max -127 min (scroll horizontal)
+ currentReport.h = (int8_t) uart_data[3];
+ //mouseReport.buttons = 0x31 max (bitmask for mouse buttons 1-5) 0x00 min
+ //mouse buttons 1 and 2 are handled by the keymap, but not 3
+ if (uart_data[4] == 0x0F) { //then 3 is not pressed
+ currentReport.buttons &= ~MOUSE_BTN3; //MOUSE_BTN3 is def in report.h
+ } else { //3 must be pressed
+ currentReport.buttons |= MOUSE_BTN3;
+ }
+ pointing_device_set_report(currentReport);
+ } else {
+ xprintf("\r\nRequested packet, data 4 was %d",uart_data[4]);
+ }*/
+ pointing_device_send();
+}
+
+void led_init(void) {
+ setPinOutput(D1);
+ writePinHigh(D1);
+ setPinOutput(F4);
+ writePinHigh(F4);
+ setPinOutput(F5);
+ writePinHigh(F5);
+}
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+ matrix_init_user();
+ led_init();
+}
diff --git a/keyboards/keyhive/honeycomb/honeycomb.h b/keyboards/keyhive/honeycomb/honeycomb.h
new file mode 100755
index 0000000000..ec54b59f20
--- /dev/null
+++ b/keyboards/keyhive/honeycomb/honeycomb.h
@@ -0,0 +1,32 @@
+#pragma once
+
+#include "quantum.h"
+
+#define RED_LED_OFF() writePinHigh(F6)
+#define RED_LED_ON() writePinLow(F6)
+#define BLU_LED_OFF() writePinHigh(F5)
+#define BLU_LED_ON() writePinLow(F5)
+#define GRN_LED_OFF() writePinHigh(D1)
+#define GRN_LED_ON() writePinLow(D1)
+
+#define SET_LED_OFF (RED_LED_OFF(); GRN_LED_OFF(); BLU_LED_OFF(); )
+#define SET_LED_RED (RED_LED_ON(); GRN_LED_OFF(); BLU_LED_OFF(); )
+#define SET_LED_BLUE (RED_LED_OFF(); GRN_LED_OFF(); BLU_LED_ON(); )
+#define SET_LED_GREEN (RED_LED_OFF(); GRN_LED_ON(); BLU_LED_OFF(); )
+#define SET_LED_YELLOW (RED_LED_ON(); GRN_LED_ON(); BLU_LED_OFF(); )
+#define SET_LED_MAGENTA (RED_LED_ON(); GRN_LED_OFF(); BLU_LED_ON(); )
+#define SET_LED_CYAN (RED_LED_OFF(); GRN_LED_ON(); BLU_LED_ON(); )
+#define SET_LED_WHITE (RED_LED_ON(); GRN_LED_ON(); BLU_LED_ON(); )
+
+// This a shortcut to help you visually see your layout.
+// The first section contains all of the arguements
+// The second converts the arguments into a two-dimensional array
+#define LAYOUT( \
+ k13, k14, k15, k16, \
+ k09, k10, k11, k12, \
+ k05, k06, k07, k08, \
+ k01, k02, k03, k04 \
+) \
+{ \
+ { k01, k02, k03, k04, k05, k06, k07, k08, k09, k10, k11, k12, k13, k14, k15, k16 } \
+}
diff --git a/keyboards/keyhive/honeycomb/info.json b/keyboards/keyhive/honeycomb/info.json
new file mode 100644
index 0000000000..b11ece332b
--- /dev/null
+++ b/keyboards/keyhive/honeycomb/info.json
@@ -0,0 +1,30 @@
+{
+ "keyboard_name": "Honeycomb",
+ "url": "",
+ "maintainer": "filoxo",
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":1, "y":0},
+ {"x":2, "y":0},
+ {"x":3, "y":0},
+
+ {"x":0, "y":1},
+ {"x":1, "y":1},
+ {"x":2, "y":1},
+ {"x":3, "y":1},
+
+ {"x":0, "y":2},
+ {"x":1, "y":2},
+ {"x":2, "y":2},
+ {"x":3, "y":2},
+
+ {"x":0, "y":3},
+ {"x":1, "y":3},
+ {"x":2, "y":3},
+ {"x":3, "y":3}
+ ]
+ }
+ }
+}
diff --git a/keyboards/keyhive/honeycomb/keymaps/default/keymap.c b/keyboards/keyhive/honeycomb/keymaps/default/keymap.c
new file mode 100755
index 0000000000..d0a5961873
--- /dev/null
+++ b/keyboards/keyhive/honeycomb/keymaps/default/keymap.c
@@ -0,0 +1,91 @@
+#include QMK_KEYBOARD_H
+
+// 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 honeycomb_layers {
+ _BS,
+ _EN
+};
+
+// Macro definitions for readability
+enum honeycomb_keycodes {
+ HW = SAFE_RANGE,
+ COPY,
+ PASTA
+};
+
+extern int8_t encoderValue;
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BS] = LAYOUT( /* Base layout, put whatever defaults. */
+ HW, COPY, PASTA, KC_MUTE,
+ KC_4, KC_5, KC_6, KC_7,
+ KC_8, KC_9, KC_A, KC_B,
+ KC_C, KC_D, KC_E, KC_F
+ ),
+
+ [_EN] = LAYOUT( /* Alternate layer */
+ _______, _______, _______, _______,
+ _______, _______, _______, _______,
+ _______, _______, _______, _______,
+ _______, _______, _______, _______
+ )
+};
+
+report_mouse_t currentReport = {};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ //uint8_t layer = biton32(layer_state); // get the current layer
+
+ // Basic example functions
+ switch (keycode) {
+ case HW:
+ if (record->event.pressed) {
+ SEND_STRING("Hello, world!");
+ } else {
+ SEND_STRING("Goodbye, cruel world!");
+ }
+ break;
+ case COPY:
+ if (record->event.pressed) {
+ tap_code16(LCTL(KC_C)); // Replace with tap_code16(LCMD(KC_C)) to enable for Mac
+ }
+ break;
+ case PASTA:
+ if (record->event.pressed) {
+ tap_code16(LCTL(KC_V)); // Replace with tap_code16(LCMD(KC_V)) to enable for Mac
+ }
+ break;
+ return false;
+ }
+ return true;
+};
+
+void matrix_scan_user(void) {
+ /* Leaving some LED stuff in here in comment form so you can see how to use it.
+ if (shiftLED || capsLED){
+ red_led_on;
+ } else {
+ red_led_off;
+ }
+ if (numLED){
+ grn_led_on;
+ } else {
+ grn_led_off;
+ }
+ if (mouseLED){
+ blu_led_on;
+ } else {
+ blu_led_off;
+ }*/
+ while (encoderValue < 0){
+ tap_code(KC_VOLD);
+ encoderValue++;
+ }
+ while (encoderValue > 0){
+ tap_code(KC_VOLU);
+ encoderValue--;
+ }
+};
diff --git a/keyboards/keyhive/honeycomb/matrix.c b/keyboards/keyhive/honeycomb/matrix.c
new file mode 100755
index 0000000000..9a87ca9a2e
--- /dev/null
+++ b/keyboards/keyhive/honeycomb/matrix.c
@@ -0,0 +1,190 @@
+/*
+Copyright 2012 Jun Wako
+Copyright 2014 Jack Humbert
+Copyright 2019 @filoxo
+
+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 <stdint.h>
+#include <stdbool.h>
+#if defined(__AVR__)
+#include <avr/io.h>
+#endif
+#include "wait.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+#include "timer.h"
+#include "honeycomb.h"
+#include "pointing_device.h"
+#include "report.h"
+#include "uart.h"
+
+#if (MATRIX_COLS <= 8)
+# define print_matrix_header() print("\nr/c 01234567\n")
+# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
+# define ROW_SHIFTER ((uint8_t)1)
+#elif (MATRIX_COLS <= 16)
+# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
+# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
+# define ROW_SHIFTER ((uint16_t)1)
+#elif (MATRIX_COLS <= 32)
+# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
+# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
+# define ROW_SHIFTER ((uint32_t)1)
+#endif
+
+/* matrix state(1:on, 0:off) */
+static matrix_row_t matrix[MATRIX_ROWS];
+//extern int8_t encoderValue;
+int8_t encoderValue = 0;
+
+__attribute__ ((weak))
+void matrix_init_quantum(void) {
+ matrix_init_kb();
+}
+
+__attribute__ ((weak))
+void matrix_scan_quantum(void) {
+ matrix_scan_kb();
+}
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+inline
+uint8_t matrix_rows(void) {
+ return MATRIX_ROWS;
+}
+
+inline
+uint8_t matrix_cols(void) {
+ return MATRIX_COLS;
+}
+
+void matrix_init(void) {
+
+ matrix_init_quantum();
+ uart_init(1000000);
+}
+
+uint8_t matrix_scan(void)
+{
+ uint32_t timeout = 0;
+
+ // The 's' character requests the RF slave to send the matrix
+ uart_write('s');
+
+ // Trust the external keystates entirely, erase the last data
+ uint8_t uart_data[4] = {0};
+
+ // There are 3 bytes corresponding to the data, and a checksum
+ for (uint8_t i = 0; i < 4; i++) {
+ // Wait for the serial data, timeout if it's been too long
+ // This only happened in testing with a loose wire, but does no
+ // harm to leave it in here
+ while(!uart_available()){
+ timeout++;
+ if (timeout > 10000){
+ xprintf("\r\nTime out in keyboard.");
+ break;
+ }
+ }
+ uart_data[i] = uart_read();
+ }
+
+ // Check for the end packet, it's our checksum.
+ // Will only be a match if the correct bytes were recieved
+ if (uart_data[3] == (uart_data[0] ^ uart_data[1] ^ uart_data[2])) { // This is an arbitrary checksum calculated by XORing all the data.
+ // Transferring the keystates to the QMK matrix variable
+ /* ASSUMING MSB FIRST */
+ matrix[0] = ((uint16_t) uart_data[0] << 8) | ((uint16_t) uart_data[1]);
+ encoderValue += (int8_t) uart_data[2];
+ if ((uart_data[0] | uart_data[1] | uart_data[2])!=0){
+ xprintf("\r\n0x%0X%02X%02X",uart_data[0],uart_data[1], uart_data[2]);
+ }
+ /* OK, TURNS OUT THAT WAS A BAD ASSUMPTION */
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ // I've unpacked these into the mirror image of what QMK expects them to be, so...
+ matrix[i] = bitrev16(matrix[i]);
+ // So I'll reverse it, and this should be fine now.
+ }
+
+ // A mouse report for scrolling would go here, but I don't plan on doing scrolling with the encoder. So.
+
+ report_mouse_t currentReport = {};
+/*
+ currentReport = pointing_device_get_report();
+ //mouseReport.x = 127 max -127 min
+ currentReport.x = (int8_t) uart_data[6];
+ //mouseReport.y = 127 max -127 min
+ currentReport.y = (int8_t) uart_data[7];
+ //mouseReport.v = 127 max -127 min (scroll vertical)
+ currentReport.v = (int8_t) uart_data[8];
+ //mouseReport.h = 127 max -127 min (scroll horizontal)
+ currentReport.h = (int8_t) uart_data[9];
+ */
+ /*
+ currentReport.x = 0;
+ currentReport.y = 0;
+ currentReport.v = 0;
+ currentReport.h = 0;*/
+
+ pointing_device_set_report(currentReport);
+ } else {
+ xprintf("\r\nRequested packet, data 3 was %d",uart_data[3]);
+ }
+
+ matrix_scan_quantum();
+ return 1;
+}
+
+inline
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+ return (matrix[row] & ((matrix_row_t)1<col));
+}
+
+inline
+matrix_row_t matrix_get_row(uint8_t row)
+{
+ return matrix[row];
+}
+
+void matrix_print(void)
+{
+ print_matrix_header();
+
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ print_hex8(row); print(": ");
+ print_matrix_row(row);
+ print("\n");
+ }
+}
diff --git a/keyboards/keyhive/honeycomb/readme.md b/keyboards/keyhive/honeycomb/readme.md
new file mode 100755
index 0000000000..611aa63880
--- /dev/null
+++ b/keyboards/keyhive/honeycomb/readme.md
@@ -0,0 +1,20 @@
+Honeycomb Keyboard Firmware
+======================
+
+These configuration files use a completely different 'matrix scan' system than other keyboards, it relies on an external nRF51822 microcontroller maintaining a matrix of keystates received from the macropad - it also receives rotary encoder information from the macropad. The matrix.c file contains the code to poll the external microcontroller for the key matrix, and the keymap.c file contains example code for encoder use. As long as the relevant functions in these files are not changed, all other QMK features are supported.
+
+## Building
+
+Run the following command in your terminal:
+
+```
+make keyhive/honeycomb:default
+# or use this to automatically flash the controller
+make keyhive/honeycomb:default:avrdude
+```
+
+Follow the QMK guide for this or ask in Discord.
+
+### Other Keymaps
+
+Because this is a totally custom macropad, it is recommended that you copy the `default/` folder, rename it as desired, and modify the `keymap.c` to your liking.
diff --git a/keyboards/keyhive/honeycomb/rules.mk b/keyboards/keyhive/honeycomb/rules.mk
new file mode 100755
index 0000000000..420e409e43
--- /dev/null
+++ b/keyboards/keyhive/honeycomb/rules.mk
@@ -0,0 +1,23 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+#MOUSEKEY_ENABLE = yes # Mouse keys
+POINTING_DEVICE_ENABLE = yes # Generic Pointer, not as big as mouse keys hopefully.
+POINTING_DEVICE_DRIVER = custom
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+CUSTOM_MATRIX = yes # Remote matrix from the wireless bridge
+NKRO_ENABLE = yes # Enable N-Key Rollover
+# BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+
+# # project specific files
+SRC += matrix.c
+QUANTUM_LIB_SRC += uart.c
diff --git a/keyboards/keyhive/lattice60/config.h b/keyboards/keyhive/lattice60/config.h
new file mode 100644
index 0000000000..c1e067287b
--- /dev/null
+++ b/keyboards/keyhive/lattice60/config.h
@@ -0,0 +1,98 @@
+/*
+Copyright 2019 Ethan Durrant (emdarcher)
+
+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 "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x16C0
+#define PRODUCT_ID 0x27DB
+#define DEVICE_VER 0x0001
+#define MANUFACTURER emdarcher
+#define PRODUCT LATTICE60
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 8
+
+/*
+ * 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 { B2, B3, B4, B5, C0, C1, C2, C3 }
+#define MATRIX_COL_PINS { D7, D6, B0, D5, D1, D4, D0, B1 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION ROW2COL
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* 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
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * 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
+ * makefile 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
+
+/*
+ * 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
diff --git a/keyboards/keyhive/lattice60/info.json b/keyboards/keyhive/lattice60/info.json
new file mode 100644
index 0000000000..824884ecbd
--- /dev/null
+++ b/keyboards/keyhive/lattice60/info.json
@@ -0,0 +1,17 @@
+{
+ "keyboard_name": "lattice60",
+ "url": "",
+ "maintainer": "emdarcher",
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"|", "x":13, "y":0}, {"label":"~", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"Backspace", "x":13.5, "y":1, "w":1.5}, {"label":"Control", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"", "x":14, "y":3}, {"label":"Alt", "x":1.5, "y":4}, {"label":"Win", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4}, {"x":5, "y":4, "w":2.25}, {"x":7.25, "y":4, "w":2.75}, {"x":10, "y":4}, {"label":"Win", "x":11, "y":4, "w":1.5}, {"label":"Alt", "x":12.5, "y":4}
+ ]
+ },
+ "LAYOUT_60_hhkb": {
+ "layout": [
+ {"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"|", "x":13, "y":0}, {"label":"~", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"Backspace", "x":13.5, "y":1, "w":1.5}, {"label":"Control", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"", "x":14, "y":3}, {"label":"Alt", "x":1.5, "y":4}, {"label":"Win", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"Win", "x":11, "y":4, "w":1.5}, {"label":"Alt", "x":12.5, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/keyhive/lattice60/keymaps/default/config.h b/keyboards/keyhive/lattice60/keymaps/default/config.h
new file mode 100644
index 0000000000..88d9334765
--- /dev/null
+++ b/keyboards/keyhive/lattice60/keymaps/default/config.h
@@ -0,0 +1,20 @@
+/* Copyright 2019 Ethan Durrant (emdarcher)
+ *
+ * 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
+
+// place overrides here
+#define GRAVE_ESC_ALT_OVERRIDE
diff --git a/keyboards/keyhive/lattice60/keymaps/default/keymap.c b/keyboards/keyhive/lattice60/keymaps/default/keymap.c
new file mode 100644
index 0000000000..a5102070ea
--- /dev/null
+++ b/keyboards/keyhive/lattice60/keymaps/default/keymap.c
@@ -0,0 +1,40 @@
+/* Copyright 2019 Ethan Durrant (emdarcher)
+ *
+ * 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 QMK_KEYBOARD_H
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+ _BASE,
+ _FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base */
+ [_BASE] = LAYOUT_all(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN),
+ KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RGUI, KC_RALT
+ ),
+ [_FN] = LAYOUT_all(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC,
+ KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/keyhive/lattice60/keymaps/default/readme.md b/keyboards/keyhive/lattice60/keymaps/default/readme.md
new file mode 100644
index 0000000000..bde2ba9b41
--- /dev/null
+++ b/keyboards/keyhive/lattice60/keymaps/default/readme.md
@@ -0,0 +1,5 @@
+# The default keymap for lattice60
+
+![layout](https://i.imgur.com/aW6PpmX.png)
+
+This keymap uses a default HHKB layout, with support for a split spacebar and the addition of GESC on the ESC key.
diff --git a/keyboards/keyhive/lattice60/keymaps/default_hhkb/config.h b/keyboards/keyhive/lattice60/keymaps/default_hhkb/config.h
new file mode 100644
index 0000000000..88d9334765
--- /dev/null
+++ b/keyboards/keyhive/lattice60/keymaps/default_hhkb/config.h
@@ -0,0 +1,20 @@
+/* Copyright 2019 Ethan Durrant (emdarcher)
+ *
+ * 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
+
+// place overrides here
+#define GRAVE_ESC_ALT_OVERRIDE
diff --git a/keyboards/keyhive/lattice60/keymaps/default_hhkb/keymap.c b/keyboards/keyhive/lattice60/keymaps/default_hhkb/keymap.c
new file mode 100644
index 0000000000..ccdc10ab32
--- /dev/null
+++ b/keyboards/keyhive/lattice60/keymaps/default_hhkb/keymap.c
@@ -0,0 +1,40 @@
+/* Copyright 2019 Ethan Durrant (emdarcher)
+ *
+ * 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 QMK_KEYBOARD_H
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+ _BASE,
+ _FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base */
+ [_BASE] = LAYOUT_60_hhkb(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN),
+ KC_LALT, KC_LGUI, /* */ KC_SPC, KC_RGUI, KC_RALT
+ ),
+ [_FN] = LAYOUT_60_hhkb(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC,
+ KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/keyhive/lattice60/keymaps/default_hhkb/readme.md b/keyboards/keyhive/lattice60/keymaps/default_hhkb/readme.md
new file mode 100644
index 0000000000..734ba74b9e
--- /dev/null
+++ b/keyboards/keyhive/lattice60/keymaps/default_hhkb/readme.md
@@ -0,0 +1,5 @@
+# The default HHKB keymap for lattice60
+
+![layout](https://i.imgur.com/aW6PpmX.png)
+
+This keymap uses a default HHKB layout, with the addition of GESC on the ESC key.
diff --git a/keyboards/keyhive/lattice60/keymaps/emdarcher/config.h b/keyboards/keyhive/lattice60/keymaps/emdarcher/config.h
new file mode 100644
index 0000000000..88d9334765
--- /dev/null
+++ b/keyboards/keyhive/lattice60/keymaps/emdarcher/config.h
@@ -0,0 +1,20 @@
+/* Copyright 2019 Ethan Durrant (emdarcher)
+ *
+ * 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
+
+// place overrides here
+#define GRAVE_ESC_ALT_OVERRIDE
diff --git a/keyboards/keyhive/lattice60/keymaps/emdarcher/keymap.c b/keyboards/keyhive/lattice60/keymaps/emdarcher/keymap.c
new file mode 100644
index 0000000000..099e8e9203
--- /dev/null
+++ b/keyboards/keyhive/lattice60/keymaps/emdarcher/keymap.c
@@ -0,0 +1,48 @@
+/* Copyright 2019 Ethan Durrant (emdarcher)
+ *
+ * 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 QMK_KEYBOARD_H
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+ _BASE,
+ _FN0,
+ _FN1
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base */
+ [_BASE] = LAYOUT_60_hhkb(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN0),
+ KC_LALT, KC_LGUI, /* */ KC_SPC, MO(_FN1), KC_RALT
+ ),
+ [_FN0] = LAYOUT_60_hhkb(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC,
+ KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_VOLD, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [_FN1] = LAYOUT_60_hhkb(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_BSPC,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MRWD, KC_MFFD, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/keyhive/lattice60/keymaps/emdarcher/readme.md b/keyboards/keyhive/lattice60/keymaps/emdarcher/readme.md
new file mode 100644
index 0000000000..812351af48
--- /dev/null
+++ b/keyboards/keyhive/lattice60/keymaps/emdarcher/readme.md
@@ -0,0 +1,5 @@
+# emdarcher's keymap for lattice60
+
+![layout](https://i.imgur.com/9g3fDqL.png)
+
+Modified function layer from the default HHKB functions, and added an extra layer for media controls.
diff --git a/keyboards/keyhive/lattice60/lattice60.c b/keyboards/keyhive/lattice60/lattice60.c
new file mode 100644
index 0000000000..6cc0ea42fb
--- /dev/null
+++ b/keyboards/keyhive/lattice60/lattice60.c
@@ -0,0 +1,37 @@
+/* Copyright 2019 Ethan Durrant (emdarcher)
+ *
+ * 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 "lattice60.h"
+
+#define LED1_PIN C4
+#define LED2_PIN C5
+
+void keyboard_pre_init_kb(void){
+ //init the LED pins as outputs
+ setPinOutput(LED1_PIN);
+ setPinOutput(LED2_PIN);
+ //call any user initialization code
+ keyboard_pre_init_user();
+}
+
+bool led_update_kb(led_t led_state) {
+ bool res = led_update_user(led_state);
+ if(res){
+ //write the CAPS LOCK state on LED1
+ writePin(LED1_PIN, led_state.caps_lock);
+ }
+ return res;
+}
diff --git a/keyboards/keyhive/lattice60/lattice60.h b/keyboards/keyhive/lattice60/lattice60.h
new file mode 100644
index 0000000000..d9f5f37dea
--- /dev/null
+++ b/keyboards/keyhive/lattice60/lattice60.h
@@ -0,0 +1,64 @@
+/* Copyright 2019 Ethan Durrant (emdarcher)
+ *
+ * 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 "quantum.h"
+
+/* This is a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+#define LAYOUT_all( \
+ k00, k04, k10, k14, k20, k24, k30, k34, k40, k44, k50, k54, k60, k64, k65, \
+ k01, k05, k11, k15, k21, k25, k31, k35, k41, k45, k51, k55, k61, k66, \
+ k02, k06, k12, k16, k22, k26, k32, k36, k42, k46, k52, k56, k62, \
+ k03, k07, k13, k17, k23, k27, k37, k43, k47, k53, k57, k63, k67, \
+ k70, k71, k72, k33, k74, k75, k76, k77 \
+) \
+{ \
+ { k00, k10, k20, k30, k40, k50, k60, k70 }, \
+ { k01, k11, k21, k31, k41, k51, k61, k71 }, \
+ { k02, k12, k22, k32, k42, k52, k62, k72 }, \
+ { k03, k13, k23, k33, k43, k53, k63, KC_NO }, \
+ { k04, k14, k24, k34, k44, k54, k64, k74 }, \
+ { k05, k15, k25, k35, k45, k55, k65, k75 }, \
+ { k06, k16, k26, k36, k46, k56, k66, k76 }, \
+ { k07, k17, k27, k37, k47, k57, k67, k77 } \
+}
+
+
+#define LAYOUT_60_hhkb( \
+ k00, k04, k10, k14, k20, k24, k30, k34, k40, k44, k50, k54, k60, k64, k65, \
+ k01, k05, k11, k15, k21, k25, k31, k35, k41, k45, k51, k55, k61, k66, \
+ k02, k06, k12, k16, k22, k26, k32, k36, k42, k46, k52, k56, k62, \
+ k03, k07, k13, k17, k23, k27, k37, k43, k47, k53, k57, k63, k67, \
+ k70, k71, k33, k76, k77 \
+) \
+{ \
+ { k00, k10, k20, k30, k40, k50, k60, k70 }, \
+ { k01, k11, k21, k31, k41, k51, k61, k71 }, \
+ { k02, k12, k22, k32, k42, k52, k62, KC_NO }, \
+ { k03, k13, k23, k33, k43, k53, k63, KC_NO }, \
+ { k04, k14, k24, k34, k44, k54, k64, KC_NO }, \
+ { k05, k15, k25, k35, k45, k55, k65, KC_NO }, \
+ { k06, k16, k26, k36, k46, k56, k66, k76 }, \
+ { k07, k17, k27, k37, k47, k57, k67, k77 } \
+}
diff --git a/keyboards/keyhive/lattice60/readme.md b/keyboards/keyhive/lattice60/readme.md
new file mode 100644
index 0000000000..92fe6198e0
--- /dev/null
+++ b/keyboards/keyhive/lattice60/readme.md
@@ -0,0 +1,21 @@
+# lattice60
+
+![lattice60](https://i.imgur.com/1TdrWii.jpg)
+
+A HHKB layout keyboard using only through-hole components.
+
+* Keyboard Maintainer: [emdarcher](https://github.com/emdarcher)
+* Hardware Supported: LATTICE60 PCB
+* Hardware Availability: [KeyHive](https://keyhive.xyz/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make keyhive/lattice60:default
+
+To activate the USBasploader bootloader, hold the BOOT button down during power on or reset. LED2 should light up to indicate that the bootloader is active.
+
+Flash the firmware using the `make` command with the `flash` parameter, example below:
+
+ make keyhive/lattice60:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/keyhive/lattice60/rules.mk b/keyboards/keyhive/lattice60/rules.mk
new file mode 100644
index 0000000000..8539f9f439
--- /dev/null
+++ b/keyboards/keyhive/lattice60/rules.mk
@@ -0,0 +1,23 @@
+# MCU name
+MCU = atmega328p
+
+# Bootloader selection
+BOOTLOADER = usbasploader
+
+# Processor frequency
+F_CPU = 12000000
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+
+LAYOUTS = 60_hhkb
diff --git a/keyboards/keyhive/navi10/.noci b/keyboards/keyhive/navi10/.noci
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/keyboards/keyhive/navi10/.noci
diff --git a/keyboards/keyhive/navi10/info.json b/keyboards/keyhive/navi10/info.json
new file mode 100644
index 0000000000..e3fc49fbed
--- /dev/null
+++ b/keyboards/keyhive/navi10/info.json
@@ -0,0 +1,10 @@
+{
+ "keyboard_name": "Navi10",
+ "url": "",
+ "maintainer": "emdarcher",
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"label":"Fn", "x":0, "y":0}, {"label":"Home", "x":1, "y":0}, {"label":"PgUp", "x":2, "y":0}, {"label":"Del", "x":0, "y":1}, {"label":"End", "x":1, "y":1}, {"label":"PgDn", "x":2, "y":1}, {"label":"Up", "x":1, "y":3}, {"label":"Left", "x":0, "y":4}, {"label":"Down", "x":1, "y":4}, {"label":"Right", "x":2, "y":4}]
+ }
+ }
+}
diff --git a/keyboards/keyhive/navi10/keymaps/default/keymap.c b/keyboards/keyhive/navi10/keymaps/default/keymap.c
new file mode 100644
index 0000000000..d1b3127760
--- /dev/null
+++ b/keyboards/keyhive/navi10/keymaps/default/keymap.c
@@ -0,0 +1,131 @@
+/* Copyright 2019 Ethan Durrant (emdarcher)
+ *
+ * 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 QMK_KEYBOARD_H
+
+//create the tap type
+typedef struct {
+ bool is_press_action;
+ int state;
+} tap;
+
+//tap dance states
+enum {
+ SINGLE_TAP = 1,
+ SINGLE_HOLD = 2,
+};
+
+//tap dance keys
+enum {
+ TAPPY_KEY = 0
+};
+
+//function to handle all the tap dances
+int cur_dance(qk_tap_dance_state_t *state);
+
+//functions for each tap dance
+void tk_finished(qk_tap_dance_state_t *state, void *user_data);
+void tk_reset(qk_tap_dance_state_t *state, void *user_data);
+
+#define INDICATOR_LED B5
+
+#define _FN0 1
+#define _ML1 2
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(/* Base */
+ TD(TAPPY_KEY),KC_HOME, KC_PGUP,
+ KC_DEL, KC_END, KC_PGDN,
+
+ KC_UP,
+ KC_LEFT, KC_DOWN, KC_RIGHT),
+ [_FN0] = LAYOUT(/* function layer */
+ KC_TRNS, KC_PAUS, KC_VOLU,
+ KC_ENTER, KC_SLCK, KC_VOLD,
+
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS),
+ [_ML1] = LAYOUT(/* media function layer, toggled on a single tap */
+ KC_TRNS, KC_TRNS, KC_VOLU,
+ KC_MUTE, KC_TRNS, KC_VOLD,
+
+ KC_SPC,
+ KC_MRWD, KC_MPLY, KC_MFFD),
+};
+
+//determine the current tap dance state
+int cur_dance (qk_tap_dance_state_t *state){
+ if(state->count == 1){
+ //if a tap was registered
+ if(!state->pressed){
+ //if not still pressed, then was a single tap
+ return SINGLE_TAP;
+ } else {
+ //if still pressed/held down, then it's a single hold
+ return SINGLE_HOLD;
+ }
+ } else {
+ return 8;
+ }
+}
+
+//initialize the tap structure for the tap key
+static tap tk_tap_state = {
+ .is_press_action = true,
+ .state = 0
+};
+
+//functions that control what our tap dance key does
+void tk_finished(qk_tap_dance_state_t *state, void *user_data){
+ tk_tap_state.state = cur_dance(state);
+ switch(tk_tap_state.state){
+ case SINGLE_TAP:
+ //send desired key when tapped:
+ //setting to the media layer
+ if(layer_state_is(_ML1)){
+ //if already active, toggle it to off
+ layer_off(_ML1);
+ //turn off the indicator LED
+ //set LED HI to turn it off
+ writePinHigh(INDICATOR_LED);
+ } else {
+ //turn on the media layer
+ layer_on(_ML1);
+ //turn on the indicator LED
+ //set LED pin to LOW to turn it on
+ writePinLow(INDICATOR_LED);
+ }
+ break;
+ case SINGLE_HOLD:
+ //set to desired layer when held:
+ //setting to the function layer
+ layer_on(_FN0);
+ break;
+ }
+}
+
+void tk_reset(qk_tap_dance_state_t *state, void *user_data){
+ //if held and released, leave the layer
+ if(tk_tap_state.state == SINGLE_HOLD){
+ layer_off(_FN0);
+ }
+ //reset the state
+ tk_tap_state.state = 0;
+}
+
+//associate the tap dance key with its functionality
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [TAPPY_KEY] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, tk_finished, tk_reset, 275)
+};
diff --git a/keyboards/keyhive/navi10/keymaps/default/readme.md b/keyboards/keyhive/navi10/keymaps/default/readme.md
new file mode 100644
index 0000000000..9e54a3f20a
--- /dev/null
+++ b/keyboards/keyhive/navi10/keymaps/default/readme.md
@@ -0,0 +1,11 @@
+# The default keymap for the Navi10
+
+This keymap keeps a basic Navigation Cluster layout, but utilizes the Insert key as a FN/Tap key to access 2 layers.
+
+- Base Layer:
+ * Navigation Cluster (sans Insert Key)
+- Hold Insert -> Function Layer:
+ * Maps Volume Control on PgUp/PgDN, Pause/Scroll-Lock on Home/End (MacOS brightness), and Delete to Enter.
+- Tap Insert Once -> Media Layer (Tap again to leave):
+ * Has mappings for Audio control on MacOS using the arrow keys, PgUp/PgDn, and Delete.
+ * Lights up the Central 3mm indicator LED.
diff --git a/keyboards/keyhive/navi10/keymaps/default/rules.mk b/keyboards/keyhive/navi10/keymaps/default/rules.mk
new file mode 100644
index 0000000000..e5ddcae8d9
--- /dev/null
+++ b/keyboards/keyhive/navi10/keymaps/default/rules.mk
@@ -0,0 +1 @@
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/keyhive/navi10/keymaps/devdev/config.h b/keyboards/keyhive/navi10/keymaps/devdev/config.h
new file mode 100644
index 0000000000..dba45a5f24
--- /dev/null
+++ b/keyboards/keyhive/navi10/keymaps/devdev/config.h
@@ -0,0 +1,35 @@
+/*
+Copyright 2019 Ethan Durrant (emdarcher)
+
+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
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#undef DEBOUNCE
+#define DEBOUNCE 1
+
+#define TAPPING_TERM 220
+
+#ifdef RGBLIGHT_ENABLE
+ #define RGB_DI_PIN D3
+ #define RGBLED_NUM 3
+
+ #define RGBLIGHT_LIMIT_VAL 120
+ #define RGBLIGHT_HUE_STEP 10
+ #define RGBLIGHT_SAT_STEP 17
+ #define RGBLIGHT_VAL_STEP 17
+
+
+#endif
diff --git a/keyboards/keyhive/navi10/keymaps/devdev/keymap.c b/keyboards/keyhive/navi10/keymaps/devdev/keymap.c
new file mode 100644
index 0000000000..b0d43ebc69
--- /dev/null
+++ b/keyboards/keyhive/navi10/keymaps/devdev/keymap.c
@@ -0,0 +1,263 @@
+/* Copyright 2019 Ethan Durrant (emdarcher)
+ *
+ * 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/>.
+ */
+
+ // NAVI 10
+#include QMK_KEYBOARD_H
+
+#define INDICATOR_LED B5
+
+
+#define _ML1 2
+#define _FN2 3
+#define _PR3 4
+#define _GI4 4
+
+
+#define HS_RED 0,255
+#define HS_WHITE 0, 0
+#define HS_ORANGE 28, 255
+#define HS_GREEN 85, 255
+#define HS_TURQUOISE 123, 90
+#define HS_CYAN 128, 255
+#define HS_AZURE 132, 102
+#define HS_BLUE 170, 255
+#define HS_PURPLE 191, 255
+#define HS_MAGENTA 213, 255
+
+
+//create the tap type
+typedef struct {
+ bool is_press_action;
+ int state;
+} tap;
+
+//tap dance states
+enum {
+ // uses https://beta.docs.qmk.fm/using-qmk/software-features/feature_tap_dance
+ SINGLE_TAP = 1,
+ SINGLE_HOLD = 2,
+ DOUBLE_TAP = 3,
+ TRIPLE_TAP = 4,
+};
+
+//tap dance keys
+enum {
+ TAPPY_KEY = 0
+};
+
+enum custom_keycodes { // git macros
+ M_G_HERE = SAFE_RANGE,
+ M_G_PUSH,
+ M_G_PULL,
+ M_G_ADD,
+ M_G_COMM
+};
+
+//function to handle all the tap dances
+int cur_dance(qk_tap_dance_state_t *state);
+
+//functions for each tap dance
+void tk_finished(qk_tap_dance_state_t *state, void *user_data);
+void tk_reset(qk_tap_dance_state_t *state, void *user_data);
+
+// define the macros in here
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ // open git bash here
+ case M_G_HERE:
+ if (record->event.pressed) {
+ SEND_STRING(SS_TAP(X_APP)"s");
+ } else {
+ // when keycode M_G_HERE is released
+ }
+ break;
+
+ //git push
+ case M_G_PUSH:
+ if (record->event.pressed) {
+ // when keycode M_G_PUSH is pressed
+ SEND_STRING("git push"SS_TAP(X_ENTER));
+ } else {
+ // when keycode M_G_PUSH is released
+ }
+ break;
+
+ // git pull
+ case M_G_PULL:
+ if (record->event.pressed) {
+ SEND_STRING("git pull"SS_TAP(X_ENTER));
+ }
+ break;
+
+ // git add
+ case M_G_ADD:
+ if (record->event.pressed) {
+ SEND_STRING("git add ");
+ }
+ break;
+
+ // git commit
+ case M_G_COMM: // git commit
+ if (record->event.pressed) {
+ SEND_STRING("git commit -m ' ");
+ }
+ break;
+ }
+ return true;
+};
+
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // Base
+ [0] = LAYOUT(
+ TD(TAPPY_KEY),KC_HOME, KC_PGUP,
+ KC_DEL, KC_END, KC_PGDN,
+
+ KC_UP,
+ KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ // media function layer, toggled on a single tap
+ [_ML1] = LAYOUT(
+ KC_TRNS, KC_BSPC, KC_VOLU,
+ KC_MUTE, KC_ENTER, KC_VOLD,
+
+ KC_SPC,
+ KC_MRWD, KC_MPLY, KC_MFFD),
+
+ // F keys, double tap to get here
+ [_FN2] = LAYOUT(
+ TO(0), KC_F3, KC_F5,
+ KC_F2, KC_F4, KC_F6,
+
+ KC_F7,
+ KC_F9, KC_F8, KC_F10),
+
+ // programming, triple tap to get here
+ [_PR3] = LAYOUT(
+ TO(0), A(KC_F7), S(KC_F10), //atmel, segger, pycharm
+ KC_F2, KC_F4, S(KC_F9),
+
+ KC_UP,
+ KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ // git function layer, hold to get here
+ [_GI4] = LAYOUT(
+ KC_TRNS, M_G_PUSH, M_G_ADD,
+ M_G_HERE, M_G_PULL, M_G_COMM,
+
+ RGB_VAI,
+ RGB_TOG, RGB_VAD, RGB_MOD),
+
+
+
+};
+
+//determine the current tap dance state
+int cur_dance (qk_tap_dance_state_t *state){
+ if(state->count == 1)
+ {
+ //if a tap was registered
+ if(!state->pressed)
+ {
+ //if not still pressed, then was a single tap
+ return SINGLE_TAP;
+ } else
+ {
+ //if still pressed/held down, then it's a single hold
+ return SINGLE_HOLD;
+ }
+ }
+ else if (state->count == 2)
+ {
+ return DOUBLE_TAP;
+ }
+
+ else if (state->count == 3)
+ {
+ return TRIPLE_TAP;
+ }
+ else
+ {
+ return 8;
+ }
+}
+
+//initialize the tap structure for the tap key
+static tap tk_tap_state = {
+ .is_press_action = true,
+ .state = 0
+};
+
+//functions that control what our tap dance key does
+void tk_finished(qk_tap_dance_state_t *state, void *user_data){
+ tk_tap_state.state = cur_dance(state);
+ uint8_t val = rgblight_get_val();
+ switch(tk_tap_state.state){
+ case SINGLE_TAP:
+ //send desired key when tapped:
+ //setting to the media layer
+ if(layer_state_is(_ML1)){
+ //if already active, toggle it to off
+ layer_off(_ML1);
+ rgblight_sethsv(HS_PURPLE, val);
+ } else {
+ //turn on the media layer
+ layer_on(_ML1);
+ rgblight_sethsv_at(HS_RED, 0, 0);
+ rgblight_sethsv_at(HS_GREEN, 0, 1);
+ rgblight_sethsv_at(HS_BLUE, val, 2);
+ }
+ break;
+
+ case DOUBLE_TAP:
+ layer_on(_FN2);
+ rgblight_sethsv_at(HS_RED, 0, 0);
+ rgblight_sethsv_at(HS_GREEN, val, 1);
+ rgblight_sethsv_at(HS_BLUE, 0, 2);
+ break;
+ case TRIPLE_TAP:
+ layer_on(_PR3);
+ rgblight_sethsv_at(HS_RED, 0, 0);
+ rgblight_sethsv_at(HS_GREEN, val, 1);
+ rgblight_sethsv_at(HS_BLUE, val, 2);
+ break;
+ case SINGLE_HOLD:
+ //set to desired layer when held:
+ //setting to the function layer
+ layer_on(_GI4);
+ rgblight_sethsv_at(HS_RED, val, 0);
+ rgblight_sethsv_at(HS_GREEN, val, 1);
+ rgblight_sethsv_at(HS_BLUE, val, 2);
+ break;
+ }
+}
+
+void tk_reset(qk_tap_dance_state_t *state, void *user_data){
+ //if held and released, leave the layer
+ if(tk_tap_state.state == SINGLE_HOLD){
+ layer_off(_GI4);
+ uint8_t val = rgblight_get_val();
+ rgblight_sethsv(HS_PURPLE, val);
+ }
+ //reset the state
+ tk_tap_state.state = 0;
+}
+
+//associate the tap dance key with its functionality
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [TAPPY_KEY] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, tk_finished, tk_reset, TAPPING_TERM)
+};
diff --git a/keyboards/keyhive/navi10/keymaps/devdev/rules.mk b/keyboards/keyhive/navi10/keymaps/devdev/rules.mk
new file mode 100644
index 0000000000..1c1ed316a0
--- /dev/null
+++ b/keyboards/keyhive/navi10/keymaps/devdev/rules.mk
@@ -0,0 +1,2 @@
+RGBLIGHT_ENABLE = yes
+TAP_DANCE_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/keyhive/navi10/keymaps/emdarcher/keymap.c b/keyboards/keyhive/navi10/keymaps/emdarcher/keymap.c
new file mode 100644
index 0000000000..40efed48d5
--- /dev/null
+++ b/keyboards/keyhive/navi10/keymaps/emdarcher/keymap.c
@@ -0,0 +1,182 @@
+/* Copyright 2019 Ethan Durrant (emdarcher)
+ *
+ * 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 QMK_KEYBOARD_H
+
+typedef struct {
+ bool is_press_action;
+ int state;
+} tap;
+
+//tap dance states
+enum {
+ SINGLE_TAP = 1,
+ SINGLE_HOLD = 2,
+ DOUBLE_TAP = 3,
+ TRIPLE_TAP = 4
+};
+
+//tap dance keys
+enum {
+ TAPPY_KEY = 0
+};
+
+//function to handle all the tap dances
+int cur_dance(qk_tap_dance_state_t *state);
+
+//functions for each tap dance
+void tk_finished(qk_tap_dance_state_t *state, void *user_data);
+void tk_reset(qk_tap_dance_state_t *state, void *user_data);
+
+#define INDICATOR_LED B5
+#define TX_LED D5
+#define RX_LED B0
+
+#define _FN0 1
+#define _ML1 2
+#define _CL0 3
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(/* Base */
+ TD(TAPPY_KEY),KC_HOME, KC_PGUP,
+ KC_DEL, KC_END, KC_PGDN,
+
+ KC_UP,
+ KC_LEFT, KC_DOWN, KC_RIGHT),
+ [_FN0] = LAYOUT(/* function layer */
+ KC_TRNS, KC_PAUS, KC_VOLU,
+ KC_ENTER, KC_SLCK, KC_VOLD,
+
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS),
+ [_ML1] = LAYOUT(/* media function layer on double tap */
+ KC_TRNS, KC_TRNS, KC_VOLU,
+ KC_MUTE, KC_TRNS, KC_VOLD,
+
+ KC_SPC,
+ KC_MRWD, KC_MPLY, KC_MFFD),
+ [_CL0] = LAYOUT(/* control layer on single tap */
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+
+ LCTL(KC_UP),
+ LCTL(KC_LEFT), LCTL(KC_DOWN), LCTL(KC_RIGHT) ),
+};
+
+void matrix_init_user(void) {
+ //init the Pro Micro on-board LEDs
+ setPinOutput(TX_LED);
+ setPinOutput(RX_LED);
+ //set to off
+ writePinHigh(TX_LED);
+ writePinHigh(RX_LED);
+}
+
+//determine the current tap dance state
+int cur_dance (qk_tap_dance_state_t *state){
+ if(state->count == 1){
+ //if a tap was registered
+ if(!state->pressed){
+ //if not still pressed, then was a single tap
+ return SINGLE_TAP;
+ } else {
+ //if still pressed/held down, then it's a single hold
+ return SINGLE_HOLD;
+ }
+ } else if(state->count == 2){
+ //if tapped twice, set to double tap
+ return DOUBLE_TAP;
+ } else if(state->count == 3){
+ //if tapped thrice, set to triple tap
+ return TRIPLE_TAP;
+ } else {
+ return 8;
+ }
+}
+
+
+//initialize the tap structure for the tap key
+static tap tk_tap_state = {
+ .is_press_action = true,
+ .state = 0
+};
+
+//functions that control what our tap dance key does
+void tk_finished(qk_tap_dance_state_t *state, void *user_data){
+ tk_tap_state.state = cur_dance(state);
+ switch(tk_tap_state.state){
+ case SINGLE_TAP:
+ //toggle desired layer when tapped:
+ if(layer_state_is(_CL0)){
+ //if already active, toggle it to off
+ layer_off(_CL0);
+ //turn off LEDs
+ writePinHigh(TX_LED);
+ writePinHigh(RX_LED);
+ } else {
+ //turn on the command layer
+ layer_on(_CL0);
+ //turn on the LEDs
+ writePinLow(TX_LED);
+ writePinLow(RX_LED);
+ }
+ break;
+ case SINGLE_HOLD:
+ //set to desired layer when held:
+ //setting to the function layer
+ layer_on(_FN0);
+ break;
+ case DOUBLE_TAP:
+ //set to desired layer when double tapped:
+ //setting to the media layer
+ if(layer_state_is(_ML1)){
+ //if already active, toggle it to off
+ layer_off(_ML1);
+ //turn off the indicator LED
+ //set LED HI to turn it off
+ writePinHigh(INDICATOR_LED);
+ } else {
+ //turn on the media layer
+ layer_on(_ML1);
+ //turn on the indicator LED
+ //set LED pin to LOW to turn it on
+ writePinLow(INDICATOR_LED);
+ }
+ break;
+ case TRIPLE_TAP:
+ //reset all layers
+ layer_clear();
+ //set all LEDs off
+ writePinHigh(TX_LED);
+ writePinHigh(RX_LED);
+ writePinHigh(INDICATOR_LED);
+ break;
+ }
+}
+
+void tk_reset(qk_tap_dance_state_t *state, void *user_data){
+ //if held and released, leave the layer
+ if(tk_tap_state.state == SINGLE_HOLD){
+ layer_off(_FN0);
+ }
+ //reset the state
+ tk_tap_state.state = 0;
+}
+
+
+//associate the tap dance key with its functionality
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [TAPPY_KEY] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, tk_finished, tk_reset, 275)
+};
diff --git a/keyboards/keyhive/navi10/keymaps/emdarcher/readme.md b/keyboards/keyhive/navi10/keymaps/emdarcher/readme.md
new file mode 100644
index 0000000000..b4ae6d75ff
--- /dev/null
+++ b/keyboards/keyhive/navi10/keymaps/emdarcher/readme.md
@@ -0,0 +1,16 @@
+# emdarcher's keymap for the Navi10
+
+This is my personal keymap for the Navi10, developed for the original Rev0 prototype. It uses Tap Dance extensively on the INSERT key to access different layers.
+
+- Base Layer:
+ * Regular Navigation Cluster except for the INSERT key which is for tapping.
+- Hold Insert -> Function Layer:
+ * Maps Volume Control on PgUp/PgDN, Pause/Scroll-Lock on Home/End (MacOS brightness), and Delete to Enter.
+- 2 Taps -> Media Layer:
+ * Has mappings for Audio control on MacOS using the arrow keys, PgUp/PgDn, and Delete.
+ * Lights up the Central 3mm indicator LED.
+- 1 Tap -> Control Layer:
+ * Binds the arrow keys as LCTRL + Arrow Key for use in changing workspaces in MacOS.
+ * Lights the Pro Micro TX/RX LEDs. These are visible through the board if you use clear PCB mount switch bases.
+
+
diff --git a/keyboards/keyhive/navi10/keymaps/emdarcher/rules.mk b/keyboards/keyhive/navi10/keymaps/emdarcher/rules.mk
new file mode 100644
index 0000000000..e5ddcae8d9
--- /dev/null
+++ b/keyboards/keyhive/navi10/keymaps/emdarcher/rules.mk
@@ -0,0 +1 @@
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/keyhive/navi10/readme.md b/keyboards/keyhive/navi10/readme.md
new file mode 100644
index 0000000000..06f54b73dd
--- /dev/null
+++ b/keyboards/keyhive/navi10/readme.md
@@ -0,0 +1,19 @@
+# Navi10 / ナビ10
+
+![navi10](https://i.imgur.com/QpFCMFd.jpg)
+
+A simple and fun navigation cluster macropad with exposed components.
+
+* Keyboard Maintainer: [emdarcher](https://github.com/emdarcher)
+* Hardware Supported: Navi10
+* Hardware Availability: [KeyHive](https://www.keyhive.xyz/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make keyhive/navi10:default
+
+Make example for a specific revision (ex. rev2):
+
+ make keyhive/navi10/rev2:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/keyhive/navi10/rev0/.noci b/keyboards/keyhive/navi10/rev0/.noci
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/keyboards/keyhive/navi10/rev0/.noci
diff --git a/keyboards/keyhive/navi10/rev0/config.h b/keyboards/keyhive/navi10/rev0/config.h
new file mode 100644
index 0000000000..22a985c280
--- /dev/null
+++ b/keyboards/keyhive/navi10/rev0/config.h
@@ -0,0 +1,50 @@
+/*
+Copyright 2019 Ethan Durrant (emdarcher)
+
+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 "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0000
+#define DEVICE_VER 0x0001
+#define MANUFACTURER emdarcher
+#define PRODUCT Navi10
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 3
+
+/* Keyboard Matrix Assignments */
+#define MATRIX_ROW_PINS \
+ { B6, B2, B3, B4 }
+#define MATRIX_COL_PINS \
+ { D1, D0, F6 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* 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
+
diff --git a/keyboards/keyhive/navi10/rev0/rev0.c b/keyboards/keyhive/navi10/rev0/rev0.c
new file mode 100644
index 0000000000..f6c1f362ca
--- /dev/null
+++ b/keyboards/keyhive/navi10/rev0/rev0.c
@@ -0,0 +1,30 @@
+/* Copyright 2019 Ethan Durrant (emdarcher)
+ *
+ * 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 "rev0.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ //set the indicator LED pin to Output
+ setPinOutput(B5);
+ //set HIGH for off.
+ writePinHigh(B5);
+
+ //call any user functions
+ matrix_init_user();
+}
+
diff --git a/keyboards/keyhive/navi10/rev0/rev0.h b/keyboards/keyhive/navi10/rev0/rev0.h
new file mode 100644
index 0000000000..b162d14425
--- /dev/null
+++ b/keyboards/keyhive/navi10/rev0/rev0.h
@@ -0,0 +1,34 @@
+/* Copyright 2019 Ethan Durrant (emdarcher)
+ *
+ * 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 "quantum.h"
+
+#define LAYOUT( \
+ k0, k1, k2, \
+ k3, k4, k5, \
+ \
+ k6, \
+ k7, k8, k9 \
+) \
+{ \
+ {k0, k1, k2}, \
+ {k3, k4, k5}, \
+ {KC_NO, k6, KC_NO}, \
+ {k7, k8, k9}, \
+}
+
+
diff --git a/keyboards/keyhive/navi10/rev0/rules.mk b/keyboards/keyhive/navi10/rev0/rules.mk
new file mode 100644
index 0000000000..52a1cbb711
--- /dev/null
+++ b/keyboards/keyhive/navi10/rev0/rules.mk
@@ -0,0 +1,18 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/keyhive/navi10/rev2/.noci b/keyboards/keyhive/navi10/rev2/.noci
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/keyboards/keyhive/navi10/rev2/.noci
diff --git a/keyboards/keyhive/navi10/rev2/config.h b/keyboards/keyhive/navi10/rev2/config.h
new file mode 100644
index 0000000000..1dfb210b03
--- /dev/null
+++ b/keyboards/keyhive/navi10/rev2/config.h
@@ -0,0 +1,50 @@
+/*
+Copyright 2019 Ethan Durrant (emdarcher)
+
+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 "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0000
+#define DEVICE_VER 0x0002
+#define MANUFACTURER emdarcher
+#define PRODUCT Navi10
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 3
+
+/* Keyboard Matrix Assignments */
+#define MATRIX_ROW_PINS \
+ { B6, B2, B3, B4 }
+#define MATRIX_COL_PINS \
+ { D4, C6, B1 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* 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
+
diff --git a/keyboards/keyhive/navi10/rev2/rev2.c b/keyboards/keyhive/navi10/rev2/rev2.c
new file mode 100644
index 0000000000..fed0e03897
--- /dev/null
+++ b/keyboards/keyhive/navi10/rev2/rev2.c
@@ -0,0 +1,30 @@
+/* Copyright 2019 Ethan Durrant (emdarcher)
+ *
+ * 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 "rev2.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ //set the indicator LED pin to Output
+ setPinOutput(B5);
+ //set HIGH for off.
+ writePinHigh(B5);
+
+ //call any user functions
+ matrix_init_user();
+}
+
diff --git a/keyboards/keyhive/navi10/rev2/rev2.h b/keyboards/keyhive/navi10/rev2/rev2.h
new file mode 100644
index 0000000000..b162d14425
--- /dev/null
+++ b/keyboards/keyhive/navi10/rev2/rev2.h
@@ -0,0 +1,34 @@
+/* Copyright 2019 Ethan Durrant (emdarcher)
+ *
+ * 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 "quantum.h"
+
+#define LAYOUT( \
+ k0, k1, k2, \
+ k3, k4, k5, \
+ \
+ k6, \
+ k7, k8, k9 \
+) \
+{ \
+ {k0, k1, k2}, \
+ {k3, k4, k5}, \
+ {KC_NO, k6, KC_NO}, \
+ {k7, k8, k9}, \
+}
+
+
diff --git a/keyboards/keyhive/navi10/rev2/rules.mk b/keyboards/keyhive/navi10/rev2/rules.mk
new file mode 100644
index 0000000000..52a1cbb711
--- /dev/null
+++ b/keyboards/keyhive/navi10/rev2/rules.mk
@@ -0,0 +1,18 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/keyhive/navi10/rev3/config.h b/keyboards/keyhive/navi10/rev3/config.h
new file mode 100644
index 0000000000..205535273a
--- /dev/null
+++ b/keyboards/keyhive/navi10/rev3/config.h
@@ -0,0 +1,50 @@
+/*
+Copyright 2019 Ethan Durrant (emdarcher)
+
+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 "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0000
+#define DEVICE_VER 0x0003
+#define MANUFACTURER emdarcher
+#define PRODUCT Navi10
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 3
+
+/* Keyboard Matrix Assignments */
+#define MATRIX_ROW_PINS \
+ { B6, B2, B3, B4 }
+#define MATRIX_COL_PINS \
+ { D4, E6, B1 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* 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
+
diff --git a/keyboards/keyhive/navi10/rev3/rev3.c b/keyboards/keyhive/navi10/rev3/rev3.c
new file mode 100644
index 0000000000..2b0355aa36
--- /dev/null
+++ b/keyboards/keyhive/navi10/rev3/rev3.c
@@ -0,0 +1,30 @@
+/* Copyright 2019 Ethan Durrant (emdarcher)
+ *
+ * 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 "rev3.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ //set the indicator LED pin to Output
+ setPinOutput(B5);
+ //set HIGH for off.
+ writePinHigh(B5);
+
+ //call any user functions
+ matrix_init_user();
+}
+
diff --git a/keyboards/keyhive/navi10/rev3/rev3.h b/keyboards/keyhive/navi10/rev3/rev3.h
new file mode 100644
index 0000000000..b162d14425
--- /dev/null
+++ b/keyboards/keyhive/navi10/rev3/rev3.h
@@ -0,0 +1,34 @@
+/* Copyright 2019 Ethan Durrant (emdarcher)
+ *
+ * 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 "quantum.h"
+
+#define LAYOUT( \
+ k0, k1, k2, \
+ k3, k4, k5, \
+ \
+ k6, \
+ k7, k8, k9 \
+) \
+{ \
+ {k0, k1, k2}, \
+ {k3, k4, k5}, \
+ {KC_NO, k6, KC_NO}, \
+ {k7, k8, k9}, \
+}
+
+
diff --git a/keyboards/keyhive/navi10/rev3/rules.mk b/keyboards/keyhive/navi10/rev3/rules.mk
new file mode 100644
index 0000000000..52a1cbb711
--- /dev/null
+++ b/keyboards/keyhive/navi10/rev3/rules.mk
@@ -0,0 +1,18 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/keyhive/navi10/rules.mk b/keyboards/keyhive/navi10/rules.mk
new file mode 100644
index 0000000000..6ebb2d0ceb
--- /dev/null
+++ b/keyboards/keyhive/navi10/rules.mk
@@ -0,0 +1 @@
+DEFAULT_FOLDER = keyhive/navi10/rev3
diff --git a/keyboards/keyhive/opus/config.h b/keyboards/keyhive/opus/config.h
new file mode 100644
index 0000000000..52ed10bc5a
--- /dev/null
+++ b/keyboards/keyhive/opus/config.h
@@ -0,0 +1,45 @@
+/* Copyright 2020 rtwayland
+ *
+ * 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 "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x434B
+#define PRODUCT_ID 0x4F50
+#define DEVICE_VER 0x0001
+#define MANUFACTURER rtwayland
+#define PRODUCT Opus
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 12
+
+/* PCB pin-out */
+#define MATRIX_ROW_PINS {B1, B3, B2, B6}
+#define MATRIX_COL_PINS {D1, D0, D4, C6, D7, E6, B4, B5, F4, F5, F6, F7}
+#define UNUSED_PINS
+
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* 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
diff --git a/keyboards/keyhive/opus/info.json b/keyboards/keyhive/opus/info.json
new file mode 100644
index 0000000000..1b2da11367
--- /dev/null
+++ b/keyboards/keyhive/opus/info.json
@@ -0,0 +1,59 @@
+{
+ "keyboard_name": "opus",
+ "maintainer": "rtwayland",
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "label": "Tab", "x": 0, "y": 0.4 },
+ { "label": "Q", "x": 1, "y": 0.4 },
+ { "label": "W", "x": 2, "y": 0.2 },
+ { "label": "E", "x": 3, "y": 0 },
+ { "label": "R", "x": 4, "y": 0.4 },
+ { "label": "T", "x": 5, "y": 0.5 },
+
+ { "label": "Y", "x": 10, "y": 0.5 },
+ { "label": "U", "x": 11, "y": 0.4 },
+ { "label": "I", "x": 12, "y": 0 },
+ { "label": "O", "x": 13, "y": 0.2 },
+ { "label": "P", "x": 14, "y": 0.4 },
+ { "label": "Back Space", "x": 15, "y": 0.4 },
+
+ { "label": "Ctrl / Esc", "x": 0, "y": 1.4 },
+ { "label": "A", "x": 1, "y": 1.4 },
+ { "label": "S", "x": 2, "y": 1.2 },
+ { "label": "D", "x": 3, "y": 1 },
+ { "label": "F", "x": 4, "y": 1.4 },
+ { "label": "G", "x": 5, "y": 1.5 },
+
+ { "label": "H", "x": 10, "y": 1.5 },
+ { "label": "J", "x": 11, "y": 1.4 },
+ { "label": "K", "x": 12, "y": 1 },
+ { "label": "L", "x": 13, "y": 1.2 },
+ { "label": ";", "x": 14, "y": 1.4 },
+ { "label": "'", "x": 15, "y": 1.4 },
+
+ { "label": "GUI", "x": 0, "y": 2.4 },
+ { "label": "Z", "x": 1, "y": 2.4 },
+ { "label": "X", "x": 2, "y": 2.2 },
+ { "label": "C", "x": 3, "y": 2 },
+ { "label": "V", "x": 4, "y": 2.4 },
+ { "label": "B", "x": 5, "y": 2.5 },
+
+ { "label": "N", "x": 10, "y": 2.5 },
+ { "label": "M", "x": 11, "y": 2.4 },
+ { "label": ",", "x": 12, "y": 2 },
+ { "label": ".", "x": 13, "y": 2.2 },
+ { "label": "/", "x": 14, "y": 2.4 },
+ { "label": "Enter", "x": 15, "y": 2.4 },
+
+ { "label": "Lower", "x": 4.8, "y": 3.7 },
+ { "label": "Shift", "x": 5.8, "y": 3.5 },
+ { "label": "Tab", "x": 6.8, "y": 3.6 },
+
+ { "label": "Enter", "x": 8.2, "y": 3.6 },
+ { "label": "Space", "x": 9.2, "y": 3.5 },
+ { "label": "Raise", "x": 10.2, "y": 3.7 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/keyhive/opus/keymaps/default/keymap.c b/keyboards/keyhive/opus/keymaps/default/keymap.c
new file mode 100644
index 0000000000..aaa1a899a2
--- /dev/null
+++ b/keyboards/keyhive/opus/keymaps/default/keymap.c
@@ -0,0 +1,51 @@
+/* Copyright 2020 rtwayland
+ *
+ * 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 QMK_KEYBOARD_H
+
+enum layer_names {
+ _BASE,
+ _SYMBOL,
+ _NUM,
+ _NAV,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT(
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ LCTL_T(KC_ESC), KC_A, KC_S, KC_D, LT(2,KC_F), KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LALT, LGUI_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, LGUI_T(KC_SLSH), KC_ENT,
+ MO(3), KC_LSFT, LALT_T(KC_TAB), LT(3,KC_ENT), LT(1,KC_SPC), KC_BSPC
+ ),
+ [_SYMBOL] = LAYOUT(
+ LCTL(KC_C), KC_TILD, KC_AT, KC_LCBR, KC_RCBR, KC_HASH, KC_ASTR, KC_CIRC, KC_AMPR, KC_PIPE, KC_BSLS, LCTL(KC_GRV),
+ KC_LCTL, KC_GRV, KC_MINS, KC_LPRN, KC_RPRN, KC_EXLM, KC_QUES, KC_DLR, KC_LT, KC_GT, KC_SLSH, KC_DQUO,
+ KC_LALT, KC_LGUI, KC_UNDS, KC_LBRC, KC_RBRC, KC_PLUS, KC_P0, KC_EQL, KC_PERC, KC_COLN, KC_NO, KC_NO,
+ KC_TRNS, KC_LSFT, KC_NO, KC_TRNS, KC_TRNS, KC_NO
+ ),
+ [_NUM] = LAYOUT(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_ASTR, KC_7, KC_8, KC_9, KC_SLSH, KC_EQL,
+ KC_LCTL, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_PLUS, KC_4, KC_5, KC_6, KC_MINS, KC_PERC,
+ KC_LALT, KC_LGUI, KC_NO, KC_NO, KC_NO, KC_NO, KC_0, KC_1, KC_2, KC_3, KC_DOT, KC_PENT,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_SPC, KC_BSPC
+ ),
+ [_NAV] = LAYOUT(
+ KC_NO, KC_NO, LALT(KC_RGHT), SGUI(KC_LBRC), SGUI(KC_RBRC), KC_NO, KC_HOME, KC_PGDN, KC_PGUP, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_LCTL, KC_LALT, KC_LSFT, KC_LGUI, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, LALT(KC_LEFT), KC_END, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_SPC, KC_BSPC
+ )
+};
diff --git a/keyboards/keyhive/opus/keymaps/default/readme.md b/keyboards/keyhive/opus/keymaps/default/readme.md
new file mode 100644
index 0000000000..ba3f26edac
--- /dev/null
+++ b/keyboards/keyhive/opus/keymaps/default/readme.md
@@ -0,0 +1,17 @@
+# The default keymap for Opus
+
+## Base Layer
+
+![opus base layer](https://i.imgur.com/zsmlS96.png)
+
+## Symbol Layer
+
+![opus symbol layer](https://i.imgur.com/Fu10HBx.jpg)
+
+## Num Layer
+
+![opus num layer](https://i.imgur.com/1hvYqi0.jpg)
+
+## Nav Layer
+
+![opus nav layer](https://i.imgur.com/JqOdXhG.jpg)
diff --git a/keyboards/keyhive/opus/keymaps/thefoxcodes/config.h b/keyboards/keyhive/opus/keymaps/thefoxcodes/config.h
new file mode 100644
index 0000000000..824ec5bd18
--- /dev/null
+++ b/keyboards/keyhive/opus/keymaps/thefoxcodes/config.h
@@ -0,0 +1,21 @@
+/* Copyright 2020 rtwayland
+ *
+ * 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
+
+// place overrides here
+#define USB_MAX_POWER_CONSUMPTION 100
+#define TAPPING_TERM 200 \ No newline at end of file
diff --git a/keyboards/keyhive/opus/keymaps/thefoxcodes/keymap.c b/keyboards/keyhive/opus/keymaps/thefoxcodes/keymap.c
new file mode 100644
index 0000000000..e0adb2af32
--- /dev/null
+++ b/keyboards/keyhive/opus/keymaps/thefoxcodes/keymap.c
@@ -0,0 +1,94 @@
+/* Copyright 2020 rtwayland
+ *
+ * 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 QMK_KEYBOARD_H
+
+enum layer_names {
+ _BASE,
+ _SYMBOL,
+ _NUM,
+ _NAV,
+ _MEDIA,
+ _WORD,
+ _FKEYS,
+ _NUMPAD,
+ _MOUSE
+};
+
+enum {
+ TD_PLAY_DO_NOT_DISTURB
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT(
+ LT(4, KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, TD(TD_PLAY_DO_NOT_DISTURB),
+ LCTL_T(KC_ESC), KC_A, KC_S, KC_D, LT(2, KC_F), KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, LT(4, KC_QUOT),
+ MO(5), LGUI_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, LGUI_T(KC_SLSH), MO(5),
+ MO(3), KC_LSFT, LALT_T(KC_TAB), LT(3, KC_ENT), LT(1, KC_SPC), KC_BSPC
+ ),
+ [_SYMBOL] = LAYOUT(
+ LCTL(KC_C), KC_TILD, KC_AT, KC_LCBR, KC_RCBR, KC_HASH, KC_ASTR, KC_CIRC, KC_AMPR, KC_PIPE, KC_BSLS, LCTL(KC_GRV),
+ KC_LCTL, KC_GRV, KC_MINS, KC_LPRN, KC_RPRN, KC_EXLM, KC_QUES, KC_DLR, KC_LT, KC_GT, KC_SLSH, KC_DQUO,
+ KC_LALT, KC_LGUI, KC_UNDS, KC_LBRC, KC_RBRC, KC_PLUS, KC_P0, KC_EQL, KC_PERC, KC_COLN, KC_NO, KC_NO,
+ KC_NO, KC_LSFT, LALT_T(KC_TAB), KC_NO, KC_TRNS, KC_NO
+ ),
+ [_NUM] = LAYOUT(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_ASTR, KC_7, KC_8, KC_9, KC_SLSH, KC_EQL,
+ KC_LCTL, KC_NO, MO(7), MO(6), KC_TRNS, KC_NO, KC_PLUS, KC_4, KC_5, KC_6, KC_MINS, KC_PERC,
+ KC_LALT, KC_LGUI, KC_NO, KC_NO, KC_NO, KC_NO, KC_0, KC_1, KC_2, KC_3, KC_DOT, KC_PENT,
+ KC_NO, KC_LSFT, LALT_T(KC_TAB), KC_NO, KC_SPC, KC_BSPC
+ ),
+ [_NAV] = LAYOUT(
+ KC_NO, KC_NO, LALT(KC_RGHT), SGUI(KC_LBRC), SGUI(KC_RBRC), KC_NO, KC_HOME, KC_PGDN, KC_PGUP, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_LCTL, KC_LALT, KC_LSFT, KC_LGUI, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, LALT(KC_LEFT), KC_END, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_SPC, KC_BSPC
+ ),
+ [_MEDIA] = LAYOUT(
+ KC_TRNS, SGUI(KC_5), SGUI(KC_3), SGUI(KC_4), MEH(KC_4), KC_VOLU, LCA(KC_U), LCAG(KC_LEFT), LCAG(KC_RGHT), LCA(KC_I), LCA(KC_EQL), LALT(LGUI(KC_POWER)),
+ KC_CAPS, KC_F11, KC_MPRV, KC_MNXT, KC_MPLY, KC_VOLD, LCA(KC_LEFT), LCA(KC_DOWN), LCA(KC_UP), LCA(KC_RIGHT), LCA(KC_MINS), KC_TRNS,
+ KC_BRID, KC_BRIU, LGUI(KC_MINS), LGUI(KC_PLUS), LGUI(KC_GRV), KC_MUTE, LCA(KC_J), LCA(KC_ENT), LCA(KC_C), LCA(KC_K), MEH(KC_UP), RESET,
+ LCTL(LSFT(KC_TAB)), LCTL(KC_TAB), KC_NO, KC_NO, MEH(KC_RGHT), MEH(KC_LEFT)
+ ),
+ [_WORD] = LAYOUT(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, LALT(LSFT(KC_MINS)), KC_NO, LALT(LGUI(KC_F)), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_NO, LALT(KC_MINS), KC_NO, SGUI(LALT(KC_V)), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_DEL
+ ),
+ [_FKEYS] = LAYOUT(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12, KC_F7, KC_F8, KC_F9, KC_F17, KC_F20,
+ KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_F11, KC_F4, KC_F5, KC_F6, KC_F16, KC_F19,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F10, KC_F1, KC_F2, KC_F3, KC_F13, KC_F18,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ ),
+ [_NUMPAD] = LAYOUT(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PAST, KC_P7, KC_P8, KC_P9, KC_PSLS, KC_PEQL,
+ KC_LCTL, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PPLS, KC_P4, KC_P5, KC_P6, KC_PMNS, KC_PERC,
+ KC_LALT, KC_LGUI, KC_NO, KC_NO, KC_NO, KC_NO, KC_P0, KC_P1, KC_P2, KC_P3, KC_PDOT, KC_PENT,
+ KC_NO, KC_TRNS, KC_NO, KC_NO, KC_LPRN, KC_RPRN
+ ),
+ [_MOUSE] = LAYOUT(
+ KC_NO, KC_NO, KC_NO, SGUI(KC_LBRC), SGUI(KC_RBRC), KC_NO, KC_HOME, KC_WH_U, KC_WH_D, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_ACL2, KC_WWW_BACK, KC_ACL0, KC_WWW_FORWARD, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_END, KC_WH_R, KC_WH_L, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_BTN1, KC_BTN2
+ ),
+};
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [TD_PLAY_DO_NOT_DISTURB] = ACTION_TAP_DANCE_DOUBLE(KC_MPLY, KC_F6)
+}; \ No newline at end of file
diff --git a/keyboards/keyhive/opus/keymaps/thefoxcodes/readme.md b/keyboards/keyhive/opus/keymaps/thefoxcodes/readme.md
new file mode 100644
index 0000000000..c1d2a0b9ec
--- /dev/null
+++ b/keyboards/keyhive/opus/keymaps/thefoxcodes/readme.md
@@ -0,0 +1 @@
+# thefoxcodes keymap
diff --git a/keyboards/keyhive/opus/keymaps/thefoxcodes/rules.mk b/keyboards/keyhive/opus/keymaps/thefoxcodes/rules.mk
new file mode 100644
index 0000000000..1ba2fa8fbe
--- /dev/null
+++ b/keyboards/keyhive/opus/keymaps/thefoxcodes/rules.mk
@@ -0,0 +1 @@
+TAP_DANCE_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/keyhive/opus/opus.c b/keyboards/keyhive/opus/opus.c
new file mode 100644
index 0000000000..5a188cf8a0
--- /dev/null
+++ b/keyboards/keyhive/opus/opus.c
@@ -0,0 +1,17 @@
+/* Copyright 2020 rtwayland
+ *
+ * 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 "opus.h"
diff --git a/keyboards/keyhive/opus/opus.h b/keyboards/keyhive/opus/opus.h
new file mode 100644
index 0000000000..ec82c5bc9a
--- /dev/null
+++ b/keyboards/keyhive/opus/opus.h
@@ -0,0 +1,39 @@
+/* Copyright 2020 rtwayland
+ *
+ * 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 "quantum.h"
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+#define LAYOUT( \
+ 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, \
+ k33, k34, k35, k36, k37, k38 \
+) \
+{ \
+ { 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 }, \
+ { KC_NO, KC_NO, KC_NO, k33, k34, k35, k36, k37, k38, KC_NO, KC_NO, KC_NO } \
+}
diff --git a/keyboards/keyhive/opus/readme.md b/keyboards/keyhive/opus/readme.md
new file mode 100644
index 0000000000..8a1adf4d18
--- /dev/null
+++ b/keyboards/keyhive/opus/readme.md
@@ -0,0 +1,15 @@
+# Opus
+
+![opus](https://i.imgur.com/1jXSUbrl.jpg)
+
+This is a 40%, non-split, ergonomic, hot-swap keyboard.
+The columns are angled to follow the natural angle of the hand.
+
+* Keyboard Maintainer: [rtwayland](https://github.com/rtwayland)
+* Hardware Supported: Pro-micro. Elite-C.
+
+Make example for this keyboard (after setting up your build environment):
+
+ make keyhive/opus:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/keyhive/opus/rules.mk b/keyboards/keyhive/opus/rules.mk
new file mode 100644
index 0000000000..515ca5621f
--- /dev/null
+++ b/keyboards/keyhive/opus/rules.mk
@@ -0,0 +1,18 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/keyhive/smallice/config.h b/keyboards/keyhive/smallice/config.h
new file mode 100644
index 0000000000..5ebafba42d
--- /dev/null
+++ b/keyboards/keyhive/smallice/config.h
@@ -0,0 +1,86 @@
+/*
+Copyright 2020 quark
+
+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 "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x514B // QK Quark
+#define PRODUCT_ID 0x5341 // SA smAllice
+#define DEVICE_VER 0x0001
+#define MANUFACTURER quark
+#define PRODUCT smAllice
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 15
+
+/*
+ * 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 { B0, B6, B5, B4 }
+#define MATRIX_COL_PINS { C7, C6, F7, F6, F5, F4, F1, D4, D6, D7, D0, D1, D2, D3, D5 }
+#define UNUSED_PINS { E6, F0 }
+
+/* COL2ROW, ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+#define RGB_DI_PIN B7
+#ifdef RGB_DI_PIN
+# define RGBLED_NUM 12
+# define RGBLIGHT_HUE_STEP 8
+# define RGBLIGHT_SAT_STEP 8
+# define RGBLIGHT_VAL_STEP 8
+# define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
+# define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
+/*== all animations enable ==*/
+# define RGBLIGHT_ANIMATIONS
+/*== or choose animations ==*/
+//# define RGBLIGHT_EFFECT_BREATHING
+//# define RGBLIGHT_EFFECT_RAINBOW_MOOD
+//# define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+//# define RGBLIGHT_EFFECT_SNAKE
+//# define RGBLIGHT_EFFECT_KNIGHT
+//# define RGBLIGHT_EFFECT_CHRISTMAS
+//# define RGBLIGHT_EFFECT_STATIC_GRADIENT
+//# define RGBLIGHT_EFFECT_RGB_TEST
+//# define RGBLIGHT_EFFECT_ALTERNATING
+/*== customize breathing effect ==*/
+/*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
+//# define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
+/*==== use exp() and sin() ====*/
+//# define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
+//# define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
+#endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* Bootmagic Lite key configuration */
+#define BOOTMAGIC_LITE_ROW 0
+#define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/keyhive/smallice/info.json b/keyboards/keyhive/smallice/info.json
new file mode 100644
index 0000000000..24ce4cce22
--- /dev/null
+++ b/keyboards/keyhive/smallice/info.json
@@ -0,0 +1,10 @@
+{
+ "keyboard_name": "smAllice",
+ "url": "https://keyhive.xyz/shop/smallice",
+ "maintainer": "https://github.com/Armastardo",
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"label":"V+", "x":0.5, "y":0}, {"label":"Tab", "x":1.75, "y":0}, {"label":"Q", "x":2.75, "y":0}, {"label":"W", "x":3.75, "y":0}, {"label":"E", "x":4.75, "y":0}, {"label":"R", "x":5.75, "y":0}, {"label":"T", "x":6.75, "y":0}, {"label":"Y", "x":8.25, "y":0}, {"label":"U", "x":9.25, "y":0}, {"label":"I", "x":10.25, "y":0}, {"label":"O", "x":11.25, "y":0}, {"label":"P", "x":12.25, "y":0}, {"label":"[ {", "x":13.25, "y":0}, {"label":"] }", "x":14.25, "y":0}, {"label":"Bcsp", "x":15.25, "y":0}, {"label":"V-", "x":0.25, "y":1}, {"label":"Caps", "x":1.5, "y":1, "w":1.25}, {"label":"A", "x":2.75, "y":1}, {"label":"S", "x":3.75, "y":1}, {"label":"D", "x":4.75, "y":1}, {"label":"F", "x":5.75, "y":1}, {"label":"G", "x":6.75, "y":1}, {"label":"H", "x":8.75, "y":1}, {"label":"J", "x":9.75, "y":1}, {"label":"K", "x":10.75, "y":1}, {"label":"L", "x":11.75, "y":1}, {"label":": ;", "x":12.75, "y":1}, {"label":", \"", "x":13.75, "y":1}, {"label":"Enter", "x":14.75, "y":1, "w":1.75}, {"label":"V-", "x":0, "y":2}, {"label":"Shift", "x":1.25, "y":2, "w":1.75}, {"label":"Z", "x":3, "y":2}, {"label":"X", "x":4, "y":2}, {"label":"C", "x":5, "y":2}, {"label":"V", "x":6, "y":2}, {"label":"B", "x":7, "y":2}, {"label":"B", "x":8.5, "y":2}, {"label":"N", "x":9.5, "y":2}, {"label":"M", "x":10.5, "y":2}, {"label":"<", "x":11.5, "y":2}, {"label":">", "x":12.5, "y":2}, {"label":"Shift", "x":13.5, "y":2, "w":1.25}, {"label":"Up", "x":14.75, "y":2}, {"label":"?", "x":15.75, "y":2}, {"label":"Ctrl", "x":1.25, "y":3}, {"label":"Alt", "x":3, "y":3, "w":1.25}, {"x":4.25, "y":3, "w":2}, {"label":"Win", "x":6.25, "y":3}, {"x":9.5, "y":3, "w":2.75}, {"label":"Fn", "x":12.25, "y":3}, {"label":"left", "x":13.75, "y":3}, {"label":"down", "x":14.75, "y":3}, {"label":"right", "x":15.75, "y":3}]
+ }
+ }
+}
diff --git a/keyboards/keyhive/smallice/keymaps/default/keymap.c b/keyboards/keyhive/smallice/keymaps/default/keymap.c
new file mode 100644
index 0000000000..d4a5fad42b
--- /dev/null
+++ b/keyboards/keyhive/smallice/keymaps/default/keymap.c
@@ -0,0 +1,32 @@
+/* Copyright 2020 quark
+ *
+ * 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 QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base */
+ [0] = LAYOUT(
+ KC_ESC, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
+ KC_VOLU, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT,
+ KC_VOLD, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, KC_UP, KC_SLSH,
+ KC_LCTRL, KC_LALT, KC_SPC, KC_LWIN, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+ [1] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+};
diff --git a/keyboards/keyhive/smallice/keymaps/default/readme.md b/keyboards/keyhive/smallice/keymaps/default/readme.md
new file mode 100644
index 0000000000..e0c573662c
--- /dev/null
+++ b/keyboards/keyhive/smallice/keymaps/default/readme.md
@@ -0,0 +1,3 @@
+# The default keymap for smAllice
+
+![smAllice](https://i.imgur.com/OngGf9n.png) \ No newline at end of file
diff --git a/keyboards/keyhive/smallice/keymaps/via/keymap.c b/keyboards/keyhive/smallice/keymaps/via/keymap.c
new file mode 100644
index 0000000000..d9f5d58d65
--- /dev/null
+++ b/keyboards/keyhive/smallice/keymaps/via/keymap.c
@@ -0,0 +1,44 @@
+/* Copyright 2020 quark
+ *
+ * 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 QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base */
+ [0] = LAYOUT(
+ KC_ESC, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
+ KC_VOLU, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT,
+ KC_VOLD, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, KC_UP, KC_SLSH,
+ KC_LCTRL, KC_LALT, KC_SPC, KC_LWIN, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+ [1] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [2] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [3] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+};
diff --git a/keyboards/keyhive/smallice/keymaps/via/readme.md b/keyboards/keyhive/smallice/keymaps/via/readme.md
new file mode 100644
index 0000000000..af98163f94
--- /dev/null
+++ b/keyboards/keyhive/smallice/keymaps/via/readme.md
@@ -0,0 +1,3 @@
+# VIA keymap for smAllice
+
+![smAllice](https://i.imgur.com/OngGf9n.png) \ No newline at end of file
diff --git a/keyboards/keyhive/smallice/keymaps/via/rules.mk b/keyboards/keyhive/smallice/keymaps/via/rules.mk
new file mode 100644
index 0000000000..43061db1dd
--- /dev/null
+++ b/keyboards/keyhive/smallice/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/keyhive/smallice/readme.md b/keyboards/keyhive/smallice/readme.md
new file mode 100644
index 0000000000..2276b38a9e
--- /dev/null
+++ b/keyboards/keyhive/smallice/readme.md
@@ -0,0 +1,21 @@
+# smAllice
+
+![smAllice](https://i.imgur.com/HAiJnnK.png)
+
+A 40% alice-like keyboard with an arrow cluster.
+
+* Keyboard Maintainer: [Brandon Beltran](https://github.com/armastardo)
+* Hardware Supported: smAllice PCB
+* Hardware Availability: [KeyHive](http://keyhive.xyz/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make keyhive/smallice:default
+
+### Flash
+
+- Plug in
+- Press reset button
+- Flash using QMK Toolbox or dfu-util (`make smallice:<keymap>:flash`)
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/keyhive/smallice/rules.mk b/keyboards/keyhive/smallice/rules.mk
new file mode 100644
index 0000000000..1f52c37154
--- /dev/null
+++ b/keyboards/keyhive/smallice/rules.mk
@@ -0,0 +1,18 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/keyhive/smallice/smallice.c b/keyboards/keyhive/smallice/smallice.c
new file mode 100644
index 0000000000..c7d65e27ab
--- /dev/null
+++ b/keyboards/keyhive/smallice/smallice.c
@@ -0,0 +1,17 @@
+/* Copyright 2020 armastardo / quark
+ *
+ * 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 "smallice.h"
diff --git a/keyboards/keyhive/smallice/smallice.h b/keyboards/keyhive/smallice/smallice.h
new file mode 100644
index 0000000000..12d4356795
--- /dev/null
+++ b/keyboards/keyhive/smallice/smallice.h
@@ -0,0 +1,40 @@
+/* Copyright 2020 armastardo / quark
+ *
+ * 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 "quantum.h"
+
+/* This is a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+#define LAYOUT( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K114, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, \
+ K301, K303, K305, K306, K308, K310, K312, K313, K314 \
+) \
+{ \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO, K114 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214 }, \
+ { KC_NO, K301, KC_NO, K303, KC_NO, K305, K306, KC_NO, K308, KC_NO, K310, KC_NO, K312, K313, K314 } \
+}
diff --git a/keyboards/keyhive/southpole/config.h b/keyboards/keyhive/southpole/config.h
new file mode 100644
index 0000000000..5603829c47
--- /dev/null
+++ b/keyboards/keyhive/southpole/config.h
@@ -0,0 +1,45 @@
+#pragma once
+
+//#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER u/waxpoetic
+#define PRODUCT southpole
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 20
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { D2, D3, C6, C7, D5 }
+#define MATRIX_COL_PINS { B0, B1, B2, B3, B7, D0, D1, F0, F1, F4, F5, F6, F7, B6, B5, B4, D7, D6, D4, E6 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* number of backlight levels */
+
+#ifdef BACKLIGHT_PIN
+#define BACKLIGHT_LEVELS 0
+#endif
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+/* 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
+
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 0
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#endif \ No newline at end of file
diff --git a/keyboards/keyhive/southpole/info.json b/keyboards/keyhive/southpole/info.json
new file mode 100644
index 0000000000..9781fd35ab
--- /dev/null
+++ b/keyboards/keyhive/southpole/info.json
@@ -0,0 +1,95 @@
+{
+ "keyboard_name": "southpole",
+ "url": "",
+ "maintainer": "qmk",
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"Num Lock", "x":0, "y":0},
+ {"label":"/", "x":1, "y":0},
+ {"label":"*", "x":2, "y":0},
+ {"label":"-", "x":3, "y":0},
+ {"label":"Esc", "x":4.5, "y":0},
+ {"label":"1", "x":5.5, "y":0},
+ {"label":"2", "x":6.5, "y":0},
+ {"label":"3", "x":7.5, "y":0},
+ {"label":"4", "x":8.5, "y":0},
+ {"label":"5", "x":9.5, "y":0},
+ {"label":"6", "x":10.5, "y":0},
+ {"label":"7", "x":11.5, "y":0},
+ {"label":"8", "x":12.5, "y":0},
+ {"label":"9", "x":13.5, "y":0},
+ {"label":"0", "x":14.5, "y":0},
+ {"label":"-", "x":15.5, "y":0},
+ {"label":"=", "x":16.5, "y":0},
+ {"label":"\\", "x":17.5, "y":0},
+ {"label":"Delete", "x":18.5, "y":0},
+ {"label":"Insert", "x":19.5, "y":0},
+ {"label":"7", "x":0, "y":1},
+ {"label":"8", "x":1, "y":1},
+ {"label":"9", "x":2, "y":1},
+ {"label":"+", "x":3, "y":1, "h":2},
+ {"label":"Tab", "x":4.5, "y":1, "w":1.5},
+ {"label":"Q", "x":6, "y":1},
+ {"label":"W", "x":7, "y":1},
+ {"label":"E", "x":8, "y":1},
+ {"label":"R", "x":9, "y":1},
+ {"label":"T", "x":10, "y":1},
+ {"label":"Y", "x":11, "y":1},
+ {"label":"U", "x":12, "y":1},
+ {"label":"I", "x":13, "y":1},
+ {"label":"O", "x":14, "y":1},
+ {"label":"P", "x":15, "y":1},
+ {"label":"[", "x":16, "y":1},
+ {"label":"]", "x":17, "y":1},
+ {"label":"Backspace", "x":18, "y":1, "w":1.5},
+ {"label":"Vol +", "x":19.5, "y":1},
+ {"label":"4", "x":0, "y":2},
+ {"label":"5", "x":1, "y":2},
+ {"label":"6", "x":2, "y":2},
+ {"label":"Enter", "x":3, "y":3, "h":2},
+ {"label":"Caps Lock", "x":4.5, "y":2, "w":1.75},
+ {"label":"A", "x":6.25, "y":2},
+ {"label":"S", "x":7.25, "y":2},
+ {"label":"D", "x":8.25, "y":2},
+ {"label":"F", "x":9.25, "y":2},
+ {"label":"G", "x":10.25, "y":2},
+ {"label":"H", "x":11.25, "y":2},
+ {"label":"J", "x":12.25, "y":2},
+ {"label":"K", "x":13.25, "y":2},
+ {"label":"L", "x":14.25, "y":2},
+ {"label":";", "x":15.25, "y":2},
+ {"label":"'", "x":16.25, "y":2},
+ {"label":"Enter", "x":17.25, "y":2, "w":2.25},
+ {"label":"Vol -", "x":19.5, "y":2},
+ {"label":"1", "x":0, "y":3},
+ {"label":"2", "x":1, "y":3},
+ {"label":"3", "x":2, "y":3},
+ {"label":"Shift", "x":4.5, "y":3, "w":2.25},
+ {"label":"Z", "x":6.75, "y":3},
+ {"label":"X", "x":7.75, "y":3},
+ {"label":"C", "x":8.75, "y":3},
+ {"label":"V", "x":9.75, "y":3},
+ {"label":"B", "x":10.75, "y":3},
+ {"label":"N", "x":11.75, "y":3},
+ {"label":"M", "x":12.75, "y":3},
+ {"label":",", "x":13.75, "y":3},
+ {"label":".", "x":14.75, "y":3},
+ {"label":"/", "x":15.75, "y":3},
+ {"label":"Shift", "x":16.75, "y":3, "w":1.75},
+ {"label":"Up", "x":18.5, "y":3},
+ {"label":"Mute", "x":19.5, "y":3},
+ {"label":"0", "x":0, "y":4, "w":2},
+ {"label":".", "x":2, "y":4},
+ {"label":"Ctrl", "x":4.5, "y":4, "w":1.25},
+ {"label":"GUI", "x":5.75, "y":4, "w":1.25},
+ {"label":"Alt", "x":7, "y":4, "w":1.25},
+ {"label":"Space", "x":8.25, "y":4, "w":7},
+ {"label":"Fn", "x":15.25, "y":4, "w":1.5},
+ {"label":"Left", "x":17.5, "y":4},
+ {"label":"Down", "x":18.5, "y":4},
+ {"label":"Right", "x":19.5, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/keyhive/southpole/keymaps/default/keymap.c b/keyboards/keyhive/southpole/keymaps/default/keymap.c
new file mode 100644
index 0000000000..2777f00b5b
--- /dev/null
+++ b/keyboards/keyhive/southpole/keymaps/default/keymap.c
@@ -0,0 +1,20 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ LAYOUT(
+ KC_NLCK, KC_SLSH, KC_ASTR, KC_MINS, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL, KC_HOME,
+ KC_7, KC_8, KC_9, KC_PLUS, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_PGUP,
+ KC_4, KC_5, KC_6, KC_ENT, KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_1, KC_2, KC_3, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_UP, KC_END,
+ KC_0, KC_DOT, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
+
+ LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, RESET, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+
+};
diff --git a/keyboards/keyhive/southpole/keymaps/foobeard/keymap.c b/keyboards/keyhive/southpole/keymaps/foobeard/keymap.c
new file mode 100644
index 0000000000..ef2710d0a3
--- /dev/null
+++ b/keyboards/keyhive/southpole/keymaps/foobeard/keymap.c
@@ -0,0 +1,72 @@
+/*
+Base Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
+Modified 2017 Andrew Novak <ndrw.nvk@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 LicensezZZ
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _QWERTY,
+ _RAISE
+};
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+};
+
+#define RAISE MO(_RAISE)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Layer 0, default layer
+ * ,--------------------------------------------------------------------------------------------------------------------------------------------.
+ * |NumLck| / | * | - | | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ |Delete| Ins |
+ * |------+------+------+------+-+-------------------------------------------------------------------------------------------------------+------|
+ * | 7 | 8 | 9 | + | | Tab | Q | W | E | R | T | Y | U | I | O | P | { | } | BkSpc | Vol+ |
+ * |------+------+------+------+-+-------------------------------------------------------------------------------------------------------+------|
+ * | 4 | 5 | 6 | + | | Caps | A | S | D | F | G | H | J | K | L | ; | ' | Return | Vol- |
+ * |------+------+------+------+-+-------------------------------------------------------------------------------------------------------+------|
+ * | 1 | 2 | 3 | En | | LShft | Z | X | C | V | B | N | M | , | . | / | RShft | Up | Mute |
+ * |------+------+------+------+-+----------------------------------------------------------------------------------------------+--------+------|
+ * | 0 | . | En | | Ctrl | Win | Alt | Space | Fn | | Left | Down | Right|
+ * `------+------+------+------+-+-------------------------------------------------------------------------------------------------------+------'
+ */
+ [_QWERTY] = LAYOUT(
+ KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DELETE, KC_INS, \
+ KC_P7, KC_P8, KC_P9, KC_PPLS, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_VOLU, \
+ KC_P4, KC_P5, KC_P6, KC_PENT, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_VOLD, \
+ KC_P1, KC_P2, KC_P3, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_MUTE, \
+ KC_P0, KC_PDOT, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+
+ /*layer 1, function layer
+ * ,--------------------------------------------------------------------------------------------------------------------------------------------.
+ * |Reset | | | | | ` | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | | |Calc |
+ * |------+------+------+------+-+-------------------------------------------------------------------------------------------------------+------|
+ * | | | | | | | | | | | | | | | | | | | | |
+ * |------+------+------+------+-+-------------------------------------------------------------------------------------------------------+------|
+ * | | | | | | | | | | | | | | | | | | | |
+ * |------+------+------+------+-+-------------------------------------------------------------------------------------------------------+------|
+ * | | | | | | | | | | | | | | | | | | | |
+ * |------+------+------+------+-+----------------------------------------------------------------------------------------------+--------+------|
+ * | | | | | | | | | | | | | |
+ * `------+------+------+------+-+-------------------------------------------------------------------------------------------------------+------'
+ */
+
+ [_RAISE] = LAYOUT(
+ RESET, _______, _______, _______, KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, KC_CALC, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ )
+}; \ No newline at end of file
diff --git a/keyboards/keyhive/southpole/readme.md b/keyboards/keyhive/southpole/readme.md
new file mode 100644
index 0000000000..3f0cbc3a92
--- /dev/null
+++ b/keyboards/keyhive/southpole/readme.md
@@ -0,0 +1,13 @@
+# Southpole
+[Southpole](https://imgur.com/a/MZ2wdYt)
+
+PCB designed by u/waxpoetic for a southpaw style board with an hhkb style layout.
+
+Keyboard Maintainer: ericduns
+Hardware Supported: Teensy 2.0
+
+Make example for this keyboard (after setting up your build environment):
+
+ make keyhive/southpole:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/keyhive/southpole/rules.mk b/keyboards/keyhive/southpole/rules.mk
new file mode 100644
index 0000000000..278ee36f23
--- /dev/null
+++ b/keyboards/keyhive/southpole/rules.mk
@@ -0,0 +1,18 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = halfkay
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+#AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = no
diff --git a/keyboards/keyhive/southpole/southpole.c b/keyboards/keyhive/southpole/southpole.c
new file mode 100644
index 0000000000..f345893fb5
--- /dev/null
+++ b/keyboards/keyhive/southpole/southpole.c
@@ -0,0 +1 @@
+#include "southpole.h"
diff --git a/keyboards/keyhive/southpole/southpole.h b/keyboards/keyhive/southpole/southpole.h
new file mode 100644
index 0000000000..99cf2ce7b5
--- /dev/null
+++ b/keyboards/keyhive/southpole/southpole.h
@@ -0,0 +1,18 @@
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, K016, K017, K018, K019, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116, K117, K119, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216, K219, \
+ K300, K301, K302, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, K316, K319, \
+ K401, K402, K404, K405, K406, K409, K413, K415, K416, K419 \
+) \
+ { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, K016, K017, K018, K019 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116, K117, KC_NO, K119 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216, KC_NO, KC_NO, K219 }, \
+ { K300, K301, K302, KC_NO, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, K316, KC_NO, KC_NO, K319 }, \
+ { KC_NO, K401, K402, KC_NO, K404, K405, K406, KC_NO, KC_NO, K409, KC_NO, KC_NO, KC_NO, K413, KC_NO, K415, K416, KC_NO, KC_NO, K419 } \
+}
diff --git a/keyboards/keyhive/uno/config.h b/keyboards/keyhive/uno/config.h
new file mode 100644
index 0000000000..0128ee2d5d
--- /dev/null
+++ b/keyboards/keyhive/uno/config.h
@@ -0,0 +1,21 @@
+/* Copyright 2020 Snipeye
+ *
+ * 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 "config_common.h"
+
+// See rev1/config.h and rev2/config.h to configure your uno.
diff --git a/keyboards/keyhive/uno/info.json b/keyboards/keyhive/uno/info.json
new file mode 100644
index 0000000000..d426f9e426
--- /dev/null
+++ b/keyboards/keyhive/uno/info.json
@@ -0,0 +1,10 @@
+{
+ "keyboard_name": "Uno",
+ "url": "https://www.reddit.com/r/mechmarket/comments/gyijm7/gb_uno/",
+ "maintainer": "Snipeye",
+ "layouts": {
+ "LAYOUT": {
+ "layout": [ {"x": 0, "y": 0 }]
+ }
+ }
+ }
diff --git a/keyboards/keyhive/uno/keymaps/copypasta/keymap.c b/keyboards/keyhive/uno/keymaps/copypasta/keymap.c
new file mode 100644
index 0000000000..74e5f62fc5
--- /dev/null
+++ b/keyboards/keyhive/uno/keymaps/copypasta/keymap.c
@@ -0,0 +1,85 @@
+/* Copyright 2020 Snipeye
+ *
+ * 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 QMK_KEYBOARD_H
+
+enum uno_keycode
+{
+ UNO = SAFE_RANGE
+};
+
+static uint16_t pressTimer = 0xFFFF;
+#define CUSTOM_LONGPRESS 1000
+#define PASTA_COUNT 4
+
+const char *pasta[PASTA_COUNT] = {
+ "Hey - I'm Uno... V2. This time, I have uno more features: I support a rotary encoder, too. That's it. That's the only difference.",
+ "Did you ever hear the tragedy of Darth Plagueis the Wise? I thought not. It's not a story the Jedi would tell you. It's a Sith legend. Darth Plagueis was a Dark Lord of the Sith, so powerful and so wise he could use the Force to influence the midichlorians to create life... He had such a knowledge of the dark side that he could even keep the ones he cared about from dying. The dark side of the Force is a pathway to many abilities some consider to be unnatural. He became so powerful... the only thing he was afraid of was losing his power, which eventually, of course, he did. Unfortunately, he taught his apprentice everything he knew, then his apprentice killed him in his sleep. Ironic, he could save others from death, but not himself.",
+ "The intent is to provide players with a sense of pride and accomplishment for unlocking different heroes. As for cost, we selected initial values based upon data from the Open Beta and other adjustments made to milestone rewards before launch. Among other things, we're looking at average per-player credit earn rates on a daily basis, and we'll be making constant adjustments to ensure that players have challenges that are compelling, rewarding, and of course attainable via gameplay. We appreciate the candid feedback, and the passion the community has put forth around the current topics here on Reddit, our forums and across numerous social media outlets. Our team will continue to make changes and monitor community feedback and update everyone as soon and as often as we can.",
+ "The FitnessGram Pacer Test is a multistage aerobic capacity test that progressively gets more difficult as it continues. The 20 meter pacer test will begin in 30 seconds. Line up at the start. The running speed starts slowly, but gets faster each minute after you hear this signal. [beep] A single lap should be completed each time you hear this sound. [ding] Remember to run in a straight line, and run as long as possible. The second time you fail to complete a lap before the sound, your test is over. The test will begin on the word start. On your mark, get ready, start.",
+};
+
+uint8_t pastaIndex = 0;
+
+enum encoder_names {
+ _ENCODER,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ UNO
+ )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case UNO:
+ if (record->event.pressed) {
+ pressTimer = timer_read();
+ } else {
+ uint16_t timeElapsed = timer_elapsed(pressTimer);
+ if (timeElapsed < CUSTOM_LONGPRESS) {
+ send_string(pasta[pastaIndex]);
+ } else {
+ reset_keyboard();
+ }
+ }
+ break;
+ }
+ return false;
+}
+
+void keyboard_post_init_user(void) {
+ rgblight_enable_noeeprom();
+ rgblight_sethsv_noeeprom(0, 255, 255);
+ rgblight_mode_noeeprom(1);
+ //rgblight_mode_noeeprom(RGBLIGHT_MODE_RAINBOW_MOOD);
+}
+
+void encoder_update_user(uint8_t index, bool clockwise) {
+ if (index == _ENCODER) { /* First encoder */
+ if (clockwise) {
+ pastaIndex++;
+ pastaIndex %= PASTA_COUNT;
+ } else {
+ pastaIndex += PASTA_COUNT;
+ pastaIndex--;
+ pastaIndex %= PASTA_COUNT;
+ }
+ rgblight_sethsv_noeeprom((255/PASTA_COUNT)*pastaIndex, 255, 255);
+ rgblight_mode_noeeprom(1);
+ }
+}
diff --git a/keyboards/keyhive/uno/keymaps/copypasta/readme.md b/keyboards/keyhive/uno/keymaps/copypasta/readme.md
new file mode 100644
index 0000000000..1ad009c16c
--- /dev/null
+++ b/keyboards/keyhive/uno/keymaps/copypasta/readme.md
@@ -0,0 +1,4 @@
+# A copypasta keymap for uno
+![Picture](https://i.imgur.com/OqPyWbbl.jpg)
+
+[A demo of this keymap can be found here.](https://www.reddit.com/r/MechanicalKeyboards/comments/k7w1j1/qmk_is_a_pathway_to_many_abilities_some_consider/)
diff --git a/keyboards/keyhive/uno/keymaps/default/keymap.c b/keyboards/keyhive/uno/keymaps/default/keymap.c
new file mode 100644
index 0000000000..43c885c800
--- /dev/null
+++ b/keyboards/keyhive/uno/keymaps/default/keymap.c
@@ -0,0 +1,63 @@
+/* Copyright 2020 Snipeye
+ *
+ * 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 QMK_KEYBOARD_H
+
+enum uno_keycode
+{
+ UNO = SAFE_RANGE
+};
+
+enum encoder_names {
+ _ENCODER,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ UNO
+ )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case UNO:
+ if (record->event.pressed) {
+ SEND_STRING("Hello!");
+ }
+ break;
+ return false;
+ }
+ return true;
+}
+
+void keyboard_post_init_user(void) {
+ rgblight_enable_noeeprom();
+ rgblight_sethsv_noeeprom(255, 255, 255);
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_RAINBOW_MOOD);
+}
+
+bool encoder_update_user(uint8_t index, bool clockwise) {
+ if (index == _ENCODER) { /* First encoder */
+ if (clockwise) {
+ tap_code(KC_A);
+ } else {
+ tap_code(KC_B);
+ }
+ return false;
+ }
+ return true;
+}
+
diff --git a/keyboards/keyhive/uno/keymaps/default/readme.md b/keyboards/keyhive/uno/keymaps/default/readme.md
new file mode 100644
index 0000000000..d783a80acc
--- /dev/null
+++ b/keyboards/keyhive/uno/keymaps/default/readme.md
@@ -0,0 +1,5 @@
+# The default keymap for uno
+![Picture](https://i.imgur.com/OqPyWbbl.jpg)
+
+This keymap types "Hello!" when pressed and presses 'A' and 'B' when turning the
+encoder.
diff --git a/keyboards/keyhive/uno/keymaps/demo/keymap.c b/keyboards/keyhive/uno/keymaps/demo/keymap.c
new file mode 100644
index 0000000000..cd3c3dadef
--- /dev/null
+++ b/keyboards/keyhive/uno/keymaps/demo/keymap.c
@@ -0,0 +1,123 @@
+/* Copyright 2020 Snipeye
+ *
+ * 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 QMK_KEYBOARD_H
+
+enum uno_keycode
+{
+ UNO = SAFE_RANGE
+};
+
+static uint16_t pressTimer = 0xFFFF;
+#define CUSTOM_LONGPRESS 150
+#define CUSTOM_LONGERPRESS 750
+#define CUSTOM_STRING "I can put a whole buncha text in here and type it all with a single keypress."
+#define RESET_LENGTH 3000
+const uint8_t PROGMEM RGBLED_RAINBOW_MOOD_INTERVALS[] = { 10, 25, 50 };
+
+char stringToSend[2] = "a";
+char maxLetter = 'z';
+
+uint8_t presetCounter = 0;
+
+#define COUNTER X_A
+
+enum encoder_names {
+ _ENCODER,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ UNO
+ )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case UNO:
+ if (record->event.pressed) {
+ pressTimer = timer_read();
+ } else {
+ uint16_t timeElapsed = timer_elapsed(pressTimer);
+ switch (presetCounter) {
+ case 0:
+ SEND_STRING(SS_LCMD("n"));
+ break;
+ case 1:
+ SEND_STRING("Hello!");
+ break;
+ case 2:
+ SEND_STRING("\n\nI am uno!");
+ break;
+ case 3:
+ SEND_STRING("\n\nI can do all sorts of useless things!");
+ break;
+ case 4:
+ SEND_STRING("\n\nAnd I have a built-in RGB LED!\n\n\n");
+ rgblight_sethsv_noeeprom(255, 255, 255);
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_RAINBOW_MOOD);
+ break;
+ default:
+ if (timeElapsed < CUSTOM_LONGPRESS) {
+ // Normal press. We're going to send the current letter and increment the counter.
+ SEND_STRING(SS_TAP(X_BSPACE));
+ send_string(stringToSend);
+ stringToSend[0]++;
+ if (stringToSend[0] > maxLetter) {
+ stringToSend[0] = 'a';
+ }
+ } else if (timeElapsed < CUSTOM_LONGERPRESS) {
+ // Long press, confirm the current letter, reset counter
+ stringToSend[0] = 'a';
+ send_string(stringToSend);
+ } else if (timeElapsed < RESET_LENGTH) {
+ // Longer press, display macro.
+ SEND_STRING(CUSTOM_STRING);
+ } else {
+ reset_keyboard();
+ }
+ presetCounter--;
+ break;
+ }
+ presetCounter++;
+ }
+ break;
+ }
+ return false;
+}
+
+void keyboard_post_init_user(void) {
+ rgblight_enable_noeeprom();
+ rgblight_sethsv_noeeprom(0, 0, 0);
+ rgblight_mode(1);
+ // Uncomment to enable rainbow mode when plugged in.
+ // Otherwise, the LED will be revealed after a few keypresses.
+ //rgblight_sethsv_noeeprom(255, 255, 255);
+ //rgblight_mode_noeeprom(RGBLIGHT_MODE_RAINBOW_MOOD);
+}
+
+bool encoder_update_user(uint8_t index, bool clockwise) {
+ if (index == _ENCODER) { /* First encoder */
+ if (clockwise) {
+ tap_code(KC_A);
+ } else {
+ tap_code(KC_B);
+ }
+ return false;
+ }
+ return true;
+}
+
diff --git a/keyboards/keyhive/uno/keymaps/demo/readme.md b/keyboards/keyhive/uno/keymaps/demo/readme.md
new file mode 100644
index 0000000000..ec91247861
--- /dev/null
+++ b/keyboards/keyhive/uno/keymaps/demo/readme.md
@@ -0,0 +1,4 @@
+# The demo keymap for uno
+![Picture](https://i.imgur.com/OqPyWbbl.jpg)
+
+[You can find a video of this keymap being demoed here](https://imgur.com/a/Z7G5Aam).
diff --git a/keyboards/keyhive/uno/readme.md b/keyboards/keyhive/uno/readme.md
new file mode 100644
index 0000000000..23776115f3
--- /dev/null
+++ b/keyboards/keyhive/uno/readme.md
@@ -0,0 +1,34 @@
+# Uno
+
+![Uno](https://i.imgur.com/OqPyWbbl.jpg)
+
+A 1-key, in-USB "board" for the lulz
+
+* Keyboard Maintainer: [Snipeye](https://github.com/Snipeye)
+* Hardware Availability: [keyhive.xyz](https://keyhive.xyz/shop/uno-single-key-keyboard)
+
+There are two revisions of Uno. If your Uno supports a rotary encoder, use rev2.
+If it *does not* support a rotary encoder, use rev1. The following examples use
+`rev2` &mdash; be sure to change this if you are using `rev1`.
+
+Make example for this keyboard (after setting up your build environment; make
+sure to change `rev2` to your Uno's version):
+
+ make keyhive/uno/rev2:default
+
+Flashing example for this keyboard (change `rev2` to `rev1` if needed):
+
+ make keyhive/uno/rev2:default:flash
+
+If you prefer to use the `qmk` tool:
+
+ qmk compile -kb keyhive/uno/rev2 -km default
+
+Create your own keymap with:
+
+ qmk new-keymap -kb keyhive/uno/rev2
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+### Credits
++ Everything by Snipeye
diff --git a/keyboards/keyhive/uno/rev1/config.h b/keyboards/keyhive/uno/rev1/config.h
new file mode 100644
index 0000000000..11c84ad2ab
--- /dev/null
+++ b/keyboards/keyhive/uno/rev1/config.h
@@ -0,0 +1,74 @@
+/* Copyright 2020 Snipeye
+ *
+ * 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 "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0xACC8
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Broekhuijsen
+#define PRODUCT Uno rev1
+
+#define RGBLIGHT_EFFECT_RAINBOW_MOOD
+// #define RGBLIGHT_ANIMATIONS
+
+/* key matrix size */
+#define MATRIX_ROWS 1
+#define MATRIX_COLS 1
+
+/* Uno default pinout */
+#define DIRECT_PINS { \
+ { B6 } \
+}
+#define UNUSED_PINS
+
+#ifdef RGBLIGHT_ENABLE
+#define RGB_DI_PIN F6
+#define RGBLED_NUM 1
+#endif
+
+// #define RGB_DI_PIN E2
+// #ifdef RGB_DI_PIN
+// #define RGBLED_NUM 16
+// #define RGBLIGHT_HUE_STEP 32
+// #define RGBLIGHT_SAT_STEP 32
+// #define RGBLIGHT_VAL_STEP 32
+// #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
+// #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
+// /*== all animations enable ==*/
+// #define RGBLIGHT_ANIMATIONS
+// /*== or choose animations ==*/
+// #define RGBLIGHT_EFFECT_BREATHING
+// #define RGBLIGHT_EFFECT_RAINBOW_MOOD
+// #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+// #define RGBLIGHT_EFFECT_SNAKE
+// #define RGBLIGHT_EFFECT_KNIGHT
+// #define RGBLIGHT_EFFECT_CHRISTMAS
+// #define RGBLIGHT_EFFECT_STATIC_GRADIENT
+// #define RGBLIGHT_EFFECT_RGB_TEST
+// #define RGBLIGHT_EFFECT_ALTERNATING
+// /*== customize breathing effect ==*/
+// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
+// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
+// /*==== use exp() and sin() ====*/
+// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
+// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
diff --git a/keyboards/keyhive/uno/rev1/rev1.h b/keyboards/keyhive/uno/rev1/rev1.h
new file mode 100644
index 0000000000..691bdd1dc3
--- /dev/null
+++ b/keyboards/keyhive/uno/rev1/rev1.h
@@ -0,0 +1,25 @@
+/* Copyright 2020 Snipeye
+ *
+ * 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 "quantum.h"
+
+#define LAYOUT( \
+ K00 \
+) { \
+ { K00 } \
+}
diff --git a/keyboards/keyhive/uno/rev1/rules.mk b/keyboards/keyhive/uno/rev1/rules.mk
new file mode 100644
index 0000000000..7180be7497
--- /dev/null
+++ b/keyboards/keyhive/uno/rev1/rules.mk
@@ -0,0 +1,18 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = no # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/keyhive/uno/rev2/config.h b/keyboards/keyhive/uno/rev2/config.h
new file mode 100644
index 0000000000..37ea08c017
--- /dev/null
+++ b/keyboards/keyhive/uno/rev2/config.h
@@ -0,0 +1,49 @@
+/* Copyright 2020 Snipeye
+ *
+ * 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 "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0xACC8
+#define DEVICE_VER 0x0002
+#define MANUFACTURER Broekhuijsen
+#define PRODUCT Uno rev2
+
+#define RGBLIGHT_EFFECT_RAINBOW_MOOD
+
+/* ENCODER */
+#define ENCODERS_PAD_A { B2 }
+#define ENCODERS_PAD_B { B3 }
+
+/* key matrix size */
+#define MATRIX_ROWS 1
+#define MATRIX_COLS 1
+
+/* Uno default pinout */
+#define DIRECT_PINS { \
+ { D0 } \
+}
+#define UNUSED_PINS
+
+#ifdef RGBLIGHT_ENABLE
+#define RGB_DI_PIN D1
+#define RGBLED_NUM 1
+#endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
diff --git a/keyboards/keyhive/uno/rev2/rev2.h b/keyboards/keyhive/uno/rev2/rev2.h
new file mode 100644
index 0000000000..691bdd1dc3
--- /dev/null
+++ b/keyboards/keyhive/uno/rev2/rev2.h
@@ -0,0 +1,25 @@
+/* Copyright 2020 Snipeye
+ *
+ * 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 "quantum.h"
+
+#define LAYOUT( \
+ K00 \
+) { \
+ { K00 } \
+}
diff --git a/keyboards/keyhive/uno/rev2/rules.mk b/keyboards/keyhive/uno/rev2/rules.mk
new file mode 100644
index 0000000000..1ce2738442
--- /dev/null
+++ b/keyboards/keyhive/uno/rev2/rules.mk
@@ -0,0 +1,19 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = no # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+ENCODER_ENABLE = yes
diff --git a/keyboards/keyhive/uno/rules.mk b/keyboards/keyhive/uno/rules.mk
new file mode 100644
index 0000000000..3220994593
--- /dev/null
+++ b/keyboards/keyhive/uno/rules.mk
@@ -0,0 +1 @@
+DEFAULT_FOLDER = keyhive/uno/rev1
diff --git a/keyboards/keyhive/uno/uno.c b/keyboards/keyhive/uno/uno.c
new file mode 100644
index 0000000000..5ffb28865b
--- /dev/null
+++ b/keyboards/keyhive/uno/uno.c
@@ -0,0 +1,17 @@
+/* Copyright 2020 Snipeye
+ *
+ * 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 "uno.h"
diff --git a/keyboards/keyhive/uno/uno.h b/keyboards/keyhive/uno/uno.h
new file mode 100644
index 0000000000..e25dc25f73
--- /dev/null
+++ b/keyboards/keyhive/uno/uno.h
@@ -0,0 +1,25 @@
+/* Copyright 2020 Snipeye
+ *
+ * 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 "quantum.h"
+
+#if defined(KEYBOARD_keyhive_uno_rev1)
+# include "rev1.h"
+#elif defined(KEYBOARD_keyhive_uno_rev2)
+# include "rev2.h"
+#endif
diff --git a/keyboards/keyhive/ut472/config.h b/keyboards/keyhive/ut472/config.h
new file mode 100644
index 0000000000..dc8f7f7555
--- /dev/null
+++ b/keyboards/keyhive/ut472/config.h
@@ -0,0 +1,59 @@
+/*
+Copyright 2018 Carlos Filoteo
+
+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 "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xA103
+#define PRODUCT_ID 0x0472
+#define DEVICE_VER 0x0002
+#define MANUFACTURER Keyhive
+#define PRODUCT UT47.2
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 12
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { D1, D2, D3, D4 }
+#define MATRIX_COL_PINS { C4, C5, B7, B6, B5, B4, B3, B2, B1, B0, D6, D5 }
+#define UNUSED_PINS
+
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* 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
+
+#define RGB_DI_PIN C6
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 8
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#endif
diff --git a/keyboards/keyhive/ut472/info.json b/keyboards/keyhive/ut472/info.json
new file mode 100644
index 0000000000..fe60c5b7f7
--- /dev/null
+++ b/keyboards/keyhive/ut472/info.json
@@ -0,0 +1,10 @@
+{
+ "keyboard_name": "UT47.2",
+ "url": "",
+ "maintainer": "qmk",
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"Q", "x":1, "y":0}, {"label":"W", "x":2, "y":0}, {"label":"E", "x":3, "y":0}, {"label":"R", "x":4, "y":0}, {"label":"T", "x":5, "y":0}, {"label":"Y", "x":6, "y":0}, {"label":"U", "x":7, "y":0}, {"label":"I", "x":8, "y":0}, {"label":"O", "x":9, "y":0}, {"label":"P", "x":10, "y":0}, {"label":"Backspace", "x":11, "y":0, "w":1.5}, {"label":"LT(3) / Tab", "x":0, "y":1, "w":1.25}, {"label":"A", "x":1.25, "y":1}, {"label":"S", "x":2.25, "y":1}, {"label":"D", "x":3.25, "y":1}, {"label":"F", "x":4.25, "y":1}, {"label":"G", "x":5.25, "y":1}, {"label":"H", "x":6.25, "y":1}, {"label":"J", "x":7.25, "y":1}, {"label":"K", "x":8.25, "y":1}, {"label":"L", "x":9.25, "y":1}, {"label":":", "x":10.25, "y":1}, {"label":"\"", "x":11.25, "y":1, "w":1.25}, {"label":"Shift", "x":0, "y":2, "w":1.5}, {"label":"Z", "x":1.5, "y":2}, {"label":"X", "x":2.5, "y":2}, {"label":"C", "x":3.5, "y":2}, {"label":"V", "x":4.5, "y":2}, {"label":"B", "x":5.5, "y":2}, {"label":"N", "x":6.5, "y":2}, {"label":"M", "x":7.5, "y":2}, {"label":"<", "x":8.5, "y":2}, {"label":">", "x":9.5, "y":2}, {"label":"?", "x":10.5, "y":2}, {"label":"Shift / Enter", "x":11.5, "y":2}, {"label":"Ctrl", "x":0, "y":3}, {"label":"Alt", "x":1, "y":3}, {"label":"GUI", "x":2, "y":3}, {"label":"Menu", "x":3, "y":3}, {"label":"MO(2)", "x":4, "y":3, "w":1.25}, {"x":5.25, "y":3, "w":2}, {"label":"MO(1)", "x":7.25, "y":3, "w":1.25}, {"label":"\u2190", "x":8.5, "y":3}, {"label":"\u2193", "x":9.5, "y":3}, {"label":"\u2191", "x":10.5, "y":3}, {"label":"\u2192", "x":11.5, "y":3}]
+ }
+ }
+}
diff --git a/keyboards/keyhive/ut472/keymaps/annihilator6000/UT472_Annihilator6000_Configurator_file.json b/keyboards/keyhive/ut472/keymaps/annihilator6000/UT472_Annihilator6000_Configurator_file.json
new file mode 100755
index 0000000000..45569d5588
--- /dev/null
+++ b/keyboards/keyhive/ut472/keymaps/annihilator6000/UT472_Annihilator6000_Configurator_file.json
@@ -0,0 +1 @@
+{"keyboard":"ut472","keymap":"ut472_layout_switching","layout":"LAYOUT","layers":[["KC_ESC","KC_Q","KC_W","KC_E","KC_R","KC_T","KC_Y","KC_U","KC_I","KC_O","KC_P","KC_BSPC","LT(3,KC_TAB)","KC_A","KC_S","KC_D","KC_F","KC_G","KC_H","KC_J","KC_K","KC_L","KC_SCLN","KC_QUOT","KC_LSFT","KC_Z","KC_X","KC_C","KC_V","KC_B","KC_N","KC_M","KC_COMM","KC_DOT","KC_SLSH","KC_SFTENT","KC_LCTL","KC_LALT","KC_LGUI","KC_APP","MO(2)","KC_SPC","MO(1)","KC_LEFT","KC_DOWN","KC_UP","KC_RGHT"],["KC_ESC","KC_Q","KC_D","KC_R","KC_W","KC_B","KC_J","KC_F","KC_U","KC_P","KC_SCLN","KC_BSPC","LT(3,KC_TAB)","KC_A","KC_S","KC_H","KC_T","KC_G","KC_Y","KC_N","KC_E","KC_O","KC_I","KC_QUOT","KC_LSFT","KC_Z","KC_X","KC_M","KC_C","KC_V","KC_K","KC_L","KC_COMM","KC_DOT","KC_SLSH","KC_SFTENT","KC_LCTL","KC_LALT","KC_LGUI","KC_APP","MO(2)","KC_SPC","MO(1)","KC_LEFT","KC_DOWN","KC_UP","KC_RGHT"],["KC_ESC","KC_Q","KC_W","KC_F","KC_P","KC_G","KC_J","KC_L","KC_U","KC_Y","KC_SCLN","KC_BSPC","LT(3,KC_TAB)","KC_A","KC_R","KC_S","KC_T","KC_D","KC_H","KC_N","KC_E","KC_I","KC_O","KC_QUOT","KC_LSFT","KC_Z","KC_X","KC_C","KC_V","KC_B","KC_K","KC_M","KC_COMM","KC_DOT","KC_SLSH","KC_SFTENT","KC_LCTL","KC_LALT","KC_LGUI","KC_APP","MO(2)","KC_SPC","MO(1)","KC_LEFT","KC_DOWN","KC_UP","KC_RGHT"],["KC_ESC","KC_Q","KC_W","KC_F","KC_P","KC_B","KC_J","KC_L","KC_U","KC_Y","KC_SCLN","KC_BSPC","LT(3,KC_TAB)","KC_A","KC_R","KC_S","KC_T","KC_G","KC_K","KC_N","KC_E","KC_I","KC_O","KC_QUOT","KC_LSFT","KC_X","KC_C","KC_D","KC_V","KC_Z","KC_M","KC_H","KC_COMM","KC_DOT","KC_SLSH","KC_SFTENT","KC_LCTL","KC_LALT","KC_LGUI","KC_APP","MO(2)","KC_SPC","MO(1)","KC_LEFT","KC_DOWN","KC_UP","KC_RGHT"],["KC_ESC","KC_QUOT","KC_COMM","KC_DOT","KC_P","KC_Y","KC_F","KC_G","KC_C","KC_R","KC_L","KC_BSPC","LT(3,KC_TAB)","KC_A","KC_O","KC_E","KC_U","KC_I","KC_D","KC_H","KC_T","KC_N","KC_S","KC_SLSH","KC_LSFT","KC_SCLN","KC_Q","KC_J","KC_K","KC_X","KC_B","KC_M","KC_W","KC_V","KC_Z","KC_SFTENT","KC_LCTL","KC_LALT","KC_LGUI","KC_APP","MO(2)","KC_SPC","MO(1)","KC_LEFT","KC_DOWN","KC_UP","KC_RGHT"],["KC_GRV","KC_1","KC_2","KC_3","KC_4","KC_5","KC_6","KC_7","KC_8","KC_9","KC_0","KC_DEL","KC_NO","RGB_TOG","RGB_MOD","RGB_VAI","RGB_VAD","KC_NO","KC_NO","KC_MINS","KC_EQL","KC_LBRC","KC_RBRC","KC_BSLS","KC_NO","KC_F11","KC_F12","KC_F13","KC_F14","KC_F15","KC_F16","KC_F17","KC_F18","KC_F19","KC_F20","KC_NO","KC_NO","KC_NO","KC_NO","KC_CAPS","KC_NO","KC_NO","KC_TRNS","KC_HOME","KC_PGDN","KC_PGUP","KC_END"],["KC_TILD","KC_EXLM","KC_AT","KC_HASH","KC_DLR","KC_PERC","KC_CIRC","KC_AMPR","KC_ASTR","KC_LPRN","KC_RPRN","KC_DEL","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_UNDS","KC_PLUS","KC_LCBR","KC_RCBR","KC_PIPE","KC_NO","KC_F1","KC_F2","KC_F3","KC_F4","KC_F5","KC_F6","KC_F7","KC_F8","KC_F9","KC_F10","KC_NO","KC_NO","KC_NO","KC_NO","KC_CAPS","KC_TRNS","KC_NO","KC_NO","KC_HOME","KC_PGDN","KC_PGUP","KC_END"],["KC_ESC","KC_CALC","KC_WHOM","KC_MAIL","KC_MYCM","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_PSCR","KC_NO","KC_TRNS","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_WH_L","KC_WH_D","KC_WH_U","KC_WH_R"],["RESET","KC_NO","KC_NO","RGB_TOG","RGB_MOD","RGB_HUI","RGB_HUD","RGB_SAI","RGB_SAD","RGB_VAI","RGB_VAD","KC_DEL","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","ANY(Qwerty)","ANY(Workman)","ANY(Colemak)","ANY(Colemak Mod-DH)","ANY(Dvorak)","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","DEBUG","KC_NO","KC_NO","KC_NO","KC_TRNS","KC_NO","KC_TRNS","KC_NO","KC_NO","KC_NO","KC_NO"]],"author":"Annihilator6000","notes":"Layer 0 = Qwerty\nLayer 1 = Workman\nLayer 2 = Colemak\nLayer 3 = Colemak Mod-DH\nLayer 4 = Dvorak\nLayer 5 = Function Layer 1 (MO 1)\nLayer 6 = Function Layer 2 (MO 2)\nLayer 7 = Function Layer 3 (LT 3: Hold Tab)\nLayer 8 = Planck-style Adjust Layer (Hold MO 1 and MO 2 at the same time)"} \ No newline at end of file
diff --git a/keyboards/keyhive/ut472/keymaps/annihilator6000/config.h b/keyboards/keyhive/ut472/keymaps/annihilator6000/config.h
new file mode 100644
index 0000000000..023c753c27
--- /dev/null
+++ b/keyboards/keyhive/ut472/keymaps/annihilator6000/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2018 Carlos Filoteo
+ *
+ * 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
+
+// place overrides here
diff --git a/keyboards/keyhive/ut472/keymaps/annihilator6000/keymap.c b/keyboards/keyhive/ut472/keymaps/annihilator6000/keymap.c
new file mode 100644
index 0000000000..c4453279d2
--- /dev/null
+++ b/keyboards/keyhive/ut472/keymaps/annihilator6000/keymap.c
@@ -0,0 +1,256 @@
+/* Copyright 2018 Carlos Filoteo
+ *
+ * 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 QMK_KEYBOARD_H
+
+#define LT3_TAB LT(3, KC_TAB)
+
+enum ut472_layers {
+ _QWERTY,
+ _WORKMAN,
+ _COLEMAK,
+ _COLEMAK_MOD_DH,
+ _DVORAK,
+ _LOWER,
+ _RAISE,
+ _TAB,
+ _ADJUST
+};
+
+enum ut472_keycodes {
+ QWERTY = SAFE_RANGE,
+ WORKMAN,
+ COLEMAK,
+ COLEMAK_MOD_DH,
+ DVORAK
+};
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Base Layer - QWERTY
+ * ,-------------------------------------------------------------------------.
+ * | Esc | Q | W | E | R | T | Y | U | I | O | P |Bspace |
+ * |-------------------------------------------------------------------------+
+ * |Tab/L3| A | S | D | F | G | H | J | K | L | ; | ' |
+ * |-------------------------------------------------------------------------+
+ * | Shift | Z | X | C | V | B | N | M | , | . | / |Sh/En|
+ * |-------------------------------------------------------------------------+
+ * | Ctrl| Alt | Gui | App | L2 | Space | L1 | Left| Down| Up |Right|
+ * `-------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT(
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ LT3_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_SFTENT,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_APP, LOWER, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+ /* Workman
+ * ,-------------------------------------------------------------------------.
+ * | Esc | Q | D | R | W | B | J | F | U | P | ; |Bspace |
+ * |-------------------------------------------------------------------------+
+ * |Tab/L3| A | S | H | T | G | Y | N | E | O | I | ' |
+ * |-------------------------------------------------------------------------+
+ * | Shift | Z | X | M | C | V | K | L | , | . | / |Sh/En|
+ * |-------------------------------------------------------------------------+
+ * | Ctrl| Alt | Gui | App | L2 | Space | L1 | Left| Down| Up |Right|
+ * `-------------------------------------------------------------------------'
+ */
+[_WORKMAN] = LAYOUT(
+ KC_ESC, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_BSPC,
+ LT3_TAB, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH, KC_SFTENT,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_APP, LOWER, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+ /* Colemak
+ * ,---------------------------------------------------------------------------.
+ * | Esc | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
+ * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+---------|
+ * |Tab/L3| A | R | S | T | D | H | N | E | I | O | " |
+ * |------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------|
+ * | Shift | Z | X | C | V | B | K | M | , | . | / | Sh/En |
+ * |-------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-------|
+ * | Ctrl| Alt | GUI | App | L2 | Space | L1 | Left | Down | Up |Right |
+ * `---------------------------------------------------------------------------'
+ */
+[_COLEMAK] = LAYOUT(
+ KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
+ LT3_TAB, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_APP, LOWER, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+ /* Colemak Mod-DH
+ * https://colemakmods.github.io/mod-dh/keyboards.html
+ * ,---------------------------------------------------------------------------.
+ * | Esc | Q | W | F | P | B | J | L | U | Y | ; | Bksp |
+ * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+---------|
+ * |Tab/L3| A | R | S | T | G | K | N | E | I | O | ' |
+ * |------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------|
+ * | Shift | X | C | D | V | Z | M | H | , | . | / | Sh/En |
+ * |-------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-------|
+ * | Ctrl| Alt | GUI | App | L2 | Space | L1 | Left | Down | Up |Right |
+ * `---------------------------------------------------------------------------'
+ */
+[_COLEMAK_MOD_DH] = LAYOUT(
+ KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
+ LT3_TAB, KC_A, KC_R, KC_S, KC_T, KC_G, KC_K, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
+ KC_LSFT, KC_X, KC_C, KC_D, KC_V, KC_Z, KC_M, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_APP, LOWER, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+ /* Dvorak
+ * ,--------------------------------------------------------------------------.
+ * | Esc | " | , | . | P | Y | F | G | C | R | L | Bksp |
+ * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------|
+ * |Tab/L3| A | O | E | U | I | D | H | T | N | S | / |
+ * |------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-------|
+ * | Shift | ; | Q | J | K | X | B | M | W | V | Z |Sh/En |
+ * |-------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+------|
+ * | Ctrl| Alt | GUI | App | L2 | Space | L1 | Left | Down | Up |Right |
+ * `--------------------------------------------------------------------------'
+ */
+[_DVORAK] = LAYOUT(
+ KC_ESC, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC,
+ LT3_TAB, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH,
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT ,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_APP, LOWER, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+ /* FN Layer 1 - LOWER
+ * ,-------------------------------------------------------------------------.
+ * | ` ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Delete|
+ * |-------------------------------------------------------------------------+
+ * | | | | | | | | - | = | [ | ] | \ |
+ * |-------------------------------------------------------------------------+
+ * | | F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | |
+ * |-------------------------------------------------------------------------+
+ * | | | |Capsl| | | | Home| PgDn| PgUp| End |
+ * `-------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DELETE,
+ _______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, _______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ _______, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, _______,
+ _______, _______, _______, KC_CAPS, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
+),
+
+ /* FN Layer 2 - RAISE
+ * ,-------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) |Delete|
+ * |-------------------------------------------------------------------------+
+ * | | | | | | | | _ | + | { | } | | |
+ * |-------------------------------------------------------------------------+
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | |
+ * |-------------------------------------------------------------------------+
+ * | | | |Capsl| | | | Home| PgDn| PgUp| End |
+ * `-------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT(
+ KC_TILDE, KC_EXCLAIM, KC_AT, KC_HASH, KC_DOLLAR, KC_PERCENT, KC_CIRCUMFLEX, KC_AMPERSAND, KC_ASTERISK, KC_LEFT_PAREN, KC_RIGHT_PAREN, KC_DELETE,
+ _______, _______, _______, _______, _______, _______, _______, KC_UNDERSCORE, KC_PLUS, KC_LEFT_CURLY_BRACE, KC_RIGHT_CURLY_BRACE, KC_PIPE,
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
+ _______, _______, _______, KC_CAPS, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
+),
+
+ /* FN Layer 3 - Hold Tab
+ * ,-------------------------------------------------------------------------.
+ * | Esc | Calc|Webhm| Mail| Comp| | | | | |PrtSc| |
+ * |-------------------------------------------------------------------------+
+ * | | | | | | | | | | | | |
+ * |-------------------------------------------------------------------------+
+ * | | | | | | | | | | | | |
+ * |-------------------------------------------------------------------------+
+ * | | | | | | | |MousL|MousD|MousU|MousR|
+ * `-------------------------------------------------------------------------'
+ */
+[_TAB] = LAYOUT(
+ KC_ESC, KC_CALC, KC_WHOM, KC_MAIL, KC_MYCM, _______, _______, _______, _______, _______, KC_PSCR, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R
+),
+
+ /* Adjust (L1 + L2)
+ * v-----------------------RGB CONTROL---------------------v
+ * ,--------------------------------------------------------------------------
+ * |Reset| | | RGB |RGBMO|HUE+ |HUE- |SAT+ |SAT- |BRT+ |BRT- | Del |
+ * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-------|
+ * | | | | | | |Qwert|Wrkmn|ModDH|Colmk|Dvork| |
+ * |------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+------|
+ * | | | | | | | | | | | | |
+ * |-------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
+ * | Dbg | | | | | | | | | | |
+ * `-------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT(
+ RESET, _______, _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL,
+ _______, _______, _______, _______, _______, _______, QWERTY, WORKMAN, COLEMAK, COLEMAK_MOD_DH, DVORAK, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ DEBUG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+/* QWERTY = H
+ WORKMAN = J
+ COLEMAK = K
+ -MOD-DH = L
+ DVORAK = ; */
+};
+
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ print("mode just switched to qwerty and this is a huge string\n");
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case WORKMAN:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_WORKMAN);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ break;
+ case COLEMAK_MOD_DH:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK_MOD_DH);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_DVORAK);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/keyhive/ut472/keymaps/annihilator6000/readme.md b/keyboards/keyhive/ut472/keymaps/annihilator6000/readme.md
new file mode 100644
index 0000000000..59469b7b55
--- /dev/null
+++ b/keyboards/keyhive/ut472/keymaps/annihilator6000/readme.md
@@ -0,0 +1,15 @@
+# UT47.2 Planck-style layout switching
+
+Has layouts for Qwerty, Workman, Colemak, Colemak-Mod-DH, and Dvorak. Qwerty is the default layout. Layouts are switched Planck-style using momentary layer keys 1 and 2 (MO(1) and MO(2)) at the same time and pressing one of the H, J, K, L, or ; keys (this is while on the Qwerty layout - adjust if on another layout). See Layer 8 below for layout keys.
+
+You can load the UT472_Annihilator6000_Configurator_file.json file in the [QMK Configurator](https://config.qmk.fm/#/ut472/LAYOUT) if you want to check out the configuration there or easily modify it.
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ut472:Annihilator6000
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+![UT47.2 layout image](https://i.imgur.com/lICX4uz.png)
+
+[KLE](http://www.keyboard-layout-editor.com/##@@_y:0%3B&=Esc&=Q&=W&=E&=R&=T&=Y&=U&=I&=O&=P&_w:1.5%3B&=Back%20Space&_x:0.25&a:4&f:4&w:4&h:4&d:true%3B&=%3Cb%3EGNAP!%3C%2F%2Fb%3E%3Cp%3E%3Cp%3EMinimum%20stagger%3Cp%3E47%20key%20layout%3B&@_a:7&f:3&w:1.25%3B&=Tab&=A&=S&=D&=F&=G&=H&=J&=K&=L&=%2F%3B&_w:1.25%3B&=%27%3B&@_w:1.5%3B&=Shift&=Z&=X&=C&=V&=B&=N&=M&=,&=.&=%2F%2F&=Return%3B&@=Ctrl&=Alt&=Super&=Menu&_w:1.25%3B&=%2F&dArr%2F%3B&_w:2%3B&=&_w:1.25%3B&=%2F&uArr%2F%3B&=%2F&larr%2F%3B&=%2F&darr%2F%3B&=%2F&uarr%2F%3B&=%2F&rarr%2F%3B%3B&=undefined)
diff --git a/keyboards/keyhive/ut472/keymaps/default/keymap.c b/keyboards/keyhive/ut472/keymaps/default/keymap.c
new file mode 100644
index 0000000000..e303f2220c
--- /dev/null
+++ b/keyboards/keyhive/ut472/keymaps/default/keymap.c
@@ -0,0 +1,100 @@
+/* Copyright 2018 Carlos Filoteo
+ *
+ * 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 QMK_KEYBOARD_H
+
+#define LT3_TAB LT(3, KC_TAB)
+
+
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Base Layer
+ * ,-------------------------------------------------------------------------.
+ * | Esc | Q | W | E | R | T | Y | U | I | O | P |Bspace |
+ * |-------------------------------------------------------------------------+
+ * |Tab/L3| A | S | D | F | G | H | J | K | L | ; | ' |
+ * |-------------------------------------------------------------------------+
+ * | Shift | Z | X | C | V | B | N | M | , | . | / |Sh/En|
+ * |-------------------------------------------------------------------------+
+ * | Ctrl| Alt | Gui | App | L2 | Space | L1 | Left| Down| Up |Right|
+ * `-------------------------------------------------------------------------'
+ */
+
+LAYOUT(
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ LT3_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_SFTENT,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_APP, MO(2), KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+ /* FN Layer 1
+ * ,-------------------------------------------------------------------------.
+ * | ` ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Delete|
+ * |-------------------------------------------------------------------------+
+ * | | RGB |RGBMO|BRT+ |BRT- | | | - | = | [ | ] | \ |
+ * |-------------------------------------------------------------------------+
+ * | | F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | |
+ * |-------------------------------------------------------------------------+
+ * | | | |Capsl| | | | Home| PgDn| PgUp| End |
+ * `-------------------------------------------------------------------------'
+ */
+
+LAYOUT( /* Right */
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DELETE,
+ _______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, _______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ _______, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, _______,
+ _______, _______, _______, KC_CAPS, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
+),
+
+ /* FN Layer 2
+ * ,-------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) |Delete|
+ * |-------------------------------------------------------------------------+
+ * | | | | | | | | _ | + | { | } | | |
+ * |-------------------------------------------------------------------------+
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | |
+ * |-------------------------------------------------------------------------+
+ * | | | |Capsl| | | | Next| Vol-| Vol+| Play|
+ * `-------------------------------------------------------------------------'
+ */
+
+LAYOUT( /* Left */
+ KC_TILDE, KC_EXCLAIM, KC_AT, KC_HASH, KC_DOLLAR, KC_PERCENT, KC_CIRCUMFLEX, KC_AMPERSAND, KC_ASTERISK, KC_LEFT_PAREN, KC_RIGHT_PAREN, KC_DELETE,
+ _______, _______, _______, _______, _______, _______, _______, KC_UNDERSCORE, KC_PLUS, KC_LEFT_CURLY_BRACE, KC_RIGHT_CURLY_BRACE, KC_PIPE,
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
+ _______, _______, _______, KC_CAPS, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+ /* FN Layer 3
+ * ,-------------------------------------------------------------------------.
+ * | Esc | Calc|Webhm| Mail| Comp| | | | | |PrtSc| |
+ * |-------------------------------------------------------------------------+
+ * | | | | | | | | | | | | |
+ * |-------------------------------------------------------------------------+
+ * | | | | | | | | | | | | |
+ * |-------------------------------------------------------------------------+
+ * | | | | | | | |MousL|MousD|MousU|MousR|
+ * `-------------------------------------------------------------------------'
+ */
+
+LAYOUT( /* Tab */
+ KC_ESC, KC_CALC, KC_WHOM, KC_MAIL, KC_MYCM, _______, _______, _______, _______, _______, KC_PSCR, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R
+),
+};
diff --git a/keyboards/keyhive/ut472/keymaps/default/readme.md b/keyboards/keyhive/ut472/keymaps/default/readme.md
new file mode 100644
index 0000000000..e3dcee467e
--- /dev/null
+++ b/keyboards/keyhive/ut472/keymaps/default/readme.md
@@ -0,0 +1,5 @@
+# UT47 default keymap
+
+![UT47 layout image](https://i.imgur.com/Tsz5qsF.png)
+
+[KLE](http://www.keyboard-layout-editor.com/##@@_y:0%3B&=Esc&=Q&=W&=E&=R&=T&=Y&=U&=I&=O&=P&_w:1.5%3B&=Back%20Space&_x:0.25&a:4&f:4&w:4&h:4&d:true%3B&=%3Cb%3EGNAP!%3C%2F%2Fb%3E%3Cp%3E%3Cp%3EMinimum%20stagger%3Cp%3E47%20key%20layout%3B&@_a:7&f:3&w:1.25%3B&=Tab&=A&=S&=D&=F&=G&=H&=J&=K&=L&=%2F%3B&_w:1.25%3B&=%27%3B&@_w:1.5%3B&=Shift&=Z&=X&=C&=V&=B&=N&=M&=,&=.&=%2F%2F&=Return%3B&@=Ctrl&=Alt&=Super&=Menu&_w:1.25%3B&=%2F&dArr%2F%3B&_w:2%3B&=&_w:1.25%3B&=%2F&uArr%2F%3B&=%2F&larr%2F%3B&=%2F&darr%2F%3B&=%2F&uarr%2F%3B&=%2F&rarr%2F%3B%3B&=undefined)
diff --git a/keyboards/keyhive/ut472/keymaps/hvp/config.h b/keyboards/keyhive/ut472/keymaps/hvp/config.h
new file mode 100644
index 0000000000..ea23adfab5
--- /dev/null
+++ b/keyboards/keyhive/ut472/keymaps/hvp/config.h
@@ -0,0 +1,20 @@
+/* Copyright 2018 Carlos Filoteo
+ *
+ * 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
+#define TAPPING_TERM 200
+#define TAPPING_TERM_PER_KEY
+#define IGNORE_MOD_TAP_INTERRUPT \ No newline at end of file
diff --git a/keyboards/keyhive/ut472/keymaps/hvp/keymap.c b/keyboards/keyhive/ut472/keymaps/hvp/keymap.c
new file mode 100644
index 0000000000..80d2d036bd
--- /dev/null
+++ b/keyboards/keyhive/ut472/keymaps/hvp/keymap.c
@@ -0,0 +1,67 @@
+/* Copyright 2018 Carlos Filoteo
+ *
+ * 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 QMK_KEYBOARD_H
+#include "hvp.c"
+
+#define LT3_ESC LT(3, KC_ESC)
+#define LT4_TAB LT(5, KC_TAB)
+#define LT2 LT(2, KC_LEFT_CURLY_BRACE)
+#define LT1 LT(1, KC_RIGHT_CURLY_BRACE)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[0] = LAYOUT(
+ LT4_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ LT3_ESC, LG_A, LA_S, LS_D, LC_F, LT(4,KC_G), RC_H, RS_J, RA_K, RG_L, TD(TD1), TD(TD2),
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, TD(TD3), KC_SFTENT,
+ KC_LCPO, KC_RPRN, KC_LGUI, KC_LALT, LT2, KC_SPC, LT1, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+[1] = LAYOUT( /* Right */
+ KC_TILDE, KC_EXCLAIM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+ KC_DELETE, KC_LGUI, KC_LALT, KC_LSFT, KC_LCTL, XXXXXXX, KC_MINS, KC_EQL, KC_LCBR, KC_RCBR, KC_PIPE, KC_GRV,
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UNDS, KC_PLUS, KC_LBRC, KC_RBRC, KC_BSLS, KC_TILD,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+[2] = LAYOUT( /* Left */
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_DELETE, KC_LGUI, KC_LALT, KC_LSFT, KC_LCTL, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, XXXXXXX, XXXXXXX,
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_PGDN, KC_PGUP, KC_END, XXXXXXX, XXXXXXX,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+[3] = LAYOUT( /* Esc */
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ _______, KC_LGUI, KC_LALT, KC_LSFT, KC_LCTL, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, KC_PSCR,
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______,
+ _______, _______, _______, _______, KC_MUTE, KC_MPLY, KC_MSTP, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT
+),
+
+[4] = LAYOUT( /* G */
+ _______, LGUI(KC_1), LGUI(KC_2), LGUI(KC_3), LGUI(KC_4), LGUI(KC_5), LGUI(KC_6), LGUI(KC_7), KC_7, KC_8, KC_9, KC_BSPC,
+ _______, _______, _______, _______, _______, _______, _______, XXXXXXX, KC_4, KC_5, KC_6, KC_0,
+ _______, _______, _______, _______, _______, _______, XXXXXXX, KC_0, KC_1, KC_2, KC_3, _______,
+ RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+[5] = LAYOUT( /* Tab */
+ _______, G(S(KC_1)), G(S(KC_2)), G(S(KC_3)), G(S(KC_4)), G(S(KC_5)), G(S(KC_6)), G(S(KC_7)), G(S(KC_8)), G(S(KC_9)), G(S(KC_0)), _______,
+ RGB_TOG, RGB_MOD, RGB_M_P, RGB_HUD, RGB_HUI, _______, _______, _______, _______, _______, _______, _______,
+ KC_PSCR, _______, RGB_RMOD, RGB_SAD, RGB_SAI, _______, _______, _______, _______, _______, _______, KC_CAPS,
+ RESET, _______, RGB_VAD, RGB_VAI, _______, _______, _______, _______, _______, _______, KC_NLCK
+),
+};
diff --git a/keyboards/keyhive/ut472/keymaps/hvp/readme.md b/keyboards/keyhive/ut472/keymaps/hvp/readme.md
new file mode 100644
index 0000000000..a249201ded
--- /dev/null
+++ b/keyboards/keyhive/ut472/keymaps/hvp/readme.md
@@ -0,0 +1,10 @@
+Keyboard: UT47.2
+Keys: 47key staggered 40% keyboard
+Layout: Swedish characters on main layer using tap dance. Built for Eurkey keyboard layout.
+Flash instructions: Flash using dfu, will req the hvp user space to compile.
+
+> make ut472:hvp:dfu
+
+Links:
+Github - https://github.com/ai03-2725/UT47.2
+Eurkey layout - https://eurkey.steffen.bruentjen.eu/
diff --git a/keyboards/keyhive/ut472/keymaps/hvp/rules.mk b/keyboards/keyhive/ut472/keymaps/hvp/rules.mk
new file mode 100644
index 0000000000..1ba2fa8fbe
--- /dev/null
+++ b/keyboards/keyhive/ut472/keymaps/hvp/rules.mk
@@ -0,0 +1 @@
+TAP_DANCE_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/keyhive/ut472/keymaps/stefanopace/config.h b/keyboards/keyhive/ut472/keymaps/stefanopace/config.h
new file mode 100644
index 0000000000..d16927d3c9
--- /dev/null
+++ b/keyboards/keyhive/ut472/keymaps/stefanopace/config.h
@@ -0,0 +1,21 @@
+/* Copyright 2021 Stefano Pace
+ *
+ * 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
+
+#define TAPPING_TOGGLE 3
+#define TAPPING_TERM 175
+#define PERMISSIVE_HOLD
diff --git a/keyboards/keyhive/ut472/keymaps/stefanopace/keymap.c b/keyboards/keyhive/ut472/keymaps/stefanopace/keymap.c
new file mode 100644
index 0000000000..7cc3b70082
--- /dev/null
+++ b/keyboards/keyhive/ut472/keymaps/stefanopace/keymap.c
@@ -0,0 +1,185 @@
+/* Copyright 2021 Stefano Pace
+ *
+ * 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 QMK_KEYBOARD_H
+
+enum layers {
+ _QWE,
+ _SYM,
+ _NUM,
+ _NAV,
+ _NV2,
+ _FN,
+};
+
+enum tapdance {
+ TD_SINGLE_QUOTE_DOUBLE_QUOTES,
+ TD_APP_CAPS_LOCK,
+};
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [TD_SINGLE_QUOTE_DOUBLE_QUOTES] = ACTION_TAP_DANCE_DOUBLE(KC_QUOT, KC_DQUO),
+ [TD_APP_CAPS_LOCK] = ACTION_TAP_DANCE_DOUBLE(KC_APP, KC_CAPS),
+};
+
+#define LTFN_ESC LT(_FN, KC_ESC)
+#define LTSYM_F LT(_SYM, KC_F)
+#define LTSYM_J LT(_SYM, KC_J)
+#define TD_QUOT TD(TD_SINGLE_QUOTE_DOUBLE_QUOTES)
+#define TD_APP_CAPS TD(TD_APP_CAPS_LOCK)
+#define SFT_SLSH RSFT_T(KC_SLSH)
+
+#define UNDO LCTL(KC_Z)
+#define REDO LCTL(KC_Y)
+#define CUT LCTL(KC_X)
+#define COPY LCTL(KC_C)
+#define PASTE LCTL(KC_V)
+
+#define CUSTOM1 LCA(KC_EQL)
+#define CUSTOM2 MEH(KC_PLUS)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base qwerty Layer
+ *
+ * Holding Esc activates the Fn layer
+ * Holding F or J activates Symbols layer
+ * Holding / acts as Shift
+ * Double tap on ' acts as "
+ * Double tap on Menu activates CapsLock
+ *
+ * Nav and Num layers are togglable with triple tapping on relative keys while holding them will activate layers momentarily.
+ *
+ * I personally use Pause to mute/unmute microphone
+ * I personally use Menu to act as compose key to input accented letters
+ *
+ * ,----------------------------------------------------------------------------.
+ * |Esc-Fn| Q | W | E | R | T | Y | U | I | O | P | Bspace |
+ * |----------------------------------------------------------------------------+
+ * | Tab | A | S | D |F-Sym| G | H |J-Sym| K | L | '* | Enter |
+ * |----------------------------------------------------------------------------+
+ * | Shift | Z | X | C | V | B | N | M | , | . |/-Shift|Menu*|
+ * |----------------------------------------------------------------------------+
+ * | Ctrl | Gui | Alt |Pause|(Nav) | Space |(Num) |Left |Down | Up |Right |
+ * `----------------------------------------------------------------------------'
+ */
+ [_QWE] = LAYOUT(
+ LTFN_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_TAB, KC_A, KC_S, KC_D, LTSYM_F, KC_G, KC_H, LTSYM_J, KC_K, KC_L, TD_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, SFT_SLSH, TD_APP_CAPS,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_PAUS, TT(_NAV), KC_SPC, TT(_NUM), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+ ),
+
+ /* Symbols Layer (Sym)
+ * ,----------------------------------------------------------------------------.
+ * | | ` | @ | # | $ | % | | & | * | ^ | | Del |
+ * |----------------------------------------------------------------------------+
+ * | | ~ | { | - | ( | + | = | ) | | | } | ; | |
+ * |----------------------------------------------------------------------------+
+ * | | ! | < | _ | [ | | : | ] | \ | > | ? | |
+ * |----------------------------------------------------------------------------+
+ * | | | | | | | | | | | |
+ * `----------------------------------------------------------------------------'
+ */
+ [_SYM] = LAYOUT(
+ _______, KC_GRV, KC_AT, KC_HASH, KC_DLR, KC_PERC, XXXXXXX, KC_AMPR, KC_ASTR, KC_CIRC, XXXXXXX, KC_DEL,
+ _______, KC_TILD, KC_LCBR, KC_MINS, KC_LPRN, KC_PLUS, KC_EQL, KC_RPRN, KC_PIPE, KC_RCBR, KC_SCLN, _______,
+ _______, KC_EXLM, KC_LT, KC_UNDS, KC_LBRC, XXXXXXX, KC_COLN, KC_RBRC, KC_BSLS, KC_GT, KC_QUES, _______,
+ _______, _______, _______, _______, XXXXXXX, _______, XXXXXXX, _______, _______, _______, _______
+ ),
+
+ /* Numbers Layer (Num)
+ *
+ * Custom2 will act as Ctrl+Shift+Alt+"+" that can be used for example to spawn new terminal instances
+ * ,----------------------------------------------------------------------------.
+ * | | | | | | |Ctrl-y| | | | | |
+ * |----------------------------------------------------------------------------+
+ * | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | |
+ * |----------------------------------------------------------------------------+
+ * | |Ctr-z|Ctr-x|Ctr-c|Ctr-v| | | | , | . | | |
+ * |----------------------------------------------------------------------------+
+ * | | | | |Custom2| | | | | | |
+ * `----------------------------------------------------------------------------'
+ */
+ [_NUM] = LAYOUT(
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, REDO, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
+ _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
+ _______, UNDO, CUT, COPY, PASTE, XXXXXXX, XXXXXXX, XXXXXXX, KC_COMM, KC_DOT, _______, _______,
+ _______, _______, _______, _______, CUSTOM2, _______, _______, _______, _______, _______, _______
+ ),
+
+ /* Navigation Layer (Nav)
+ *
+ * This layer is optimized for gui handling and code navigation
+ * It makes easier to reach common key combinations as: Ctrl+Shift, Gui+Shift, Ctrl+Alt, Alt+Tab, Ctrl+F, Ctrl+S
+ *
+ * Holding (Nav2) replaces arrow keys with Home PgDown PgUp End
+ *
+ *
+ * Custom1 will act as Ctrl+Alt+"=" that can be used for example to focus last spawned terminal
+ *
+ * ,----------------------------------------------------------------------------.
+ * | |Shift|Shift|Shift| | | | | | | | |
+ * |----------------------------------------------------------------------------+
+ * |(Nav2) |Ctrl | Gui | Alt | Tab | |Left |Down | Up |Right| F | |
+ * |----------------------------------------------------------------------------+
+ * | |Ctr-z|Ctr-x|Ctr-c|Ctr-v| | | | L | | A | S |
+ * |----------------------------------------------------------------------------+
+ * | | | | | | |Custom1| | | | |
+ * `----------------------------------------------------------------------------'
+ */
+ [_NAV] = LAYOUT(
+ _______, KC_LSFT, KC_LSFT, KC_LSFT, _______, _______, _______, _______, _______, _______, _______, _______,
+ MO(_NV2), KC_LCTL, KC_LGUI, KC_LALT, KC_TAB, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_F, _______,
+ _______, UNDO, CUT, COPY, PASTE, _______, _______, _______, KC_L, KC_DOT, KC_A, KC_S,
+ _______, _______, _______, _______, _______, _______, CUSTOM1, _______, _______, _______, _______
+ ),
+
+ /* Speed Navigation Layer (Nav2)
+ * ,----------------------------------------------------------------------------.
+ * | | | | | | | | | | | | |
+ * |----------------------------------------------------------------------------+
+ * | | | | | | |Home |PgUp |PgDown|End | | |
+ * |----------------------------------------------------------------------------+
+ * | | | | | | | | | | | | |
+ * |----------------------------------------------------------------------------+
+ * | | | | | | | | | | |Reset |
+ * `----------------------------------------------------------------------------'
+ */
+ [_NV2] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET
+ ),
+
+ /* Fn Layer (Fn)
+ * ,----------------------------------------------------------------------------.
+ * | | | | | | | | F1 | F2 | F3 | F10 | |
+ * |----------------------------------------------------------------------------+
+ * | Print | | | | | | | F4 | F5 | F6 | F11 | |
+ * |----------------------------------------------------------------------------+
+ * |ScrLock | | | | | | | F7 | F8 | F9 | F12 | |
+ * |----------------------------------------------------------------------------+
+ * | Ins | | | | | | | | | | |
+ * `----------------------------------------------------------------------------'
+ */
+ [_FN] = LAYOUT(
+ _______, RGB_TOG, RGB_RMOD, RGB_MOD, RGB_HUD, RGB_HUI, XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F10, XXXXXXX,
+ KC_PSCR, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, RGB_SPD, RGB_SPI, KC_F4, KC_F5, KC_F6, KC_F11, XXXXXXX,
+ KC_SLCK, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, KC_F7, KC_F8, KC_F9, KC_F12, XXXXXXX,
+ KC_INS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+ ),
+};
diff --git a/keyboards/keyhive/ut472/keymaps/stefanopace/readme.md b/keyboards/keyhive/ut472/keymaps/stefanopace/readme.md
new file mode 100644
index 0000000000..63cef0934c
--- /dev/null
+++ b/keyboards/keyhive/ut472/keymaps/stefanopace/readme.md
@@ -0,0 +1,6 @@
+# Stefanopace's layout
+
+This layout is optimized for developers workflow.
+It includes layouts for symbols, numbers and text/gui navigation, all activables
+and usable without leaving the homerow position.
+More details are explained in the keymap.c file.
diff --git a/keyboards/keyhive/ut472/keymaps/stefanopace/rules.mk b/keyboards/keyhive/ut472/keymaps/stefanopace/rules.mk
new file mode 100644
index 0000000000..d941780558
--- /dev/null
+++ b/keyboards/keyhive/ut472/keymaps/stefanopace/rules.mk
@@ -0,0 +1,7 @@
+TAP_DANCE_ENABLE = yes
+
+MOUSEKEY_ENABLE = no
+EXTRAKEY_ENABLE = no
+
+BACKLIGHT_ENABLE = no
+RGBLIGHT_ENABLE = yes
diff --git a/keyboards/keyhive/ut472/keymaps/tucznak/config.h b/keyboards/keyhive/ut472/keymaps/tucznak/config.h
new file mode 100644
index 0000000000..b3d402337a
--- /dev/null
+++ b/keyboards/keyhive/ut472/keymaps/tucznak/config.h
@@ -0,0 +1,16 @@
+#pragma once
+
+#undef MANUFACTURER
+#undef PRODUCT
+
+#define MANUFACTURER Potato Inc.
+#define PRODUCT Qt3.14
+
+/* turn off RGB when computer sleeps */
+#ifdef RGBLIGHT_ENABLE
+#define RGBLIGHT_SLEEP
+#endif
+
+/* send tap key if no layer key was used even after tap delay */
+#define TAPPING_TERM 50
+#define RETRO_TAPPING
diff --git a/keyboards/keyhive/ut472/keymaps/tucznak/keymap.c b/keyboards/keyhive/ut472/keymaps/tucznak/keymap.c
new file mode 100644
index 0000000000..7fbbd0e76e
--- /dev/null
+++ b/keyboards/keyhive/ut472/keymaps/tucznak/keymap.c
@@ -0,0 +1,111 @@
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _BASE,
+ _LEFT,
+ _RIGHT,
+ _NUM,
+ _FN
+};
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Base Layer
+ * ,-------------------------------------------------------------------------.
+ * | Esc | Q | W | E | R | T | Y | U | I | O | P |Bspace |
+ * |-------------------------------------------------------------------------+
+ * | Tab | A | S | D | F | G | H | J | K | L | ; |Enter |
+ * |-------------------------------------------------------------------------+
+ * | Shift | Z | X | C | V | B | N | M | , | . | Up | FN |
+ * |-------------------------------------------------------------------------+
+ * | Ctrl| Win | LAlt| NUM | LEFT | Space | RIGHT| RAlt| Left| Down|Right|
+ * `-------------------------------------------------------------------------'
+ */
+
+ [_BASE] = LAYOUT(
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, MO(_FN),
+ KC_LCTL, KC_LGUI, KC_LALT, MO(_NUM),MO(_LEFT), KC_SPC, MO(_RIGHT), KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ /* Left function layer (1)
+ * F keys and navigation
+ * ,-------------------------------------------------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |-------------------------------------------------------------------------+
+ * | | | | | | | | | | | | Ins |
+ * |-------------------------------------------------------------------------+
+ * | | Caps| |PrtSc|ScrLk|Pause| | | | | PgUp| Del |
+ * |-------------------------------------------------------------------------+
+ * | | | | | | | | Menu| Home| PgDn| End |
+ * `-------------------------------------------------------------------------'
+ */
+
+ [_LEFT] = LAYOUT(
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS,
+ _______, KC_CAPS, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______, _______, _______, _______, KC_PGUP, KC_DEL,
+ _______, _______, _______, _______, _______, _______, _______, KC_APP, KC_HOME, KC_PGDN, KC_END
+ ),
+
+ /* Right function layer (2)
+ * National and special characters
+ * ,-------------------------------------------------------------------------.
+ * | +1 | ě2 | š3 | č4 | ř5 | ž6 | ý7 | á8 | í9 | é0 | ´ | ˇ |
+ * |-------------------------------------------------------------------------+
+ * | ;° | | | | | | | ( | ) | § | ! | ú | / |
+ * |-------------------------------------------------------------------------+
+ * | | \ | | | | | % | = | ¨ | ' | - | _ |
+ * |-------------------------------------------------------------------------+
+ * | | | | | | | | | | | |
+ * `-------------------------------------------------------------------------'
+ */
+
+ [_RIGHT] = LAYOUT(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL, LSFT(KC_EQL),
+ KC_GRV, LSFT(KC_NUBS), _______, _______, _______, _______, LSFT(KC_RBRC), KC_RBRC, KC_QUOT, LSFT(KC_QUOT), KC_LBRC, LSFT(KC_LBRC),
+ _______, KC_NUBS, _______, _______, _______, _______, LSFT(KC_MINS), KC_MINS, KC_BSLS, LSFT(KC_BSLS), KC_SLSH, LSFT(KC_SLSH),
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ /* Numpad layer (3)
+ * ,-------------------------------------------------------------------------.
+ * | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | |
+ * |-------------------------------------------------------------------------+
+ * | | | | | | | | 4 | 5 | 6 | / | |
+ * |-------------------------------------------------------------------------+
+ * | |NumLk| | | | | | 1 | 2 | 3 | * | |
+ * |-------------------------------------------------------------------------+
+ * | | | | | | | 0 | . | + | - | |
+ * `-------------------------------------------------------------------------'
+ */
+
+ [_NUM] = LAYOUT(
+ _______, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_0, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_KP_4, KC_KP_5, KC_KP_6, KC_PSLS, _______,
+ _______, KC_NLCK, _______, _______, _______, _______, _______, KC_KP_1, KC_KP_2, KC_KP_3, KC_PAST, _______,
+ _______, _______, _______, _______, _______, _______, KC_KP_0, KC_DOT, KC_PPLS, KC_PMNS, _______
+ ),
+
+ /* Function layer (4)
+ * Backlighting, keyboard controls, music etc.
+ * ,-------------------------------------------------------------------------.
+ * |Reset| | | | | | | | | | | Vol+ |
+ * |-------------------------------------------------------------------------+
+ * | | VLK | Mod+| Hue+| Sat+| Val+| | | | | | Vol- |
+ * |-------------------------------------------------------------------------+
+ * | | TOG | Mod-| Hue-| Sat-| Val-| | | | | Stop| Mute|
+ * |-------------------------------------------------------------------------+
+ * |Sleep| | | | | C+A+D | C+A+I | | Prev|Pause| Next|
+ * `-------------------------------------------------------------------------'
+ */
+
+ [_FN] = LAYOUT(
+ RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU,
+ _______, VLK_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, _______, _______, _______, KC_VOLD,
+ _______, RGB_TOG, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, _______, _______, _______, _______, KC_MSTP, KC_MUTE,
+ KC_SLEP, _______, _______, _______, _______, LCA(KC_DEL), LCA(KC_INS), _______, KC_MPRV, KC_MPLY, KC_MNXT
+ )
+};
diff --git a/keyboards/keyhive/ut472/keymaps/tucznak/readme.md b/keyboards/keyhive/ut472/keymaps/tucznak/readme.md
new file mode 100644
index 0000000000..95180bc392
--- /dev/null
+++ b/keyboards/keyhive/ut472/keymaps/tucznak/readme.md
@@ -0,0 +1,5 @@
+# TuCZnak's modified layout
+
+This layout is optimized for Czech national QWERTZ keymap.
+It includes separated layers for numbers, national characters,
+special characters and configuration.
diff --git a/keyboards/keyhive/ut472/keymaps/tucznak/rules.mk b/keyboards/keyhive/ut472/keymaps/tucznak/rules.mk
new file mode 100644
index 0000000000..d394c719f8
--- /dev/null
+++ b/keyboards/keyhive/ut472/keymaps/tucznak/rules.mk
@@ -0,0 +1,17 @@
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes # USB 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 on B7 by default
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+RGBLIGHT_ENABLE = yes
diff --git a/keyboards/keyhive/ut472/keymaps/via/keymap.c b/keyboards/keyhive/ut472/keymaps/via/keymap.c
new file mode 100644
index 0000000000..fe3eff802e
--- /dev/null
+++ b/keyboards/keyhive/ut472/keymaps/via/keymap.c
@@ -0,0 +1,34 @@
+#include QMK_KEYBOARD_H
+
+#define LT3_TAB LT(3, KC_TAB)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+LAYOUT(
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ LT3_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_SFTENT,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_APP, MO(2), KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+LAYOUT( /* Right */
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DELETE,
+ _______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, _______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ _______, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, _______,
+ RESET, _______, _______, KC_CAPS, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
+),
+
+LAYOUT( /* Left */
+ KC_TILDE, KC_EXCLAIM, KC_AT, KC_HASH, KC_DOLLAR, KC_PERCENT, KC_CIRCUMFLEX, KC_AMPERSAND, KC_ASTERISK, KC_LEFT_PAREN, KC_RIGHT_PAREN, KC_DELETE,
+ _______, _______, _______, _______, _______, _______, _______, KC_UNDERSCORE, KC_PLUS, KC_LEFT_CURLY_BRACE, KC_RIGHT_CURLY_BRACE, KC_PIPE,
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
+ _______, _______, _______, KC_CAPS, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
+),
+
+LAYOUT(
+ KC_ESC, KC_CALC, KC_WHOM, KC_MAIL, KC_MYCM, _______, _______, _______, _______, _______, KC_PSCR, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R
+),
+};
diff --git a/keyboards/keyhive/ut472/keymaps/via/rules.mk b/keyboards/keyhive/ut472/keymaps/via/rules.mk
new file mode 100644
index 0000000000..36b7ba9cbc
--- /dev/null
+++ b/keyboards/keyhive/ut472/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/keyhive/ut472/readme.md b/keyboards/keyhive/ut472/readme.md
new file mode 100644
index 0000000000..b2a13b38cc
--- /dev/null
+++ b/keyboards/keyhive/ut472/readme.md
@@ -0,0 +1,20 @@
+# ut47.2
+
+Somewhere between ortholinear and standard offset. Created to have all the same functions on a Planck in a keyboard but with a more conventional keyboard row stagger.
+
+Keyboard Maintainer: [filoxo](https://github.com/filoxo), [network_operations](https://www.keyhive.xyz)
+
+The keyboard files can be found here: https://github.com/ai03-2725/UT47.2
+or purchased at keyhive.xyz
+
+## Instructions
+
+To create a hex file for the UT47.2, run:
+
+ make keyhive/ut472:default
+
+## Layout
+
+Go to the [default layout README](keymaps/default/readme.md) for more information.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/keyhive/ut472/rules.mk b/keyboards/keyhive/ut472/rules.mk
new file mode 100644
index 0000000000..9c7d75a344
--- /dev/null
+++ b/keyboards/keyhive/ut472/rules.mk
@@ -0,0 +1,18 @@
+# MCU name
+MCU = atmega32u2
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+AUDIO_ENABLE = no # Audio output
+RGBLIGHT_ENABLE = yes
diff --git a/keyboards/keyhive/ut472/ut472.c b/keyboards/keyhive/ut472/ut472.c
new file mode 100644
index 0000000000..637922171a
--- /dev/null
+++ b/keyboards/keyhive/ut472/ut472.c
@@ -0,0 +1 @@
+#include "ut472.h"
diff --git a/keyboards/keyhive/ut472/ut472.h b/keyboards/keyhive/ut472/ut472.h
new file mode 100644
index 0000000000..391392896a
--- /dev/null
+++ b/keyboards/keyhive/ut472/ut472.h
@@ -0,0 +1,33 @@
+/* Copyright 2018 Carlos Filoteo
+ *
+ * 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 "quantum.h"
+
+#define LAYOUT( \
+ 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, K34, 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, K34, K35, K35, K37, K38, K39, K3a, K3b } \
+ }
+