summaryrefslogtreecommitdiff
path: root/keyboards/sofle/keymaps
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/sofle/keymaps')
-rw-r--r--keyboards/sofle/keymaps/default/keymap.c65
-rw-r--r--keyboards/sofle/keymaps/default/rules.mk2
-rw-r--r--keyboards/sofle/keymaps/devdev/config.h56
-rw-r--r--keyboards/sofle/keymaps/devdev/keymap.c3
-rw-r--r--keyboards/sofle/keymaps/flare576/config.h40
-rw-r--r--keyboards/sofle/keymaps/flare576/enums.h34
-rw-r--r--keyboards/sofle/keymaps/flare576/graphics.c290
-rw-r--r--keyboards/sofle/keymaps/flare576/graphics.h16
-rw-r--r--keyboards/sofle/keymaps/flare576/keymap.c196
-rw-r--r--keyboards/sofle/keymaps/flare576/logos.h96
-rw-r--r--keyboards/sofle/keymaps/flare576/readme.md22
-rw-r--r--keyboards/sofle/keymaps/flare576/rules.mk7
-rw-r--r--keyboards/sofle/keymaps/helltm/keymap.c3
-rw-r--r--keyboards/sofle/keymaps/j4ckofalltrades/oled.c3
-rw-r--r--keyboards/sofle/keymaps/keyhive_via/config.h48
-rw-r--r--keyboards/sofle/keymaps/keyhive_via/encoder.c49
-rw-r--r--keyboards/sofle/keymaps/keyhive_via/keymap.c191
-rw-r--r--keyboards/sofle/keymaps/keyhive_via/oled.c85
-rw-r--r--keyboards/sofle/keymaps/keyhive_via/readme.md49
-rw-r--r--keyboards/sofle/keymaps/keyhive_via/rules.mk2
-rw-r--r--keyboards/sofle/keymaps/killmaster/keymap.c3
-rw-r--r--keyboards/sofle/keymaps/rgb_default/config.h56
-rw-r--r--keyboards/sofle/keymaps/rgb_default/keymap.c31
-rw-r--r--keyboards/sofle/keymaps/via/keymap.c6
-rw-r--r--keyboards/sofle/keymaps/via/oled.c3
25 files changed, 1244 insertions, 112 deletions
diff --git a/keyboards/sofle/keymaps/default/keymap.c b/keyboards/sofle/keymaps/default/keymap.c
index a64d274b55..94e7d8b3a6 100644
--- a/keyboards/sofle/keymaps/default/keymap.c
+++ b/keyboards/sofle/keymaps/default/keymap.c
@@ -40,12 +40,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `----------------------------------' '------''---------------------------'
*/
-[_QWERTY] = LAYOUT( \
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GRV, \
- KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
- KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, XXXXXXX,KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
- KC_LGUI,KC_LALT,KC_LCTRL, KC_LOWER, KC_ENT, KC_SPC, KC_RAISE, KC_RCTRL, KC_RALT, KC_RGUI \
+[_QWERTY] = LAYOUT(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GRV,
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, XXXXXXX,KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LGUI,KC_LALT,KC_LCTRL, KC_LOWER, KC_ENT, KC_SPC, KC_RAISE, KC_RCTRL, KC_RALT, KC_RGUI
),
/*
* COLEMAK
@@ -63,12 +63,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `----------------------------------' '------''---------------------------'
*/
-[_COLEMAK] = LAYOUT( \
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GRV, \
- KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \
- KC_TAB, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, XXXXXXX,KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
- KC_LGUI,KC_LALT,KC_LCTRL,KC_LOWER, KC_ENT, KC_SPC, KC_RAISE, KC_RCTRL, KC_RALT, KC_RGUI \
+[_COLEMAK] = LAYOUT(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GRV,
+ KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
+ KC_TAB, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, XXXXXXX,KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LGUI,KC_LALT,KC_LCTRL,KC_LOWER, KC_ENT, KC_SPC, KC_RAISE, KC_RCTRL, KC_RALT, KC_RGUI
),
/* LOWER
* ,-----------------------------------------. ,-----------------------------------------.
@@ -84,12 +84,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | |/ / \ \ | | | | |
* `----------------------------------' '------''---------------------------'
*/
-[_LOWER] = LAYOUT( \
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,\
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_F12, \
- _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE, \
- _______, KC_EQL, KC_MINS, KC_PLUS, KC_LCBR, KC_RCBR, _______, _______, KC_LBRC, KC_RBRC, KC_SCLN, KC_COLN, KC_BSLS, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______\
+[_LOWER] = LAYOUT(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_F12,
+ _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE,
+ _______, KC_EQL, KC_MINS, KC_PLUS, KC_LCBR, KC_RCBR, _______, _______, KC_LBRC, KC_RBRC, KC_SCLN, KC_COLN, KC_BSLS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
/* RAISE
* ,----------------------------------------. ,-----------------------------------------.
@@ -105,18 +105,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | |/ / \ \ | | | | |
* `----------------------------------' '------''---------------------------'
*/
-[_RAISE] = LAYOUT( \
- _______, _______ , _______ , _______ , _______ , _______, _______, _______ , _______, _______ , _______ ,_______, \
- _______, KC_INS, KC_PSCR, KC_APP, XXXXXXX, XXXXXXX, KC_PGUP, KC_PRVWD, KC_UP, KC_NXTWD,KC_DLINE, KC_BSPC, \
- _______, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_CAPS, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_BSPC, \
- _______,KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, XXXXXXX, _______, _______, XXXXXXX, KC_LSTRT, XXXXXXX, KC_LEND, XXXXXXX, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+[_RAISE] = LAYOUT(
+ _______, _______ , _______ , _______ , _______ , _______, _______, _______ , _______, _______ , _______ ,_______,
+ _______, KC_INS, KC_PSCR, KC_APP, XXXXXXX, XXXXXXX, KC_PGUP, KC_PRVWD, KC_UP, KC_NXTWD,KC_DLINE, KC_BSPC,
+ _______, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_CAPS, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_BSPC,
+ _______,KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, XXXXXXX, _______, _______, XXXXXXX, KC_LSTRT, XXXXXXX, KC_LEND, XXXXXXX, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
/* ADJUST
* ,-----------------------------------------. ,-----------------------------------------.
* | | | | | | | | | | | | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | RESET| |QWERTY|COLEMAK| | | | | | | | | |
+ * | QK_BOOT| |QWERTY|COLEMAK| | | | | | | | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | | |MACWIN| | | |-------. ,-------| | VOLDO| MUTE | VOLUP| | |
* |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
@@ -126,12 +126,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | |/ / \ \ | | | | |
* `----------------------------------' '------''---------------------------'
*/
- [_ADJUST] = LAYOUT( \
- XXXXXXX , XXXXXXX, XXXXXXX , XXXXXXX , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
- RESET , XXXXXXX,KC_QWERTY,KC_COLEMAK,CG_TOGG,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
- XXXXXXX , XXXXXXX,CG_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLD, KC_MUTE, KC_VOLU, XXXXXXX, XXXXXXX, \
- XXXXXXX , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ [_ADJUST] = LAYOUT(
+ XXXXXXX , XXXXXXX, XXXXXXX , XXXXXXX , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ QK_BOOT , XXXXXXX,KC_QWERTY,KC_COLEMAK,CG_TOGG,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX , XXXXXXX,CG_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLD, KC_MUTE, KC_VOLU, XXXXXXX, XXXXXXX,
+ XXXXXXX , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
};
@@ -200,12 +200,13 @@ oled_rotation_t oled_init_user(oled_rotation_t rotation) {
return rotation;
}
-void oled_task_user(void) {
+bool oled_task_user(void) {
if (is_keyboard_master()) {
print_status_narrow();
} else {
render_logo();
}
+ return false;
}
#endif
diff --git a/keyboards/sofle/keymaps/default/rules.mk b/keyboards/sofle/keymaps/default/rules.mk
index e87a55ede4..c21a769a2e 100644
--- a/keyboards/sofle/keymaps/default/rules.mk
+++ b/keyboards/sofle/keymaps/default/rules.mk
@@ -2,5 +2,5 @@
OLED_ENABLE = yes
OLED_DRIVER = SSD1306
ENCODER_ENABLE = yes
-CONSOLE_ENABLE = yes
+CONSOLE_ENABLE = no
EXTRAKEY_ENABLE = yes
diff --git a/keyboards/sofle/keymaps/devdev/config.h b/keyboards/sofle/keymaps/devdev/config.h
index 32d0717352..c34da8382b 100644
--- a/keyboards/sofle/keymaps/devdev/config.h
+++ b/keyboards/sofle/keymaps/devdev/config.h
@@ -99,32 +99,32 @@
/* Disable the animations you don't want/need. You will need to disable a good number of these *
* because they take up a lot of space. Disable until you can successfully compile your firmware. */
-// # define DISABLE_RGB_MATRIX_ALPHAS_MODS
-// # define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN
-// # define DISABLE_RGB_MATRIX_BREATHING
-// # define DISABLE_RGB_MATRIX_CYCLE_ALL
-// # define DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
-// # define DISABLE_RGB_MATRIX_CYCLE_UP_DOWN
-// # define DISABLE_RGB_MATRIX_CYCLE_OUT_IN
-// # define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
-// # define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
-// # define DISABLE_RGB_MATRIX_DUAL_BEACON
-// # define DISABLE_RGB_MATRIX_RAINBOW_BEACON
-// # define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS
-// # define DISABLE_RGB_MATRIX_RAINDROPS
-// # define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
-// # define DISABLE_RGB_MATRIX_TYPING_HEATMAP
-// # define DISABLE_RGB_MATRIX_DIGITAL_RAIN
-// # define DISABLE_RGB_MATRIX_SOLID_REACTIVE
-// # define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
-// # define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
-// # define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
-// # define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
-// # define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
-// # define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
-// # define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
-// # define DISABLE_RGB_MATRIX_SPLASH
-// # define DISABLE_RGB_MATRIX_MULTISPLASH
-// # define DISABLE_RGB_MATRIX_SOLID_SPLASH
-// # define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
+ // # undef ENABLE_RGB_MATRIX_ALPHAS_MODS
+ // # undef ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+ // # undef ENABLE_RGB_MATRIX_BREATHING
+ // # undef ENABLE_RGB_MATRIX_CYCLE_ALL
+ // # undef ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+ // # undef ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+ // # undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN
+ // # undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+ // # undef ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+ // # undef ENABLE_RGB_MATRIX_DUAL_BEACON
+ // # undef ENABLE_RGB_MATRIX_RAINBOW_BEACON
+ // # undef ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+ // # undef ENABLE_RGB_MATRIX_RAINDROPS
+ // # undef ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+ // # undef ENABLE_RGB_MATRIX_TYPING_HEATMAP
+ // # undef ENABLE_RGB_MATRIX_DIGITAL_RAIN
+ // # undef ENABLE_RGB_MATRIX_SOLID_REACTIVE
+ // # undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+ // # undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+ // # undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+ // # undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+ // # undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+ // # undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+ // # undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+ // # undef ENABLE_RGB_MATRIX_SPLASH
+ // # undef ENABLE_RGB_MATRIX_MULTISPLASH
+ // # undef ENABLE_RGB_MATRIX_SOLID_SPLASH
+ // # undef ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
#endif
diff --git a/keyboards/sofle/keymaps/devdev/keymap.c b/keyboards/sofle/keymaps/devdev/keymap.c
index a0945b28f0..b805f7f176 100644
--- a/keyboards/sofle/keymaps/devdev/keymap.c
+++ b/keyboards/sofle/keymaps/devdev/keymap.c
@@ -465,12 +465,13 @@ oled_rotation_t oled_init_user(oled_rotation_t rotation) {
return rotation;
}
-void oled_task_user(void) {
+bool oled_task_user(void) {
if (is_keyboard_master()) {
print_status_narrow();
} else {
render_logo();
}
+ return false;
}
#endif
diff --git a/keyboards/sofle/keymaps/flare576/config.h b/keyboards/sofle/keymaps/flare576/config.h
new file mode 100644
index 0000000000..c0f0a7d563
--- /dev/null
+++ b/keyboards/sofle/keymaps/flare576/config.h
@@ -0,0 +1,40 @@
+/* Copyright 2021 Flare576 <flare576@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/>.
+ */
+#pragma once
+#define MAIN_BOARD
+#define MASTER_RIGHT
+#define ENCODER_DIRECTION_FLIP
+#define OLED_TIMEOUT 10000
+
+#define MOUSEKEY_INTERVAL 16
+#define MOUSEKEY_DELAY 0
+#define MOUSEKEY_TIME_TO_MAX 60
+#define MOUSEKEY_MAX_SPEED 7
+#define MOUSEKEY_WHEEL_DELAY 0
+#define TAPPING_TERM_PER_KEY
+
+#ifdef ENCODER_RESOLUTION
+ #undef ENCODER_RESOLUTION
+#endif
+#define ENCODER_RESOLUTION 4
+
+#ifdef TAPPING_TERM
+ #undef TAPPING_TERM
+#endif
+#define TAPPING_TERM 200
+
+#undef MANUFACTURER
+#define MANUFACTURER Flare576
diff --git a/keyboards/sofle/keymaps/flare576/enums.h b/keyboards/sofle/keymaps/flare576/enums.h
new file mode 100644
index 0000000000..7edcc1110f
--- /dev/null
+++ b/keyboards/sofle/keymaps/flare576/enums.h
@@ -0,0 +1,34 @@
+/* Copyright 2021 Flare576 <flare576@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/>.
+ */
+#pragma once
+enum _layers {
+ /* _M_XYZ = Mac Os, _W_XYZ = Win/Linux */
+ _BASE,
+ _MOUS,
+ _SYMS,
+ _FF14,
+ _ESDF,
+};
+
+enum custom_keycodes {
+ _COMP1 = SAFE_RANGE,
+ _COMP2,
+};
+
+enum custom_tapdance {
+ TD_PLAY,
+ TD_HOME,
+};
diff --git a/keyboards/sofle/keymaps/flare576/graphics.c b/keyboards/sofle/keymaps/flare576/graphics.c
new file mode 100644
index 0000000000..918334a508
--- /dev/null
+++ b/keyboards/sofle/keymaps/flare576/graphics.c
@@ -0,0 +1,290 @@
+/* Copyright 2021 Flare576 <flare576@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/>.
+ */
+#include QMK_KEYBOARD_H
+#include "enums.h"
+#include "logos.h"
+int current_wpm = -1; // Enable screen-on at startup
+bool isJumping = false;
+bool showedJump = true;
+
+#ifdef OLED_DRIVER_ENABLE
+
+#ifdef MAIN_BOARD
+static void render_logos(void){}
+void luna_jump(bool newJump){
+ isJumping = newJump;
+ if (newJump) {
+ showedJump = false;
+ }
+}
+
+// START Luna vars
+#define MIN_WALK_SPEED 10
+#define MIN_RUN_SPEED 40
+
+#define ANIM_FRAME_DURATION 200 // how long each frame lasts in ms
+#define ANIM_SIZE 96 // number of bytes in array, minimize for adequate firmware size, max is 1024
+
+uint32_t anim_timer = 0;
+uint8_t current_frame = 0;
+
+bool isSneaking = false;
+static void render_luna(int LUNA_X, int LUNA_Y) {
+
+ static const char PROGMEM sit[2][ANIM_SIZE] = {
+ // 'sit1', 32x22px
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x1c,
+ 0x02, 0x05, 0x02, 0x24, 0x04, 0x04, 0x02, 0xa9, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x10, 0x08, 0x68, 0x10, 0x08, 0x04, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x82, 0x7c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x0c, 0x10, 0x10, 0x20, 0x20, 0x20, 0x28,
+ 0x3e, 0x1c, 0x20, 0x20, 0x3e, 0x0f, 0x11, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ },
+
+ // 'sit2', 32x22px
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x1c,
+ 0x02, 0x05, 0x02, 0x24, 0x04, 0x04, 0x02, 0xa9, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x90, 0x08, 0x18, 0x60, 0x10, 0x08, 0x04, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0e, 0x82, 0x7c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x0c, 0x10, 0x10, 0x20, 0x20, 0x20, 0x28,
+ 0x3e, 0x1c, 0x20, 0x20, 0x3e, 0x0f, 0x11, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ }
+ };
+
+ static const char PROGMEM walk[2][ANIM_SIZE] = {
+ // 'walk1', 32x22px
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x90, 0x90, 0x90, 0xa0, 0xc0, 0x80, 0x80,
+ 0x80, 0x70, 0x08, 0x14, 0x08, 0x90, 0x10, 0x10, 0x08, 0xa4, 0x78, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0xfc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x18, 0xea, 0x10, 0x0f, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1c, 0x20, 0x20, 0x3c, 0x0f, 0x11, 0x1f, 0x03,
+ 0x06, 0x18, 0x20, 0x20, 0x3c, 0x0c, 0x12, 0x1e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ },
+
+ // 'walk2', 32x22px
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x20, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0xe0, 0x10, 0x28, 0x10, 0x20, 0x20, 0x20, 0x10, 0x48, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x20, 0xf8, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x30, 0xd5, 0x20, 0x1f, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x20, 0x30, 0x0c, 0x02, 0x05, 0x09, 0x12, 0x1e,
+ 0x02, 0x1c, 0x14, 0x08, 0x10, 0x20, 0x2c, 0x32, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ }
+ };
+
+ static const char PROGMEM run[2][ANIM_SIZE] = {
+ // 'run1', 32x22px
+ {
+ 0x00, 0x00, 0x00, 0x00, 0xe0, 0x10, 0x08, 0x08, 0xc8, 0xb0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x40, 0x40, 0x3c, 0x14, 0x04, 0x08, 0x90, 0x18, 0x04, 0x08, 0xb0, 0x40, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0xc4, 0xa4, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc8, 0x58, 0x28, 0x2a, 0x10, 0x0f, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x09, 0x04, 0x04, 0x04, 0x04, 0x02, 0x03, 0x02, 0x01, 0x01,
+ 0x02, 0x02, 0x04, 0x08, 0x10, 0x26, 0x2b, 0x32, 0x04, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ },
+
+ // 'run2', 32x22px
+ {
+ 0x00, 0x00, 0x00, 0xe0, 0x10, 0x10, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+ 0x80, 0x80, 0x78, 0x28, 0x08, 0x10, 0x20, 0x30, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x04, 0x08, 0x10, 0x11, 0xf9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0xb0, 0x50, 0x55, 0x20, 0x1f, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x0c, 0x10, 0x20, 0x28, 0x37,
+ 0x02, 0x1e, 0x20, 0x20, 0x18, 0x0c, 0x14, 0x1e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ }
+ };
+
+ static const char PROGMEM sneak[2][ANIM_SIZE] = {
+ // 'sneak1', 32x22px
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc0, 0x40, 0x40, 0x80, 0x00, 0x80, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1e, 0x21, 0xf0, 0x04, 0x02, 0x02, 0x02, 0x02, 0x03, 0x02, 0x02, 0x04,
+ 0x04, 0x04, 0x03, 0x01, 0x00, 0x00, 0x09, 0x01, 0x80, 0x80, 0xab, 0x04, 0xf8, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1c, 0x20, 0x20, 0x3c, 0x0f, 0x11, 0x1f, 0x02, 0x06,
+ 0x18, 0x20, 0x20, 0x38, 0x08, 0x10, 0x18, 0x04, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00,
+ },
+
+ // 'sneak2', 32x22px
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xe0, 0xa0, 0x20, 0x40, 0x80, 0xc0, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x3e, 0x41, 0xf0, 0x04, 0x02, 0x02, 0x02, 0x03, 0x02, 0x02, 0x02, 0x04,
+ 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x40, 0x40, 0x55, 0x82, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x20, 0x30, 0x0c, 0x02, 0x05, 0x09, 0x12, 0x1e, 0x04,
+ 0x18, 0x10, 0x08, 0x10, 0x20, 0x28, 0x34, 0x06, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ }
+ };
+
+ // animation state
+ void animation_phase(void) {
+
+ if (isJumping || !showedJump) {
+
+ // clear
+ oled_set_cursor(LUNA_X,LUNA_Y +2);
+ oled_write(" ", false);
+
+ oled_set_cursor(LUNA_X,LUNA_Y -1);
+
+ showedJump = true;
+ } else {
+
+ // clear
+ oled_set_cursor(LUNA_X,LUNA_Y -1);
+ oled_write(" ", false);
+
+ oled_set_cursor(LUNA_X,LUNA_Y);
+ }
+
+ current_frame = (current_frame + 1) % 2;
+
+ if(isSneaking) {
+ oled_write_raw_P(sneak[abs(1 - current_frame)], ANIM_SIZE);
+
+ } else if(current_wpm <= MIN_WALK_SPEED) {
+ oled_write_raw_P(sit[abs(1 - current_frame)], ANIM_SIZE);
+
+ } else if(current_wpm <= MIN_RUN_SPEED) {
+ oled_write_raw_P(walk[abs(1 - current_frame)], ANIM_SIZE);
+
+ } else {
+ oled_write_raw_P(run[abs(1 - current_frame)], ANIM_SIZE);
+ }
+ }
+
+ // animation timer
+ if(timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) {
+ anim_timer = timer_read32();
+ animation_phase();
+ }
+
+}
+// END Luna vars
+
+
+static void main_board(void) {
+ int layer = get_highest_layer(layer_state);
+ isSneaking = false;
+ // Print current mode
+ oled_write_ln_P(PSTR("Flare"), false);
+ oled_write_ln_P(PSTR("Sofle"), false);
+ if (layer == _FF14) {
+ oled_write_raw_P(ffxiv, 16*8);
+ } else if (keymap_config.swap_lalt_lgui) {
+ oled_write_raw_P(windows, 16*8);
+ } else {
+ oled_write_raw_P(apple, 16*8);
+ }
+ oled_set_cursor(0, 9);
+
+ switch (layer) {
+ case _BASE:
+ oled_write_ln_P(PSTR("ALL"), false);
+ oled_write_P(PSTR(" YOUR"), false);
+ oled_write_ln_P(PSTR("BASE"), false);
+ break;
+ case _MOUS:
+ isSneaking = true;
+ oled_write_ln_P(PSTR("Mouse"), false);
+ break;
+ case _SYMS:
+ oled_write_ln_P(PSTR("@$*&#"), false);
+ break;
+ case _FF14:
+ oled_write_ln_P(PSTR("FFXIV"), false);
+ break;
+ case _ESDF:
+ oled_write_ln_P(PSTR("ESDF "), false);
+ break;
+ default:
+ oled_write_ln_P(PSTR("Undef"), false);
+ }
+ if (layer != _BASE) {
+ oled_write_P(PSTR("\n"), false);
+ }
+
+ // Don't re-write if not in use
+ if (current_wpm > 0) {
+ render_luna(0,13);
+ }
+}
+
+// End "MAIN_BOARD"
+#else
+static void main_board(void){}
+static void luna_jump(bool newJump){}
+
+#define MARQUEE_FRAME_DURATION 200 // how long each frame lasts in ms
+#define LOGO_BYTES 128
+#define LOGO_COUNT 7
+static const char *const secondary_logos[] = { js, apple, docker, python, qmk, brew, windows };
+#define MARQUEE_FRAMES (LOGO_COUNT * 4)
+#define MARQUEE_SIZE ( LOGO_COUNT * LOGO_BYTES)
+#define MARQUEE_SCROLL_UP true
+uint32_t marquee_timer = 0;
+uint32_t marquee_frame = 0;
+
+static void render_logos(void) {
+ void marquee_phase(void) {
+ marquee_frame = (marquee_frame + 1) % MARQUEE_FRAMES;
+ int marquee_start = MARQUEE_SIZE - (marquee_frame * 32);
+ static char output[MARQUEE_SIZE];
+ for (int i = 0; i < LOGO_COUNT; i++) {
+ for (int j = 0; j < LOGO_BYTES; j++) {
+ int pos = ( i * LOGO_BYTES + j + marquee_start ) % MARQUEE_SIZE;
+ output[pos] = pgm_read_byte_near(secondary_logos[i] + j);
+ }
+ }
+ oled_write_raw(output, MARQUEE_SIZE);
+ }
+
+ // animation timer
+ if(timer_elapsed32(marquee_timer) > MARQUEE_FRAME_DURATION) {
+ marquee_timer = timer_read32();
+ marquee_phase();
+ }
+}
+
+// End "MAIN_BOARD" false
+#endif
+
+oled_rotation_t oled_init_user(oled_rotation_t rotation) {
+ return OLED_ROTATION_270;
+}
+
+void oled_task_user(void) {
+ // Prevent blank screen on startup
+ if (current_wpm == -1) {
+ set_current_wpm(10);
+ }
+ current_wpm = get_current_wpm();
+ if (is_keyboard_master()) {
+ // can't gate main_board on wpm; won't get mode changes that don't trigger wpm
+ main_board();
+ } else if (current_wpm > 0) {
+ render_logos();
+ }
+}
+
+// End "OLED_DRIVER_ENABLE"
+#else
+static void luna_jump(bool newJump){}
+// End "OLED_DRIVER_ENABLE" false
+#endif
diff --git a/keyboards/sofle/keymaps/flare576/graphics.h b/keyboards/sofle/keymaps/flare576/graphics.h
new file mode 100644
index 0000000000..3979ee43d9
--- /dev/null
+++ b/keyboards/sofle/keymaps/flare576/graphics.h
@@ -0,0 +1,16 @@
+/* Copyright 2021 Flare576 <flare576@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/>.
+ */
+void luna_jump(bool newJump);
diff --git a/keyboards/sofle/keymaps/flare576/keymap.c b/keyboards/sofle/keymaps/flare576/keymap.c
new file mode 100644
index 0000000000..68f611a1b5
--- /dev/null
+++ b/keyboards/sofle/keymaps/flare576/keymap.c
@@ -0,0 +1,196 @@
+/* Copyright 2021 Flare576 <flare576@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/>.
+ */
+
+#include QMK_KEYBOARD_H
+#include "print.h"
+#include "enums.h"
+#include "graphics.h"
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [TD_PLAY] = ACTION_TAP_DANCE_DOUBLE(KC_MPLY, KC_MNXT),
+ [TD_HOME] = ACTION_TAP_DANCE_DOUBLE(KC_HOME, KC_END),
+};
+
+#define KC_TPLY TD(TD_PLAY)
+#define KC_THME TD(TD_HOME)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/*
+ * BASE
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * |Alt/Tb| Q | W | E | R | T | | Y | U | I | O | P | \ |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * |LShift| A | S | D | F | G |-------. ,-------| H | J | K | L | ; | ' |
+ * |------+------+------+------+------+------| PLAY | | PAGE |------+------+------+------+------+------|
+ * |LCtrl | Z | X | C | V | B |-------| |-------| N | M | , | . | / |+/SHFT|
+ * `-----------------------------------------/ / \Enter \-----------------------------------------'
+ * | ESDF | LAlt | ESC/ | LGUI | /Space / \ or \ | Bspc | Alt+ |Delete|FFXIV |
+ * | | |Symbol| |/ / \Mouse \ | |Shift | | |
+ * `----------------------------------' '------''---------------------------'
+ *
+ * Note: Apple's keyboard settings don't seem to discern right- and left-ALT, so swapping keys there breaks TAB & META
+ */
+[_BASE] = LAYOUT(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ RALT_T(KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LCTRL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_TPLY, KC_THME, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RSFT_T(KC_PLUS),
+ TG(_ESDF), KC_LALT, LT(_SYMS,KC_ESC), KC_LGUI, KC_SPC, LT(_MOUS, KC_ENT), KC_BSPC, RSFT(KC_RALT), KC_DEL, TG(_FF14)
+),
+
+/*
+ * MOUS
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * |CTRL+W|ALT+A | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | TRNS |PRNTSC| | M UP | HOME | PGUP | |M Wl U|M Wl D|M Wl L|M Wl R| |COMP1 |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | TRNS |SC LCK|M LFT |M DWN |M RGHT| |-------. ,-------| UP | DOWN | LEFT |RIGHT | |COMP2 |
+ * |------+------+------+------+------+------| TRNS | | TRNS |------+------+------+------+------+------|
+ * | TRNS |PAUSE | | | END | PGDN |-------| |-------|MOUS1 |MOUS2 | | | | |
+ * `-----------------------------------------/ / \ \-----------------------------------------'
+ * | | TRNS | TRNS |TRNS | / TRNS / \ TRNS \ |MOUS3 |MOUS4 |MOUS5 | |
+ * | | | | |/ / \ \ | | | | |
+ * `----------------------------------' '------''---------------------------'
+ */
+[_MOUS] = LAYOUT(
+ LCTL(KC_W), LALT(KC_A), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ _______, KC_PSCR, XXXXXXX, KC_MS_U, KC_HOME, KC_PGUP, KC_WH_U, KC_WH_D, KC_WH_L, KC_WH_R, XXXXXXX, _COMP1,
+ _______, KC_SLCK, KC_MS_L, KC_MS_D, KC_MS_R, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, XXXXXXX, _COMP2,
+ _______, KC_PAUS, XXXXXXX, XXXXXXX, KC_END, KC_PGDN, _______, _______, KC_BTN1, KC_BTN2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, _______, _______, _______, _______, _______, KC_BTN3, KC_BTN4, KC_BTN5, XXXXXXX
+),
+
+/* SYMS
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | | | | { | } | | RESET|
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | TRNS | F6 | F7 | F8 | F9 | F10 | | | | ( | ) | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | TRNS | F11 | F12 | F13 | F14 | F15 |-------. ,-------| | | [ | ] | | |
+ * |------+------+------+------+------+------| TRNS | | TRNS |------+------+------+------+------+------|
+ | TRNS | UNDO | CUT | COPY |PASTE | F20 |-------| |-------| | | < | > | | |
+ * `-----------------------------------------/ / \ \-----------------------------------------'
+ * | TRNS | TRNS | TRNS | TRNS | / TRNS / \ TRNS \ | TRNS | TRNS | TRNS | TRNS |
+ * | | | | |/ / \ \ | | | | |
+ * `----------------------------------' '------''---------------------------'
+ */
+[_SYMS] = LAYOUT(
+ XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, XXXXXXX, XXXXXXX, KC_LCBR, KC_RCBR, XXXXXXX, RESET,
+ _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, XXXXXXX, XXXXXXX, KC_LPRN, KC_RPRN, XXXXXXX, XXXXXXX,
+ _______, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, XXXXXXX, XXXXXXX, KC_LBRC, KC_RBRC, XXXXXXX, XXXXXXX,
+ _______, LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V), KC_F20, _______, _______, XXXXXXX, XXXXXXX, KC_LT, KC_GT, XXXXXXX, XXXXXXX,
+ XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX
+),
+
+/* FF14
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | TRNS | TRNS | TRNS | TRNS | TRNS | TRNS | | TRNS | TRNS | TRNS | TRNS | TRNS | TRNS |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | TAB | TRNS | TRNS | TRNS | TRNS | TRNS | | TRNS | TRNS | TRNS | TRNS | TRNS | TRNS |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | TRNS | TRNS | TRNS | TRNS | TRNS | TRNS |-------. ,-------| TRNS | TRNS | TRNS | TRNS | TRNS | TRNS |
+ * |------+------+------+------+------+------| TRNS | | TRNS |------+------+------+------+------+------|
+ * | TRNS | TRNS | TRNS | TRNS | TRNS | TRNS |-------| |-------| TRNS | TRNS | TRNS | TRNS | TRNS | TRNS |
+ * `-----------------------------------------/ / \ \-----------------------------------------'
+ * | ESDF | | ESC | TRNS | / TRNS / \ TRNS \ | TRNS |PrntSc| TRNS | TRNS |
+ * | | | | |/ / \ \ | | | | |
+ * `----------------------------------' '------''---------------------------'
+ */
+[_FF14] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_TAB, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ TO(_ESDF), XXXXXXX, KC_ESC, _______, _______, _______, _______, KC_PSCR, _______, _______
+),
+
+/* ESDF
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ~ | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | = |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | T | Tab | Q | W | E | R | | Ctl-Y| Ctl-U| Ctl-I| Ctl-O| Ctl-P| PGUP |
+ * |------|------+------+------+------+------+ |------+------+------+------+------+------|
+ * | G |LShift| A | S | D | F |-------. ,-------| Ctl-H| Ctl-J| Ctl-K| Ctl-L| Ctl-;| PGDN |
+ * |------|------+------+------+------+------+ | | |------+------+------+------+------+------|
+ * | LCtrl| Z | X | C | V | B |-------| |-------| Ctl-N| Ctl-M| Ctl-,| Ctl-.| Ctl-/| M |
+ * `-----------------------------------------/ / \Enter \-----------------------------------------'
+ * | TRNS | | ESC | LAlt | /Space / \ \ |PrnScr| | | FF14 |
+ * | | | | |/ / \ \ | | | | |
+ * `----------------------------------' '------''---------------------------'
+ */
+[_ESDF] = LAYOUT(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL,
+ KC_T, KC_TAB, KC_Q, KC_W, KC_E, KC_R, RCTL(KC_Y), RCTL(KC_U), RCTL(KC_I), RCTL(KC_O), RCTL(KC_P), KC_PGUP,
+ KC_G, KC_LSFT, KC_A, KC_S, KC_D, KC_F, RCTL(KC_H), RCTL(KC_J), RCTL(KC_K), RCTL(KC_L), RCTL(KC_SCLN), KC_PGDN,
+ KC_LCTRL, KC_Z, KC_X, KC_C, KC_V, KC_B, _______, _______, RCTL(KC_N), RCTL(KC_M), RCTL(KC_COMM), RCTL(KC_DOT), RCTL(KC_SLSH), KC_M,
+ _______, XXXXXXX, _______, _______, _______, _______, _______, KC_PSCR, _______, TO(_FF14)
+)
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case _COMP1:
+ if (record->event.pressed) {
+ // SEND_STRING(SS_TAP(X_RCTRL) SS_DELAY(100) SS_TAP(X_RCTRL) SS_DELAY(100) "1" SS_TAP(X_ENTER));
+ keymap_config.swap_lalt_lgui = false;
+ }
+ return false;
+ case _COMP2:
+ if (record->event.pressed) {
+ // SEND_STRING(SS_TAP(X_RCTRL) SS_DELAY(100) SS_TAP(X_RCTRL) SS_DELAY(100) "2" SS_TAP(X_ENTER));
+ keymap_config.swap_lalt_lgui = true;
+ }
+ return false;
+ case KC_SPC:
+ luna_jump(record->event.pressed);
+ break;
+ }
+ return true;
+}
+
+uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case KC_THME:
+ case KC_TPLY:
+ return TAPPING_TERM + 250;
+ default:
+ return TAPPING_TERM;
+ }
+}
+
+#ifdef ENCODER_ENABLE
+
+bool encoder_update_user(uint8_t index, bool clockwise) {
+ if (index == 0) {
+ if (clockwise) {
+ tap_code(KC_VOLD);
+ } else {
+ tap_code(KC_VOLU);
+ }
+ } else if (index == 1) {
+ if (clockwise) {
+ tap_code(KC_PGDOWN);
+ } else {
+ tap_code(KC_PGUP);
+ }
+ }
+ return true;
+}
+
+#endif
diff --git a/keyboards/sofle/keymaps/flare576/logos.h b/keyboards/sofle/keymaps/flare576/logos.h
new file mode 100644
index 0000000000..18de1b3d52
--- /dev/null
+++ b/keyboards/sofle/keymaps/flare576/logos.h
@@ -0,0 +1,96 @@
+/* Copyright 2021 Flare576 <flare576@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/>.
+ */
+static const char PROGMEM ffxiv[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xf0, 0x00, 0xf0, 0xc0, 0xe0, 0x80, 0x00, 0x02,
+ 0x0c, 0x2e, 0xfc, 0xfc, 0xfc, 0xfc, 0x78, 0x78, 0xf0, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x3f, 0x37, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf8,
+ 0xf8, 0xf8, 0xf1, 0xff, 0xff, 0xff, 0xf8, 0xf0, 0xf0, 0xb0, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x7b, 0xdf, 0x1f, 0x3f, 0x3f,
+ 0x1f, 0x1f, 0x3f, 0x5f, 0x9f, 0x8f, 0x07, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x06, 0x07, 0x0f, 0x1c, 0x74,
+ 0x0c, 0x0d, 0x09, 0x09, 0x11, 0x01, 0x03, 0x03, 0x07, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+static const char PROGMEM windows[] = {
+ 0x00, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0xf8,
+ 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfe, 0xfe, 0xfe, 0x00,
+ 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
+ 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0xfe,
+ 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x00,
+ 0x00, 0x07, 0x07, 0x07, 0x07, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x1f, 0x1f, 0x00, 0x1f,
+ 0x1f, 0x1f, 0x1f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x00
+};
+static const char PROGMEM apple[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xe0, 0x78, 0x7c, 0x7e, 0x3e, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xc0, 0xf0, 0xf8, 0xfc, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe,
+ 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3e, 0x0e, 0x0c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xc0, 0x80, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x0f, 0x3f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x7f,
+ 0x7f, 0x7f, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x3f, 0x1f, 0x07, 0x01, 0x00, 0x00, 0x00
+};
+const char PROGMEM docker[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70,
+ 0x70, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x80, 0x80, 0xb0, 0xb0, 0xb0, 0x80, 0xb7, 0xb7, 0xb7, 0x80, 0xb7, 0xb7, 0xb7, 0x80, 0xb7,
+ 0xb7, 0xb7, 0x80, 0xb0, 0xb0, 0xb0, 0x80, 0x80, 0xfe, 0xfe, 0xfc, 0xf0, 0xf0, 0xf0, 0x70, 0x00,
+ 0x03, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x3f, 0x1f, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x03, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x03,
+ 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+static const char PROGMEM python[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x7e, 0x66, 0x66, 0x67, 0x7f, 0x7f, 0x7f,
+ 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfc, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xf0, 0xfc, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
+ 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x3f, 0x9f, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfc, 0xf0,
+ 0x0f, 0x3f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x03, 0xf9, 0xfc, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0x3f, 0x0f,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x3f, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0xff,
+ 0xfe, 0xfe, 0xfe, 0xe6, 0x66, 0x66, 0x7e, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+static const char PROGMEM js[] = {
+ 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0xe0, 0xe0, 0xf0, 0xf8, 0x78, 0x7c, 0x3c, 0x1e, 0x9f,
+ 0x9e, 0x1e, 0x3c, 0x3c, 0x78, 0xf8, 0xf0, 0xe0, 0xe0, 0xc0, 0xc0, 0x80, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x03, 0x01, 0xf1, 0xf8, 0xfc, 0xfc, 0x06, 0x06, 0xff, 0x0f,
+ 0x0f, 0x67, 0x67, 0xe6, 0xcc, 0x8c, 0xf8, 0xf9, 0x01, 0x03, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x80, 0x1f, 0x3f, 0x3f, 0x3f, 0x00, 0x80, 0xff, 0xe3,
+ 0xe2, 0xce, 0xce, 0x4c, 0x64, 0x20, 0x11, 0x9f, 0x80, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x03, 0x07, 0x07, 0x0f, 0x1f, 0x1f, 0x3c, 0x3c, 0x78, 0x79,
+ 0xf9, 0x78, 0x3c, 0x3c, 0x1e, 0x1f, 0x0f, 0x07, 0x07, 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00,
+};
+static const char PROGMEM qmk[] = {
+ 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf0, 0xf0, 0xf0, 0xf8, 0xf0, 0xf0, 0xf8, 0xf8, 0xf0, 0xf0, 0xf8,
+ 0xf8, 0xf0, 0xf0, 0xf8, 0xf8, 0xf0, 0xf0, 0xf8, 0xf0, 0xf0, 0xf0, 0xe0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x99, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00,
+ 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x99, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x99, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xf8, 0xf1, 0xf3, 0xe3, 0xe7, 0x00,
+ 0x00, 0xe7, 0xe3, 0xf3, 0xf1, 0xf8, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0x99, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x07, 0x0f, 0x0f, 0x0f, 0x1f, 0x0f, 0x0f, 0x1f, 0x1f, 0x0f, 0x0f, 0x1f,
+ 0x1f, 0x0f, 0x0f, 0x1f, 0x1f, 0x0f, 0x0f, 0x1f, 0x0f, 0x0f, 0x0f, 0x07, 0x00, 0x00, 0x00, 0x00,
+};
+static const char PROGMEM brew[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xe0, 0xe7, 0xff, 0xfe, 0xfc, 0xf8, 0xfe,
+ 0xe4, 0xe0, 0xe0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xe7, 0x43, 0x41, 0x41, 0x4b, 0xcf, 0x87, 0x87, 0x8f,
+ 0x87, 0x03, 0x03, 0xc3, 0x47, 0xe7, 0xa4, 0xb8, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x02, 0x02, 0x03, 0x00, 0xfe, 0x02, 0x02, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x40, 0xc0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0xc0, 0x40, 0x7b, 0x0a, 0x0a, 0x0b, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
diff --git a/keyboards/sofle/keymaps/flare576/readme.md b/keyboards/sofle/keymaps/flare576/readme.md
new file mode 100644
index 0000000000..9f8ad5f248
--- /dev/null
+++ b/keyboards/sofle/keymaps/flare576/readme.md
@@ -0,0 +1,22 @@
+![Flare576 Keycaps](https://raw.githubusercontent.com/Flare576/sofle/main/images/keycaps.png)
+![Flare576 Chord Guide](https://raw.githubusercontent.com/Flare576/sofle/main/images/chords.png)
+
+# Flare576's keymap for Sofle Keyboard
+
+[Layout](http://www.keyboard-layout-editor.com/#/gists/fb8b42a6156458e20ca421a6f80cec48) and [Chord Mapping](http://www.keyboard-layout-editor.com/#/gists/884e3bc833cdf80fed9337ffee93a500) in Keyboard Layout Manager
+
+
+Features:
+
+- WASD -> ESDF Gaming layer
+- Mouse/Arrow Keys Layer with **amazing** rates
+- Tap/Hold keys for `=/+`/`SHIFT`, `TAB`/`ALT`
+- Bracket layer with Fn Keys
+- Right-hand primary OLED
+ * Mode logo
+ * Mode title
+ * Luna WPM indicator
+- Left-hand secondary OLED scrolling logo marquee
+- Left encoder controls volume up/down/mute. Right encoder PGUP/PGDOWN/Home.
+
+See [My Sofle Project](https://github.com/flare576/sofle) for more details
diff --git a/keyboards/sofle/keymaps/flare576/rules.mk b/keyboards/sofle/keymaps/flare576/rules.mk
new file mode 100644
index 0000000000..a7505f5386
--- /dev/null
+++ b/keyboards/sofle/keymaps/flare576/rules.mk
@@ -0,0 +1,7 @@
+MOUSEKEY_ENABLE = yes
+ENCODER_ENABLE = yes
+EXTRAKEY_ENABLE = yes
+TAP_DANCE_ENABLE = yes
+WPM_ENABLE = yes
+OLED_DRIVER_ENABLE = yes
+SRC += graphics.c
diff --git a/keyboards/sofle/keymaps/helltm/keymap.c b/keyboards/sofle/keymaps/helltm/keymap.c
index 3e1bcc82ea..8d6289af42 100644
--- a/keyboards/sofle/keymaps/helltm/keymap.c
+++ b/keyboards/sofle/keymaps/helltm/keymap.c
@@ -392,7 +392,7 @@ static void print_status_narrow(void) {
oled_rotation_t oled_init_user(oled_rotation_t rotation) { return OLED_ROTATION_270; }
-void oled_task_user(void) {
+bool oled_task_user(void) {
/* KEYBOARD PET VARIABLES START */
current_wpm = get_current_wpm();
@@ -405,6 +405,7 @@ void oled_task_user(void) {
} else {
print_logo_narrow();
}
+ return false;
}
#endif
diff --git a/keyboards/sofle/keymaps/j4ckofalltrades/oled.c b/keyboards/sofle/keymaps/j4ckofalltrades/oled.c
index 46c791b053..de561bd0fa 100644
--- a/keyboards/sofle/keymaps/j4ckofalltrades/oled.c
+++ b/keyboards/sofle/keymaps/j4ckofalltrades/oled.c
@@ -65,12 +65,13 @@ oled_rotation_t oled_init_user(oled_rotation_t rotation) {
return rotation;
}
-void oled_task_user(void) {
+bool oled_task_user(void) {
if (is_keyboard_master()) {
print_status_narrow();
} else {
render_logo();
}
+ return false;
}
#endif
diff --git a/keyboards/sofle/keymaps/keyhive_via/config.h b/keyboards/sofle/keymaps/keyhive_via/config.h
new file mode 100644
index 0000000000..0e2cb6d2c4
--- /dev/null
+++ b/keyboards/sofle/keymaps/keyhive_via/config.h
@@ -0,0 +1,48 @@
+ /* Copyright 2020 Josef Adamcik
+ * Modification for VIA support and RGB underglow by Jens Bonk-Wiltfang
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+/* The way how "handedness" is decided (which half is which),
+see https://docs.qmk.fm/#/feature_split_keyboard?id=setting-handedness
+for more options.
+*/
+
+// More lighting options in quantum/rgblight/rgblight.h
+#ifdef RGBLIGHT_ENABLE
+# define RGBLIGHT_DEFAULT_MODE RGBLIGHT_MODE_RAINBOW_SWIRL+2
+
+// Disabling some of these is a good way to save flash space.
+# define RGBLIGHT_EFFECT_ALTERNATING // 108
+# define RGBLIGHT_EFFECT_RGB_TEST // 158
+# define RGBLIGHT_EFFECT_RAINBOW_MOOD // 160
+# define RGBLIGHT_EFFECT_STATIC_GRADIENT // 168
+# define RGBLIGHT_EFFECT_RAINBOW_SWIRL // 192
+# define RGBLIGHT_EFFECT_BREATHING // 348
+# define RGBLIGHT_EFFECT_KNIGHT // 336
+# define RGBLIGHT_EFFECT_SNAKE // 406
+# define RGBLIGHT_EFFECT_CHRISTMAS // 508
+/*
+#define RGBLIGHT_EFFECT_TWINKLE // 1156
+*/
+#endif
+
+// Disabled to save space
+#define NO_ACTION_ONESHOT // 332
+#define NO_ACTION_MACRO // 0
+#define NO_ACTION_FUNCTION // 0
+#define DISABLE_LEADER // 0
diff --git a/keyboards/sofle/keymaps/keyhive_via/encoder.c b/keyboards/sofle/keymaps/keyhive_via/encoder.c
new file mode 100644
index 0000000000..0883c4a48a
--- /dev/null
+++ b/keyboards/sofle/keymaps/keyhive_via/encoder.c
@@ -0,0 +1,49 @@
+ /* Copyright 2020 Josef Adamcik
+ * Modification for VIA support and RGB underglow by Jens Bonk-Wiltfang
+ *
+ * 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/>.
+ */
+
+//Setting up what encoder rotation does. If your encoder can be pressed as a button, that function can be set in Via.
+
+#ifdef ENCODER_ENABLE
+ static uint8_t encoder_state[2] = {0};
+ //Use these keymap positions to specify the encoder functions on rotate.
+ static keypos_t encoder_ccw[2] = {{6, 3}, {6, 8}};
+ static keypos_t encoder_cw[2] = {{6, 1}, {6, 6}};
+
+ void encoder_action_unregister(void) {
+ for (int index = 0; index < 2; ++index) {
+ if (encoder_state[index]) {
+ keyevent_t encoder_event = (keyevent_t){.key = encoder_state[index] >> 1 ? encoder_cw[index] : encoder_ccw[index], .pressed = false, .time = (timer_read() | 1)};
+ encoder_state[index] = 0;
+ action_exec(encoder_event);
+ }
+ }
+ }
+
+ void encoder_action_register(uint8_t index, bool clockwise) {
+ keyevent_t encoder_event = (keyevent_t){.key = clockwise ? encoder_cw[index] : encoder_ccw[index], .pressed = true, .time = (timer_read() | 1)};
+ encoder_state[index] = (clockwise ^ 1) | (clockwise << 1);
+ action_exec(encoder_event);
+ }
+
+ void matrix_scan_user(void) { encoder_action_unregister(); }
+
+ bool encoder_update_user(uint8_t index, bool clockwise) {
+ encoder_action_register(index, clockwise);
+ return false;
+ };
+#endif
+
diff --git a/keyboards/sofle/keymaps/keyhive_via/keymap.c b/keyboards/sofle/keymaps/keyhive_via/keymap.c
new file mode 100644
index 0000000000..878638e1a2
--- /dev/null
+++ b/keyboards/sofle/keymaps/keyhive_via/keymap.c
@@ -0,0 +1,191 @@
+ /* Copyright 2020 Josef Adamcik
+ * Modification for VIA support and RGB underglow by Jens Bonk-Wiltfang
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+#include "oled.c"
+#include "encoder.c"
+
+// Base layer is the number of layers CYCLE selects from.
+#define BASE_LAYERS 2
+
+enum custom_keycodes {
+ PLACEHOLDER = SAFE_RANGE, // can always be here (4 bytes)
+ CYCLE // cycle through first BASE_LAYERS (62 bytes)
+};
+
+enum custom_layers {
+ _QWERTY,
+ _COLEMAK,
+ _LOWER,
+ _RAISE
+};
+
+// Extra keys are added for rotary encoder support in VIA
+#define LAYOUT_via( \
+ LA1, LA2, LA3, LA4, LA5, LA6, RA6, RA5, RA4, RA3, RA2, RA1, \
+ LB1, LB2, LB3, LB4, LB5, LB6, LB7, RB7, RB6, RB5, RB4, RB3, RB2, RB1, \
+ LC1, LC2, LC3, LC4, LC5, LC6, LE1, RE6, RC6, RC5, RC4, RC3, RC2, RC1, \
+ LD1, LD2, LD3, LD4, LD5, LD6, LD7, RD7, RD6, RD5, RD4, RD3, RD2, RD1, \
+ LE2, LE3, LE4, LE5, LE6, RE5, RE4, RE3, RE2, RE1 \
+ ) \
+ { \
+ { LA1, LA2, LA3, LA4, LA5, LA6, KC_NO }, \
+ { LB1, LB2, LB3, LB4, LB5, LB6, LB7 }, \
+ { LC1, LC2, LC3, LC4, LC5, LC6, KC_NO }, \
+ { LD1, LD2, LD3, LD4, LD5, LD6, LD7 }, \
+ { LE1, LE2, LE3, LE4, LE5, LE6, KC_NO }, \
+ { RA1, RA2, RA3, RA4, RA5, RA6, KC_NO }, \
+ { RB1, RB2, RB3, RB4, RB5, RB6, RB7 }, \
+ { RC1, RC2, RC3, RC4, RC5, RC6, KC_NO }, \
+ { RD1, RD2, RD3, RD4, RD5, RD6, RD7 }, \
+ { RE1, RE2, RE3, RE4, RE5, RE6, KC_NO } \
+ }
+
+//Default keymap. This can be changed in Via. Use oled.c to change beavior that Via cannot change.
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/*
+ * QWERTY
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 |-------. E ,-------| 6 | 7 | 8 | 9 | 0 | ` |
+ * |------+------+------+------+------+------| VolUp |< N >| Pg Up |------+------+------+------+------+------|
+ * | ESC | Q | W | E | R | T |-------. C ,-------| Y | U | I | O | P | Bspc |
+ * |------+------+------+------+------+------| Mute |< O >| |------+------+------+------+------+------|
+ * | Tab | A | S | D | F | G |-------. D ,-------| H | J | K | L | ; | ' |
+ * |------+------+------+------+------+------| VolDn |< E >| Pg Dn |------+------+------+------+------+------|
+ * |LShift| Z | X | C | V | B |-------| R |-------| N | M | , | . | / |RShift|
+ * `-----------------------------------------/ / \ \-----------------------------------------'
+ * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
+ * | | | | |/ / \ \ | | | | |
+ * `-----------------------------------' '------''---------------------------'
+ */
+
+[_QWERTY] = LAYOUT_via(
+ KC_GRV, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_GRV ,
+ KC_ESC, KC_Q , KC_W , KC_E , KC_R , KC_T , KC_VOLU, KC_PGUP, KC_Y , KC_U , KC_I , KC_O , KC_P , KC_BSPC,
+ KC_TAB, KC_A , KC_S , KC_D , KC_F , KC_G , KC_MUTE, KC_NO , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_VOLD, KC_PGDN, KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT,
+ KC_LGUI,KC_LALT ,KC_LCTRL,MO(_LOWER), KC_ENT , KC_SPC ,MO(_RAISE),KC_RCTRL, KC_RALT, KC_RGUI
+),
+/*
+ * COLEMAK - Vanilla
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 |-------. E ,-------| 6 | 7 | 8 | 9 | 0 | ` |
+ * |------+------+------+------+------+------| VolUp |< N >| Pg Up |------+------+------+------+------+------|
+ * | ESC | Q | W | F | P | G |-------. C ,-------| J | L | U | Y | ; | Bspc |
+ * |------+------+------+------+------+------| Mute |< O >| |------+------+------+------+------+------|
+ * | TAB | A | R | S | T | D |-------. D ,-------| H | N | E | I | O | ' |
+ * |------+------+------+------+------+------| VolDn |< E >| Pg Dn |------+------+------+------+------+------|
+ * |LShift| Z | X | C | V | B |-------| R |-------| K | M | , | . | / |RShift|
+ * `-----------------------------------------/ / \ \-----------------------------------------'
+ * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
+ * | | | | |/ / \ \ | | | | |
+ * `-----------------------------------' '------''---------------------------'
+ */
+/*
+[_COLEMAK] = LAYOUT_via(
+ KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_GRV ,
+ KC_ESC , KC_Q , KC_W , KC_F , KC_P , KC_G , KC_VOLU, KC_PGUP, KC_J , KC_L , KC_U , KC_Y , KC_SCLN, KC_BSPC,
+ KC_TAB , KC_A , KC_R , KC_S , KC_T , KC_D , KC_MUTE, KC_NO , KC_H , KC_N , KC_E , KC_I , KC_O , KC_QUOT,
+ KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_VOLD, KC_PGDN, KC_N , KC_M , KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LGUI, KC_LALT,KC_LCTRL,MO(_LOWER), KC_ENT , KC_SPC ,MO(_RAISE),KC_RCTRL, KC_RALT, KC_RGUI
+),
+*/
+
+/*
+ * COLEMAK-DH
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 |-------. E ,-------| 6 | 7 | 8 | 9 | 0 | ` |
+ * |------+------+------+------+------+------| VolUp |< N >| Pg Up |------+------+------+------+------+------|
+ * | ESC | Q | W | F | P | B |-------. C ,-------| J | L | U | Y | ; | Bspc |
+ * |------+------+------+------+------+------| Mute |< O >| |------+------+------+------+------+------|
+ * | TAB | A | R | S | T | G |-------. D ,-------| M | N | E | I | O | ' |
+ * |------+------+------+------+------+------| VolDn |< E >| Pg Dn |------+------+------+------+------+------|
+ * |LShift| Z | X | C | D | V |-------| R |-------| K | H | , | . | / |RShift|
+ * `-----------------------------------------/ / \ \-----------------------------------------'
+ * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
+ * | | | | |/ / \ \ | | | | |
+ * `-----------------------------------' '------''---------------------------'
+ */
+[_COLEMAK] = LAYOUT_via(
+ KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_GRV ,
+ KC_ESC , KC_Q , KC_W , KC_F , KC_P , KC_B , KC_VOLU, KC_PGUP, KC_J , KC_L , KC_U , KC_Y , KC_SCLN, KC_BSPC,
+ KC_TAB , KC_A , KC_R , KC_S , KC_T , KC_G , KC_MUTE, KC_NO , KC_M , KC_N , KC_E , KC_I , KC_O , KC_QUOT,
+ KC_LSFT, KC_Z , KC_X , KC_C , KC_D , KC_V , KC_VOLD, KC_PGDN, KC_K , KC_H , KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LGUI, KC_LALT,KC_LCTRL,MO(_LOWER), KC_ENT , KC_SPC ,MO(_RAISE),KC_RCTRL, KC_RALT, KC_RGUI
+),
+
+/* LOWER
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 |-------. E ,-------| F6 | F7 | F8 | F9 | F10 | F11 |
+ * |------+------+------+------+------+------| |< N >| |------+------+------+------+------+------|
+ * | ` | 1 | 2 | 3 | 4 | 5 |-------. C ,-------| 6 | 7 | 8 | 9 | 0 | F12 |
+ * |------+------+------+------+------+------| |< O >| |------+------+------+------+------+------|
+ * | Tab | ! | @ | # | $ | % |-------. D ,-------| ^ | & | * | ( | ) | | |
+ * |------+------+------+------+------+------| |< E >| |------+------+------+------+------+------|
+ * | Shift| = | - | + | { | } |-------| R |-------| [ | ] | ; | : | \ | |
+ * `-----------------------------------------/ / \ \-----------------------------------------'
+ * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
+ * | | | | |/ / \ \ | | | | |
+ * `-----------------------------------' '------''---------------------------'
+ */
+[_LOWER] = LAYOUT_via(
+ _______, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 ,
+ KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , _______, _______, KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_F12 ,
+ _______, KC_EXLM, KC_AT , KC_HASH, KC_DLR , KC_PERC, _______, _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE,
+ _______, KC_EQL , KC_MINS, KC_PLUS, KC_LCBR, KC_RCBR, _______, _______, KC_LBRC, KC_RBRC, KC_SCLN, KC_COLN, KC_BSLS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+/* RAISE
+ * ,----------------------------------------. ,-----------------------------------------.
+ * |Cycle | | | | | |-------. E ,-------| | | | | | |
+ * |------+------+------+------+------+------| |< N >| |------+------+------+------+------+------|
+ * | Esc | Ins | Pscr | Menu | | |-------. C ,-------| | | Up | | DLine| Bspc |
+ * |------+------+------+------+------+------| |< O >| |------+------+------+------+------+------|
+ * | Tab | LAt | LCtl |LShift| | Caps |-------. D ,-------| | Left | Down | Rigth| Del | Bspc |
+ * |------+------+------+------+------+------| |< E >| |------+------+------+------+------+------|
+ * |Shift | Undo | Cut | Copy | Paste| |-------| R |-------| | LStr | | LEnd | | Shift|
+ * `-----------------------------------------/ / \ \-----------------------------------------'
+ * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
+ * | | | | |/ / \ \ | | | | |
+ * `----------------------------------' '------''---------------------------'
+ */
+[_RAISE] = LAYOUT_via(
+ CYCLE, _______, _______, _______, _______ , _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_INS , KC_PSCR, KC_APP , XXXXXXX , XXXXXXX, _______, _______, KC_PGUP, _______, KC_UP , _______, _______, KC_BSPC,
+ _______, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX , KC_CAPS, _______, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL , KC_BSPC,
+ _______, KC_UNDO, KC_CUT , KC_COPY, KC_PASTE, XXXXXXX, _______, _______, XXXXXXX, _______, XXXXXXX, _______, XXXXXXX, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+};
+
+// Custom keycode handling.
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ // handling this once instead of in each keycode uses less program memory.
+ if ((keycode >= SAFE_RANGE) && !(record->event.pressed)) {
+ return false;
+ }
+
+ switch (keycode) {
+ case CYCLE:
+ set_single_persistent_default_layer((1+get_highest_layer(default_layer_state)) % BASE_LAYERS);
+ break;
+ }
+
+ // this uses less memory than returning in each case.
+ return keycode < SAFE_RANGE;
+};
diff --git a/keyboards/sofle/keymaps/keyhive_via/oled.c b/keyboards/sofle/keymaps/keyhive_via/oled.c
new file mode 100644
index 0000000000..ef3a189f9d
--- /dev/null
+++ b/keyboards/sofle/keymaps/keyhive_via/oled.c
@@ -0,0 +1,85 @@
+ /* Copyright 2020 Josef Adamcik
+ * Modification for VIA support and RGB underglow by Jens Bonk-Wiltfang
+ *
+ * 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/>.
+ */
+
+//Sets up what the OLED screens display.
+
+#ifdef OLED_ENABLE
+
+static void render_logo(void) {
+ static const char PROGMEM qmk_logo[] = {
+ 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
+ 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
+ 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0
+ };
+
+ oled_write_P(qmk_logo, false);
+}
+
+static void print_status_narrow(void) {
+ // Print current mode
+ oled_write_P(PSTR("\n\n"), false);
+
+ switch (get_highest_layer(default_layer_state)) {
+ case 0: // _QWERTY
+ oled_write_ln_P(PSTR("Qwrt\n"), false);
+ break;
+ case 1: // _COLEMAK
+ oled_write_ln_P(PSTR("Clmk\n"), false);
+ break;
+ default:
+ oled_write_P(PSTR("Mod"), false);
+ break;
+ }
+ oled_write_P(PSTR("\n\n"), false);
+ // Print current layer
+ oled_write_ln_P(PSTR("LAYER"), false);
+ switch (get_highest_layer(layer_state)) {
+ case 0: // _QWERTY
+ case 1: // _COLEMAK
+ oled_write_P(PSTR("Base\n"), false);
+ break;
+ case 2:
+ oled_write_P(PSTR("Lower"), false);
+ break;
+ case 3:
+ oled_write_P(PSTR("Raise"), false);
+ break;
+ default:
+ oled_write_ln_P(PSTR("Undef"), false);
+ }
+ oled_write_P(PSTR("\n\n"), false);
+ led_t led_usb_state = host_keyboard_led_state();
+ oled_write_ln_P(PSTR("CPSLK"), led_usb_state.caps_lock);
+}
+
+oled_rotation_t oled_init_user(oled_rotation_t rotation) {
+ if (is_keyboard_master()) {
+ return OLED_ROTATION_270;
+ }
+ return rotation;
+}
+
+bool oled_task_user(void) {
+ if (is_keyboard_master()) {
+ print_status_narrow();
+ } else {
+ render_logo();
+ }
+ return false;
+}
+
+#endif
diff --git a/keyboards/sofle/keymaps/keyhive_via/readme.md b/keyboards/sofle/keymaps/keyhive_via/readme.md
new file mode 100644
index 0000000000..e7a2beebcf
--- /dev/null
+++ b/keyboards/sofle/keymaps/keyhive_via/readme.md
@@ -0,0 +1,49 @@
+# Only compatible with sofle/keyhive firmware which adds an extra column of keys for encoder mapping.
+
+![SofleKeyboard version 2.1 RGB Keyhive](https://i.imgur.com/Oa6spvZ.png)
+
+# Configuring VIA / Vial App
+
+This firmware will not auto-recognize until [PR #1060](https://github.com/the-via/keyboards/pull/1060) is accepted to the VIA keyboard database. For now you must install the new layout:
+
+1. Download [keyhive_sofle_rgb.json](https://raw.githubusercontent.com/the-via/keyboards/48372baae5ab451d752988121fa4f1dd47b2c1ce/src/sofle/keyhive_sofle_rgb.json).
+2. In the VIA app, select `File > Import Keymap` from the menu.
+3. Open the file you just downloaded.
+
+**You'll have to do this every time you use VIA or Vial until the PR is accepted.**
+
+# Using with VIA
+* The default layouts should be loaded automatically.
+* Layouts can be backed up in VIA in the SAVE+LOAD section.
+* It is a good idea to Save Current Layout after you decide on your mapping.
+
+# Custom Features:
+
+### Rotary Encoder and VIA Features:
+* Fully remappable. Left encoder controls volume up/down/mute. Right encoder PGUP/PGDOWN.
+* Allows for live remapping of per-layer rotary encoder functions in VIA.
+* VIA support with **keyhive_via** keymap.
+
+# Compiling
+
+Make example for this keyboard (after setting up your build environment):
+
+ make sofle/keyhive:keyhive_via
+
+## Flashing
+
+Flash using the correct command below (or use QMK Toolbox). These commands can be mixed if, for example, you have an Elite C on the left and a pro micro on the right.
+
+Press reset button on the keyboard when asked.
+
+Disconnect the first half, connect the second one and repeat the process.
+
+ # for Pro Micro-based builds
+ make sofle/keyhive:keyhive_via:avrdude-split-left
+ make sofle/keyhive:keyhive_via:avrdude-split-right
+
+ # for Elite C or DFU bootloader builds
+ make sofle/keyhive:keyhive_via:dfu-split-left
+ make sofle/keyhive:keyhive_via:dfu-split-right
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/sofle/keymaps/keyhive_via/rules.mk b/keyboards/sofle/keymaps/keyhive_via/rules.mk
new file mode 100644
index 0000000000..2875254096
--- /dev/null
+++ b/keyboards/sofle/keymaps/keyhive_via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+RGBLIGHT_ENABLE = yes
diff --git a/keyboards/sofle/keymaps/killmaster/keymap.c b/keyboards/sofle/keymaps/killmaster/keymap.c
index 34c07f3c45..71db0fc853 100644
--- a/keyboards/sofle/keymaps/killmaster/keymap.c
+++ b/keyboards/sofle/keymaps/killmaster/keymap.c
@@ -211,12 +211,13 @@ oled_rotation_t oled_init_user(oled_rotation_t rotation) {
return rotation;
}
-void oled_task_user(void) {
+bool oled_task_user(void) {
if (is_keyboard_master()) {
print_status_narrow();
} else {
render_logo();
}
+ return false;
}
diff --git a/keyboards/sofle/keymaps/rgb_default/config.h b/keyboards/sofle/keymaps/rgb_default/config.h
index 32d0717352..c34da8382b 100644
--- a/keyboards/sofle/keymaps/rgb_default/config.h
+++ b/keyboards/sofle/keymaps/rgb_default/config.h
@@ -99,32 +99,32 @@
/* Disable the animations you don't want/need. You will need to disable a good number of these *
* because they take up a lot of space. Disable until you can successfully compile your firmware. */
-// # define DISABLE_RGB_MATRIX_ALPHAS_MODS
-// # define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN
-// # define DISABLE_RGB_MATRIX_BREATHING
-// # define DISABLE_RGB_MATRIX_CYCLE_ALL
-// # define DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
-// # define DISABLE_RGB_MATRIX_CYCLE_UP_DOWN
-// # define DISABLE_RGB_MATRIX_CYCLE_OUT_IN
-// # define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
-// # define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
-// # define DISABLE_RGB_MATRIX_DUAL_BEACON
-// # define DISABLE_RGB_MATRIX_RAINBOW_BEACON
-// # define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS
-// # define DISABLE_RGB_MATRIX_RAINDROPS
-// # define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
-// # define DISABLE_RGB_MATRIX_TYPING_HEATMAP
-// # define DISABLE_RGB_MATRIX_DIGITAL_RAIN
-// # define DISABLE_RGB_MATRIX_SOLID_REACTIVE
-// # define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
-// # define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
-// # define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
-// # define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
-// # define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
-// # define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
-// # define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
-// # define DISABLE_RGB_MATRIX_SPLASH
-// # define DISABLE_RGB_MATRIX_MULTISPLASH
-// # define DISABLE_RGB_MATRIX_SOLID_SPLASH
-// # define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
+ // # undef ENABLE_RGB_MATRIX_ALPHAS_MODS
+ // # undef ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+ // # undef ENABLE_RGB_MATRIX_BREATHING
+ // # undef ENABLE_RGB_MATRIX_CYCLE_ALL
+ // # undef ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+ // # undef ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+ // # undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN
+ // # undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+ // # undef ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+ // # undef ENABLE_RGB_MATRIX_DUAL_BEACON
+ // # undef ENABLE_RGB_MATRIX_RAINBOW_BEACON
+ // # undef ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+ // # undef ENABLE_RGB_MATRIX_RAINDROPS
+ // # undef ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+ // # undef ENABLE_RGB_MATRIX_TYPING_HEATMAP
+ // # undef ENABLE_RGB_MATRIX_DIGITAL_RAIN
+ // # undef ENABLE_RGB_MATRIX_SOLID_REACTIVE
+ // # undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+ // # undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+ // # undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+ // # undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+ // # undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+ // # undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+ // # undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+ // # undef ENABLE_RGB_MATRIX_SPLASH
+ // # undef ENABLE_RGB_MATRIX_MULTISPLASH
+ // # undef ENABLE_RGB_MATRIX_SOLID_SPLASH
+ // # undef ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
#endif
diff --git a/keyboards/sofle/keymaps/rgb_default/keymap.c b/keyboards/sofle/keymaps/rgb_default/keymap.c
index 13edbc5207..30f374f296 100644
--- a/keyboards/sofle/keymaps/rgb_default/keymap.c
+++ b/keyboards/sofle/keymaps/rgb_default/keymap.c
@@ -256,9 +256,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
/* NUMPAD
* ,-----------------------------------------. ,-----------------------------------------.
- * | trans| | | | | | | F6 | F7 | F8 | F9 | F10 | F11 |
+ * | trans| | | | | | | |NumLck| | | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | ` | | | | | | | | 7 | 8 | 9 | * | F12 |
+ * | ` | | | | | | | ^ | 7 | 8 | 9 | * | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | trans| | | | | |-------. ,-------| - | 4 | 5 | 6 | | | |
* |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
@@ -270,27 +270,27 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
[_NUMPAD] = LAYOUT(
//,------------------------------------------------. ,---------------------------------------------------.
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX, XXXXXXX,
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, KC_NLCK, XXXXXXX, XXXXXXX,XXXXXXX, XXXXXXX,
//|------+-------+--------+--------+--------+------| |--------+-------+--------+--------+--------+---------|
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_CIRC, KC_P7, KC_P8, KC_P9, KC_ASTR, _______,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_CIRC, KC_P7, KC_P8, KC_P9, KC_ASTR, XXXXXXX,
//|------+-------+--------+--------+--------+------| |--------+-------+--------+--------+--------+---------|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MINS, KC_P4, KC_P5, KC_P6, KC_EQL, KC_PIPE,
//|------+-------+--------+--------+--------+------| === | | === |--------+-------+--------+--------+--------+---------|
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,_______, _______,KC_PLUS, KC_P1, KC_P2, KC_P3, KC_SLSH, _______,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,_______, _______,KC_PLUS, KC_P1, KC_P2, KC_P3, KC_SLSH, _______,
//|------+-------+--------+--------+--------+------| === | | === |--------+-------+--------+--------+--------+---------|
- _______, OSM(MOD_MEH), _______, _______, _______, _______, _______, KC_P0, KC_PDOT, _______
+ _______, OSM(MOD_MEH), _______, _______, _______, _______, _______, KC_P0, KC_PDOT, _______
// \--------+--------+--------+---------+-------| |--------+---------+--------+---------+-------/
),
/* SWITCH
* ,-----------------------------------------. ,-----------------------------------------.
- * | cole | qwer | low |raise | adj |numpd | | | F7 | F8 | F9 | F10 | F11 |
+ * | | | | | | | | | | | | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | ` | | | | | | | | 7 | 8 | 9 | * | F12 |
+ * | qwer | cole |col_dh| low | raise| adj | |numpad| | | | |RESET |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | trans| | | | | |-------. ,-------| - | 4 | 5 | 6 | | | |
+ * | | | | | | |-------. ,-------| | | | | |EEP_RST|
* |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
- * | trans| | | | | |-------| |-------| + | 1 | 2 | 3 | \ | Shift|
+ * | SLEEP| | | | | |-------| |-------| | | | | | |
* `-----------------------------------------/ / \ \-----------------------------------------'
* | Bspc | WIN |LOWER | Enter| /Space / \Enter \ |SPACE | 0 | . | RAlt |
* | | | | |/ / \ \ | | | | |
@@ -301,13 +301,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//,------------------------------------------------. ,---------------------------------------------------.
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX, XXXXXXX,
//|------+-------+--------+--------+--------+------| |--------+-------+--------+--------+--------+---------|
- TO(0), TO(1), TO(2), TO(3), TO(4), TO(5), KC_NO, TO(7), KC_NO, KC_NO, KC_NO, RESET,
+ TO(0), TO(1), TO(2), TO(3), TO(4), TO(5), TO(6), KC_NO, KC_NO, KC_NO, KC_NO, RESET,
//|------+-------+--------+--------+--------+------| |--------+-------+--------+--------+--------+---------|
- KC_NO, KC_NO, KC_BRIU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, EEP_RST,
+ KC_NO, KC_NO, KC_BRIU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, EEP_RST,
//|------+-------+--------+--------+--------+------| === | | === |--------+-------+--------+--------+--------+---------|
- KC_SYSTEM_SLEEP,KC_NO,KC_BRID,KC_NO,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_SYSTEM_SLEEP,KC_NO,KC_NO,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
//|------+-------+--------+--------+--------+------| === | | === |--------+-------+--------+--------+--------+---------|
- KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
// \--------+--------+--------+---------+-------| |--------+---------+--------+---------+-------/
),
@@ -465,12 +465,13 @@ oled_rotation_t oled_init_user(oled_rotation_t rotation) {
return rotation;
}
-void oled_task_user(void) {
+bool oled_task_user(void) {
if (is_keyboard_master()) {
print_status_narrow();
} else {
render_logo();
}
+ return false;
}
#endif
diff --git a/keyboards/sofle/keymaps/via/keymap.c b/keyboards/sofle/keymaps/via/keymap.c
index 2f917f42dc..b8bbe195fe 100644
--- a/keyboards/sofle/keymaps/via/keymap.c
+++ b/keyboards/sofle/keymaps/via/keymap.c
@@ -58,7 +58,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-----------------------------------------/ / \ \-----------------------------------------'
* | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
* | | | | |/ / \ \ | | | | |
- * `----------------------------------' '------''---------------------------'
+ * `-----------------------------------' '------''---------------------------'
*/
[1] = LAYOUT(
@@ -96,8 +96,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Esc | Ins | Pscr | Menu | | | | | PWrd | Up | NWrd | DLine| Bspc |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | Tab | LAt | LCtl |LShift| | Caps |-------. ,-------| | Left | Down | Rigth| Del | Bspc |
- * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
- * |Shift | Undo | Cut | Copy | Paste| |-------| |-------| | LStr | | LEnd | | Shift|
+ * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
+ * |Shift | Undo | Cut | Copy | Paste| |--------| |-------| | LStr | | LEnd | | Shift|
* `-----------------------------------------/ / \ \-----------------------------------------'
* | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
* | | | | |/ / \ \ | | | | |
diff --git a/keyboards/sofle/keymaps/via/oled.c b/keyboards/sofle/keymaps/via/oled.c
index 8a230f0001..74f06cedc5 100644
--- a/keyboards/sofle/keymaps/via/oled.c
+++ b/keyboards/sofle/keymaps/via/oled.c
@@ -73,12 +73,13 @@ oled_rotation_t oled_init_user(oled_rotation_t rotation) {
return rotation;
}
-void oled_task_user(void) {
+bool oled_task_user(void) {
if (is_keyboard_master()) {
print_status_narrow();
} else {
render_logo();
}
+ return false;
}
#endif