summaryrefslogtreecommitdiff
path: root/keyboards/clueboard
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/clueboard')
-rw-r--r--keyboards/clueboard/Makefile5
-rw-r--r--keyboards/clueboard/clueboard.c1
-rw-r--r--keyboards/clueboard/clueboard.h13
-rw-r--r--keyboards/clueboard/config.h71
-rw-r--r--keyboards/clueboard/keymaps/caps_fn/keymap.c86
-rw-r--r--keyboards/clueboard/keymaps/caps_fn/layout.pngbin0 -> 112289 bytes
-rw-r--r--keyboards/clueboard/keymaps/caps_fn/readme.md15
-rw-r--r--keyboards/clueboard/keymaps/colemak/keymap.c86
-rw-r--r--keyboards/clueboard/keymaps/default/keymap.c86
-rw-r--r--keyboards/clueboard/keymaps/default/layout.pngbin0 -> 112442 bytes
-rw-r--r--keyboards/clueboard/keymaps/default/readme.md17
-rw-r--r--keyboards/clueboard/keymaps/mac_optimized/keymap.c79
-rw-r--r--keyboards/clueboard/keymaps/mac_optimized/layout.pngbin0 -> 107368 bytes
-rw-r--r--keyboards/clueboard/keymaps/mac_optimized/readme.md15
-rw-r--r--keyboards/clueboard/keymaps/maximised/keymap.c47
-rw-r--r--keyboards/clueboard/keymaps/maximised/layout.pngbin0 -> 111157 bytes
-rw-r--r--keyboards/clueboard/keymaps/maximised/readme.md14
-rw-r--r--keyboards/clueboard/keymaps/mouse_keys/Makefile1
-rw-r--r--keyboards/clueboard/keymaps/mouse_keys/keymap.c96
-rw-r--r--keyboards/clueboard/keymaps/mouse_keys/layout.pngbin0 -> 143816 bytes
-rw-r--r--keyboards/clueboard/keymaps/mouse_keys/readme.md16
-rw-r--r--keyboards/clueboard/keymaps/serubin/Makefile4
-rw-r--r--keyboards/clueboard/keymaps/serubin/keymap.c103
-rw-r--r--keyboards/clueboard/keymaps/serubin/layout-base.pngbin0 -> 38703 bytes
-rw-r--r--keyboards/clueboard/keymaps/serubin/layout-fn.pngbin0 -> 35216 bytes
-rw-r--r--keyboards/clueboard/keymaps/serubin/layout-media.pngbin0 -> 28944 bytes
-rw-r--r--keyboards/clueboard/keymaps/serubin/readme.md23
-rw-r--r--keyboards/clueboard/keymaps/shift_fn/keymap.c86
-rw-r--r--keyboards/clueboard/keymaps/shift_fn/layout.pngbin0 -> 107234 bytes
-rw-r--r--keyboards/clueboard/keymaps/shift_fn/readme.md17
-rw-r--r--keyboards/clueboard/keymaps/skully/keymap.c86
-rw-r--r--keyboards/clueboard/keymaps/skully/layout.pngbin0 -> 111676 bytes
-rw-r--r--keyboards/clueboard/keymaps/skully/readme.md16
-rw-r--r--keyboards/clueboard/keymaps/smt/keymap.c181
-rw-r--r--keyboards/clueboard/keymaps/smt/layout.pngbin0 -> 130672 bytes
-rw-r--r--keyboards/clueboard/keymaps/smt/readme.md30
-rw-r--r--keyboards/clueboard/keymaps/unix_optimized/keymap.c86
-rw-r--r--keyboards/clueboard/keymaps/unix_optimized/layout.pngbin0 -> 111171 bytes
-rw-r--r--keyboards/clueboard/keymaps/unix_optimized/readme.md15
-rw-r--r--keyboards/clueboard/keymaps/win_optimized/keymap.c86
-rw-r--r--keyboards/clueboard/keymaps/win_optimized/layout.pngbin0 -> 110405 bytes
-rw-r--r--keyboards/clueboard/keymaps/win_optimized/readme.md17
-rw-r--r--keyboards/clueboard/keymaps/xyverz/Makefile49
-rw-r--r--keyboards/clueboard/keymaps/xyverz/keymap.c111
-rw-r--r--keyboards/clueboard/readme.md97
-rw-r--r--keyboards/clueboard/rev1/Makefile3
-rw-r--r--keyboards/clueboard/rev1/config.h36
-rw-r--r--keyboards/clueboard/rev1/rev1.c17
-rw-r--r--keyboards/clueboard/rev1/rev1.h47
-rw-r--r--keyboards/clueboard/rev1/rules.mk5
-rw-r--r--keyboards/clueboard/rev2/Makefile3
-rw-r--r--keyboards/clueboard/rev2/config.h39
-rw-r--r--keyboards/clueboard/rev2/rev2.c63
-rw-r--r--keyboards/clueboard/rev2/rev2.h52
-rw-r--r--keyboards/clueboard/rev2/rules.mk5
-rw-r--r--keyboards/clueboard/rules.mk103
56 files changed, 2028 insertions, 0 deletions
diff --git a/keyboards/clueboard/Makefile b/keyboards/clueboard/Makefile
new file mode 100644
index 0000000000..b9bada8f8d
--- /dev/null
+++ b/keyboards/clueboard/Makefile
@@ -0,0 +1,5 @@
+SUBPROJECT_DEFAULT = rev2
+
+ifndef MAKEFILE_INCLUDED
+ include ../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/clueboard/clueboard.c b/keyboards/clueboard/clueboard.c
new file mode 100644
index 0000000000..3435202ba1
--- /dev/null
+++ b/keyboards/clueboard/clueboard.c
@@ -0,0 +1 @@
+#include "clueboard.h"
diff --git a/keyboards/clueboard/clueboard.h b/keyboards/clueboard/clueboard.h
new file mode 100644
index 0000000000..4f2a3c1df1
--- /dev/null
+++ b/keyboards/clueboard/clueboard.h
@@ -0,0 +1,13 @@
+#ifndef CLUEBOARD_H
+#define CLUEBOARD_H
+
+#ifdef SUBPROJECT_rev1
+ #include "rev1.h"
+#endif
+#ifdef SUBPROJECT_rev2
+ #include "rev2.h"
+#endif
+
+#include "quantum.h"
+
+#endif
diff --git a/keyboards/clueboard/config.h b/keyboards/clueboard/config.h
new file mode 100644
index 0000000000..ad68323856
--- /dev/null
+++ b/keyboards/clueboard/config.h
@@ -0,0 +1,71 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xC1ED
+#define MANUFACTURER Clueboard
+#define PRODUCT Clueboard
+#define DESCRIPTION QMK keyboard firmware for Clueboard
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 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
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+
+#ifdef SUBPROJECT_rev1
+ #include "rev1/config.h"
+#endif
+#ifdef SUBPROJECT_rev2
+ #include "rev2/config.h"
+#endif
+
+#endif
diff --git a/keyboards/clueboard/keymaps/caps_fn/keymap.c b/keyboards/clueboard/keymaps/caps_fn/keymap.c
new file mode 100644
index 0000000000..7fad9c1b21
--- /dev/null
+++ b/keyboards/clueboard/keymaps/caps_fn/keymap.c
@@ -0,0 +1,86 @@
+#include "clueboard.h"
+
+// Helpful defines
+#define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
+#define _______ KC_TRNS
+
+// 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.
+#define _BL 0
+#define _FL 1
+#define _CL 2
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: Base Layer (Default Layer)
+ */
+[_BL] = KEYMAP(
+ F(0), 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_GRV, KC_BSPC, 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_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_NUHS, KC_ENT, \
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC,KC_SPC, KC_HENK, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
+
+ /* Keymap _FL: Function Layer
+ */
+[_FL] = KEYMAP(
+ 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_DEL, BL_STEP, \
+ _______, _______, _______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK, KC_PAUS, _______, _______, _______, _______, \
+ _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
+ _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_PGUP, \
+ _______, _______, _______, _______, _______,_______, _______, _______, _______, MO(_FL), KC_HOME, KC_PGDN, KC_END),
+
+ /* Keymap _CL: Control layer
+ */
+[_CL] = KEYMAP(
+ _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, \
+ _______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD, \
+ _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
+ MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI, \
+ _______, _______, _______,_______, RGB_MOD, RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
+};
+
+/* This is a list of user defined functions. F(N) corresponds to item N
+ of this list.
+ */
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_FUNCTION(0), // Calls action_function()
+};
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ static uint8_t mods_pressed;
+ static bool mod_flag;
+
+ switch (id) {
+ case 0:
+ /* Handle the combined Grave/Esc key
+ */
+ mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed
+
+ if (record->event.pressed) {
+ /* The key is being pressed.
+ */
+ if (mods_pressed) {
+ mod_flag = true;
+ add_key(KC_GRV);
+ send_keyboard_report();
+ } else {
+ add_key(KC_ESC);
+ send_keyboard_report();
+ }
+ } else {
+ /* The key is being released.
+ */
+ if (mod_flag) {
+ mod_flag = false;
+ del_key(KC_GRV);
+ send_keyboard_report();
+ } else {
+ del_key(KC_ESC);
+ send_keyboard_report();
+ }
+ }
+ break;
+ }
+}
diff --git a/keyboards/clueboard/keymaps/caps_fn/layout.png b/keyboards/clueboard/keymaps/caps_fn/layout.png
new file mode 100644
index 0000000000..a5bd57adbb
--- /dev/null
+++ b/keyboards/clueboard/keymaps/caps_fn/layout.png
Binary files differ
diff --git a/keyboards/clueboard/keymaps/caps_fn/readme.md b/keyboards/clueboard/keymaps/caps_fn/readme.md
new file mode 100644
index 0000000000..74ad01fca8
--- /dev/null
+++ b/keyboards/clueboard/keymaps/caps_fn/readme.md
@@ -0,0 +1,15 @@
+```
+ ___ _____ _ _ _ __ __ _ __
+|__ \ / ____| | | | | | / / / /(_) / /
+ ||) | | | | |_ _ ___| |__ ___ __ _ _ __ __| | / /_ / /_ / /
+ |/ / | | | | | | |/ _ \ '_ \ / _ \ / _` | '__/ _` | | '_ \| '_ \ / /
+ |_| | |____| | |_| | __/ |_) | (_) | (_| | | | (_| | | (_) | (_) / / _
+ (_) \_____|_|\__,_|\___|_.__/ \___/ \__,_|_| \__,_| \___/ \___/_/ (_)
+```
+
+![Clueboard Layout Image](layout.png)
+
+# Caps Fn Layout
+
+This is the default layout except that Caps Lock acts like Caps Lock when
+tapped but Fn when held.
diff --git a/keyboards/clueboard/keymaps/colemak/keymap.c b/keyboards/clueboard/keymaps/colemak/keymap.c
new file mode 100644
index 0000000000..42c85ff9d8
--- /dev/null
+++ b/keyboards/clueboard/keymaps/colemak/keymap.c
@@ -0,0 +1,86 @@
+#include "clueboard.h"
+
+// Helpful defines
+#define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
+#define _______ KC_TRNS
+
+// 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.
+#define _BL 0
+#define _FL 1
+#define _CL 2
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: Base Layer (Default Layer)
+ */
+[_BL] = KEYMAP(
+ F(0), 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_GRV, KC_BSPC, KC_PGUP, \
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, \
+ KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_NUHS, KC_ENT, \
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, \
+ KC_LCTL, MO(_FL), KC_LGUI,KC_MHEN, KC_SPC,KC_SPC, KC_HENK, KC_RALT, KC_RCTL, KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ /* Keymap _FL: Function Layer
+ */
+[_FL] = KEYMAP(
+ 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_CAPS, BL_STEP, \
+ _______, _______, _______,_______,_______,_______,_______,KC_HOME,KC_PGDN,KC_PGUP, KC_END, _______, _______, _______, _______, \
+ KC_DEL, _______, MO(_CL),_______,_______,_______,_______,KC_LEFT,KC_DOWN,KC_UP, KC_RGHT, _______, _______, _______, \
+ _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_PGUP, \
+ _______, _______, _______,_______, _______,_______, _______, _______, _______, MO(_FL), KC_HOME, KC_PGDN, KC_END),
+
+ /* Keymap _CL: Control layer
+ */
+[_CL] = KEYMAP(
+ _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, \
+ _______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD, \
+ _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
+ MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI, \
+ _______, _______, _______,_______, RGB_MOD, RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
+};
+
+/* This is a list of user defined functions. F(N) corresponds to item N
+ of this list.
+ */
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_FUNCTION(0), // Calls action_function()
+};
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ static uint8_t mods_pressed;
+ static bool mod_flag;
+
+ switch (id) {
+ case 0:
+ /* Handle the combined Grave/Esc key
+ */
+ mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed
+
+ if (record->event.pressed) {
+ /* The key is being pressed.
+ */
+ if (mods_pressed) {
+ mod_flag = true;
+ add_key(KC_GRV);
+ send_keyboard_report();
+ } else {
+ add_key(KC_ESC);
+ send_keyboard_report();
+ }
+ } else {
+ /* The key is being released.
+ */
+ if (mod_flag) {
+ mod_flag = false;
+ del_key(KC_GRV);
+ send_keyboard_report();
+ } else {
+ del_key(KC_ESC);
+ send_keyboard_report();
+ }
+ }
+ break;
+ }
+}
diff --git a/keyboards/clueboard/keymaps/default/keymap.c b/keyboards/clueboard/keymaps/default/keymap.c
new file mode 100644
index 0000000000..7fad9c1b21
--- /dev/null
+++ b/keyboards/clueboard/keymaps/default/keymap.c
@@ -0,0 +1,86 @@
+#include "clueboard.h"
+
+// Helpful defines
+#define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
+#define _______ KC_TRNS
+
+// 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.
+#define _BL 0
+#define _FL 1
+#define _CL 2
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: Base Layer (Default Layer)
+ */
+[_BL] = KEYMAP(
+ F(0), 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_GRV, KC_BSPC, 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_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_NUHS, KC_ENT, \
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC,KC_SPC, KC_HENK, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
+
+ /* Keymap _FL: Function Layer
+ */
+[_FL] = KEYMAP(
+ 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_DEL, BL_STEP, \
+ _______, _______, _______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK, KC_PAUS, _______, _______, _______, _______, \
+ _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
+ _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_PGUP, \
+ _______, _______, _______, _______, _______,_______, _______, _______, _______, MO(_FL), KC_HOME, KC_PGDN, KC_END),
+
+ /* Keymap _CL: Control layer
+ */
+[_CL] = KEYMAP(
+ _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, \
+ _______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD, \
+ _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
+ MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI, \
+ _______, _______, _______,_______, RGB_MOD, RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
+};
+
+/* This is a list of user defined functions. F(N) corresponds to item N
+ of this list.
+ */
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_FUNCTION(0), // Calls action_function()
+};
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ static uint8_t mods_pressed;
+ static bool mod_flag;
+
+ switch (id) {
+ case 0:
+ /* Handle the combined Grave/Esc key
+ */
+ mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed
+
+ if (record->event.pressed) {
+ /* The key is being pressed.
+ */
+ if (mods_pressed) {
+ mod_flag = true;
+ add_key(KC_GRV);
+ send_keyboard_report();
+ } else {
+ add_key(KC_ESC);
+ send_keyboard_report();
+ }
+ } else {
+ /* The key is being released.
+ */
+ if (mod_flag) {
+ mod_flag = false;
+ del_key(KC_GRV);
+ send_keyboard_report();
+ } else {
+ del_key(KC_ESC);
+ send_keyboard_report();
+ }
+ }
+ break;
+ }
+}
diff --git a/keyboards/clueboard/keymaps/default/layout.png b/keyboards/clueboard/keymaps/default/layout.png
new file mode 100644
index 0000000000..cd318163e4
--- /dev/null
+++ b/keyboards/clueboard/keymaps/default/layout.png
Binary files differ
diff --git a/keyboards/clueboard/keymaps/default/readme.md b/keyboards/clueboard/keymaps/default/readme.md
new file mode 100644
index 0000000000..cede17ee17
--- /dev/null
+++ b/keyboards/clueboard/keymaps/default/readme.md
@@ -0,0 +1,17 @@
+```
+ ___ _____ _ _ _ __ __ _ __
+|__ \ / ____| | | | | | / / / /(_) / /
+ ||) | | | | |_ _ ___| |__ ___ __ _ _ __ __| | / /_ / /_ / /
+ |/ / | | | | | | |/ _ \ '_ \ / _ \ / _` | '__/ _` | | '_ \| '_ \ / /
+ |_| | |____| | |_| | __/ |_) | (_) | (_| | | | (_| | | (_) | (_) / / _
+ (_) \_____|_|\__,_|\___|_.__/ \___/ \__,_|_| \__,_| \___/ \___/_/ (_)
+```
+
+![Clueboard Layout Image](layout.png)
+
+# Default Clueboard Layout
+
+This is the default layout that comes flashed on every Clueboard. For the most
+part it's a straightforward and easy to follow layout. The only unusual key is
+the key in the upper left, which sends Escape normally, but Grave when any of
+the Ctrl, Alt, or GUI modifiers are held down.
diff --git a/keyboards/clueboard/keymaps/mac_optimized/keymap.c b/keyboards/clueboard/keymaps/mac_optimized/keymap.c
new file mode 100644
index 0000000000..e72733092f
--- /dev/null
+++ b/keyboards/clueboard/keymaps/mac_optimized/keymap.c
@@ -0,0 +1,79 @@
+#include "clueboard.h"
+
+// Helpful defines
+#define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
+#define _______ KC_TRNS
+
+// 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.
+#define _BL 0
+#define _FL 1
+#define _CL 2
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: Base Layer (Default Layer)
+ */
+[_BL] = KEYMAP(
+ F(0), 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_GRV, KC_BSPC, 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_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_NUHS, KC_ENT, \
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, \
+ KC_LCTL, KC_LALT, KC_LGUI,KC_MHEN, KC_SPC, KC_SPC, KC_HENK, KC_RGUI, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
+
+ /* Keymap _FL: Function Layer
+ */
+[_FL] = KEYMAP(
+ 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_DEL, BL_STEP, \
+ _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, _______, \
+ _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
+ _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_PGUP, \
+ _______, _______, _______, _______, _______,_______, _______, _______, _______, MO(_FL), KC_HOME, KC_PGDN, KC_END),
+
+ /* Keymap _CL: Control layer
+ */
+[_CL] = KEYMAP(
+ _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, \
+ _______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD, \
+ _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
+ MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI, \
+ _______, _______, _______,_______, RGB_MOD, RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
+};
+
+/* This is a list of user defined functions. F(N) corresponds to item N
+ of this list.
+ */
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_FUNCTION(0), // Calls action_function()
+};
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ static uint8_t mods_pressed;
+
+ switch (id) {
+ case 0:
+ /* Handle the combined Grave/Esc key
+ */
+ if (record->event.pressed) {
+ /* The key is being pressed.
+ */
+ mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed
+ if (mods_pressed) {
+ register_code(KC_GRV);
+ } else {
+ register_code(KC_ESC);
+ }
+ } else {
+ /* The key is being released.
+ */
+ if (mods_pressed) {
+ mods_pressed = false;
+ unregister_code(KC_GRV);
+ } else {
+ unregister_code(KC_ESC);
+ }
+ }
+ break;
+ }
+}
diff --git a/keyboards/clueboard/keymaps/mac_optimized/layout.png b/keyboards/clueboard/keymaps/mac_optimized/layout.png
new file mode 100644
index 0000000000..e84ba54ea9
--- /dev/null
+++ b/keyboards/clueboard/keymaps/mac_optimized/layout.png
Binary files differ
diff --git a/keyboards/clueboard/keymaps/mac_optimized/readme.md b/keyboards/clueboard/keymaps/mac_optimized/readme.md
new file mode 100644
index 0000000000..940e09125d
--- /dev/null
+++ b/keyboards/clueboard/keymaps/mac_optimized/readme.md
@@ -0,0 +1,15 @@
+```
+ ___ _____ _ _ _ __ __ _ __
+|__ \ / ____| | | | | | / / / /(_) / /
+ ||) | | | | |_ _ ___| |__ ___ __ _ _ __ __| | / /_ / /_ / /
+ |/ / | | | | | | |/ _ \ '_ \ / _ \ / _` | '__/ _` | | '_ \| '_ \ / /
+ |_| | |____| | |_| | __/ |_) | (_) | (_| | | | (_| | | (_) | (_) / / _
+ (_) \_____|_|\__,_|\___|_.__/ \___/ \__,_|_| \__,_| \___/ \___/_/ (_)
+```
+
+![Clueboard Layout Image](layout.png)
+
+# Default Clueboard Layout for Mac
+
+This is the default Clueboard layout with Alt and GUI switched to match Mac
+conventions.
diff --git a/keyboards/clueboard/keymaps/maximised/keymap.c b/keyboards/clueboard/keymaps/maximised/keymap.c
new file mode 100644
index 0000000000..ebaefa6690
--- /dev/null
+++ b/keyboards/clueboard/keymaps/maximised/keymap.c
@@ -0,0 +1,47 @@
+#include "clueboard.h"
+
+// Helpful defines
+#define _______ KC_TRNS
+
+// 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.
+#define _BL 0
+#define _FL 1
+#define _CL 2
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: Base Layer (Default Layer)
+ */
+[_BL] = KEYMAP(
+ 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_GRV, KC_BSPC, 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_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_NUHS, KC_ENT, \
+ MO(_FL), 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(_FL), KC_UP, \
+ KC_LCTL, KC_LALT, KC_LGUI,KC_MHEN, KC_SPC, KC_SPC, KC_HENK, KC_RGUI, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ /* Keymap _FL: Function Layer
+ */
+[_FL] = KEYMAP(
+ 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_DEL, BL_STEP, \
+ _______, _______, _______,_______,_______,_______,_______,_______,_______,KC_SLCK, KC_PAUS, _______, _______, _______, _______, \
+ _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
+ MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), KC_PGUP, \
+ _______, _______, _______,_______, _______,_______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END),
+
+ /* Keymap _CL: Reset/Underlight layer
+ */
+[_CL] = KEYMAP(
+ _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, \
+ _______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD, \
+ _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
+ MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI, \
+ _______, _______, _______,_______, RGB_MOD, RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+};
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
+};
diff --git a/keyboards/clueboard/keymaps/maximised/layout.png b/keyboards/clueboard/keymaps/maximised/layout.png
new file mode 100644
index 0000000000..bdc5d76239
--- /dev/null
+++ b/keyboards/clueboard/keymaps/maximised/layout.png
Binary files differ
diff --git a/keyboards/clueboard/keymaps/maximised/readme.md b/keyboards/clueboard/keymaps/maximised/readme.md
new file mode 100644
index 0000000000..b95d1750f4
--- /dev/null
+++ b/keyboards/clueboard/keymaps/maximised/readme.md
@@ -0,0 +1,14 @@
+```
+ ___ _____ _ _ _ __ __ _ __
+|__ \ / ____| | | | | | / / / /(_) / /
+ ||) | | | | |_ _ ___| |__ ___ __ _ _ __ __| | / /_ / /_ / /
+ |/ / | | | | | | |/ _ \ '_ \ / _ \ / _` | '__/ _` | | '_ \| '_ \ / /
+ |_| | |____| | |_| | __/ |_) | (_) | (_| | | | (_| | | (_) | (_) / / _
+ (_) \_____|_|\__,_|\___|_.__/ \___/ \__,_|_| \__,_| \___/ \___/_/ (_)
+```
+
+![Clueboard Layout Image](layout.png)
+
+# Maximised Clueboard Layout
+
+This layout is intended for a board with one or both shifts split. The outside key on the split shift is an Fn, while the inside is shift. The bottom row has all the mods on both sides, optimised for a Mac.
diff --git a/keyboards/clueboard/keymaps/mouse_keys/Makefile b/keyboards/clueboard/keymaps/mouse_keys/Makefile
new file mode 100644
index 0000000000..6c605daecf
--- /dev/null
+++ b/keyboards/clueboard/keymaps/mouse_keys/Makefile
@@ -0,0 +1 @@
+MOUSEKEY_ENABLE = yes
diff --git a/keyboards/clueboard/keymaps/mouse_keys/keymap.c b/keyboards/clueboard/keymaps/mouse_keys/keymap.c
new file mode 100644
index 0000000000..d3108d1e2b
--- /dev/null
+++ b/keyboards/clueboard/keymaps/mouse_keys/keymap.c
@@ -0,0 +1,96 @@
+#include "clueboard.h"
+
+// Helpful defines
+#define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
+#define _______ KC_TRNS
+
+// 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.
+#define _BL 0
+#define _FL 1
+#define _CL 2
+#define _ML 3
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: Base Layer (Default Layer)
+ */
+[_BL] = KEYMAP(
+ F(0), 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_GRV, KC_BSPC, 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_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_NUHS, KC_ENT, \
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC,KC_SPC, KC_HENK, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
+
+ /* Keymap _FL: Function Layer
+ */
+[_FL] = KEYMAP(
+ 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_DEL, BL_STEP, \
+ _______, _______, _______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK, KC_PAUS, _______, _______, _______, _______, \
+ _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
+ _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_PGUP, \
+ _______, _______, _______, _______, _______,_______, _______, _______, _______, MO(_FL), KC_HOME, KC_PGDN, KC_END),
+
+ /* Keymap _CL: Control layer
+ */
+[_CL] = KEYMAP(
+ _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, \
+ _______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD, \
+ _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
+ MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI, \
+ _______, _______, _______,_______, RGB_MOD, RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
+
+ /* Keymap _ML: Mouse layer
+ */
+ [_ML] = KEYMAP(
+ _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, _______, \
+ _______, _______, KC_BTN3,KC_BTN2,KC_BTN1,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
+ _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_MS_U, \
+ _______, _______, _______,_______, LT(_ML, KC_SPC),LT(_ML, KC_SPC), _______, KC_BTN1, KC_BTN2, KC_BTN3, KC_MS_L, KC_MS_D,KC_MS_R),
+};
+
+/* This is a list of user defined functions. F(N) corresponds to item N
+ of this list.
+ */
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_FUNCTION(0), // Calls action_function()
+};
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ static uint8_t mods_pressed;
+ static bool mod_flag;
+
+ switch (id) {
+ case 0:
+ /* Handle the combined Grave/Esc key
+ */
+ mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed
+
+ if (record->event.pressed) {
+ /* The key is being pressed.
+ */
+ if (mods_pressed) {
+ mod_flag = true;
+ add_key(KC_GRV);
+ send_keyboard_report();
+ } else {
+ add_key(KC_ESC);
+ send_keyboard_report();
+ }
+ } else {
+ /* The key is being released.
+ */
+ if (mod_flag) {
+ mod_flag = false;
+ del_key(KC_GRV);
+ send_keyboard_report();
+ } else {
+ del_key(KC_ESC);
+ send_keyboard_report();
+ }
+ }
+ break;
+ }
+}
diff --git a/keyboards/clueboard/keymaps/mouse_keys/layout.png b/keyboards/clueboard/keymaps/mouse_keys/layout.png
new file mode 100644
index 0000000000..52e5c4581b
--- /dev/null
+++ b/keyboards/clueboard/keymaps/mouse_keys/layout.png
Binary files differ
diff --git a/keyboards/clueboard/keymaps/mouse_keys/readme.md b/keyboards/clueboard/keymaps/mouse_keys/readme.md
new file mode 100644
index 0000000000..97ac6dfa23
--- /dev/null
+++ b/keyboards/clueboard/keymaps/mouse_keys/readme.md
@@ -0,0 +1,16 @@
+```
+ ___ _____ _ _ _ __ __ _ __
+|__ \ / ____| | | | | | / / / /(_) / /
+ ||) | | | | |_ _ ___| |__ ___ __ _ _ __ __| | / /_ / /_ / /
+ |/ / | | | | | | |/ _ \ '_ \ / _ \ / _` | '__/ _` | | '_ \| '_ \ / /
+ |_| | |____| | |_| | __/ |_) | (_) | (_| | | | (_| | | (_) | (_) / / _
+ (_) \_____|_|\__,_|\___|_.__/ \___/ \__,_|_| \__,_| \___/ \___/_/ (_)
+```
+
+![Clueboard Layout Image](layout.png)
+
+# MouseKeys Layout
+
+This layout adds a mouse layer. When you hold down the spacebar the arrow keys
+will move your mouse cursor. You can click using the 3 mods to the left of the
+arrow keys, or the 3 keys under your primary fingers on the home row.
diff --git a/keyboards/clueboard/keymaps/serubin/Makefile b/keyboards/clueboard/keymaps/serubin/Makefile
new file mode 100644
index 0000000000..ba997f8696
--- /dev/null
+++ b/keyboards/clueboard/keymaps/serubin/Makefile
@@ -0,0 +1,4 @@
+
+MOUSEKEY_ENABLE = yes
+EXTRAKEY_ENABLE = yes
+
diff --git a/keyboards/clueboard/keymaps/serubin/keymap.c b/keyboards/clueboard/keymaps/serubin/keymap.c
new file mode 100644
index 0000000000..18446eb31d
--- /dev/null
+++ b/keyboards/clueboard/keymaps/serubin/keymap.c
@@ -0,0 +1,103 @@
+#include "clueboard.h"
+
+// Helpful defines
+#define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
+#define _______ KC_TRNS
+
+// 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.
+#define _BL 0
+#define _FL 1
+#define _ME 2
+#define _CL 3
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: Base Layer (Default Layer)
+ */
+[_BL] = KEYMAP(
+ KC_GRV, 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_GRV, KC_BSPC, 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_PGDN, \
+ F(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC,KC_SPC, KC_HENK, KC_RGUI, MO(_FL), MO(_ME), KC_LEFT, KC_DOWN, KC_RGHT),
+
+ /* Keymap _FL: Function Layer
+ */
+[_FL] = KEYMAP(
+ KC_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_DEL, KC_HOME, \
+ _______, _______, _______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK, KC_PAUS, _______, _______, KC_PSCR, KC_END, \
+ _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
+ _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_PGUP, \
+ _______, _______, _______, _______, _______,_______, _______, _______, MO(_FL), MO(_ME), KC_HOME, KC_PGDN, KC_END),
+
+/* Keymap _FL: Function Layer
+ */
+[_ME] = KEYMAP(
+ _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_MUTE, KC_VOLU, \
+ _______, _______, _______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK, KC_PAUS, _______, _______, _______, KC_VOLD, \
+ _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
+ _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______ , _______, _______, \
+ _______, _______, _______, _______, _______,_______, _______, _______, MO(_FL), MO(_ME), KC_MPRV, KC_MPLY, KC_MNXT),
+
+
+ /* Keymap _CL: Control layer
+ */
+[_CL] = KEYMAP(
+ _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, \
+ _______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD, \
+ _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
+ MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, MO(_FL), _______, RGB_SAI, \
+ _______, _______, _______,_______, RGB_MOD, RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
+};
+
+/* This is a list of user defined functions. F(N) corresponds to item N
+ of this list.
+ */
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_FUNCTION(0), // Calls action_function()
+ [1] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_ESC),
+};
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ static uint8_t mods_pressed;
+ static bool mod_flag;
+
+ switch (id) {
+ case 0:
+ /* Handle the combined Grave/Esc key
+ */
+ mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed
+
+ if (record->event.pressed) {
+ /* The key is being pressed.
+ */
+ if (mods_pressed) {
+ mod_flag = true;
+ add_key(KC_GRV);
+ send_keyboard_report();
+ } else {
+ add_key(KC_ESC);
+ send_keyboard_report();
+ }
+ } else {
+ /* The key is being released.
+ */
+ if (mod_flag) {
+ mod_flag = false;
+ del_key(KC_GRV);
+ send_keyboard_report();
+ } else {
+ del_key(KC_ESC);
+ send_keyboard_report();
+ }
+ }
+ break;
+ case 1:
+ if(record->event.pressed) {
+ del_key(KC_ESC);
+ }
+ break;
+ }
+}
diff --git a/keyboards/clueboard/keymaps/serubin/layout-base.png b/keyboards/clueboard/keymaps/serubin/layout-base.png
new file mode 100644
index 0000000000..8dcdc06435
--- /dev/null
+++ b/keyboards/clueboard/keymaps/serubin/layout-base.png
Binary files differ
diff --git a/keyboards/clueboard/keymaps/serubin/layout-fn.png b/keyboards/clueboard/keymaps/serubin/layout-fn.png
new file mode 100644
index 0000000000..3cff46a726
--- /dev/null
+++ b/keyboards/clueboard/keymaps/serubin/layout-fn.png
Binary files differ
diff --git a/keyboards/clueboard/keymaps/serubin/layout-media.png b/keyboards/clueboard/keymaps/serubin/layout-media.png
new file mode 100644
index 0000000000..753cb64fac
--- /dev/null
+++ b/keyboards/clueboard/keymaps/serubin/layout-media.png
Binary files differ
diff --git a/keyboards/clueboard/keymaps/serubin/readme.md b/keyboards/clueboard/keymaps/serubin/readme.md
new file mode 100644
index 0000000000..e39adbb169
--- /dev/null
+++ b/keyboards/clueboard/keymaps/serubin/readme.md
@@ -0,0 +1,23 @@
+```
+ ___ _____ _ _ _ __ __ _ __
+|__ \ / ____| | | | | | / / / /(_) / /
+ ||) | | | | |_ _ ___| |__ ___ __ _ _ __ __| | / /_ / /_ / /
+ |/ / | | | | | | |/ _ \ '_ \ / _ \ / _` | '__/ _` | | '_ \| '_ \ / /
+ |_| | |____| | |_| | __/ |_) | (_) | (_| | | | (_| | | (_) | (_) / / _
+ (_) \_____|_|\__,_|\___|_.__/ \___/ \__,_|_| \__,_| \___/ \___/_/ (_)
+```
+
+# Serubin's Clueboard Layout
+
+This is the layout based on the clueboard default, modified for development on Mac, PC, and Windows. This layout also handles media and volume keys on all the previously listed platforms. Most importantly, Capslock has been replaced by a dual function Esc/Ctrl key. This is particularly handy for use in Vim.
+
+#### Base Layer
+![Base Layout Image](layout-base.png)
+
+#### Fn Layer
+![Fn Layout Image](layout-fn.png)
+
+#### Media Layer
+![Media Layer Image](layout-media.png)
+
+
diff --git a/keyboards/clueboard/keymaps/shift_fn/keymap.c b/keyboards/clueboard/keymaps/shift_fn/keymap.c
new file mode 100644
index 0000000000..83ae1d6154
--- /dev/null
+++ b/keyboards/clueboard/keymaps/shift_fn/keymap.c
@@ -0,0 +1,86 @@
+#include "clueboard.h"
+
+// Helpful defines
+#define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
+#define _______ KC_TRNS
+
+// 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.
+#define _BL 0
+#define _FL 1
+#define _CL 2
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: Base Layer (Default Layer)
+ */
+[_BL] = KEYMAP(
+ F(0), 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_GRV, KC_BSPC, 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_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_NUHS, KC_ENT, \
+ MO(_FL), KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, \
+ KC_LCTL, KC_LGUI, KC_LALT,KC_MHEN, KC_SPC, KC_SPC, KC_HENK, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ /* Keymap _FL: Function Layer
+ */
+[_FL] = KEYMAP(
+ 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, S(KC_GRV), KC_DEL, BL_STEP, \
+ S(KC_TAB), S(KC_Q), S(KC_W),S(KC_E),S(KC_R),S(KC_T), S(KC_Y), S(KC_U),S(KC_I),S(KC_O), S(KC_P), S(KC_LBRC),S(KC_RBRC),S(KC_BSLS), S(KC_PGDN), \
+ S(KC_LCTL),S(KC_A), MO(_CL),S(KC_D),S(KC_F),S(KC_G), S(KC_H), S(KC_J),S(KC_K),S(KC_L), S(KC_SCLN),S(KC_QUOT),S(KC_NUHS),S(KC_ENT), \
+ MO(_FL), S(KC_NUBS),S(KC_Z),S(KC_X),S(KC_C),S(KC_V), S(KC_B), S(KC_N),S(KC_M),S(KC_COMM),S(KC_DOT), S(KC_SLSH),S(KC_RO), KC_RSFT, KC_PGUP, \
+ KC_LCTL, KC_LALT, KC_LGUI,KC_MHEN, S(KC_SPC),S(KC_SPC), KC_HENK, KC_RGUI, KC_RALT, KC_RCTL, KC_HOME, KC_PGDN, KC_END),
+
+ /* Keymap _CL: Control layer
+ */
+[_CL] = KEYMAP(
+ _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, \
+ _______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD, \
+ _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
+ MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI, \
+ _______, _______, _______,_______, RGB_MOD,RGB_MOD, _______, _______, _______, _______, RGB_HUD,RGB_SAD,RGB_HUI),
+};
+
+/* This is a list of user defined functions. F(N) corresponds to item N
+ of this list.
+ */
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_FUNCTION(0), // Calls action_function()
+};
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ static uint8_t mods_pressed;
+ static bool mod_flag;
+
+ switch (id) {
+ case 0:
+ /* Handle the combined Grave/Esc key
+ */
+ mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed
+
+ if (record->event.pressed) {
+ /* The key is being pressed.
+ */
+ if (mods_pressed) {
+ mod_flag = true;
+ add_key(KC_GRV);
+ send_keyboard_report();
+ } else {
+ add_key(KC_ESC);
+ send_keyboard_report();
+ }
+ } else {
+ /* The key is being released.
+ */
+ if (mod_flag) {
+ mod_flag = false;
+ del_key(KC_GRV);
+ send_keyboard_report();
+ } else {
+ del_key(KC_ESC);
+ send_keyboard_report();
+ }
+ }
+ break;
+ }
+}
diff --git a/keyboards/clueboard/keymaps/shift_fn/layout.png b/keyboards/clueboard/keymaps/shift_fn/layout.png
new file mode 100644
index 0000000000..66d85410cc
--- /dev/null
+++ b/keyboards/clueboard/keymaps/shift_fn/layout.png
Binary files differ
diff --git a/keyboards/clueboard/keymaps/shift_fn/readme.md b/keyboards/clueboard/keymaps/shift_fn/readme.md
new file mode 100644
index 0000000000..369f556f88
--- /dev/null
+++ b/keyboards/clueboard/keymaps/shift_fn/readme.md
@@ -0,0 +1,17 @@
+```
+ ___ _____ _ _ _ __ __ _ __
+|__ \ / ____| | | | | | / / / /(_) / /
+ ||) | | | | |_ _ ___| |__ ___ __ _ _ __ __| | / /_ / /_ / /
+ |/ / | | | | | | |/ _ \ '_ \ / _ \ / _` | '__/ _` | | '_ \| '_ \ / /
+ |_| | |____| | |_| | __/ |_) | (_) | (_| | | | (_| | | (_) | (_) / / _
+ (_) \_____|_|\__,_|\___|_.__/ \___/ \__,_|_| \__,_| \___/ \___/_/ (_)
+```
+
+![Clueboard Layout Image](layout.png)
+
+# Shift Fn Clueboard Layout
+
+This is an experimental layout. It makes the left shift key a dual roll key.
+For most keys it acts as a shift key, but for some keys it activates an
+alternate function instead. Primarily I use this to access the F-keys under
+the number rows.
diff --git a/keyboards/clueboard/keymaps/skully/keymap.c b/keyboards/clueboard/keymaps/skully/keymap.c
new file mode 100644
index 0000000000..47dee8e6d4
--- /dev/null
+++ b/keyboards/clueboard/keymaps/skully/keymap.c
@@ -0,0 +1,86 @@
+#include "clueboard.h"
+
+// Helpful defines
+#define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
+#define _______ KC_TRNS
+
+// 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.
+#define _BL 0
+#define _FL 1
+#define _CL 2
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: Base Layer (Default Layer)
+ */
+[_BL] = KEYMAP(
+ F(0), 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_GRV, KC_BSPC, 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_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_NUHS, KC_ENT, \
+ MO(_FL), KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, \
+ KC_LCTL, KC_LALT, KC_LGUI,KC_MHEN, KC_SPC, KC_SPC, KC_HENK, KC_RGUI, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ /* Keymap _FL: Function Layer
+ */
+[_FL] = KEYMAP(
+ 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, S(KC_GRV), KC_DEL, BL_STEP, \
+ S(KC_TAB), S(KC_Q), S(KC_W),S(KC_E),S(KC_R),S(KC_T), S(KC_Y), S(KC_U),S(KC_I),S(KC_O), S(KC_P), S(KC_LBRC),S(KC_RBRC),S(KC_BSLS), S(KC_PGDN), \
+ S(KC_LCTL),S(KC_A), MO(_CL),S(KC_D),S(KC_F),S(KC_G), S(KC_H), S(KC_J),S(KC_K),S(KC_L), S(KC_SCLN),S(KC_QUOT),S(KC_NUHS),S(KC_ENT), \
+ MO(_FL), S(KC_NUBS),S(KC_Z),S(KC_X),S(KC_C),S(KC_V), S(KC_B), S(KC_N),S(KC_M),S(KC_COMM),S(KC_DOT), S(KC_SLSH),S(KC_RO), KC_RSFT, KC_PGUP, \
+ KC_LCTL, KC_LALT, KC_LGUI,KC_MHEN, S(KC_SPC),S(KC_SPC), KC_HENK, KC_RGUI, KC_RALT, KC_RCTL, KC_HOME, KC_PGDN, KC_END),
+
+ /* Keymap _CL: Control layer
+ */
+[_CL] = KEYMAP(
+ _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, \
+ _______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD, \
+ _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
+ MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI, \
+ _______, _______, _______,_______, RGB_MOD,RGB_MOD, _______, _______, _______, _______, RGB_HUD,RGB_SAD,RGB_HUI),
+};
+
+/* This is a list of user defined functions. F(N) corresponds to item N
+ of this list.
+ */
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_FUNCTION(0), // Calls action_function()
+};
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ static uint8_t mods_pressed;
+ static bool mod_flag;
+
+ switch (id) {
+ case 0:
+ /* Handle the combined Grave/Esc key
+ */
+ mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed
+
+ if (record->event.pressed) {
+ /* The key is being pressed.
+ */
+ if (mods_pressed) {
+ mod_flag = true;
+ add_key(KC_GRV);
+ send_keyboard_report();
+ } else {
+ add_key(KC_ESC);
+ send_keyboard_report();
+ }
+ } else {
+ /* The key is being released.
+ */
+ if (mod_flag) {
+ mod_flag = false;
+ del_key(KC_GRV);
+ send_keyboard_report();
+ } else {
+ del_key(KC_ESC);
+ send_keyboard_report();
+ }
+ }
+ break;
+ }
+}
diff --git a/keyboards/clueboard/keymaps/skully/layout.png b/keyboards/clueboard/keymaps/skully/layout.png
new file mode 100644
index 0000000000..64854aaefd
--- /dev/null
+++ b/keyboards/clueboard/keymaps/skully/layout.png
Binary files differ
diff --git a/keyboards/clueboard/keymaps/skully/readme.md b/keyboards/clueboard/keymaps/skully/readme.md
new file mode 100644
index 0000000000..08255dfbc5
--- /dev/null
+++ b/keyboards/clueboard/keymaps/skully/readme.md
@@ -0,0 +1,16 @@
+```
+ ___ _____ _ _ _ __ __ _ __
+|__ \ / ____| | | | | | / / / /(_) / /
+ ||) | | | | |_ _ ___| |__ ___ __ _ _ __ __| | / /_ / /_ / /
+ |/ / | | | | | | |/ _ \ '_ \ / _ \ / _` | '__/ _` | | '_ \| '_ \ / /
+ |_| | |____| | |_| | __/ |_) | (_) | (_| | | | (_| | | (_) | (_) / / _
+ (_) \_____|_|\__,_|\___|_.__/ \___/ \__,_|_| \__,_| \___/ \___/_/ (_)
+```
+
+![Clueboard Layout Image](layout.png)
+
+# skullY's Clueboard Layout
+
+This layout is what I (@skullydazed) use on my personal Clueboards. I mostly use it for programming, CAD, and general typing.
+
+The most notable change from the default layout is putting Ctrl on the Capslock key. I also swap Alt and Cmd because I mostly use a Mac day to day.
diff --git a/keyboards/clueboard/keymaps/smt/keymap.c b/keyboards/clueboard/keymaps/smt/keymap.c
new file mode 100644
index 0000000000..f097afaa8d
--- /dev/null
+++ b/keyboards/clueboard/keymaps/smt/keymap.c
@@ -0,0 +1,181 @@
+#include "clueboard.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.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _FL 3
+#define _CL 4
+
+enum planck_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK
+};
+
+// Helpful defines
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+#define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
+
+// Custom macros
+#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl
+#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper (Super+Ctrl+Shift+Alt)
+#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _QWERTY: Base Layer (Default Layer)
+ * ,-----------------------------------------------------------. ,---.
+ * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `| |PgU|
+ * |-----------------------------------------------------------| |---|
+ * |HpTab| Q| W| E| R| T| Y| U| I| O| P| [| ]| BS| |PgD|
+ * |-----------------------------------------------------------| `---'
+ * |CtlEsc| A| S| D| F| G| H| J| K| L| ;| '| | Ent|
+ * |--------------------------------------------------------------.
+ * |Shift| | Z| X| C| V| B| N| M| ,| .| /|Shift| Fn| Up|
+ * |------------------------------------------------------------------.
+ * |Ctrl|Gui|Alt | | Space| Space| |Alt |Gui |Ctrl|Left|Down|Rgt|
+ * `------------------------------------------------------------------'
+ */
+[_QWERTY] = KEYMAP(
+ F(0), 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_PGUP, \
+ HPR_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, \
+ CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXXX, KC_ENT, \
+ KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT, MO(_FL), KC_UP, \
+ KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, KC_SPC,KC_SPC, XXXXXXX, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ /* Keymap _COLEMAK: Base Layer
+ * ,-----------------------------------------------------------. ,---.
+ * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `| |PgU|
+ * |-----------------------------------------------------------| |---|
+ * |HpTab| Q| W| F| P| G| J| L| U| Y| ;| [| ]| BS| |PgD|
+ * |-----------------------------------------------------------| `---'
+ * |CtlEsc| A| R| S| T| D| H| N| E| I| O| '| | Ent|
+ * |--------------------------------------------------------------.
+ * |Shift| | Z| X| C| V| B| K| M| ,| .| /|Shift| Fn| Up|
+ * |------------------------------------------------------------------.
+ * |Ctrl|Gui|Alt | | Space| Space| |Alt |Gui |Ctrl|Left|Down|Rgt|
+ * `------------------------------------------------------------------'
+ */
+[_COLEMAK] = KEYMAP(
+ F(0), 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_PGUP, \
+ HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSPC, KC_PGDN, \
+ CTL_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, XXXXXXX, KC_ENT, \
+ KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT, MO(_FL), KC_UP, \
+ KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, KC_SPC,KC_SPC, XXXXXXX, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ /* Keymap _DVORAK: Base Layer
+ * ,-----------------------------------------------------------. ,---.
+ * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| [| ]| \| `| |PgU|
+ * |-----------------------------------------------------------| |---|
+ * |HpTab| '| ,| .| P| Y| F| G| C| R| L| /| =| BS| |PgD|
+ * |-----------------------------------------------------------| `---'
+ * |CtlEsc| A| O| E| U| I| D| H| T| N| S| -| | Ent|
+ * |--------------------------------------------------------------.
+ * |Shift| | ;| Q| J| K| X| B| M| W| V| Z|Shift| Fn| Up|
+ * |------------------------------------------------------------------.
+ * |Ctrl|Gui|Alt | | Space| Space| |Alt |Gui |Ctrl|Left|Down|Rgt|
+ * `------------------------------------------------------------------'
+ */
+[_DVORAK] = KEYMAP(
+ F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSLS, KC_GRV, KC_PGUP, \
+ HPR_TAB, KC_QUOT, KC_COMM,KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSPC, KC_PGDN, \
+ CTL_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, XXXXXXX, KC_ENT, \
+ KC_LSFT, XXXXXXX, KC_SCLN,KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_ENT, MO(_FL), KC_UP, \
+ KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, KC_SPC,KC_SPC, XXXXXXX, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ /* Keymap _FL: Function Layer
+ */
+[_FL] = KEYMAP(
+ 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, _______, _______, BL_STEP, \
+ _______, _______, _______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK, KC_PAUS, _______, _______, KC_DEL, _______, \
+ _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
+ _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), KC_PGUP, \
+ _______, _______, _______, _______, _______,_______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END),
+
+ /* Keymap _CL: Control layer
+ */
+[_CL] = KEYMAP(
+ _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, \
+ _______, _______, _______,_______,RESET, _______,_______,QWERTY, COLEMAK,DVORAK, _______, _______, _______, _______, RGB_VAD, \
+ _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
+ MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI, \
+ _______, _______, _______,_______, RGB_MOD,RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
+};
+
+/* This is a list of user defined functions. F(N) corresponds to item N
+ of this list.
+ */
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_FUNCTION(0), // Calls action_function()
+};
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ static uint8_t mods_pressed;
+ static bool mod_flag;
+
+ switch (id) {
+ case 0:
+ /* Handle the combined Grave/Esc key
+ */
+ mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed
+
+ if (record->event.pressed) {
+ /* The key is being pressed.
+ */
+ if (mods_pressed) {
+ mod_flag = true;
+ add_key(KC_GRV);
+ send_keyboard_report();
+ } else {
+ add_key(KC_ESC);
+ send_keyboard_report();
+ }
+ } else {
+ /* The key is being released.
+ */
+ if (mod_flag) {
+ mod_flag = false;
+ del_key(KC_GRV);
+ send_keyboard_report();
+ } else {
+ del_key(KC_ESC);
+ send_keyboard_report();
+ }
+ }
+ break;
+ }
+}
+
+void persistent_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ persistent_default_layer_set(1UL<<_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ persistent_default_layer_set(1UL<<_COLEMAK);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ persistent_default_layer_set(1UL<<_DVORAK);
+ }
+ return false;
+ break;
+ }
+ return true;
+} \ No newline at end of file
diff --git a/keyboards/clueboard/keymaps/smt/layout.png b/keyboards/clueboard/keymaps/smt/layout.png
new file mode 100644
index 0000000000..6c27277a9a
--- /dev/null
+++ b/keyboards/clueboard/keymaps/smt/layout.png
Binary files differ
diff --git a/keyboards/clueboard/keymaps/smt/readme.md b/keyboards/clueboard/keymaps/smt/readme.md
new file mode 100644
index 0000000000..6a8b3edb44
--- /dev/null
+++ b/keyboards/clueboard/keymaps/smt/readme.md
@@ -0,0 +1,30 @@
+```
+ ___ _____ _ _ _ __ __ _ __
+|__ \ / ____| | | | | | / / / /(_) / /
+ ||) | | | | |_ _ ___| |__ ___ __ _ _ __ __| | / /_ / /_ / /
+ |/ / | | | | | | |/ _ \ '_ \ / _ \ / _` | '__/ _` | | '_ \| '_ \ / /
+ |_| | |____| | |_| | __/ |_) | (_) | (_| | | | (_| | | (_) | (_) / / _
+ (_) \_____|_|\__,_|\___|_.__/ \___/ \__,_|_| \__,_| \___/ \___/_/ (_)
+```
+
+# smt Clueboard Layout (HHKB variant)
+
+![Clueboard Layout Image](layout.png)
+
+This is smt's HHKB variant layout, based on the default layout that comes
+flashed on every Clueboard. The primary differences from the default are:
+
+- The Backspace key is moved down into the traditional `\` position
+- `\` and `` ` `` are assigned to the "split-backspace" positions
+- The right Shift is split to allow for a Fn key to its right
+- The modifiers on the right side now mirror the left side (`Alt`/`Super`/`Ctrl`)
+
+For the most part, it's a straightforward and easy to follow layout. There
+are a few special keys:
+
+- The Esc key sends `Esc` when tapped, `` ` `` when `Alt`/`Super`/`Ctrl`/`Fn` is held, or `~` when `Shift` is held
+- The Tab key sends `Tab` when tapped, or `Super+Ctrl+Alt+Shift` (a.k.a. [Hyper]) when held
+- The key traditionally in the Caps-Lock position has been re-mapped to send `Esc` when tapped, or `Ctrl` when held
+- The left Shift key sends `Enter` when tapped, or `Shift` when held
+
+[Hyper]: http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/
diff --git a/keyboards/clueboard/keymaps/unix_optimized/keymap.c b/keyboards/clueboard/keymaps/unix_optimized/keymap.c
new file mode 100644
index 0000000000..7c1359954b
--- /dev/null
+++ b/keyboards/clueboard/keymaps/unix_optimized/keymap.c
@@ -0,0 +1,86 @@
+#include "clueboard.h"
+
+// Helpful defines
+#define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
+#define _______ KC_TRNS
+
+// 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.
+#define _BL 0
+#define _FL 1
+#define _CL 2
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: Base Layer (Default Layer)
+ */
+[_BL] = KEYMAP(
+ F(0), 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_GRV, KC_BSPC, 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_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_NUHS, KC_ENT, \
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC, KC_SPC, KC_HENK, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
+
+ /* Keymap _FL: Function Layer
+ */
+[_FL] = KEYMAP(
+ 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_DEL, KC_INS, \
+ _______, _______, _______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK, KC_PAUS, _______, _______, _______, KC_DEL, \
+ _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
+ _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_PGUP, \
+ _______, _______, _______, _______, _______,_______, _______, _______, _______, MO(_FL), KC_HOME, KC_PGDN, KC_END),
+
+ /* Keymap _CL: Control layer
+ */
+[_CL] = KEYMAP(
+ _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, \
+ _______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD, \
+ _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
+ MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI, \
+ _______, _______, _______,_______, RGB_MOD,RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD,RGB_HUI),
+};
+
+/* This is a list of user defined functions. F(N) corresponds to item N
+ of this list.
+ */
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_FUNCTION(0), // Calls action_function()
+};
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ static uint8_t mods_pressed;
+ static bool mod_flag;
+
+ switch (id) {
+ case 0:
+ /* Handle the combined Grave/Esc key
+ */
+ mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed
+
+ if (record->event.pressed) {
+ /* The key is being pressed.
+ */
+ if (mods_pressed) {
+ mod_flag = true;
+ add_key(KC_GRV);
+ send_keyboard_report();
+ } else {
+ add_key(KC_ESC);
+ send_keyboard_report();
+ }
+ } else {
+ /* The key is being released.
+ */
+ if (mod_flag) {
+ mod_flag = false;
+ del_key(KC_GRV);
+ send_keyboard_report();
+ } else {
+ del_key(KC_ESC);
+ send_keyboard_report();
+ }
+ }
+ break;
+ }
+}
diff --git a/keyboards/clueboard/keymaps/unix_optimized/layout.png b/keyboards/clueboard/keymaps/unix_optimized/layout.png
new file mode 100644
index 0000000000..ea7d30e357
--- /dev/null
+++ b/keyboards/clueboard/keymaps/unix_optimized/layout.png
Binary files differ
diff --git a/keyboards/clueboard/keymaps/unix_optimized/readme.md b/keyboards/clueboard/keymaps/unix_optimized/readme.md
new file mode 100644
index 0000000000..3510e138bf
--- /dev/null
+++ b/keyboards/clueboard/keymaps/unix_optimized/readme.md
@@ -0,0 +1,15 @@
+```
+ ___ _____ _ _ _ __ __ _ __
+|__ \ / ____| | | | | | / / / /(_) / /
+ ||) | | | | |_ _ ___| |__ ___ __ _ _ __ __| | / /_ / /_ / /
+ |/ / | | | | | | |/ _ \ '_ \ / _ \ / _` | '__/ _` | | '_ \| '_ \ / /
+ |_| | |____| | |_| | __/ |_) | (_) | (_| | | | (_| | | (_) | (_) / / _
+ (_) \_____|_|\__,_|\___|_.__/ \___/ \__,_|_| \__,_| \___/ \___/_/ (_)
+```
+
+![Clueboard Layout Image](layout.png)
+
+# Default Clueboard Layout
+
+This is the default layout except that Caps Lock has been changed to Control
+and Insert and Delete have been put into the Fn layer.
diff --git a/keyboards/clueboard/keymaps/win_optimized/keymap.c b/keyboards/clueboard/keymaps/win_optimized/keymap.c
new file mode 100644
index 0000000000..c5553ff1fb
--- /dev/null
+++ b/keyboards/clueboard/keymaps/win_optimized/keymap.c
@@ -0,0 +1,86 @@
+#include "clueboard.h"
+
+// Helpful defines
+#define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
+#define _______ KC_TRNS
+
+// 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.
+#define _BL 0
+#define _FL 1
+#define _CL 2
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: Base Layer (Default Layer)
+ */
+[_BL] = KEYMAP(
+ F(0), 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_GRV, KC_BSPC, KC_INS, \
+ 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_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC,KC_SPC, KC_HENK, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
+
+ /* Keymap _FL: Function Layer
+ */
+[_FL] = KEYMAP(
+ 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_DEL, BL_STEP, \
+ _______, _______, _______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK, KC_PAUS, _______, _______, _______, _______, \
+ _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
+ _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_PGUP, \
+ _______, _______, _______, _______, _______,_______, _______, _______, _______, MO(_FL), KC_HOME, KC_PGDN, KC_END),
+
+ /* Keymap _CL: Control layer
+ */
+[_CL] = KEYMAP(
+ _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, \
+ _______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD, \
+ _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
+ MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI, \
+ _______, _______, _______,_______, RGB_MOD, RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
+};
+
+/* This is a list of user defined functions. F(N) corresponds to item N
+ of this list.
+ */
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_FUNCTION(0), // Calls action_function()
+};
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ static uint8_t mods_pressed;
+ static bool mod_flag;
+
+ switch (id) {
+ case 0:
+ /* Handle the combined Grave/Esc key
+ */
+ mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed
+
+ if (record->event.pressed) {
+ /* The key is being pressed.
+ */
+ if (mods_pressed) {
+ mod_flag = true;
+ add_key(KC_GRV);
+ send_keyboard_report();
+ } else {
+ add_key(KC_ESC);
+ send_keyboard_report();
+ }
+ } else {
+ /* The key is being released.
+ */
+ if (mod_flag) {
+ mod_flag = false;
+ del_key(KC_GRV);
+ send_keyboard_report();
+ } else {
+ del_key(KC_ESC);
+ send_keyboard_report();
+ }
+ }
+ break;
+ }
+}
diff --git a/keyboards/clueboard/keymaps/win_optimized/layout.png b/keyboards/clueboard/keymaps/win_optimized/layout.png
new file mode 100644
index 0000000000..7d8c82da7c
--- /dev/null
+++ b/keyboards/clueboard/keymaps/win_optimized/layout.png
Binary files differ
diff --git a/keyboards/clueboard/keymaps/win_optimized/readme.md b/keyboards/clueboard/keymaps/win_optimized/readme.md
new file mode 100644
index 0000000000..cede17ee17
--- /dev/null
+++ b/keyboards/clueboard/keymaps/win_optimized/readme.md
@@ -0,0 +1,17 @@
+```
+ ___ _____ _ _ _ __ __ _ __
+|__ \ / ____| | | | | | / / / /(_) / /
+ ||) | | | | |_ _ ___| |__ ___ __ _ _ __ __| | / /_ / /_ / /
+ |/ / | | | | | | |/ _ \ '_ \ / _ \ / _` | '__/ _` | | '_ \| '_ \ / /
+ |_| | |____| | |_| | __/ |_) | (_) | (_| | | | (_| | | (_) | (_) / / _
+ (_) \_____|_|\__,_|\___|_.__/ \___/ \__,_|_| \__,_| \___/ \___/_/ (_)
+```
+
+![Clueboard Layout Image](layout.png)
+
+# Default Clueboard Layout
+
+This is the default layout that comes flashed on every Clueboard. For the most
+part it's a straightforward and easy to follow layout. The only unusual key is
+the key in the upper left, which sends Escape normally, but Grave when any of
+the Ctrl, Alt, or GUI modifiers are held down.
diff --git a/keyboards/clueboard/keymaps/xyverz/Makefile b/keyboards/clueboard/keymaps/xyverz/Makefile
new file mode 100644
index 0000000000..950dadf841
--- /dev/null
+++ b/keyboards/clueboard/keymaps/xyverz/Makefile
@@ -0,0 +1,49 @@
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device.
+# Please customize your programmer settings(PROGRAM_CMD)
+#
+# make teensy = Download the hex file to the device, using teensy_loader_cli.
+# (must have teensy_loader_cli installed).
+#
+# make dfu = Download the hex file to the device, using dfu-programmer (must
+# have dfu-programmer installed).
+#
+# make flip = Download the hex file to the device, using Atmel FLIP (must
+# have Atmel FLIP installed).
+#
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
+# (must have dfu-programmer installed).
+#
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
+# (must have Atmel FLIP installed).
+#
+# make debug = Start either simulavr or avarice as specified for debugging,
+# with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+# bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+# Build Options
+# change to "no" to disable the options, or define them in the makefile.mk in
+# the appropriate keymap folder that will get included automatically
+#
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/clueboard/keymaps/xyverz/keymap.c b/keyboards/clueboard/keymaps/xyverz/keymap.c
new file mode 100644
index 0000000000..4539119731
--- /dev/null
+++ b/keyboards/clueboard/keymaps/xyverz/keymap.c
@@ -0,0 +1,111 @@
+// Xyverz' keymap.
+// It's based on the default keymap, but Dvorak!
+
+#include "clueboard.h"
+
+// Used for SHIFT_ESC
+#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
+
+// 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.
+#define _BL 0
+#define _FL 1
+#define _RS 2
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: (Base Layer) Default Layer
+ * ,--------------------------------------------------------------------------. ,----.
+ * |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| [| ]| \| BS| |PGUP|
+ * |--------------------------------------------------------------------------| |----|
+ * | Tab| '| ,| .| P| Y| F| G| C| R| L| /| =| \| |PGDN|
+ * |--------------------------------------------------------------------------| `----'
+ * |_FL/Caps| A| O| E| U| I| H| D| H| T| N| S| - | Ent|
+ * |-----------------------------------------------------------------------------.
+ * |Shift| BS| ;| Q| J| K| X| B| M| W| V| Z| BS|Shift| UP|
+ * |------------------------------------------------------------------------|----|----.
+ * | Ctrl| Gui| Alt| MHen| Space| Space| Hen| Alt| Ctrl| _FL|LEFT|DOWN|RGHT|
+ * `----------------------------------------------------------------------------------'
+ */
+[_BL] = KEYMAP(
+ F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_GRV, KC_BSPC, KC_PGUP, \
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS, KC_PGDN, \
+ LT(_FL, KC_CAPS), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_NUHS, KC_ENT, \
+ KC_LSFT, KC_RO, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_SLSH, KC_RSFT, KC_UP, \
+ KC_LCTL, KC_LALT, KC_LGUI, KC_MHEN, KC_SPC, KC_SPC, KC_HENK, KC_RGUI, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
+
+ /* Keymap _FL: Function Layer
+ * ,--------------------------------------------------------------------------. ,----.
+ * | `| F1| F2| F3| F4| F5| F6| F7| F8| F9| F10| F11| F12| | Del| |BLIN|
+ * |--------------------------------------------------------------------------| |----|
+ * | | | | | | | | |PScr|SLck|Paus| | | | |BLDE|
+ * |--------------------------------------------------------------------------| `----'
+ * | | | _RS| | | | | | | | | | | |
+ * |-----------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | |PGUP|
+ * |------------------------------------------------------------------------|----|----.
+ * | | | | | | | | | | _FL|HOME|PGDN| END|
+ * `----------------------------------------------------------------------------------'
+ */
+[_FL] = KEYMAP(
+ 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, KC_DEL, BL_STEP, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, MO(_RS), 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_PGUP, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), KC_HOME, KC_PGDN, KC_END),
+
+ /* Keymap _RS: Reset layer
+ * ,--------------------------------------------------------------------------. ,----.
+ * | | | | | | | | | | | | | | | RGB| |VAL+|
+ * |--------------------------------------------------------------------------| |----|
+ * | | | | |RESET| | | | | | | | | | |VAL-|
+ * |--------------------------------------------------------------------------| `----'
+ * | | | _RS| | | | | | | | | | | |
+ * |-----------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | |SAT+|
+ * |------------------------------------------------------------------------|----|----.
+ * | | | | | | | | | | _FL|HUE-|SAT-|HUE+|
+ * `----------------------------------------------------------------------------------'
+ */
+[_RS] = KEYMAP(
+ 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, RGB_TOG, RGB_VAI, \
+ 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, RGB_VAD, \
+ KC_TRNS, KC_TRNS, MO(_RS), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ MO(_FL), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), RGB_SAI, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_MOD, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_HUD, RGB_SAD, RGB_HUI),
+};
+
+enum function_id {
+ SHIFT_ESC,
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_FUNCTION(SHIFT_ESC),
+};
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ static uint8_t shift_esc_shift_mask;
+ switch (id) {
+ case SHIFT_ESC:
+ shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
+ if (record->event.pressed) {
+ if (shift_esc_shift_mask) {
+ add_key(KC_GRV);
+ send_keyboard_report();
+ } else {
+ add_key(KC_ESC);
+ send_keyboard_report();
+ }
+ } else {
+ if (shift_esc_shift_mask) {
+ del_key(KC_GRV);
+ send_keyboard_report();
+ } else {
+ del_key(KC_ESC);
+ send_keyboard_report();
+ }
+ }
+ break;
+ }
+}
diff --git a/keyboards/clueboard/readme.md b/keyboards/clueboard/readme.md
new file mode 100644
index 0000000000..4a76e2908c
--- /dev/null
+++ b/keyboards/clueboard/readme.md
@@ -0,0 +1,97 @@
+Clueboard keyboard firmware
+======================
+
+DIY/Assembled compact 66% keyboard by [Clueboard](http://clueboard.co).
+
+For the full Quantum Mechanical Keyboard feature list, see [the parent readme.md](/readme.md).
+
+## First Time Setup
+
+Download or clone the whole firmware and navigate to the keyboards/clueboard directory. Once your dev env is setup, you'll be able to generate the default .hex:
+
+```
+$ make
+```
+
+You will see a lot of output and if everything worked correctly you will see something similar to this:
+
+```
+Size after:
+ text data bss dec hex filename
+ 0 19992 0 19992 4e18 clueboard_rev2_default.hex
+```
+
+At this point you can press RESET on your Clueboard and flash your keyboard with this command:
+
+```
+$ make dfu
+```
+
+If you would like to use one of the alternative keymaps, or create your own, see below.
+
+## Clueboard 1.0
+
+If you have a first generation Clueboard (one with a black PCB) you will need to use the revision 1 code. To do so add `rev1` to your make command, like this:
+
+```
+$ make rev1
+```
+
+And when flashing your keyboard:
+
+```
+$ make rev1-dfu
+```
+
+If you are flashing an alternative layout to your rev1, include both `rev1` and `<keymap>` in your command, for example when flashing max:
+
+```
+$ make rev1-max-dfu
+```
+
+## Alternate Keymaps
+
+There are many alternative and user-contributed layouts available in the [keymaps/](keymaps/) directory. To compile and flash an alternative you will want to add `<keymap>` to your command:
+
+```
+$ make skully
+```
+
+And when flashing your keyboard, put `<keymap>` between "make" and "dfu":
+
+```
+$ make skully-dfu
+```
+
+### Notable Layouts
+
+These layouts are notable for one reason or another. If you are looking for ideas or inspiration you should look at these first:
+
+* [keymaps/default](keymaps/default) - The default Clueboard layout
+* [keymaps/max](keymaps/max) - A maximised layout that makes use of every key and feature of the Clueboard 2.0 PCB.
+* [keymaps/skully](keymaps/skully) - The layout that @skullydazed uses on his own Clueboards.
+
+## Create Your Own Keymap
+
+There are a lot of possibilities when creating your own keymap, and the primary documentation for doing that is [Customizing Your Keymap](/readme.md##customizing-your-keymap) in the main readme.md. As a way to get started, here is the procedure I recommend:
+
+* Copy `[keymaps/default](keymaps/default/)` to `keymaps/<your_layout>`.
+* Compile the firmware (`$ make <your_layout>`)
+* Flash the firmware (`$ make <your_layout>-dfu`)
+* Make sure everything works like the default keyboard
+* Modify `keymaps/<your_layout>/readme.md` to tell others about your layout.
+* Modify `keymaps/<your_layout>/keymap.c` to reflect your desired layout.
+* Compile your new custom firmware (`$ make <your_layout>`)
+** If you have warnings you may flash without fixing them, but something may not work right.
+** If you have any errors you must fix them before continuing.
+* Flash the firmware (`$ make <your_layout>-dfu`)
+
+## Share Your Keymap
+
+Got your layout dialed in? Please share it with the world so we can benefit from your work! Simply submit a pull request with your layout and we'll include it in the official repository. Please use the following guidelines when putting together your pull request:
+
+* Include a readme.md that states what your primary keyboard use is, how your layout differs from the default, and highlights anything you think makes your layout particularly great.
+* If your layout requires certain features (EG, RGB underlight or backlighting) ensure you have a Makefile and config.h that reflects that
+* If your layout requires special hardware to be added, please describe that in the readme.md
+
+TODO: Write up or link quick how-to on creating and submitting a PR. (Pull requests accepted. :)
diff --git a/keyboards/clueboard/rev1/Makefile b/keyboards/clueboard/rev1/Makefile
new file mode 100644
index 0000000000..191c6bb664
--- /dev/null
+++ b/keyboards/clueboard/rev1/Makefile
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+ include ../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/clueboard/rev1/config.h b/keyboards/clueboard/rev1/config.h
new file mode 100644
index 0000000000..f40876ffbf
--- /dev/null
+++ b/keyboards/clueboard/rev1/config.h
@@ -0,0 +1,36 @@
+#ifndef REV2_CONFIG_H
+#define REV2_CONFIG_H
+
+#include "../config.h"
+
+#define PRODUCT_ID 0x2301
+#define DEVICE_VER 0x0003
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 16
+
+// ROWS: Top to bottom, COLS: Left to right
+/* Column pin configuration
+* col: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+* pin: B3 F1 F4 F5 F6 C7 C6 B6 B5 B4 D7 D6 D4 F7 B0 B1
+*/
+#define MATRIX_COL_PINS { B3, F1, F4, F5, F6, C7, C6, B6, B5, B4, D7, D6, D4, F7, B0, B1 }
+/* Row pin configuration
+* row: 0 1 2 3 4
+* pin: D1 D0 D2 D5 D3
+*/
+#define MATRIX_ROW_PINS { D1, D0, D2, D5, D3 }
+#define UNUSED_PINS
+
+/* Underlight configuration
+ */
+#define RGB_DI_PIN B2
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 14 // Number of LEDs
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+
+
+#endif \ No newline at end of file
diff --git a/keyboards/clueboard/rev1/rev1.c b/keyboards/clueboard/rev1/rev1.c
new file mode 100644
index 0000000000..90fc6956c9
--- /dev/null
+++ b/keyboards/clueboard/rev1/rev1.c
@@ -0,0 +1,17 @@
+#include "rev1.h"
+
+void led_init_ports() {
+ // * Set our LED pins as output
+ DDRF |= (1<<0);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ DDRF |= (1<<0);
+ if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+ // Turn capslock on
+ PORTF |= (1<<0);
+ } else {
+ // Turn capslock off
+ PORTF &= ~(1<<0);
+ }
+}
diff --git a/keyboards/clueboard/rev1/rev1.h b/keyboards/clueboard/rev1/rev1.h
new file mode 100644
index 0000000000..abdfd079b3
--- /dev/null
+++ b/keyboards/clueboard/rev1/rev1.h
@@ -0,0 +1,47 @@
+#ifndef REV1_H
+#define REV1_H
+
+#include "../clueboard.h"
+
+/* Clueboard matrix layout
+ * ,-----------------------------------------------------------. ,---.
+ * | 00| 01| 02| 03| 04| 05| 06| 07| 08| 09| 0A| 0B| 0C| 0D| 0E| | 0F|
+ * |-----------------------------------------------------------| |---|
+ * | 10| 11| 12| 13| 14| 15| 16| 17| 18| 19| 1A| 1B| 1C| 1D| | 1F|
+ * |-----------------------------------------------------------| `---'
+ * | 20| 21| 22| 23| 24| 25| 26| 27| 28| 29| 2A| 2B| 2C| 2D|
+ * |------------------------------------------------------------.
+ * | 30| 31| 32| 33| 34| 35| 36| 37| 38| 39| 3A| 3B| 3C| 3D|3E|
+ * |------------------------------------------------------------------.
+ * | 40| 41| 42| 43| 45| 46| 49| 4A| 4B| 4C| 4D| 4E| 4F|
+ * `------------------------------------------------------------------'
+ * ,-----------------------------------------------------------. ,---.
+ * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Yen| BS| |Ins|
+ * |-----------------------------------------------------------| |---|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |Del|
+ * |-----------------------------------------------------------| `---'
+ * |Caps | A| S| D| F| G| H| J| k| L| ;| '| # | Ent|
+ * |--------------------------------------------------------------.
+ * |Shift| \| Z| X| C| V| B| N| M| ,| .| /| \|Shift| Up|
+ * |------------------------------------------------------------------.
+ * |Ctrl|Alt|Gui |MHen| Space| Space|Henk|Gui |Ctrl| Fn|Left|Down|Rgt|
+ * `------------------------------------------------------------------'
+ */
+// The first section contains all of the arguements
+// The second converts the arguments into a two-dimensional array
+
+#define KEYMAP( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1F, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, \
+ k40, k41, k42, k43, k45, k46, k49, k4A, k4B, k4C, k4D, k4E, k4F \
+) { \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, KC_NO, k1F }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E }, \
+ { k40, k41, k42, k43, KC_NO, k45, k46, KC_NO, KC_NO, k49, k4A, k4B, k4C, k4D, k4E, k4F } \
+}
+
+#endif
diff --git a/keyboards/clueboard/rev1/rules.mk b/keyboards/clueboard/rev1/rules.mk
new file mode 100644
index 0000000000..80a942d06f
--- /dev/null
+++ b/keyboards/clueboard/rev1/rules.mk
@@ -0,0 +1,5 @@
+BACKLIGHT_ENABLE = no
+
+ifndef QUANTUM_DIR
+ include ../../../Makefile
+endif
diff --git a/keyboards/clueboard/rev2/Makefile b/keyboards/clueboard/rev2/Makefile
new file mode 100644
index 0000000000..191c6bb664
--- /dev/null
+++ b/keyboards/clueboard/rev2/Makefile
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+ include ../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/clueboard/rev2/config.h b/keyboards/clueboard/rev2/config.h
new file mode 100644
index 0000000000..8435fd02be
--- /dev/null
+++ b/keyboards/clueboard/rev2/config.h
@@ -0,0 +1,39 @@
+#ifndef REV2_CONFIG_H
+#define REV2_CONFIG_H
+
+#include "../config.h"
+
+#define PRODUCT_ID 0x2320
+#define DEVICE_VER 0x0001
+
+/* key matrix size */
+#define MATRIX_ROWS 10
+#define MATRIX_COLS 8
+
+// ROWS: Top to bottom, COLS: Left to right
+/* Row pin configuration
+* row: 0 1 2 3 4 5 6 7 8 9
+* pin: B2 C7 C6 B6 B5 B0 B3 D5 D3 D2
+*/
+#define MATRIX_ROW_PINS { B2, C7, C6, B6, B5, B0, B3, D5, D3, D2 }
+/* Column pin configuration
+ * col: 0 1 2 3 4 5 6 7
+ * pin: F0 F1 F4 F5 F6 F7 E6 B1
+ */
+#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, E6, B1 }
+#define UNUSED_PINS
+
+ /* Backlight configuration
+ */
+#define BACKLIGHT_LEVELS 1
+
+/* Underlight configuration
+ */
+#define RGB_DI_PIN D7
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 14 // Number of LEDs
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+
+#endif
diff --git a/keyboards/clueboard/rev2/rev2.c b/keyboards/clueboard/rev2/rev2.c
new file mode 100644
index 0000000000..1a35b87b84
--- /dev/null
+++ b/keyboards/clueboard/rev2/rev2.c
@@ -0,0 +1,63 @@
+#include "rev2.h"
+#include <avr/io.h>
+#include "backlight.h"
+#include "print.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+ matrix_init_user();
+ led_init_ports();
+
+ // JTAG disable for PORT F. write JTD bit twice within four cycles.
+ MCUCR |= (1<<JTD);
+ MCUCR |= (1<<JTD);
+}
+
+
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+void backlight_init_ports(void) {
+ print("init_backlight_pin()\n");
+ // Set our LED pins as output
+ DDRD |= (1<<6); // Esc
+ DDRB |= (1<<7); // Page Up
+ DDRD |= (1<<4); // Arrows
+
+ // Set our LED pins low
+ PORTD &= ~(1<<6); // Esc
+ PORTB &= ~(1<<7); // Page Up
+ PORTD &= ~(1<<4); // Arrows
+}
+
+void backlight_set(uint8_t level) {
+ if ( level == 0 ) {
+ // Turn off light
+ PORTD |= (1<<6); // Esc
+ PORTB |= (1<<7); // Page Up
+ PORTD |= (1<<4); // Arrows
+ } else {
+ // Turn on light
+ PORTD &= ~(1<<6); // Esc
+ PORTB &= ~(1<<7); // Page Up
+ PORTD &= ~(1<<4); // Arrows
+ }
+}
+
+void led_init_ports() {
+ // * Set our LED pins as output
+ DDRB |= (1<<4);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ DDRB |= (1<<4);
+ if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+ // Turn capslock on
+ PORTB |= (1<<4);
+ } else {
+ // Turn capslock off
+ PORTB &= ~(1<<4);
+ }
+}
diff --git a/keyboards/clueboard/rev2/rev2.h b/keyboards/clueboard/rev2/rev2.h
new file mode 100644
index 0000000000..2e9cb9dc2e
--- /dev/null
+++ b/keyboards/clueboard/rev2/rev2.h
@@ -0,0 +1,52 @@
+#ifndef REV2_H
+#define REV2_H
+
+#include "../clueboard.h"
+
+/* Clueboard matrix layout
+ * ,-----------------------------------------------------------. ,---.
+ * | 00| 01| 02| 03| 04| 05| 06| 07| 50| 51| 52| 53| 54| 55| 56| | 57|
+ * |-----------------------------------------------------------| |---|
+ * | 10| 11| 12| 13| 14| 15| 16| 17| 60| 61| 62| 63| 64| 65| | 67|
+ * |-----------------------------------------------------------| `---'
+ * | 20| 21| 22| 23| 24| 25| 26| 27| 70| 71| 72| 73| 74| 75|
+ * |------------------------------------------------------------.
+ * | 30| 31| 32| 33| 34| 35| 36| 37| 80| 81| 82| 83| 84| 85|86|
+ * |------------------------------------------------------------------.
+ * | 40| 41| 42| 43| 45| 46| 90| 92| 93| 94| 95| 96| 97|
+ * `------------------------------------------------------------------'
+ * ,-----------------------------------------------------------. ,---.
+ * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Yen| BS| |Ins|
+ * |-----------------------------------------------------------| |---|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |Del|
+ * |-----------------------------------------------------------| `---'
+ * |Caps | A| S| D| F| G| H| J| k| L| ;| '| # | Ent|
+ * |--------------------------------------------------------------.
+ * |Shift| \| Z| X| C| V| B| N| M| ,| .| /| \|Shift| Up|
+ * |------------------------------------------------------------------.
+ * |Ctrl|Alt|Gui |MHen| Space| Space|Henk|Gui |Ctrl| Fn|Left|Down|Rgt|
+ * `------------------------------------------------------------------'
+ */
+// The first section contains all of the arguments
+// The second converts the arguments into a two-dimensional array
+
+#define KEYMAP( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54, k55, k56, k57, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k65, k67, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73, k74, k75, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k80, k81, k82, k83, k84, k85, k86, \
+ k40, k41, k42, k43, k45, k46, k90, k92, k93, k94, k95, k96, k97 \
+) { \
+ { 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, k37 }, \
+ { k40, k41, k42, k43, KC_NO, k45, k46, KC_NO }, \
+ { k50, k51, k52, k53, k54, k55, k56, k57 }, \
+ { k60, k61, k62, k63, k64, k65, KC_NO, k67 }, \
+ { k70, k71, k72, k73, k74, k75, KC_NO, KC_NO }, \
+ { k80, k81, k82, k83, k84, k85, k86, KC_NO }, \
+ { k90, KC_NO, k92, k93, k94, k95, k96, k97 } \
+}
+
+#endif
diff --git a/keyboards/clueboard/rev2/rules.mk b/keyboards/clueboard/rev2/rules.mk
new file mode 100644
index 0000000000..cea967b795
--- /dev/null
+++ b/keyboards/clueboard/rev2/rules.mk
@@ -0,0 +1,5 @@
+BACKLIGHT_ENABLE = yes
+
+ifndef QUANTUM_DIR
+ include ../../../Makefile
+endif
diff --git a/keyboards/clueboard/rules.mk b/keyboards/clueboard/rules.mk
new file mode 100644
index 0000000000..7ce096ba8b
--- /dev/null
+++ b/keyboards/clueboard/rules.mk
@@ -0,0 +1,103 @@
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device.
+# Please customize your programmer settings(PROGRAM_CMD)
+#
+# make teensy = Download the hex file to the device, using teensy_loader_cli.
+# (must have teensy_loader_cli installed).
+#
+# make dfu = Download the hex file to the device, using dfu-programmer (must
+# have dfu-programmer installed).
+#
+# make flip = Download the hex file to the device, using Atmel FLIP (must
+# have Atmel FLIP installed).
+#
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
+# (must have dfu-programmer installed).
+#
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
+# (must have Atmel FLIP installed).
+#
+# make debug = Start either simulavr or avarice as specified for debugging,
+# with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+# bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= no # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes # Console for debug(+400)
+COMMAND_ENABLE ?= yes # Commands for debug and configuration
+NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+AUDIO_ENABLE ?= no
+RGBLIGHT_ENABLE ?= yes # Enable keyboard underlight functionality
+MIDI_ENABLE ?= no # MIDI controls
+UNICODE_ENABLE ?= no # Unicode
+BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID