~ruther/qmk_firmware

1215fc2a782100bfd6577e1826f8c7e46be137ca — lalalademaxiya1 2 years ago 6e60399
Update Q1 and Q2 for keychron (#18713)

Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: jpe230 <pablin.123.ra@gmail.com>
160 files changed, 2058 insertions(+), 2448 deletions(-)

M keyboards/keychron/common/keychron_common.h
R keyboards/keychron/q1/{rev_0102/rev_0102 => ansi/ansi}.c
R keyboards/keychron/{q2/rev_0112/rev_0112 => q1/ansi/ansi}.h
R keyboards/keychron/q1/{rev_0100 => ansi}/config.h
A keyboards/keychron/q1/ansi/info.json
A keyboards/keychron/q1/ansi/keymaps/default/keymap.c
R keyboards/keychron/q1/{rev_0100 => ansi}/keymaps/gtg465x/README.md
R keyboards/keychron/q1/{rev_0100 => ansi}/keymaps/gtg465x/config.h
R keyboards/keychron/q1/{rev_0100 => ansi}/keymaps/gtg465x/keymap.c
R keyboards/keychron/q1/{rev_0100 => ansi}/keymaps/gtg465x/keymap_user.h
R keyboards/keychron/q1/{rev_0100 => ansi}/keymaps/gtg465x/rgb_matrix_user.c
R keyboards/keychron/q1/{rev_0100 => ansi}/keymaps/gtg465x/rgb_matrix_user.h
R keyboards/keychron/q1/{rev_0100 => ansi}/keymaps/gtg465x/rules.mk
R keyboards/keychron/q1/{rev_0100/keymaps/default => ansi/keymaps/keychron}/keymap.c
A keyboards/keychron/q1/ansi/keymaps/keychron/rules.mk
R keyboards/keychron/q1/{rev_0100 => ansi}/keymaps/mkillewald/config.h
R keyboards/keychron/q1/{rev_0100 => ansi}/keymaps/mkillewald/keymap.c
R keyboards/keychron/q1/{rev_0100 => ansi}/keymaps/mkillewald/keymap_user.h
R keyboards/keychron/q1/{rev_0100 => ansi}/keymaps/mkillewald/readme.md
R keyboards/keychron/q1/{rev_0100 => ansi}/keymaps/mkillewald/rgb_matrix_user.c
R keyboards/keychron/q1/{rev_0100 => ansi}/keymaps/mkillewald/rgb_matrix_user.h
R keyboards/keychron/q1/{rev_0100 => ansi}/keymaps/mkillewald/rules.mk
R keyboards/keychron/q1/{rev_0100 => ansi}/keymaps/teimor/config.h
R keyboards/keychron/q1/{rev_0100 => ansi}/keymaps/teimor/keymap.c
R keyboards/keychron/q1/{rev_0100 => ansi}/keymaps/teimor/keymap_user.h
R keyboards/keychron/q1/{rev_0100 => ansi}/keymaps/teimor/readme.md
R keyboards/keychron/q1/{rev_0100 => ansi}/keymaps/teimor/rgb_matrix_user.c
R keyboards/keychron/q1/{rev_0100 => ansi}/keymaps/teimor/rgb_matrix_user.h
R keyboards/keychron/q1/{rev_0100 => ansi}/keymaps/teimor/rules.mk
R keyboards/keychron/q1/{rev_0100 => ansi}/keymaps/teimor/tap_dance_mac_caps.c
R keyboards/keychron/q1/{rev_0100 => ansi}/keymaps/teimor/tap_dance_mac_caps.h
R keyboards/keychron/q1/{rev_0100 => ansi}/keymaps/teimor/tap_dance_setup.c
R keyboards/keychron/q1/{rev_0100 => ansi}/keymaps/teimor/tap_dance_setup.h
R keyboards/keychron/q1/{rev_0100 => ansi}/keymaps/teimor/tap_dance_user.c
R keyboards/keychron/q1/{rev_0100 => ansi}/keymaps/teimor/tap_dance_win_caps.c
R keyboards/keychron/q1/{rev_0100 => ansi}/keymaps/teimor/tap_dance_win_caps.h
A keyboards/keychron/q1/ansi/keymaps/via/keymap.c
R keyboards/keychron/q1/{rev_0100 => ansi}/keymaps/via/rules.mk
R keyboards/keychron/q1/{rev_0100 => ansi}/readme.md
R keyboards/keychron/q1/{rev_0100 => ansi}/rules.mk
R keyboards/keychron/q1/{rev_0100/rev_0100 => ansi_encoder/ansi_encoder}.c
R keyboards/keychron/q1/{rev_0100/rev_0100 => ansi_encoder/ansi_encoder}.h
R keyboards/keychron/q1/{rev_0101 => ansi_encoder}/config.h
A keyboards/keychron/q1/ansi_encoder/info.json
A keyboards/keychron/q1/ansi_encoder/keymaps/default/keymap.c
R keyboards/keychron/q1/{rev_0101 => ansi_encoder}/keymaps/default/rules.mk
R keyboards/keychron/q1/{rev_0101/keymaps/default => ansi_encoder/keymaps/keychron}/keymap.c
A keyboards/keychron/q1/ansi_encoder/keymaps/keychron/rules.mk
R keyboards/keychron/q1/{rev_0101 => ansi_encoder}/keymaps/via/keymap.c
R keyboards/keychron/q1/{rev_0101 => ansi_encoder}/keymaps/via/rules.mk
R keyboards/keychron/q1/{rev_0101 => ansi_encoder}/readme.md
R keyboards/keychron/q1/{rev_0101 => ansi_encoder}/rules.mk
M keyboards/keychron/q1/config.h
R keyboards/keychron/q1/{rev_0102 => iso}/config.h
A keyboards/keychron/q1/iso/info.json
R keyboards/keychron/q1/{rev_0101/rev_0101 => iso/iso}.c
R keyboards/keychron/q1/{rev_0102/rev_0102 => iso/iso}.h
R keyboards/keychron/q1/{rev_0102 => iso}/keymaps/default/keymap.c
A keyboards/keychron/q1/iso/keymaps/keychron/keymap.c
A keyboards/keychron/q1/iso/keymaps/keychron/rules.mk
R keyboards/keychron/q1/{rev_0102 => iso}/keymaps/kubahorak/README.md
R keyboards/keychron/q1/{rev_0102 => iso}/keymaps/kubahorak/config.h
R keyboards/keychron/q1/{rev_0102 => iso}/keymaps/kubahorak/keymap.c
R keyboards/keychron/q1/{rev_0102 => iso}/keymaps/kubahorak/keymap_user.h
R keyboards/keychron/q1/{rev_0102 => iso}/keymaps/kubahorak/rgb_matrix_user.c
R keyboards/keychron/q1/{rev_0102 => iso}/keymaps/kubahorak/rgb_matrix_user.h
R keyboards/keychron/q1/{rev_0102 => iso}/keymaps/kubahorak/rules.mk
R keyboards/keychron/q1/{rev_0102 => iso}/keymaps/mkillewald_iso/config.h
R keyboards/keychron/q1/{rev_0102 => iso}/keymaps/mkillewald_iso/keymap.c
R keyboards/keychron/q1/{rev_0102 => iso}/keymaps/mkillewald_iso/keymap_user.h
R keyboards/keychron/q1/{rev_0102 => iso}/keymaps/mkillewald_iso/readme.md
R keyboards/keychron/q1/{rev_0102 => iso}/keymaps/mkillewald_iso/rgb_matrix_user.c
R keyboards/keychron/q1/{rev_0102 => iso}/keymaps/mkillewald_iso/rgb_matrix_user.h
R keyboards/keychron/q1/{rev_0102 => iso}/keymaps/mkillewald_iso/rules.mk
A keyboards/keychron/q1/iso/keymaps/via/keymap.c
R keyboards/keychron/q1/{rev_0102 => iso}/keymaps/via/rules.mk
R keyboards/keychron/q1/{rev_0102 => iso}/keymaps/victorsavu3/config.h
R keyboards/keychron/q1/{rev_0102 => iso}/keymaps/victorsavu3/keymap.c
R keyboards/keychron/q1/{rev_0102 => iso}/keymaps/victorsavu3/readme.md
R keyboards/keychron/q1/{rev_0102 => iso}/keymaps/victorsavu3/rules.mk
R keyboards/keychron/q1/{rev_0102 => iso}/readme.md
R keyboards/keychron/q1/{rev_0102 => iso}/rules.mk
M keyboards/keychron/q1/q1.c
M keyboards/keychron/q1/q1.h
M keyboards/keychron/q1/readme.md
D keyboards/keychron/q1/rev_0100/info.json
D keyboards/keychron/q1/rev_0100/keymaps/via/keymap.c
D keyboards/keychron/q1/rev_0101/info.json
D keyboards/keychron/q1/rev_0101/rev_0101.h
D keyboards/keychron/q1/rev_0102/info.json
D keyboards/keychron/q1/rev_0102/keymaps/via/keymap.c
R keyboards/keychron/q2/{rev_0110/rev_0110 => ansi/ansi}.c
A keyboards/keychron/q2/ansi/ansi.h
R keyboards/keychron/q2/{rev_0110 => ansi}/config.h
A keyboards/keychron/q2/ansi/info.json
A keyboards/keychron/q2/ansi/keymaps/default/keymap.c
A keyboards/keychron/q2/ansi/keymaps/keychron/keymap.c
A keyboards/keychron/q2/ansi/keymaps/keychron/rules.mk
R keyboards/keychron/q2/{rev_0110 => ansi}/keymaps/ladduro/config.h
R keyboards/keychron/q2/{rev_0110 => ansi}/keymaps/ladduro/keymap.c
R keyboards/keychron/q2/{rev_0110 => ansi}/keymaps/ladduro/keymap_user.h
R keyboards/keychron/q2/{rev_0110 => ansi}/keymaps/ladduro/readme.md
R keyboards/keychron/q2/{rev_0110 => ansi}/keymaps/ladduro/rgb_matrix_user.c
R keyboards/keychron/q2/{rev_0110 => ansi}/keymaps/ladduro/rgb_matrix_user.h
R keyboards/keychron/q2/{rev_0110 => ansi}/keymaps/ladduro/rules.mk
R keyboards/keychron/q2/{rev_0110/keymaps/default => ansi/keymaps/via}/keymap.c
R keyboards/keychron/q2/{rev_0110 => ansi}/keymaps/via/rules.mk
R keyboards/keychron/q2/{rev_0110 => ansi}/readme.md
R keyboards/keychron/q2/{rev_0112 => ansi}/rules.mk
R keyboards/keychron/q2/{rev_0111/rev_0111 => ansi_encoder/ansi_encoder}.c
A keyboards/keychron/q2/ansi_encoder/ansi_encoder.h
R keyboards/keychron/q2/{rev_0111 => ansi_encoder}/config.h
A keyboards/keychron/q2/ansi_encoder/info.json
R keyboards/keychron/q2/{rev_0111 => ansi_encoder}/keymaps/default/keymap.c
R keyboards/keychron/q2/{rev_0111 => ansi_encoder}/keymaps/default/rules.mk
A keyboards/keychron/q2/ansi_encoder/keymaps/keychron/keymap.c
A keyboards/keychron/q2/ansi_encoder/keymaps/keychron/rules.mk
A keyboards/keychron/q2/ansi_encoder/keymaps/via/keymap.c
R keyboards/keychron/q2/{rev_0111 => ansi_encoder}/keymaps/via/rules.mk
R keyboards/keychron/q2/{rev_0111 => ansi_encoder}/readme.md
R keyboards/keychron/q2/{rev_0113 => ansi_encoder}/rules.mk
M keyboards/keychron/q2/config.h
R keyboards/keychron/q2/{rev_0112 => iso}/config.h
A keyboards/keychron/q2/iso/info.json
R keyboards/keychron/q2/{rev_0112/rev_0112 => iso/iso}.c
A keyboards/keychron/q2/iso/iso.h
R keyboards/keychron/q2/{rev_0112 => iso}/keymaps/default/keymap.c
A keyboards/keychron/q2/iso/keymaps/keychron/keymap.c
A keyboards/keychron/q2/iso/keymaps/keychron/rules.mk
A keyboards/keychron/q2/iso/keymaps/via/keymap.c
R keyboards/keychron/q2/{rev_0112 => iso}/keymaps/via/rules.mk
R keyboards/keychron/q2/{rev_0112 => iso}/readme.md
R keyboards/keychron/q2/{rev_0110 => iso}/rules.mk
R keyboards/keychron/q2/{rev_0113 => iso_encoder}/config.h
A keyboards/keychron/q2/iso_encoder/info.json
R keyboards/keychron/q2/{rev_0113/rev_0113 => iso_encoder/iso_encoder}.c
R keyboards/keychron/q2/{rev_0110/rev_0110 => iso_encoder/iso_encoder}.h
R keyboards/keychron/q2/{rev_0113 => iso_encoder}/keymaps/default/keymap.c
R keyboards/keychron/q2/{rev_0113 => iso_encoder}/keymaps/default/rules.mk
R keyboards/keychron/q2/{rev_0113 => iso_encoder}/keymaps/dhertz/keymap.c
R keyboards/keychron/q2/{rev_0113 => iso_encoder}/keymaps/dhertz/rules.mk
A keyboards/keychron/q2/iso_encoder/keymaps/keychron/keymap.c
A keyboards/keychron/q2/iso_encoder/keymaps/keychron/rules.mk
A keyboards/keychron/q2/iso_encoder/keymaps/via/keymap.c
R keyboards/keychron/q2/{rev_0113 => iso_encoder}/keymaps/via/rules.mk
R keyboards/keychron/q2/{rev_0113 => iso_encoder}/readme.md
R keyboards/keychron/q2/{rev_0111 => iso_encoder}/rules.mk
M keyboards/keychron/q2/q2.c
M keyboards/keychron/q2/q2.h
M keyboards/keychron/q2/readme.md
D keyboards/keychron/q2/rev_0110/info.json
D keyboards/keychron/q2/rev_0110/keymaps/via/keymap.c
D keyboards/keychron/q2/rev_0111/info.json
D keyboards/keychron/q2/rev_0111/keymaps/via/keymap.c
D keyboards/keychron/q2/rev_0111/rev_0111.h
D keyboards/keychron/q2/rev_0112/info.json
D keyboards/keychron/q2/rev_0112/keymaps/via/keymap.c
D keyboards/keychron/q2/rev_0113/info.json
D keyboards/keychron/q2/rev_0113/keymaps/via/keymap.c
D keyboards/keychron/q2/rev_0113/rev_0113.h
M keyboards/keychron/common/keychron_common.h => keyboards/keychron/common/keychron_common.h +7 -0
@@ 15,10 15,17 @@
 */

#include "stdint.h"
#ifdef VIA_ENABLE
#    include "via.h"
#endif
#include "quantum_keycodes.h"

enum custom_keycodes {
#ifdef VIA_ENABLE
    KC_MISSION_CONTROL = USER00,
#else
    KC_MISSION_CONTROL = SAFE_RANGE,
#endif
    KC_LAUNCHPAD,
    KC_LOPTN,
    KC_ROPTN,

R keyboards/keychron/q1/rev_0102/rev_0102.c => keyboards/keychron/q1/ansi/ansi.c +31 -25
@@ 14,9 14,10 @@
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include "quantum.h"
#include "ansi.h"

#ifdef RGB_MATRIX_ENABLE

const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
/* Refer to IS31 manual for these locations
 *   driver


@@ 69,6 70,7 @@ const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
    {0, I_11,   G_11,   H_11},
    {0, I_12,   G_12,   H_12},
    {0, I_13,   G_13,   H_13},
    {0, I_14,   G_14,   H_14},
    {0, I_16,   G_16,   H_16},

    {0, L_1,    J_1,    K_1},


@@ 83,12 85,10 @@ const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
    {0, L_10,   J_10,   K_10},
    {0, L_11,   J_11,   K_11},
    {0, L_12,   J_12,   K_12},
	{0, L_14,   J_14,   K_14},
	{0, I_14,   G_14,   H_14},
    {0, L_14,   J_14,   K_14},
    {0, L_16,   J_16,   K_16},

    {1, C_1,    A_1,    B_1},
    {1, C_2,    A_2,    B_2},
    {1, C_3,    A_3,    B_3},
    {1, C_4,    A_4,    B_4},
    {1, C_5,    A_5,    B_5},


@@ 112,33 112,39 @@ const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
    {1, F_14,   D_14,   E_14},
    {1, F_15,   D_15,   E_15},
    {1, F_16,   D_16,   E_16}

};

#define __ NO_LED

led_config_t g_led_config = {
	{
		{   0, NO_LED,      1,      2,      3,      4,      5,      6,      7,      8,      9,     10,     11,      12,     14   },
		{  15,     16,     17,     18,     19,     20,     21,     22,     23,     24,     25,     26,     27,      28,     29   },
		{  30,     31,     32,     33,     34,     35,     36,     37,     38,     39,     40,     41,     42,      57,     43   },
		{  44,     45,     46,     47,     48,     49,     50,     51,     52,     53,     54,     55,     72,      56,     58   },
		{  59,     60,     61,     62,     63,     64,     65,     66,     67,     68,     69,     70,     81,      71,     13   },
		{  73,     74,     75, NO_LED, NO_LED, NO_LED,     76, NO_LED, NO_LED, NO_LED,     77,     78,     79,      80,     82   }
        // Key Matrix to LED Index
		{  0, __,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 14 },
		{ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 },
		{ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44 },
		{ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 71, 57, 58 },
		{ 59, __, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 80, 70, 13 },
		{ 72, 73, 74, __, __, __, 75, __, __, __, 76, 77, 78, 79, 81 }
	},
	{
		{0,0},           {30, 0}, {45, 0}, {60, 0}, {75, 0}, {90, 0}, {105, 0}, {120, 0}, {135, 0}, {150, 0}, {165, 0}, {180, 0}, {195, 0}, {210, 0}, {224, 0},
	    {0,13}, {15,13}, {30,13}, {45,13}, {60,13}, {75,13}, {90,13}, {105,13}, {120,13}, {135,13}, {150,13}, {165,13}, {180,13}, {195,13},           {224,13},
	    {0,26}, {15,26}, {30,26}, {45,26}, {60,26}, {75,26}, {90,26}, {105,26}, {120,26}, {135,26}, {150,26}, {165,26}, {180,26},                     {224,26},
	    {0,39}, {15,39}, {30,39}, {45,39}, {60,39}, {75,39}, {90,39}, {105,39}, {120,39}, {135,39}, {150,39}, {165,39}, {180,39}, {195,26},           {224,39},
	    {0,52}, {15,52}, {30,52}, {45,52}, {60,52}, {75,52}, {90,52}, {105,52}, {120,52}, {135,52}, {150,52}, {165,52},           {180,52}, {210,52},
	    {0,64}, {15,64}, {30,64},                            {90,64},                               {150,64}, {165,64}, {180,64}, {195,64}, {210,64}, {224,64},
	},
        // LED Index to Physical Position
        {0,0},           {18,0},  {33,0},  {48,0},  {62,0},  {81,0},  {95,0},   {110,0},  {125,0},  {143,0},  {158,0},  {173,0},  {187,0},  {206,0},  {224,0},
        {0,15}, {15,15}, {29,15}, {44,15}, {59,15}, {73,15}, {88,15}, {103,15}, {118,15}, {132,15}, {147,15}, {162,15}, {176,15}, {198,15},           {224,15},
        {4,26}, {22,26}, {37,26}, {51,26}, {66,26}, {81,26}, {95,26}, {110,26}, {125,26}, {140,26}, {154,26}, {169,26}, {184,26}, {202,26},           {224,26},
        {6,38}, {26,38}, {40,38}, {55,38}, {70,38}, {84,38}, {99,38}, {114,38}, {129,38}, {143,38}, {158,38}, {173,38},           {196,38},           {224,38},
        {9,49},          {33,49}, {48,49}, {62,49}, {77,49}, {92,49}, {106,49}, {121,49}, {136,49}, {151,49}, {165,49},           {185,49}, {209,52},
        {2,61}, {20,61}, {39,61},                            {94,61},                               {147,61}, {162,61}, {176,61}, {195,64}, {209,64}, {224,64}
    },
	{
		4,			4,	  4,	4,	  4,	4,	  4,	4,	  4,	4,	  4,	4,	  4,	4,	  4,
		4,	  4,	4,	  4,	4,	  4,	4,	  4,	4,	  4,	4,	  4,	4,	  4,		  4,
		4,	  4,	4,	  4,	4,	  4,	4,	  4,	4,	  4,	4,	  4,	4,	     		  4,
		4,	  4,	4,	  4,	4,	  4,	4,	  4,	4,	  4,	4,	  4,	4,	  4,		  4,
		4,	  4,    4,	  4,	4,	  4,	4,	  4,	4,	  4,	4,	  4,		  4,	4,
		4,	  4,	4,						4,						4,	  4,	4,	  4,	4,	  4

        // RGB LED Index to Flag
        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,    1,
        1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,    1,
        1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,    1,
        1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,    1,    1,
        1,    4, 4, 4, 4, 4, 4, 4, 4, 4, 4,    1, 1,
        1, 1, 1,          4,          1, 1, 1, 1, 1, 1
	}
};
#endif

#endif // RGB_MATRIX_ENABLE

R keyboards/keychron/q2/rev_0112/rev_0112.h => keyboards/keychron/q1/ansi/ansi.h +0 -17
@@ 17,20 17,3 @@
#pragma once

#include "quantum.h"

#define XXX KC_NO

#define LAYOUT_iso_68( \
    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D,      K0E,\
    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C,           K1E,\
    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K1D,      K2E,\
    K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B,      K3D, K3E,     \
    K40, K41, K42,                K46,                K4A, K4B, K4C, K4D, K2C, K4E \
) { \
    { K00, K01,  K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B,  K0C, K0D, K0E, }, \
    { K10, K11,  K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B,  K1C, K1D, K1E, }, \
    { K20, K21,  K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B,  K2C, K2D, K2E, }, \
    { K30, K31,  K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B,  XXX, K3D, K3E, }, \
    { K40, K41,  K42, XXX, XXX, XXX, K46, XXX, XXX, XXX, K4A, K4B,  K4C, K4D, K4E, }  \
}


R keyboards/keychron/q1/rev_0100/config.h => keyboards/keychron/q1/ansi/config.h +0 -0
A keyboards/keychron/q1/ansi/info.json => keyboards/keychron/q1/ansi/info.json +104 -0
@@ 0,0 1,104 @@
{
    "keyboard_name": "Q1",
    "manufacturer": "Keychron",
    "url": "https://github.com/Keychron",
    "maintainer": "lalalademaxiya1",
    "usb": {
    	"vid": "0x3434",
    	"pid": "0x0100",
    	"device_version": "1.0.0"
    },
    "layouts": {
        "LAYOUT_ansi_82": {
            "layout": [
                {"matrix":[0, 0], "x":0, "y":0},
                {"matrix":[0, 2], "x":1.25, "y":0},
                {"matrix":[0, 3], "x":2.25, "y":0},
                {"matrix":[0, 4], "x":3.25, "y":0},
                {"matrix":[0, 5], "x":4.25, "y":0},
                {"matrix":[0, 6], "x":5.5, "y":0},
                {"matrix":[0, 7], "x":6.5, "y":0},
                {"matrix":[0, 8], "x":7.5, "y":0},
                {"matrix":[0, 9], "x":8.5, "y":0},
                {"matrix":[0,10], "x":9.75, "y":0},
                {"matrix":[0,11], "x":10.75, "y":0},
                {"matrix":[0,12], "x":11.75, "y":0},
                {"matrix":[0,13], "x":12.75, "y":0},
                {"matrix":[0,14], "x":14, "y":0},
                {"matrix":[4,14], "x":15.25, "y":0},

                {"matrix":[1, 0], "x":0, "y":1},
                {"matrix":[1, 1], "x":1, "y":1},
                {"matrix":[1, 2], "x":2, "y":1},
                {"matrix":[1, 3], "x":3, "y":1},
                {"matrix":[1, 4], "x":4, "y":1},
                {"matrix":[1, 5], "x":5, "y":1},
                {"matrix":[1, 6], "x":6, "y":1},
                {"matrix":[1, 7], "x":7, "y":1},
                {"matrix":[1, 8], "x":8, "y":1},
                {"matrix":[1, 9], "x":9, "y":1},
                {"matrix":[1,10], "x":10, "y":1},
                {"matrix":[1,11], "x":11, "y":1},
                {"matrix":[1,12], "x":12, "y":1},
                {"matrix":[1,13], "x":13, "y":1, "w":2},
                {"matrix":[1,14], "x":15.25, "y":1},

                {"matrix":[2, 0], "x":0, "y":2, "w":1.5},
                {"matrix":[2, 1], "x":1.5, "y":2},
                {"matrix":[2, 2], "x":2.5, "y":2},
                {"matrix":[2, 3], "x":3.5, "y":2},
                {"matrix":[2, 4], "x":4.5, "y":2},
                {"matrix":[2, 5], "x":5.5, "y":2},
                {"matrix":[2, 6], "x":6.5, "y":2},
                {"matrix":[2, 7], "x":7.5, "y":2},
                {"matrix":[2, 8], "x":8.5, "y":2},
                {"matrix":[2, 9], "x":9.5, "y":2},
                {"matrix":[2,10], "x":10.5, "y":2},
                {"matrix":[2,11], "x":11.5, "y":2},
                {"matrix":[2,12], "x":12.5, "y":2},
                {"matrix":[2,13], "x":13.5, "y":2, "w":1.5},
                {"matrix":[2,14], "x":15.25, "y":2},

                {"matrix":[3, 0], "x":0, "y":3, "w":1.75},
                {"matrix":[3, 1], "x":1.75, "y":3},
                {"matrix":[3, 2], "x":2.75, "y":3},
                {"matrix":[3, 3], "x":3.75, "y":3},
                {"matrix":[3, 4], "x":4.75, "y":3},
                {"matrix":[3, 5], "x":5.75, "y":3},
                {"matrix":[3, 6], "x":6.75, "y":3},
                {"matrix":[3, 7], "x":7.75, "y":3},
                {"matrix":[3, 8], "x":8.75, "y":3},
                {"matrix":[3, 9], "x":9.75, "y":3},
                {"matrix":[3,10], "x":10.75, "y":3},
                {"matrix":[3,11], "x":11.75, "y":3},
                {"matrix":[3,13], "x":12.75, "y":3, "w":2.25},
                {"matrix":[3,14], "x":15.25, "y":3},

                {"matrix":[4, 0], "x":0, "y":4, "w":2.25},
                {"matrix":[4, 2], "x":2.25, "y":4},
                {"matrix":[4, 3], "x":3.25, "y":4},
                {"matrix":[4, 4], "x":4.25, "y":4},
                {"matrix":[4, 5], "x":5.25, "y":4},
                {"matrix":[4, 6], "x":6.25, "y":4},
                {"matrix":[4, 7], "x":7.25, "y":4},
                {"matrix":[4, 8], "x":8.25, "y":4},
                {"matrix":[4, 9], "x":9.25, "y":4},
                {"matrix":[4,10], "x":10.25, "y":4},
                {"matrix":[4,11], "x":11.25, "y":4},
                {"matrix":[4,13], "x":12.25, "y":4, "w":1.75},
                {"matrix":[3,12], "x":14.25, "y":4.25},

                {"matrix":[5, 0], "x":0, "y":5, "w":1.25},
                {"matrix":[5, 1], "x":1.25, "y":5, "w":1.25},
                {"matrix":[5, 2], "x":2.5, "y":5, "w":1.25},
                {"matrix":[5, 6], "x":3.75,"y":5, "w":6.25},
                {"matrix":[5,10], "x":10, "y":5},
                {"matrix":[5,11], "x":11, "y":5},
                {"matrix":[5,12], "x":12, "y":5},
                {"matrix":[5,13], "x":13.25, "y":5.25},
                {"matrix":[4,12], "x":14.25, "y":5.25},
                {"matrix":[5,14], "x":15.25, "y":5.25}
            ]
        }
    }
}

A keyboards/keychron/q1/ansi/keymaps/default/keymap.c => keyboards/keychron/q1/ansi/keymaps/default/keymap.c +61 -0
@@ 0,0 1,61 @@
/* Copyright 2021 @ Keychron (https://www.keychron.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

enum layers{
    MAC_BASE,
    MAC_FN,
    WIN_BASE,
    WIN_FN
};

#define KC_TASK LGUI(KC_TAB)
#define KC_FLXP LGUI(KC_E)

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [MAC_BASE] = LAYOUT_ansi_82(
        KC_ESC,             KC_BRID,  KC_BRIU,  KC_NO,    KC_NO,    RGB_VAD,  RGB_VAI,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_MUTE,  KC_VOLD,  KC_VOLU,  KC_DEL,   KC_INS,
        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_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_ENT,             KC_HOME,
        KC_LSFT,            KC_Z,     KC_X,     KC_C,     KC_V,     KC_B,     KC_N,     KC_M,     KC_COMM,  KC_DOT,   KC_SLSH,            KC_RSFT,  KC_UP,
        KC_LCTL,  KC_LOPT,  KC_LCMD,                                KC_SPC,                                 KC_RCMD, MO(MAC_FN),KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT),

    [MAC_FN] = LAYOUT_ansi_82(
        _______,            KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,   _______,  _______,
        _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,
        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,
        _______,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  _______,  _______,  _______,  _______,  _______,  _______,            _______,            _______,
        _______,            _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,  _______,
        _______,  _______,  _______,                                _______,                                _______,  _______,  _______,  _______,  _______,  _______),

    [WIN_BASE] = LAYOUT_ansi_82(
        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_INS,
        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_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_ENT,             KC_HOME,
        KC_LSFT,            KC_Z,     KC_X,     KC_C,     KC_V,     KC_B,     KC_N,     KC_M,     KC_COMM,  KC_DOT,   KC_SLSH,            KC_RSFT,  KC_UP,
        KC_LCTL,  KC_LWIN,  KC_LALT,                                KC_SPC,                                 KC_RALT, MO(WIN_FN),KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT),

    [WIN_FN] = LAYOUT_ansi_82(
        _______,            KC_BRID,  KC_BRIU,  KC_TASK,  KC_FLXP,  RGB_VAD,  RGB_VAI,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_MUTE,  KC_VOLD,  KC_VOLU,  _______,  _______,
        _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,
        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,
        _______,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  _______,  _______,  _______,  _______,  _______,  _______,            _______,            _______,
        _______,            _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,  _______,
        _______,  _______,  _______,                                _______,                                _______,  _______,  _______,  _______,  _______,  _______)
};

R keyboards/keychron/q1/rev_0100/keymaps/gtg465x/README.md => keyboards/keychron/q1/ansi/keymaps/gtg465x/README.md +0 -0
R keyboards/keychron/q1/rev_0100/keymaps/gtg465x/config.h => keyboards/keychron/q1/ansi/keymaps/gtg465x/config.h +0 -0
R keyboards/keychron/q1/rev_0100/keymaps/gtg465x/keymap.c => keyboards/keychron/q1/ansi/keymaps/gtg465x/keymap.c +0 -0
R keyboards/keychron/q1/rev_0100/keymaps/gtg465x/keymap_user.h => keyboards/keychron/q1/ansi/keymaps/gtg465x/keymap_user.h +0 -0
R keyboards/keychron/q1/rev_0100/keymaps/gtg465x/rgb_matrix_user.c => keyboards/keychron/q1/ansi/keymaps/gtg465x/rgb_matrix_user.c +0 -0
R keyboards/keychron/q1/rev_0100/keymaps/gtg465x/rgb_matrix_user.h => keyboards/keychron/q1/ansi/keymaps/gtg465x/rgb_matrix_user.h +0 -0
R keyboards/keychron/q1/rev_0100/keymaps/gtg465x/rules.mk => keyboards/keychron/q1/ansi/keymaps/gtg465x/rules.mk +0 -0
R keyboards/keychron/q1/rev_0100/keymaps/default/keymap.c => keyboards/keychron/q1/ansi/keymaps/keychron/keymap.c +23 -45
@@ 15,24 15,15 @@
 */

#include QMK_KEYBOARD_H
#include "keychron_common.h"

enum layers{
    MAC_BASE,
    MAC_FN,
    WIN_BASE,
    WIN_FN
  MAC_BASE,
  MAC_FN,
  WIN_BASE,
  WIN_FN
};

enum custom_keycodes {
    KC_MISSION_CONTROL = SAFE_RANGE,
    KC_LAUNCHPAD
};

#define KC_TASK LGUI(KC_TAB)
#define KC_FLXP LGUI(KC_E)
#define KC_MCTL KC_MISSION_CONTROL
#define KC_LPAD KC_LAUNCHPAD

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [MAC_BASE] = LAYOUT_ansi_82(
        KC_ESC,             KC_BRID,  KC_BRIU,  KC_MCTL,  KC_LPAD,  RGB_VAD,  RGB_VAI,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_MUTE,  KC_VOLD,  KC_VOLU,  KC_DEL,   KC_INS,


@@ 40,15 31,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        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_ENT,             KC_HOME,
        KC_LSFT,            KC_Z,     KC_X,     KC_C,     KC_V,     KC_B,     KC_N,     KC_M,     KC_COMM,  KC_DOT,   KC_SLSH,            KC_RSFT,  KC_UP,
        KC_LCTL,  KC_LALT,  KC_LGUI,                                KC_SPC,                                 KC_RGUI, MO(MAC_FN),KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT),
        KC_LCTL,  KC_LOPTN, KC_LCMMD,                               KC_SPC,                                 KC_RCMMD,MO(MAC_FN),KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT),

    [MAC_FN] = LAYOUT_ansi_82(
        KC_TRNS,            KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,   KC_TRNS,  KC_TRNS,
        KC_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,
        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,
        KC_TRNS,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,            KC_TRNS,
        KC_TRNS,            KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,  KC_TRNS,
        KC_TRNS,  KC_TRNS,  KC_TRNS,                                KC_TRNS,                                KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS),
        _______,            KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,   _______,  _______,
        _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,
        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,
        _______,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  _______,  _______,  _______,  _______,  _______,  _______,            _______,            _______,
        _______,            _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,  _______,
        _______,  _______,  _______,                                _______,                                _______,  _______,  _______,  _______,  _______,  _______),

    [WIN_BASE] = LAYOUT_ansi_82(
        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_INS,


@@ 56,34 47,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        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_ENT,             KC_HOME,
        KC_LSFT,            KC_Z,     KC_X,     KC_C,     KC_V,     KC_B,     KC_N,     KC_M,     KC_COMM,  KC_DOT,   KC_SLSH,            KC_RSFT,  KC_UP,
        KC_LCTL,  KC_LGUI,  KC_LALT,                                KC_SPC,                                 KC_RALT, MO(WIN_FN),KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT),
        KC_LCTL,  KC_LWIN,  KC_LALT,                                KC_SPC,                                 KC_RALT, MO(WIN_FN),KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT),

    [WIN_FN] = LAYOUT_ansi_82(
        KC_TRNS,            KC_BRID,  KC_BRIU,  KC_TASK,  KC_FLXP,  RGB_VAD,  RGB_VAI,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_MUTE,  KC_VOLD,  KC_VOLU,  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,
        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,
        KC_TRNS,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,            KC_TRNS,
        KC_TRNS,            KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,  KC_TRNS,
        KC_TRNS,  KC_TRNS,  KC_TRNS,                                KC_TRNS,                                KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS)
        _______,            KC_BRID,  KC_BRIU,  KC_TASK,  KC_FLXP,  RGB_VAD,  RGB_VAI,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_MUTE,  KC_VOLD,  KC_VOLU,  _______,  _______,
        _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,
        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,
        _______,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  _______,  _______,  _______,  _______,  _______,  _______,            _______,            _______,
        _______,            _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,  _______,
        _______,  _______,  _______,                                _______,                                _______,  _______,  _______,  _______,  _______,  _______)
};

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
        case KC_MISSION_CONTROL:
            if (record->event.pressed) {
                host_consumer_send(0x29F);
            } else {
                host_consumer_send(0);
            }
            return false;  // Skip all further processing of this key
        case KC_LAUNCHPAD:
            if (record->event.pressed) {
                host_consumer_send(0x2A0);
            } else {
                host_consumer_send(0);
            }
            return false;  // Skip all further processing of this key
        default:
            return true;  // Process all other keycodes normally
    if(!process_record_keychron(keycode, record)) {
        return false;
    }

    return true;
}

A keyboards/keychron/q1/ansi/keymaps/keychron/rules.mk => keyboards/keychron/q1/ansi/keymaps/keychron/rules.mk +4 -0
@@ 0,0 1,4 @@
VIA_ENABLE = yes

VPATH += keyboards/keychron/common
SRC += keychron_common.c

R keyboards/keychron/q1/rev_0100/keymaps/mkillewald/config.h => keyboards/keychron/q1/ansi/keymaps/mkillewald/config.h +0 -0
R keyboards/keychron/q1/rev_0100/keymaps/mkillewald/keymap.c => keyboards/keychron/q1/ansi/keymaps/mkillewald/keymap.c +0 -0
R keyboards/keychron/q1/rev_0100/keymaps/mkillewald/keymap_user.h => keyboards/keychron/q1/ansi/keymaps/mkillewald/keymap_user.h +0 -0
R keyboards/keychron/q1/rev_0100/keymaps/mkillewald/readme.md => keyboards/keychron/q1/ansi/keymaps/mkillewald/readme.md +0 -0
R keyboards/keychron/q1/rev_0100/keymaps/mkillewald/rgb_matrix_user.c => keyboards/keychron/q1/ansi/keymaps/mkillewald/rgb_matrix_user.c +0 -0
R keyboards/keychron/q1/rev_0100/keymaps/mkillewald/rgb_matrix_user.h => keyboards/keychron/q1/ansi/keymaps/mkillewald/rgb_matrix_user.h +0 -0
R keyboards/keychron/q1/rev_0100/keymaps/mkillewald/rules.mk => keyboards/keychron/q1/ansi/keymaps/mkillewald/rules.mk +0 -0
R keyboards/keychron/q1/rev_0100/keymaps/teimor/config.h => keyboards/keychron/q1/ansi/keymaps/teimor/config.h +0 -0
R keyboards/keychron/q1/rev_0100/keymaps/teimor/keymap.c => keyboards/keychron/q1/ansi/keymaps/teimor/keymap.c +0 -0
R keyboards/keychron/q1/rev_0100/keymaps/teimor/keymap_user.h => keyboards/keychron/q1/ansi/keymaps/teimor/keymap_user.h +0 -0
R keyboards/keychron/q1/rev_0100/keymaps/teimor/readme.md => keyboards/keychron/q1/ansi/keymaps/teimor/readme.md +0 -0
R keyboards/keychron/q1/rev_0100/keymaps/teimor/rgb_matrix_user.c => keyboards/keychron/q1/ansi/keymaps/teimor/rgb_matrix_user.c +0 -0
R keyboards/keychron/q1/rev_0100/keymaps/teimor/rgb_matrix_user.h => keyboards/keychron/q1/ansi/keymaps/teimor/rgb_matrix_user.h +0 -0
R keyboards/keychron/q1/rev_0100/keymaps/teimor/rules.mk => keyboards/keychron/q1/ansi/keymaps/teimor/rules.mk +0 -0
R keyboards/keychron/q1/rev_0100/keymaps/teimor/tap_dance_mac_caps.c => keyboards/keychron/q1/ansi/keymaps/teimor/tap_dance_mac_caps.c +0 -0
R keyboards/keychron/q1/rev_0100/keymaps/teimor/tap_dance_mac_caps.h => keyboards/keychron/q1/ansi/keymaps/teimor/tap_dance_mac_caps.h +0 -0
R keyboards/keychron/q1/rev_0100/keymaps/teimor/tap_dance_setup.c => keyboards/keychron/q1/ansi/keymaps/teimor/tap_dance_setup.c +0 -0
R keyboards/keychron/q1/rev_0100/keymaps/teimor/tap_dance_setup.h => keyboards/keychron/q1/ansi/keymaps/teimor/tap_dance_setup.h +0 -0
R keyboards/keychron/q1/rev_0100/keymaps/teimor/tap_dance_user.c => keyboards/keychron/q1/ansi/keymaps/teimor/tap_dance_user.c +0 -0
R keyboards/keychron/q1/rev_0100/keymaps/teimor/tap_dance_win_caps.c => keyboards/keychron/q1/ansi/keymaps/teimor/tap_dance_win_caps.c +0 -0
R keyboards/keychron/q1/rev_0100/keymaps/teimor/tap_dance_win_caps.h => keyboards/keychron/q1/ansi/keymaps/teimor/tap_dance_win_caps.h +0 -0
A keyboards/keychron/q1/ansi/keymaps/via/keymap.c => keyboards/keychron/q1/ansi/keymaps/via/keymap.c +61 -0
@@ 0,0 1,61 @@
/* Copyright 2021 @ Keychron (https://www.keychron.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

enum layers{
  MAC_BASE,
  MAC_FN,
  WIN_BASE,
  WIN_FN
};

#define KC_TASK LGUI(KC_TAB)
#define KC_FLXP LGUI(KC_E)

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [MAC_BASE] = LAYOUT_ansi_82(
        KC_ESC,             KC_BRID,  KC_BRIU,  KC_NO,    KC_NO,    RGB_VAD,  RGB_VAI,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_MUTE,  KC_VOLD,  KC_VOLU,  KC_DEL,   KC_INS,
        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_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_ENT,             KC_HOME,
        KC_LSFT,            KC_Z,     KC_X,     KC_C,     KC_V,     KC_B,     KC_N,     KC_M,     KC_COMM,  KC_DOT,   KC_SLSH,            KC_RSFT,  KC_UP,
        KC_LCTL,  KC_LOPT,  KC_LCMD,                                KC_SPC,                                 KC_RCMD, MO(MAC_FN),KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT),

    [MAC_FN] = LAYOUT_ansi_82(
        _______,            KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,   _______,  _______,
        _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,
        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,
        _______,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  _______,  _______,  _______,  _______,  _______,  _______,            _______,            _______,
        _______,            _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,  _______,
        _______,  _______,  _______,                                _______,                                _______,  _______,  _______,  _______,  _______,  _______),

    [WIN_BASE] = LAYOUT_ansi_82(
        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_INS,
        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_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_ENT,             KC_HOME,
        KC_LSFT,            KC_Z,     KC_X,     KC_C,     KC_V,     KC_B,     KC_N,     KC_M,     KC_COMM,  KC_DOT,   KC_SLSH,            KC_RSFT,  KC_UP,
        KC_LCTL,  KC_LWIN,  KC_LALT,                                KC_SPC,                                 KC_RALT, MO(WIN_FN),KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT),

    [WIN_FN] = LAYOUT_ansi_82(
        _______,            KC_BRID,  KC_BRIU,  KC_TASK,  KC_FLXP,  RGB_VAD,  RGB_VAI,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_MUTE,  KC_VOLD,  KC_VOLU,  _______,  _______,
        _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,
        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,
        _______,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  _______,  _______,  _______,  _______,  _______,  _______,            _______,            _______,
        _______,            _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,  _______,
        _______,  _______,  _______,                                _______,                                _______,  _______,  _______,  _______,  _______,  _______)
};

R keyboards/keychron/q1/rev_0100/keymaps/via/rules.mk => keyboards/keychron/q1/ansi/keymaps/via/rules.mk +0 -1
@@ 1,2 1,1 @@
VIA_ENABLE = yes
MOUSEKEY_ENABLE = no
\ No newline at end of file

R keyboards/keychron/q1/rev_0100/readme.md => keyboards/keychron/q1/ansi/readme.md +0 -0
R keyboards/keychron/q1/rev_0100/rules.mk => keyboards/keychron/q1/ansi/rules.mk +1 -0
@@ 19,3 19,4 @@ AUDIO_ENABLE = no           # Audio output
DIP_SWITCH_ENABLE = yes
RGB_MATRIX_ENABLE = yes
RGB_MATRIX_DRIVER = IS31FL3733
LTO_ENABLE = yes

R keyboards/keychron/q1/rev_0100/rev_0100.c => keyboards/keychron/q1/ansi_encoder/ansi_encoder.c +28 -23
@@ 14,9 14,9 @@
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include "quantum.h"

#include "ansi_encoder.h"

#ifdef RGB_MATRIX_ENABLE
const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
/* Refer to IS31 manual for these locations
 *   driver


@@ 111,33 111,38 @@ const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
    {1, F_14,   D_14,   E_14},
    {1, F_15,   D_15,   E_15},
    {1, F_16,   D_16,   E_16}

};

#define __ NO_LED

led_config_t g_led_config = {
	{
		{   0,     NO_LED,  1,      2,      3,      4,      5,      6,      7,      8,      9,     10,     11,      12,     14   },
		{  15,     16,     17,     18,     19,     20,     21,     22,     23,     24,     25,     26,     27,      28,     29   },
		{  30,     31,     32,     33,     34,     35,     36,     37,     38,     39,     40,     41,     42,      43,     44   },
		{  45,     46,     47,     48,     49,     50,     51,     52,     53,     54,     55,     56,     71,      57,     58   },
		{  59,     NO_LED, 60,     61,     62,     63,     64,     65,     66,     67,     68,     69,     80,      70,     13   },
		{  72,     73,     74,     NO_LED, NO_LED, NO_LED, 75,     NO_LED, NO_LED, NO_LED, 76,     77,     78,      79,     81   }
        // Key Matrix to LED Index
		{  0, __,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 14 },
		{ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 },
		{ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44 },
		{ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 71, 57, 58 },
		{ 59, __, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 80, 70, 13 },
		{ 72, 73, 74, __, __, __, 75, __, __, __, 76, 77, 78, 79, 81 }
	},
	{
		{0,0},           {30, 0}, {45, 0}, {60, 0}, {75, 0}, {90, 0}, {105, 0}, {120, 0}, {135, 0}, {150, 0}, {165, 0}, {180, 0}, {195, 0}, {210, 0}, {224, 0},
	    {0,13}, {15,13}, {30,13}, {45,13}, {60,13}, {75,13}, {90,13}, {105,13}, {120,13}, {135,13}, {150,13}, {165,13}, {180,13}, {195,13},           {224,13},
	    {0,26}, {15,26}, {30,26}, {45,26}, {60,26}, {75,26}, {90,26}, {105,26}, {120,26}, {135,26}, {150,26}, {165,26}, {180,26}, {195,26},           {224,26},
	    {0,39}, {15,39}, {30,39}, {45,39}, {60,39}, {75,39}, {90,39}, {105,39}, {120,39}, {135,39}, {150,39}, {165,39},           {195,39},           {224,39},
	    {0,52},          {30,52}, {45,52}, {60,52}, {75,52}, {90,52}, {105,52}, {120,52}, {135,52}, {150,52}, {165,52},           {195,52}, {210,52},
	    {0,64}, {15,64}, {30,64},                            {90,64},                               {150,64}, {165,64}, {180,64}, {195,64}, {210,64}, {224,64},
	},
        // LED Index to Physical Position
        {0,0},           {18,0},  {33,0},  {48,0},  {62,0},  {81,0},  {95,0},   {110,0},  {125,0},  {143,0},  {158,0},  {173,0},  {187,0},  {206,0},  {224,0},
        {0,15}, {15,15}, {29,15}, {44,15}, {59,15}, {73,15}, {88,15}, {103,15}, {118,15}, {132,15}, {147,15}, {162,15}, {176,15}, {198,15},           {224,15},
        {4,26}, {22,26}, {37,26}, {51,26}, {66,26}, {81,26}, {95,26}, {110,26}, {125,26}, {140,26}, {154,26}, {169,26}, {184,26}, {202,26},           {224,26},
        {6,38}, {26,38}, {40,38}, {55,38}, {70,38}, {84,38}, {99,38}, {114,38}, {129,38}, {143,38}, {158,38}, {173,38},           {196,38},           {224,38},
        {9,49},          {33,49}, {48,49}, {62,49}, {77,49}, {92,49}, {106,49}, {121,49}, {136,49}, {151,49}, {165,49},           {185,49}, {209,52},
        {2,61}, {20,61}, {39,61},                            {94,61},                               {147,61}, {162,61}, {176,61}, {195,64}, {209,64}, {224,64}
    },
	{
		4,			4,	  4,	4,	  4,	4,	  4,	4,	  4,	4,	  4,	4,	  4,	4,	  4,
		4,	  4,	4,	  4,	4,	  4,	4,	  4,	4,	  4,	4,	  4,	4,	  4,		  4,
		4,	  4,	4,	  4,	4,	  4,	4,	  4,	4,	  4,	4,	  4,	4,	  4,		  4,
		4,	  4,	4,	  4,	4,	  4,	4,	  4,	4,	  4,	4,	  4,		  4,		  4,
		4,			4,	  4,	4,	  4,	4,	  4,	4,	  4,	4,	  4,		  4,	4,
		4,	  4,	4,						4,						4,	  4,	4,	  4,	4,	  4

        // RGB LED Index to Flag
        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,    1,
        1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,    1,
        1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,    1,
        1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,    1,    1,
        1,    4, 4, 4, 4, 4, 4, 4, 4, 4, 4,    1, 1,
        1, 1, 1,          4,          1, 1, 1, 1, 1, 1
	}
};

#endif // RGB_MATRIX_ENABLE

R keyboards/keychron/q1/rev_0100/rev_0100.h => keyboards/keychron/q1/ansi_encoder/ansi_encoder.h +0 -18
@@ 17,21 17,3 @@
#pragma once

#include "quantum.h"

#define xxx KC_NO

#define LAYOUT_ansi_82( \
	K00,       K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K4E, K0E, \
	K10, K11,  K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D,      K1E, \
	K20, K21,  K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D,      K2E, \
	K30, K31,  K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B,      K3D,      K3E, \
	K40,       K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B,      K4D, K3C,      \
	K50, K51,  K52,                K56,                K5A, K5B, K5C, K5D, K4C, K5E  \
) { \
	{ K00, xxx,  K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B,  K0C, K0D, K0E }, \
	{ K10, K11,  K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B,  K1C, K1D, K1E }, \
	{ K20, K21,  K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B,  K2C, K2D, K2E }, \
	{ K30, K31,  K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B,  K3C, K3D, K3E }, \
	{ K40, xxx,  K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B,  K4C, K4D, K4E }, \
	{ K50, K51,  K52, xxx, xxx, xxx, K56, xxx, xxx, xxx, K5A, K5B,  K5C, K5D, K5E }  \
}

R keyboards/keychron/q1/rev_0101/config.h => keyboards/keychron/q1/ansi_encoder/config.h +0 -0
A keyboards/keychron/q1/ansi_encoder/info.json => keyboards/keychron/q1/ansi_encoder/info.json +104 -0
@@ 0,0 1,104 @@
{
    "keyboard_name": "Q1",
    "manufacturer": "Keychron",
    "url": "https://github.com/Keychron",
    "maintainer": "lalalademaxiya1",
    "usb": {
        "vid": "0x3434",
        "pid": "0x0101",
        "device_version": "1.0.0"
    },
    "layouts": {
        "LAYOUT_ansi_82": {
            "layout": [
                {"matrix":[0, 0], "x":0, "y":0},
                {"matrix":[0, 2], "x":1.25, "y":0},
                {"matrix":[0, 3], "x":2.25, "y":0},
                {"matrix":[0, 4], "x":3.25, "y":0},
                {"matrix":[0, 5], "x":4.25, "y":0},
                {"matrix":[0, 6], "x":5.5, "y":0},
                {"matrix":[0, 7], "x":6.5, "y":0},
                {"matrix":[0, 8], "x":7.5, "y":0},
                {"matrix":[0, 9], "x":8.5, "y":0},
                {"matrix":[0,10], "x":9.75, "y":0},
                {"matrix":[0,11], "x":10.75, "y":0},
                {"matrix":[0,12], "x":11.75, "y":0},
                {"matrix":[0,13], "x":12.75, "y":0},
                {"matrix":[0,14], "x":14, "y":0},
                {"matrix":[4,14], "x":15.25, "y":0},

                {"matrix":[1, 0], "x":0, "y":1},
                {"matrix":[1, 1], "x":1, "y":1},
                {"matrix":[1, 2], "x":2, "y":1},
                {"matrix":[1, 3], "x":3, "y":1},
                {"matrix":[1, 4], "x":4, "y":1},
                {"matrix":[1, 5], "x":5, "y":1},
                {"matrix":[1, 6], "x":6, "y":1},
                {"matrix":[1, 7], "x":7, "y":1},
                {"matrix":[1, 8], "x":8, "y":1},
                {"matrix":[1, 9], "x":9, "y":1},
                {"matrix":[1,10], "x":10, "y":1},
                {"matrix":[1,11], "x":11, "y":1},
                {"matrix":[1,12], "x":12, "y":1},
                {"matrix":[1,13], "x":13, "y":1, "w":2},
                {"matrix":[1,14], "x":15.25, "y":1},

                {"matrix":[2, 0], "x":0, "y":2, "w":1.5},
                {"matrix":[2, 1], "x":1.5, "y":2},
                {"matrix":[2, 2], "x":2.5, "y":2},
                {"matrix":[2, 3], "x":3.5, "y":2},
                {"matrix":[2, 4], "x":4.5, "y":2},
                {"matrix":[2, 5], "x":5.5, "y":2},
                {"matrix":[2, 6], "x":6.5, "y":2},
                {"matrix":[2, 7], "x":7.5, "y":2},
                {"matrix":[2, 8], "x":8.5, "y":2},
                {"matrix":[2, 9], "x":9.5, "y":2},
                {"matrix":[2,10], "x":10.5, "y":2},
                {"matrix":[2,11], "x":11.5, "y":2},
                {"matrix":[2,12], "x":12.5, "y":2},
                {"matrix":[2,13], "x":13.5, "y":2, "w":1.5},
                {"matrix":[2,14], "x":15.25, "y":2},

                {"matrix":[3, 0], "x":0, "y":3, "w":1.75},
                {"matrix":[3, 1], "x":1.75, "y":3},
                {"matrix":[3, 2], "x":2.75, "y":3},
                {"matrix":[3, 3], "x":3.75, "y":3},
                {"matrix":[3, 4], "x":4.75, "y":3},
                {"matrix":[3, 5], "x":5.75, "y":3},
                {"matrix":[3, 6], "x":6.75, "y":3},
                {"matrix":[3, 7], "x":7.75, "y":3},
                {"matrix":[3, 8], "x":8.75, "y":3},
                {"matrix":[3, 9], "x":9.75, "y":3},
                {"matrix":[3,10], "x":10.75, "y":3},
                {"matrix":[3,11], "x":11.75, "y":3},
                {"matrix":[3,13], "x":12.75, "y":3, "w":2.25},
                {"matrix":[3,14], "x":15.25, "y":3},

                {"matrix":[4, 0], "x":0, "y":4, "w":2.25},
                {"matrix":[4, 2], "x":2.25, "y":4},
                {"matrix":[4, 3], "x":3.25, "y":4},
                {"matrix":[4, 4], "x":4.25, "y":4},
                {"matrix":[4, 5], "x":5.25, "y":4},
                {"matrix":[4, 6], "x":6.25, "y":4},
                {"matrix":[4, 7], "x":7.25, "y":4},
                {"matrix":[4, 8], "x":8.25, "y":4},
                {"matrix":[4, 9], "x":9.25, "y":4},
                {"matrix":[4,10], "x":10.25, "y":4},
                {"matrix":[4,11], "x":11.25, "y":4},
                {"matrix":[4,13], "x":12.25, "y":4, "w":1.75},
                {"matrix":[3,12], "x":14.25, "y":4.25},

                {"matrix":[5, 0], "x":0, "y":5, "w":1.25},
                {"matrix":[5, 1], "x":1.25, "y":5, "w":1.25},
                {"matrix":[5, 2], "x":2.5, "y":5, "w":1.25},
                {"matrix":[5, 6], "x":3.75,"y":5, "w":6.25},
                {"matrix":[5,10], "x":10, "y":5},
                {"matrix":[5,11], "x":11, "y":5},
                {"matrix":[5,12], "x":12, "y":5},
                {"matrix":[5,13], "x":13.25, "y":5.25},
                {"matrix":[4,12], "x":14.25, "y":5.25},
                {"matrix":[5,14], "x":15.25, "y":5.25}
            ]
        }
    }
}

A keyboards/keychron/q1/ansi_encoder/keymaps/default/keymap.c => keyboards/keychron/q1/ansi_encoder/keymaps/default/keymap.c +67 -0
@@ 0,0 1,67 @@
/* Copyright 2021 @ Keychron (https://www.keychron.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

enum layers{
    MAC_BASE,
    MAC_FN,
    WIN_BASE,
    WIN_FN
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [MAC_BASE] = LAYOUT_ansi_82(
        KC_ESC,             KC_BRID,  KC_BRIU,  KC_NO,    KC_NO,    RGB_VAD,  RGB_VAI,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_MUTE,  KC_VOLD,  KC_VOLU,  KC_DEL,   KC_MUTE,
        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_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_ENT,             KC_HOME,
        KC_LSFT,            KC_Z,     KC_X,     KC_C,     KC_V,     KC_B,     KC_N,     KC_M,     KC_COMM,  KC_DOT,   KC_SLSH,            KC_RSFT,  KC_UP,
        KC_LCTL,  KC_LOPT,  KC_LCMD,                                KC_SPC,                                 KC_ROPT, MO(MAC_FN),KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT),

    [MAC_FN] = LAYOUT_ansi_82(
        _______,            KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,   _______,  RGB_TOG,
        _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,
        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,
        _______,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  _______,  _______,  _______,  _______,  _______,  _______,            _______,            _______,
        _______,            _______,  _______,  _______,  _______,  _______,  NK_TOGG,  _______,  _______,  _______,  _______,            _______,  _______,
        _______,  _______,  _______,                                _______,                                _______,  _______,  _______,  _______,  _______,  _______),

    [WIN_BASE] = LAYOUT_ansi_82(
        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_MUTE,
        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_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_ENT,             KC_HOME,
        KC_LSFT,            KC_Z,     KC_X,     KC_C,     KC_V,     KC_B,     KC_N,     KC_M,     KC_COMM,  KC_DOT,   KC_SLSH,            KC_RSFT,  KC_UP,
        KC_LCTL,  KC_LWIN,  KC_LALT,                                KC_SPC,                                 KC_RALT, MO(WIN_FN),KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT),

    [WIN_FN] = LAYOUT_ansi_82(
        _______,            KC_BRID,  KC_BRIU,  _______,  _______,  RGB_VAD,  RGB_VAI,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_MUTE,  KC_VOLD,  KC_VOLU,  _______,  RGB_TOG,
        _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,
        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,
        _______,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  _______,  _______,  _______,  _______,  _______,  _______,            _______,            _______,
        _______,            _______,  _______,  _______,  _______,  _______,  NK_TOGG,  _______,  _______,  _______,  _______,            _______,  _______,
        _______,  _______,  _______,                                _______,                                _______,  _______,  _______,  _______,  _______,  _______)
};

#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
    [MAC_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
    [MAC_FN]   = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
    [WIN_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
    [WIN_FN]   = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
};
#endif

R keyboards/keychron/q1/rev_0101/keymaps/default/rules.mk => keyboards/keychron/q1/ansi_encoder/keymaps/default/rules.mk +0 -0
R keyboards/keychron/q1/rev_0101/keymaps/default/keymap.c => keyboards/keychron/q1/ansi_encoder/keymaps/keychron/keymap.c +19 -41
@@ 15,6 15,7 @@
 */

#include QMK_KEYBOARD_H
#include "keychron_common.h"

enum layers{
    MAC_BASE,


@@ 23,16 24,6 @@ enum layers{
    WIN_FN
};

enum custom_keycodes {
    KC_MISSION_CONTROL = SAFE_RANGE,
    KC_LAUNCHPAD
};

#define KC_TASK LGUI(KC_TAB)
#define KC_FLXP LGUI(KC_E)
#define KC_MCTL KC_MISSION_CONTROL
#define KC_LPAD KC_LAUNCHPAD

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [MAC_BASE] = LAYOUT_ansi_82(
        KC_ESC,             KC_BRID,  KC_BRIU,  KC_MCTL,  KC_LPAD,  RGB_VAD,  RGB_VAI,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_MUTE,  KC_VOLD,  KC_VOLU,  KC_DEL,   KC_MUTE,


@@ 40,15 31,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        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_ENT,             KC_HOME,
        KC_LSFT,            KC_Z,     KC_X,     KC_C,     KC_V,     KC_B,     KC_N,     KC_M,     KC_COMM,  KC_DOT,   KC_SLSH,            KC_RSFT,  KC_UP,
        KC_LCTL,  KC_LALT,  KC_LGUI,                                KC_SPC,                                 KC_RGUI, MO(MAC_FN),KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT),
        KC_LCTL,  KC_LOPTN, KC_LCMMD,                               KC_SPC,                                 KC_RCMMD,MO(MAC_FN),KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT),

    [MAC_FN] = LAYOUT_ansi_82(
        KC_TRNS,            KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,   KC_TRNS,  KC_TRNS,
        KC_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,
        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,
        KC_TRNS,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,            KC_TRNS,
        KC_TRNS,            KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,  KC_TRNS,
        KC_TRNS,  KC_TRNS,  KC_TRNS,                                KC_TRNS,                                KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS),
        _______,            KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,   _______,  RGB_TOG,
        _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,
        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,
        _______,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  _______,  _______,  _______,  _______,  _______,  _______,            _______,            _______,
        _______,            _______,  _______,  _______,  _______,  _______,  NK_TOGG,  _______,  _______,  _______,  _______,            _______,  _______,
        _______,  _______,  _______,                                _______,                                _______,  _______,  _______,  _______,  _______,  _______),

    [WIN_BASE] = LAYOUT_ansi_82(
        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_MUTE,


@@ 56,15 47,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        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_ENT,             KC_HOME,
        KC_LSFT,            KC_Z,     KC_X,     KC_C,     KC_V,     KC_B,     KC_N,     KC_M,     KC_COMM,  KC_DOT,   KC_SLSH,            KC_RSFT,  KC_UP,
        KC_LCTL,  KC_LGUI,  KC_LALT,                                KC_SPC,                                 KC_RALT, MO(WIN_FN),KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT),
        KC_LCTL,  KC_LWIN,  KC_LALT,                                KC_SPC,                                 KC_RALT, MO(WIN_FN),KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT),

    [WIN_FN] = LAYOUT_ansi_82(
        KC_TRNS,            KC_BRID,  KC_BRIU,  KC_TASK,  KC_FLXP,  RGB_VAD,  RGB_VAI,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_MUTE,  KC_VOLD,  KC_VOLU,  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,
        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,
        KC_TRNS,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,            KC_TRNS,
        KC_TRNS,            KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,  KC_TRNS,
        KC_TRNS,  KC_TRNS,  KC_TRNS,                                KC_TRNS,                                KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS)
        _______,            KC_BRID,  KC_BRIU,  KC_TASK,  KC_FLXP,  RGB_VAD,  RGB_VAI,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_MUTE,  KC_VOLD,  KC_VOLU,  _______,  RGB_TOG,
        _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,
        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,
        _______,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  _______,  _______,  _______,  _______,  _______,  _______,            _______,            _______,
        _______,            _______,  _______,  _______,  _______,  _______,  NK_TOGG,  _______,  _______,  _______,  _______,            _______,  _______,
        _______,  _______,  _______,                                _______,                                _______,  _______,  _______,  _______,  _______,  _______)
};

#if defined(ENCODER_MAP_ENABLE)


@@ 77,22 68,9 @@ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
#endif

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
        case KC_MISSION_CONTROL:
            if (record->event.pressed) {
                host_consumer_send(0x29F);
            } else {
                host_consumer_send(0);
            }
            return false;  // Skip all further processing of this key
        case KC_LAUNCHPAD:
            if (record->event.pressed) {
                host_consumer_send(0x2A0);
            } else {
                host_consumer_send(0);
            }
            return false;  // Skip all further processing of this key
        default:
            return true;  // Process all other keycodes normally
    if (!process_record_keychron(keycode, record)) {
        return false;
    }

    return true;
}

A keyboards/keychron/q1/ansi_encoder/keymaps/keychron/rules.mk => keyboards/keychron/q1/ansi_encoder/keymaps/keychron/rules.mk +5 -0
@@ 0,0 1,5 @@
VIA_ENABLE = yes
ENCODER_MAP_ENABLE = yes

VPATH += keyboards/keychron/common
SRC += keychron_common.c

R keyboards/keychron/q1/rev_0101/keymaps/via/keymap.c => keyboards/keychron/q1/ansi_encoder/keymaps/via/keymap.c +20 -51
@@ 23,48 23,38 @@ enum layers{
    WIN_FN
};

enum custom_keycodes {
    KC_MISSION_CONTROL = USER00,
    KC_LAUNCHPAD
};

#define KC_MCTL KC_MISSION_CONTROL
#define KC_LPAD KC_LAUNCHPAD
#define KC_TASK G(KC_TAB)
#define KC_FLXP G(KC_E)

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [MAC_BASE] = LAYOUT_all(
        KC_ESC,             KC_BRID,  KC_BRIU,  KC_MCTL,  KC_LPAD,  RGB_VAD,  RGB_VAI,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_MUTE,  KC_VOLD,  KC_VOLU,  KC_DEL,     KC_VOLD,  KC_MUTE,  KC_VOLU,
    [MAC_BASE] = LAYOUT_ansi_82(
        KC_ESC,             KC_BRID,  KC_BRIU,  KC_NO,    KC_NO,    RGB_VAD,  RGB_VAI,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_MUTE,  KC_VOLD,  KC_VOLU,  KC_DEL,   KC_MUTE,
        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_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_ENT,             KC_HOME,
        KC_LSFT,            KC_Z,     KC_X,     KC_C,     KC_V,     KC_B,     KC_N,     KC_M,     KC_COMM,  KC_DOT,   KC_SLSH,            KC_RSFT,  KC_UP,
        KC_LCTL,  KC_LALT,  KC_LGUI,                                KC_SPC,                                 KC_RGUI, MO(MAC_FN),KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT),
        KC_LCTL,  KC_LOPT,  KC_LCMD,                                KC_SPC,                                 KC_RCMD, MO(MAC_FN),KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT),

    [MAC_FN] = LAYOUT_all(
        KC_TRNS,            KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,   KC_TRNS,    KC_TRNS,  KC_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,
        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,
        KC_TRNS,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,            KC_TRNS,
        KC_TRNS,            KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,  KC_TRNS,
        KC_TRNS,  KC_TRNS,  KC_TRNS,                                KC_TRNS,                                KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS),
    [MAC_FN] = LAYOUT_ansi_82(
        _______,            KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,   _______,  RGB_TOG,
        _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,
        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,
        _______,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  _______,  _______,  _______,  _______,  _______,  _______,            _______,            _______,
        _______,            _______,  _______,  _______,  _______,  _______,  NK_TOGG,  _______,  _______,  _______,  _______,            _______,  _______,
        _______,  _______,  _______,                                _______,                                _______,  _______,  _______,  _______,  _______,  _______),

    [WIN_BASE] = LAYOUT_all(
        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_VOLD,  KC_MUTE,  KC_VOLU,
    [WIN_BASE] = LAYOUT_ansi_82(
        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_MUTE,
        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_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_ENT,             KC_HOME,
        KC_LSFT,            KC_Z,     KC_X,     KC_C,     KC_V,     KC_B,     KC_N,     KC_M,     KC_COMM,  KC_DOT,   KC_SLSH,            KC_RSFT,  KC_UP,
        KC_LCTL,  KC_LGUI,  KC_LALT,                                KC_SPC,                                 KC_RALT, MO(WIN_FN),KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT),
        KC_LCTL,  KC_LWIN,  KC_LALT,                                KC_SPC,                                 KC_RALT, MO(WIN_FN),KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT),

    [WIN_FN] = LAYOUT_all(
        KC_TRNS,            KC_BRID,  KC_BRIU,  KC_TASK,  KC_FLXP,  RGB_VAD,  RGB_VAI,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_MUTE,  KC_VOLD,  KC_VOLU,  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,
        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,
        KC_TRNS,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,            KC_TRNS,
        KC_TRNS,            KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,  KC_TRNS,
        KC_TRNS,  KC_TRNS,  KC_TRNS,                                KC_TRNS,                                KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS)
    [WIN_FN] = LAYOUT_ansi_82(
        _______,            KC_BRID,  KC_BRIU,  _______,  _______,  RGB_VAD,  RGB_VAI,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_MUTE,  KC_VOLD,  KC_VOLU,  _______,  RGB_TOG,
        _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,
        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,
        _______,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  _______,  _______,  _______,  _______,  _______,  _______,            _______,            _______,
        _______,            _______,  _______,  _______,  _______,  _______,  NK_TOGG,  _______,  _______,  _______,  _______,            _______,  _______,
        _______,  _______,  _______,                                _______,                                _______,  _______,  _______,  _______,  _______,  _______)
};

#if defined(ENCODER_MAP_ENABLE)


@@ 75,24 65,3 @@ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
    [WIN_FN]   = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
};
#endif

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
        case KC_MISSION_CONTROL:
            if (record->event.pressed) {
                host_consumer_send(0x29F);
            } else {
                host_consumer_send(0);
            }
            return false;  // Skip all further processing of this key
        case KC_LAUNCHPAD:
            if (record->event.pressed) {
                host_consumer_send(0x2A0);
            } else {
                host_consumer_send(0);
            }
            return false;  // Skip all further processing of this key
        default:
            return true;  // Process all other keycodes normally
    }
}

R keyboards/keychron/q1/rev_0101/keymaps/via/rules.mk => keyboards/keychron/q1/ansi_encoder/keymaps/via/rules.mk +1 -1
@@ 1,2 1,2 @@
VIA_ENABLE = yes
ENCODER_MAP_ENABLE = yes
\ No newline at end of file
ENCODER_MAP_ENABLE = yes

R keyboards/keychron/q1/rev_0101/readme.md => keyboards/keychron/q1/ansi_encoder/readme.md +0 -0
R keyboards/keychron/q1/rev_0101/rules.mk => keyboards/keychron/q1/ansi_encoder/rules.mk +2 -1
@@ 19,4 19,5 @@ AUDIO_ENABLE = no           # Audio output
ENCODER_ENABLE = yes        # Enable Encoder
DIP_SWITCH_ENABLE = yes
RGB_MATRIX_ENABLE = yes
RGB_MATRIX_DRIVER = IS31FL3733
\ No newline at end of file
RGB_MATRIX_DRIVER = IS31FL3733
LTO_ENABLE = yes

M keyboards/keychron/q1/config.h => keyboards/keychron/q1/config.h +10 -10
@@ 55,7 55,7 @@
// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
// #define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
// #define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
#define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
#define ENABLE_RGB_MATRIX_CYCLE_ALL
#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN


@@ 67,12 67,12 @@
#define ENABLE_RGB_MATRIX_DUAL_BEACON
#define ENABLE_RGB_MATRIX_RAINBOW_BEACON
// #define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
#define ENABLE_RGB_MATRIX_RAINDROPS
// #define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
// #define ENABLE_RGB_MATRIX_RAINDROPS
#define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
// #define ENABLE_RGB_MATRIX_HUE_BREATHING
// #define ENABLE_RGB_MATRIX_HUE_PENDULUM
// #define ENABLE_RGB_MATRIX_HUE_WAVE
// #define ENABLE_RGB_MATRIX_PIXEL_RAIN
#define ENABLE_RGB_MATRIX_PIXEL_RAIN
// #define ENABLE_RGB_MATRIX_PIXEL_FLOW
// #define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined


@@ 80,14 80,14 @@
#define ENABLE_RGB_MATRIX_DIGITAL_RAIN
// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE
// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
#define ENABLE_RGB_MATRIX_SPLASH
#define ENABLE_RGB_MATRIX_MULTISPLASH
// #define ENABLE_RGB_MATRIX_MULTISPLASH
#define ENABLE_RGB_MATRIX_SOLID_SPLASH
#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH

R keyboards/keychron/q1/rev_0102/config.h => keyboards/keychron/q1/iso/config.h +0 -0
A keyboards/keychron/q1/iso/info.json => keyboards/keychron/q1/iso/info.json +105 -0
@@ 0,0 1,105 @@
{
    "keyboard_name": "Q1",
    "manufacturer": "Keychron",
    "url": "https://github.com/Keychron",
    "maintainer": "lalalademaxiya1",
    "usb": {
        "vid": "0x3434",
        "pid": "0x0102",
        "device_version": "1.0.0"
    },
    "layouts": {
        "LAYOUT_iso_83": {
            "layout": [
                {"matrix":[0, 0], "x":0, "y":0},
                {"matrix":[0, 2], "x":1.25, "y":0},
                {"matrix":[0, 3], "x":2.25, "y":0},
                {"matrix":[0, 4], "x":3.25, "y":0},
                {"matrix":[0, 5], "x":4.25, "y":0},
                {"matrix":[0, 6], "x":5.5, "y":0},
                {"matrix":[0, 7], "x":6.5, "y":0},
                {"matrix":[0, 8], "x":7.5, "y":0},
                {"matrix":[0, 9], "x":8.5, "y":0},
                {"matrix":[0,10], "x":9.75, "y":0},
                {"matrix":[0,11], "x":10.75, "y":0},
                {"matrix":[0,12], "x":11.75, "y":0},
                {"matrix":[0,13], "x":12.75, "y":0},
                {"matrix":[4,14], "x":14, "y":0},
                {"matrix":[0,14], "x":15.25, "y":0},

                {"matrix":[1, 0], "x":0, "y":1.25},
                {"matrix":[1, 1], "x":1, "y":1.25},
                {"matrix":[1, 2], "x":2, "y":1.25},
                {"matrix":[1, 3], "x":3, "y":1.25},
                {"matrix":[1, 4], "x":4, "y":1.25},
                {"matrix":[1, 5], "x":5, "y":1.25},
                {"matrix":[1, 6], "x":6, "y":1.25},
                {"matrix":[1, 7], "x":7, "y":1.25},
                {"matrix":[1, 8], "x":8, "y":1.25},
                {"matrix":[1, 9], "x":9, "y":1.25},
                {"matrix":[1,10], "x":10, "y":1.25},
                {"matrix":[1,11], "x":11, "y":1.25},
                {"matrix":[1,12], "x":12, "y":1.25},
                {"matrix":[1,13], "x":13, "y":1.25, "w":2},
                {"matrix":[1,14], "x":15.25, "y":1.25},

                {"matrix":[2, 0], "x":0, "y":2.25, "w":1.5},
                {"matrix":[2, 1], "x":1.5, "y":2.25},
                {"matrix":[2, 2], "x":2.5, "y":2.25},
                {"matrix":[2, 3], "x":3.5, "y":2.25},
                {"matrix":[2, 4], "x":4.5, "y":2.25},
                {"matrix":[2, 5], "x":5.5, "y":2.25},
                {"matrix":[2, 6], "x":6.5, "y":2.25},
                {"matrix":[2, 7], "x":7.5, "y":2.25},
                {"matrix":[2, 8], "x":8.5, "y":2.25},
                {"matrix":[2, 9], "x":9.5, "y":2.25},
                {"matrix":[2,10], "x":10.5, "y":2.25},
                {"matrix":[2,11], "x":11.5, "y":2.25},
                {"matrix":[2,12], "x":12.5, "y":2.25},
                {"matrix":[2,14], "x":15.25, "y":2.25},

                {"matrix":[3, 0], "x":0, "y":3.25, "w":1.75},
                {"matrix":[3, 1], "x":1.75, "y":3.25},
                {"matrix":[3, 2], "x":2.75, "y":3.25},
                {"matrix":[3, 3], "x":3.75, "y":3.25},
                {"matrix":[3, 4], "x":4.75, "y":3.25},
                {"matrix":[3, 5], "x":5.75, "y":3.25},
                {"matrix":[3, 6], "x":6.75, "y":3.25},
                {"matrix":[3, 7], "x":7.75, "y":3.25},
                {"matrix":[3, 8], "x":8.75, "y":3.25},
                {"matrix":[3, 9], "x":9.75, "y":3.25},
                {"matrix":[3,10], "x":10.75, "y":3.25},
                {"matrix":[3,11], "x":11.75, "y":3.25},
                {"matrix":[3,13], "x":12.75, "y":3.25},
                {"matrix":[2,13], "x":13.75, "y":2.25, "w":1.25, "h":2},
                {"matrix":[3,14], "x":15.25, "y":3.25},

                {"matrix":[4, 0], "x":0, "y":4.25, "w":1.25},
                {"matrix":[4, 1], "x":1.25, "y":4.25},
                {"matrix":[4, 2], "x":2.25, "y":4.25},
                {"matrix":[4, 3], "x":3.25, "y":4.25},
                {"matrix":[4, 4], "x":4.25, "y":4.25},
                {"matrix":[4, 5], "x":5.25, "y":4.25},
                {"matrix":[4, 6], "x":6.25, "y":4.25},
                {"matrix":[4, 7], "x":7.25, "y":4.25},
                {"matrix":[4, 8], "x":8.25, "y":4.25},
                {"matrix":[4, 9], "x":9.25, "y":4.25},
                {"matrix":[4,10], "x":10.25, "y":4.25},
                {"matrix":[4,11], "x":11.25, "y":4.25},
                {"matrix":[4,13], "x":12.25, "y":4.25, "w":1.75},
                {"matrix":[3,12], "x":14.25, "y":4.5},

                {"matrix":[5, 0], "x":0, "y":5.25, "w":1.25},
                {"matrix":[5, 1], "x":1.25, "y":5.25, "w":1.25},
                {"matrix":[5, 2], "x":2.5, "y":5.25, "w":1.25},
                {"matrix":[5, 6], "x":3.75, "y":5.25, "w":6.25},
                {"matrix":[5,10], "x":10, "y":5.25},
                {"matrix":[5,11], "x":11, "y":5.25},
                {"matrix":[5,12], "x":12, "y":5.25},
                {"matrix":[5,13], "x":13.25, "y":5.5},
                {"matrix":[4,12], "x":14.25, "y":5.5},
                {"matrix":[5,14], "x":15.25, "y":5.5}
            ]
        }
    }
}

R keyboards/keychron/q1/rev_0101/rev_0101.c => keyboards/keychron/q1/iso/iso.c +34 -41
@@ 14,7 14,7 @@
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include "quantum.h"
#include "iso.h"

#ifdef RGB_MATRIX_ENABLE
const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {


@@ 69,7 69,6 @@ const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
    {0, I_11,   G_11,   H_11},
    {0, I_12,   G_12,   H_12},
    {0, I_13,   G_13,   H_13},
    {0, I_14,   G_14,   H_14},
    {0, I_16,   G_16,   H_16},

    {0, L_1,    J_1,    K_1},


@@ 84,10 83,12 @@ const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
    {0, L_10,   J_10,   K_10},
    {0, L_11,   J_11,   K_11},
    {0, L_12,   J_12,   K_12},
    {0, L_14,   J_14,   K_14},
	{0, L_14,   J_14,   K_14},
	{0, I_14,   G_14,   H_14},
    {0, L_16,   J_16,   K_16},

    {1, C_1,    A_1,    B_1},
    {1, C_2,    A_2,    B_2},
    {1, C_3,    A_3,    B_3},
    {1, C_4,    A_4,    B_4},
    {1, C_5,    A_5,    B_5},


@@ 113,44 114,36 @@ const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
    {1, F_16,   D_16,   E_16}
};

#define __ NO_LED

led_config_t g_led_config = {
    {
        {   0,     NO_LED,  1,      2,      3,      4,      5,      6,      7,      8,      9,     10,     11,      12,     14   },
        {  15,     16,     17,     18,     19,     20,     21,     22,     23,     24,     25,     26,     27,      28,     29   },
        {  30,     31,     32,     33,     34,     35,     36,     37,     38,     39,     40,     41,     42,      43,     44   },
        {  45,     46,     47,     48,     49,     50,     51,     52,     53,     54,     55,     56,     71,      57,     58   },
        {  59,     NO_LED, 60,     61,     62,     63,     64,     65,     66,     67,     68,     69,     80,      70,     13   },
        {  72,     73,     74,     NO_LED, NO_LED, NO_LED, 75,     NO_LED, NO_LED, NO_LED, 76,     77,     78,      79,     81   }
    },
    {
        {0, 0},          {30, 0}, {45, 0}, {60, 0}, {75, 0}, {90, 0}, {105, 0}, {120, 0}, {135, 0}, {150, 0}, {165, 0}, {180, 0}, {195, 0}, {210, 0}, {224, 0},
        {0,13}, {15,13}, {30,13}, {45,13}, {60,13}, {75,13}, {90,13}, {105,13}, {120,13}, {135,13}, {150,13}, {165,13}, {180,13}, {195,13},           {224,13},
        {0,26}, {15,26}, {30,26}, {45,26}, {60,26}, {75,26}, {90,26}, {105,26}, {120,26}, {135,26}, {150,26}, {165,26}, {180,26}, {195,26},           {224,26},
        {0,39}, {15,39}, {30,39}, {45,39}, {60,39}, {75,39}, {90,39}, {105,39}, {120,39}, {135,39}, {150,39}, {165,39},           {195,39},           {224,39},
        {0,52},          {30,52}, {45,52}, {60,52}, {75,52}, {90,52}, {105,52}, {120,52}, {135,52}, {150,52}, {165,52},           {195,52}, {210,52},
        {0,64}, {15,64}, {30,64},                            {90,64},                               {150,64}, {165,64}, {180,64}, {195,64}, {210,64}, {224,64}
    },
    {
        4,              4,      4,      4,      4,      4,      4,      4,      4,      4,      4,      4,      4,      4,      4,
        4,      4,      4,      4,      4,      4,      4,      4,      4,      4,      4,      4,      4,      4,              4,
        4,      4,      4,      4,      4,      4,      4,      4,      4,      4,      4,      4,      4,      4,              4,
        4,      4,      4,      4,      4,      4,      4,      4,      4,      4,      4,      4,              4,              4,
        4,              4,      4,      4,      4,      4,      4,      4,      4,      4,      4,              4,      4,
        4,      4,      4,                              4,                              4,      4,      4,      4,      4,      4
    }
	{
         // Key Matrix to LED Index
		{  0, __,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 14 },
		{ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 },
		{ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 57, 43 },
		{ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 72, 56, 58 },
		{ 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 81, 71, 13 },
		{ 73, 74, 75, __, __, __, 76, __, __, __, 77, 78, 79, 80, 82 }
	},
	{
        // LED Index to Physical Position
        {0,0},           {18,0},  {33,0},  {48,0},  {62,0},  {81,0},  {95,0},   {110,0},  {125,0},  {143,0},  {158,0},  {173,0},  {187,0},  {206,0},  {224,0},
        {0,15}, {15,15}, {29,15}, {44,15}, {59,15}, {73,15}, {88,15}, {103,15}, {118,15}, {132,15}, {147,15}, {162,15}, {176,15}, {198,15},           {224,15},
        {4,26}, {22,26}, {37,26}, {51,26}, {66,26}, {81,26}, {95,26}, {110,26}, {125,26}, {140,26}, {154,26}, {169,26}, {184,26},                     {224,26},
        {6,38}, {26,38}, {40,38}, {55,38}, {70,38}, {84,38}, {99,38}, {114,38}, {129,38}, {143,38}, {158,38}, {173,38}, {187,38}, {203,32},           {224,38},
        {2,49}, {18,49}, {33,49}, {48,49}, {62,49}, {77,49}, {92,49}, {106,49}, {121,49}, {136,49}, {151,49}, {165,49},           {185,49}, {209,52},
        {2,61}, {20,61}, {39,61}, {94,61},                            {147,61},                               {162,61}, {176,61}, {195,64}, {209,64}, {224,64}
	},
	{
        // RGB LED Index to Flag
        1,    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
        1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,    1,
        1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,       1,
        1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,    1,
        1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,    1, 1,
        1, 1, 1,           4,         1, 1, 1, 1, 1, 1
	}
};
#endif

#ifdef ENCODER_ENABLE
bool encoder_update_kb(uint8_t index, bool clockwise) {
    if (!encoder_update_user(index, clockwise)) { return false; }
    if (index == 0) {
        if (clockwise) {
            tap_code(KC_VOLU);
        } else {
            tap_code(KC_VOLD);
        }
    }
    return true;
}
#endif
#endif // RGB_MATRIX_ENABLE

R keyboards/keychron/q1/rev_0102/rev_0102.h => keyboards/keychron/q1/iso/iso.h +0 -18
@@ 17,21 17,3 @@
#pragma once

#include "quantum.h"

#define xxx KC_NO

#define LAYOUT_iso_83( \
	K00,       K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K4E, K0E, \
	K10, K11,  K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D,      K1E, \
	K20, K21,  K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C,           K2E, \
	K30, K31,  K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K2D,      K3E, \
	K40, K41,  K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B,      K4D, K3C,      \
	K50, K51,  K52,                K56,                K5A, K5B, K5C, K5D, K4C, K5E  \
) { \
	{ K00, xxx,  K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B,  K0C, K0D, K0E }, \
	{ K10, K11,  K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B,  K1C, K1D, K1E }, \
	{ K20, K21,  K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B,  K2C, K2D, K2E }, \
	{ K30, K31,  K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B,  K3C, K3D, K3E }, \
	{ K40, K41,  K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B,  K4C, K4D, K4E }, \
	{ K50, K51,  K52, xxx, xxx, xxx, K56, xxx, xxx, xxx, K5A, K5B,  K5C, K5D, K5E }  \
}

R keyboards/keychron/q1/rev_0102/keymaps/default/keymap.c => keyboards/keychron/q1/iso/keymaps/default/keymap.c +15 -43
@@ 23,32 23,25 @@ enum layers{
  WIN_FN
};

enum custom_keycodes {
    KC_MISSION_CONTROL = SAFE_RANGE,
    KC_LAUNCHPAD
};

#define KC_TASK LGUI(KC_TAB)
#define KC_FLXP LGUI(KC_E)
#define KC_MCTL KC_MISSION_CONTROL
#define KC_LPAD KC_LAUNCHPAD

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [MAC_BASE] = LAYOUT_iso_83(
        KC_ESC,             KC_BRID,  KC_BRIU,  KC_MCTL,  KC_LPAD,  RGB_VAD,  RGB_VAI,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_MUTE,  KC_VOLD,  KC_VOLU,  KC_DEL,   KC_INS,
        KC_ESC,             KC_BRID,  KC_BRIU,  KC_NO,    KC_NO,    RGB_VAD,  RGB_VAI,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_MUTE,  KC_VOLD,  KC_VOLU,  KC_DEL,   KC_INS,
        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_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_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_HOME,
        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_RSFT,  KC_UP,
        KC_LCTL,  KC_LALT,  KC_LGUI,                                KC_SPC,                                 KC_RGUI, MO(MAC_FN),KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT),
        KC_LCTL,  KC_LOPT,  KC_LCMD,                                KC_SPC,                                 KC_RCMD, MO(MAC_FN),KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT),

    [MAC_FN] = LAYOUT_iso_83(
        KC_TRNS,            KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,   KC_TRNS,  KC_TRNS,
        KC_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,
        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,                      KC_TRNS,
        KC_TRNS,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,
        KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,  KC_TRNS,
        KC_TRNS,  KC_TRNS,  KC_TRNS,                                KC_TRNS,                                KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS),
        _______,            KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,   _______,  _______,
        _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,
        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  _______,  _______,  _______,  _______,  _______,  _______,  _______,                      _______,
        _______,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,
        _______,  _______,  _______,  _______,  _______,  _______,  _______,  NK_TOGG,  _______,  _______,  _______,  _______,            _______,  _______,
        _______,  _______,  _______,                                _______,                                _______,  _______,  _______,  _______,  _______,  _______),

    [WIN_BASE] = LAYOUT_iso_83(
        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_INS,


@@ 56,34 49,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        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_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_HOME,
        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_RSFT,  KC_UP,
        KC_LCTL,  KC_LGUI,  KC_LALT,                                KC_SPC,                                 KC_RALT, MO(WIN_FN),KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT),
        KC_LCTL,  KC_LWIN,  KC_LALT,                                KC_SPC,                                 KC_RALT, MO(WIN_FN),KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT),

    [WIN_FN] = LAYOUT_iso_83(
        KC_TRNS,            KC_BRID,  KC_BRIU,  KC_TASK,  KC_FLXP,  RGB_VAD,  RGB_VAI,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_MUTE,  KC_VOLD,  KC_VOLU,  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,
        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,                      KC_TRNS,
        KC_TRNS,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,
        KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,  KC_TRNS,
        KC_TRNS,  KC_TRNS,  KC_TRNS,                                KC_TRNS,                                KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS)
        _______,            KC_BRID,  KC_BRIU,  KC_TASK,  KC_FLXP,  RGB_VAD,  RGB_VAI,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_MUTE,  KC_VOLD,  KC_VOLU,  _______,  _______,
        _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,
        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  _______,  _______,  _______,  _______,  _______,  _______,  _______,                      _______,
        _______,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,
        _______,  _______,  _______,  _______,  _______,  _______,  _______,  NK_TOGG,  _______,  _______,  _______,  _______,            _______,  _______,
        _______,  _______,  _______,                                _______,                                _______,  _______,  _______,  _______,  _______,  _______)
    };

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
        case KC_MISSION_CONTROL:
            if (record->event.pressed) {
                host_consumer_send(0x29F);
            } else {
                host_consumer_send(0);
            }
            return false;  // Skip all further processing of this key
        case KC_LAUNCHPAD:
            if (record->event.pressed) {
                host_consumer_send(0x2A0);
            } else {
                host_consumer_send(0);
            }
            return false;  // Skip all further processing of this key
        default:
            return true;  // Process all other keycodes normally
    }
}

A keyboards/keychron/q1/iso/keymaps/keychron/keymap.c => keyboards/keychron/q1/iso/keymaps/keychron/keymap.c +67 -0
@@ 0,0 1,67 @@
/* Copyright 2021 @ Keychron (https://www.keychron.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 "keychron_common.h"

enum layers{
  MAC_BASE,
  MAC_FN,
  WIN_BASE,
  WIN_FN
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [MAC_BASE] = LAYOUT_iso_83(
        KC_ESC,             KC_BRID,  KC_BRIU,  KC_NO,    KC_NO,    RGB_VAD,  RGB_VAI,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_MUTE,  KC_VOLD,  KC_VOLU,  KC_DEL,   KC_INS,
        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_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_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_HOME,
        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_RSFT,  KC_UP,
        KC_LCTL,  KC_LOPTN, KC_LCMMD,                               KC_SPC,                                 KC_RCMMD,MO(MAC_FN),KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT),

    [MAC_FN] = LAYOUT_iso_83(
        _______,            KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,   _______,  _______,
        _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,
        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  _______,  _______,  _______,  _______,  _______,  _______,  _______,                      _______,
        _______,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,
        _______,  _______,  _______,  _______,  _______,  _______,  _______,  NK_TOGG,  _______,  _______,  _______,  _______,            _______,  _______,
        _______,  _______,  _______,                                _______,                                _______,  _______,  _______,  _______,  _______,  _______),

    [WIN_BASE] = LAYOUT_iso_83(
        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_INS,
        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_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_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_HOME,
        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_RSFT,  KC_UP,
        KC_LCTL,  KC_LWIN,  KC_LALT,                                KC_SPC,                                 KC_RALT, MO(WIN_FN),KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT),

    [WIN_FN] = LAYOUT_iso_83(
        _______,            KC_BRID,  KC_BRIU,  KC_TASK,  KC_FLXP,  RGB_VAD,  RGB_VAI,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_MUTE,  KC_VOLD,  KC_VOLU,  _______,  _______,
        _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,
        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  _______,  _______,  _______,  _______,  _______,  _______,  _______,                      _______,
        _______,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,
        _______,  _______,  _______,  _______,  _______,  _______,  _______,  NK_TOGG,  _______,  _______,  _______,  _______,            _______,  _______,
        _______,  _______,  _______,                                _______,                                _______,  _______,  _______,  _______,  _______,  _______)
};

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    if (!process_record_keychron(keycode, record)) {
        return false;
    }

    return true;
}

A keyboards/keychron/q1/iso/keymaps/keychron/rules.mk => keyboards/keychron/q1/iso/keymaps/keychron/rules.mk +4 -0
@@ 0,0 1,4 @@
VIA_ENABLE = yes

VPATH += keyboards/keychron/common
SRC += keychron_common.c

R keyboards/keychron/q1/rev_0102/keymaps/kubahorak/README.md => keyboards/keychron/q1/iso/keymaps/kubahorak/README.md +0 -0
R keyboards/keychron/q1/rev_0102/keymaps/kubahorak/config.h => keyboards/keychron/q1/iso/keymaps/kubahorak/config.h +0 -0
R keyboards/keychron/q1/rev_0102/keymaps/kubahorak/keymap.c => keyboards/keychron/q1/iso/keymaps/kubahorak/keymap.c +0 -0
R keyboards/keychron/q1/rev_0102/keymaps/kubahorak/keymap_user.h => keyboards/keychron/q1/iso/keymaps/kubahorak/keymap_user.h +0 -0
R keyboards/keychron/q1/rev_0102/keymaps/kubahorak/rgb_matrix_user.c => keyboards/keychron/q1/iso/keymaps/kubahorak/rgb_matrix_user.c +0 -0
R keyboards/keychron/q1/rev_0102/keymaps/kubahorak/rgb_matrix_user.h => keyboards/keychron/q1/iso/keymaps/kubahorak/rgb_matrix_user.h +0 -0
R keyboards/keychron/q1/rev_0102/keymaps/kubahorak/rules.mk => keyboards/keychron/q1/iso/keymaps/kubahorak/rules.mk +0 -0
R keyboards/keychron/q1/rev_0102/keymaps/mkillewald_iso/config.h => keyboards/keychron/q1/iso/keymaps/mkillewald_iso/config.h +0 -0
R keyboards/keychron/q1/rev_0102/keymaps/mkillewald_iso/keymap.c => keyboards/keychron/q1/iso/keymaps/mkillewald_iso/keymap.c +0 -0
R keyboards/keychron/q1/rev_0102/keymaps/mkillewald_iso/keymap_user.h => keyboards/keychron/q1/iso/keymaps/mkillewald_iso/keymap_user.h +0 -0
R keyboards/keychron/q1/rev_0102/keymaps/mkillewald_iso/readme.md => keyboards/keychron/q1/iso/keymaps/mkillewald_iso/readme.md +0 -0
R keyboards/keychron/q1/rev_0102/keymaps/mkillewald_iso/rgb_matrix_user.c => keyboards/keychron/q1/iso/keymaps/mkillewald_iso/rgb_matrix_user.c +0 -0
R keyboards/keychron/q1/rev_0102/keymaps/mkillewald_iso/rgb_matrix_user.h => keyboards/keychron/q1/iso/keymaps/mkillewald_iso/rgb_matrix_user.h +0 -0
R keyboards/keychron/q1/rev_0102/keymaps/mkillewald_iso/rules.mk => keyboards/keychron/q1/iso/keymaps/mkillewald_iso/rules.mk +0 -0
A keyboards/keychron/q1/iso/keymaps/via/keymap.c => keyboards/keychron/q1/iso/keymaps/via/keymap.c +61 -0
@@ 0,0 1,61 @@
/* Copyright 2021 @ Keychron (https://www.keychron.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

enum layers{
  MAC_BASE,
  MAC_FN,
  WIN_BASE,
  WIN_FN
};

#define KC_TASK LGUI(KC_TAB)
#define KC_FLXP LGUI(KC_E)

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [MAC_BASE] = LAYOUT_iso_83(
        KC_ESC,             KC_BRID,  KC_BRIU,  KC_NO,    KC_NO,    RGB_VAD,  RGB_VAI,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_MUTE,  KC_VOLD,  KC_VOLU,  KC_DEL,   KC_INS,
        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_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_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_HOME,
        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_RSFT,  KC_UP,
        KC_LCTL,  KC_LOPT,  KC_LCMD,                                KC_SPC,                                 KC_RCMD, MO(MAC_FN),KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT),

    [MAC_FN] = LAYOUT_iso_83(
        _______,            KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,   _______,  _______,
        _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,
        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  _______,  _______,  _______,  _______,  _______,  _______,  _______,                      _______,
        _______,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,
        _______,  _______,  _______,  _______,  _______,  _______,  _______,  NK_TOGG,  _______,  _______,  _______,  _______,            _______,  _______,
        _______,  _______,  _______,                                _______,                                _______,  _______,  _______,  _______,  _______,  _______),

    [WIN_BASE] = LAYOUT_iso_83(
        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_INS,
        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_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_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_HOME,
        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_RSFT,  KC_UP,
        KC_LCTL,  KC_LWIN,  KC_LALT,                                KC_SPC,                                 KC_RALT, MO(WIN_FN),KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT),

    [WIN_FN] = LAYOUT_iso_83(
        _______,            KC_BRID,  KC_BRIU,  KC_TASK,  KC_FLXP,  RGB_VAD,  RGB_VAI,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_MUTE,  KC_VOLD,  KC_VOLU,  _______,  _______,
        _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,
        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  _______,  _______,  _______,  _______,  _______,  _______,  _______,                      _______,
        _______,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,
        _______,  _______,  _______,  _______,  _______,  _______,  _______,  NK_TOGG,  _______,  _______,  _______,  _______,            _______,  _______,
        _______,  _______,  _______,                                _______,                                _______,  _______,  _______,  _______,  _______,  _______)
};

R keyboards/keychron/q1/rev_0102/keymaps/via/rules.mk => keyboards/keychron/q1/iso/keymaps/via/rules.mk +0 -1
@@ 1,2 1,1 @@
VIA_ENABLE = yes
MOUSEKEY_ENABLE = no
\ No newline at end of file

R keyboards/keychron/q1/rev_0102/keymaps/victorsavu3/config.h => keyboards/keychron/q1/iso/keymaps/victorsavu3/config.h +0 -0
R keyboards/keychron/q1/rev_0102/keymaps/victorsavu3/keymap.c => keyboards/keychron/q1/iso/keymaps/victorsavu3/keymap.c +0 -0
R keyboards/keychron/q1/rev_0102/keymaps/victorsavu3/readme.md => keyboards/keychron/q1/iso/keymaps/victorsavu3/readme.md +0 -0
R keyboards/keychron/q1/rev_0102/keymaps/victorsavu3/rules.mk => keyboards/keychron/q1/iso/keymaps/victorsavu3/rules.mk +0 -0
R keyboards/keychron/q1/rev_0102/readme.md => keyboards/keychron/q1/iso/readme.md +0 -0
R keyboards/keychron/q1/rev_0102/rules.mk => keyboards/keychron/q1/iso/rules.mk +2 -1
@@ 18,4 18,5 @@ RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
AUDIO_ENABLE = no           # Audio output
DIP_SWITCH_ENABLE = yes
RGB_MATRIX_ENABLE = yes
RGB_MATRIX_DRIVER = IS31FL3733
\ No newline at end of file
RGB_MATRIX_DRIVER = IS31FL3733
LTO_ENABLE = yes

M keyboards/keychron/q1/q1.c => keyboards/keychron/q1/q1.c +4 -1
@@ 16,7 16,6 @@

#include "q1.h"


const matrix_row_t matrix_mask[] = {
    0b0111111111111101,
    0b0111111111111111,


@@ 26,6 25,8 @@ const matrix_row_t matrix_mask[] = {
    0b0111111111111111,
};

#ifdef DIP_SWITCH_ENABLE

bool dip_switch_update_kb(uint8_t index, bool active) {
    if (!dip_switch_update_user(index, active)) { return false;}
    if (index == 0) {


@@ 33,3 34,5 @@ bool dip_switch_update_kb(uint8_t index, bool active) {
    }
    return true;
}

#endif // DIP_SWITCH_ENABLE

M keyboards/keychron/q1/q1.h => keyboards/keychron/q1/q1.h +6 -6
@@ 18,12 18,12 @@

#include "quantum.h"

#if   defined(KEYBOARD_keychron_q1_rev_0100)
#    include "rev_0100.h"
#elif defined(KEYBOARD_keychron_q1_rev_0101)
#    include "rev_0101.h"
#elif defined(KEYBOARD_keychron_q1_rev_0102)
#    include "rev_0102.h"
#if   defined(KEYBOARD_keychron_q1_ansi)
#    include "ansi.h"
#elif defined(KEYBOARD_keychron_q1_ansi_encoder)
#    include "ansi_encoder.h"
#elif defined(KEYBOARD_keychron_q1_iso)
#    include "iso.h"
#elif defined(KEYBOARD_keychron_q1_iso_encoder)
#    include "iso_encoder.h"
#endif

M keyboards/keychron/q1/readme.md => keyboards/keychron/q1/readme.md +2 -2
@@ 10,11 10,11 @@ A customizable 75% keyboard.

Make example for this keyboard (after setting up your build environment):

    make keychron/q1/rev_0100:default
  make keychron/q1/ansi:default

Flashing example for this keyboard:

    make keychron/q1/rev_0100:default:flash
  make keychron/q1/ansi:default:flash

**Reset Key**: Hold down the key located at *K00*, commonly programmed as *Esc* while plugging in the keyboard.


D keyboards/keychron/q1/rev_0100/info.json => keyboards/keychron/q1/rev_0100/info.json +0 -97
@@ 1,97 0,0 @@
{
    "keyboard_name": "Q1", 
    "manufacturer": "Keychron",
    "url": "https://github.com/Keychron", 
    "maintainer": "lalalademaxiya1", 
    "usb": {
    	"vid": "0x3434",
    	"pid": "0x0100",
    	"device_version": "1.0.0"
    },
    "layouts": {
        "LAYOUT_ansi_82": {
            "layout": [{"label":"Esc", "x":0, "y":0}, 
	    {"label":"F1", "x":1.25, "y":0}, 
	    {"label":"F2", "x":2.25, "y":0}, 
	    {"label":"F3", "x":3.25, "y":0},
	    {"label":"F4", "x":4.25, "y":0},
	    {"label":"F5", "x":5.5, "y":0}, 
	    {"label":"F6", "x":6.5, "y":0},
	    {"label":"F7", "x":7.5, "y":0},
	    {"label":"F8", "x":8.5, "y":0},
	    {"label":"F9", "x":9.75, "y":0},
	    {"label":"F10", "x":10.75, "y":0}, 
	    {"label":"F11", "x":11.75, "y":0}, 
	    {"label":"F12", "x":12.75, "y":0}, 
	    {"label":"Delete", "x":14, "y":0}, 
	    {"label":"Insert", "x":15.25, "y":0}, 
	    {"label":"~", "x":0, "y":1},
	    {"label":"!", "x":1, "y":1}, 
	    {"label":"@", "x":2, "y":1}, 
	    {"label":"#", "x":3, "y":1}, 
	    {"label":"$", "x":4, "y":1}, 
	    {"label":"%", "x":5, "y":1}, 
	    {"label":"^", "x":6, "y":1}, 
	    {"label":"&", "x":7, "y":1}, 
	    {"label":"*", "x":8, "y":1},
	    {"label":"(", "x":9, "y":1}, 
	    {"label":")", "x":10, "y":1},
	    {"label":"_", "x":11, "y":1}, 
	    {"label":"+", "x":12, "y":1}, 
	    {"label":"Backspace", "x":13, "y":1, "w":2}, 
	    {"label":"Page Up", "x":15.25, "y":1}, 
	    {"label":"Tab", "x":0, "y":2, "w":1.5},
	    {"label":"Q", "x":1.5, "y":2},
	    {"label":"W", "x":2.5, "y":2}, 
	    {"label":"E", "x":3.5, "y":2}, 
	    {"label":"R", "x":4.5, "y":2}, 
	    {"label":"T", "x":5.5, "y":2}, 
	    {"label":"Y", "x":6.5, "y":2}, 
	    {"label":"U", "x":7.5, "y":2}, 
	    {"label":"I", "x":8.5, "y":2}, 
	    {"label":"O", "x":9.5, "y":2}, 
	    {"label":"P", "x":10.5, "y":2}, 
	    {"label":"{", "x":11.5, "y":2}, 
	    {"label":"}", "x":12.5, "y":2},
	    {"label":"|", "x":13.5, "y":2, "w":1.5}, 
	    {"label":"Page Down", "x":15.25, "y":2}, 
	    {"label":"Caps Lock", "x":0, "y":3, "w":1.75}, 
	    {"label":"A", "x":1.75, "y":3}, 
	    {"label":"S", "x":2.75, "y":3},
	    {"label":"D", "x":3.75, "y":3}, 
	    {"label":"F", "x":4.75, "y":3}, 
	    {"label":"G", "x":5.75, "y":3}, 
	    {"label":"H", "x":6.75, "y":3}, 
	    {"label":"J", "x":7.75, "y":3}, 
	    {"label":"K", "x":8.75, "y":3}, 
	    {"label":"L", "x":9.75, "y":3}, 
	    {"label":":", "x":10.75, "y":3},
	    {"label":"\"", "x":11.75, "y":3}, 
	    {"label":"Enter", "x":12.75, "y":3, "w":2.25}, 
	    {"label":"Home", "x":15.25, "y":3}, 
	    {"label":"Shift", "x":0, "y":4, "w":2.25}, 
	    {"label":"Z", "x":2.25, "y":4}, 
	    {"label":"X", "x":3.25, "y":4}, 
	    {"label":"C", "x":4.25, "y":4}, 
	    {"label":"V", "x":5.25, "y":4}, 
	    {"label":"B", "x":6.25, "y":4}, 
	    {"label":"N", "x":7.25, "y":4}, 
	    {"label":"M", "x":8.25, "y":4},
	    {"label":"<", "x":9.25, "y":4}, 
	    {"label":">", "x":10.25, "y":4}, 
	    {"label":"?", "x":11.25, "y":4}, 
	    {"label":"Shift", "x":12.25, "y":4, "w":1.75},
	    {"label":"\u2191", "x":14.25, "y":4.25}, 
	    {"label":"Ctrl", "x":0, "y":5, "w":1.25}, 
	    {"label":"Win", "x":1.25, "y":5, "w":1.25},
	    {"label":"Alt", "x":2.5, "y":5, "w":1.25}, 
	    {"x":3.75, "y":5, "w":6.25}, 
	    {"label":"Alt", "x":10, "y":5}, 
	    {"label":"Fn", "x":11, "y":5}, 
	    {"label":"Ctrl", "x":12, "y":5}, 
	    {"label":"\u2190", "x":13.25, "y":5.25}, 
	    {"label":"\u2193", "x":14.25, "y":5.25}, 
	    {"label":"\u2192", "x":15.25, "y":5.25}]
        }
    }
}

D keyboards/keychron/q1/rev_0100/keymaps/via/keymap.c => keyboards/keychron/q1/rev_0100/keymaps/via/keymap.c +0 -107
@@ 1,107 0,0 @@
/* Copyright 2021 @ Keychron (https://www.keychron.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

enum layers{
  MAC_BASE,
  MAC_FN,
  WIN_BASE,
  WIN_FN
};

enum custom_keycodes {
    KC_MISSION_CONTROL = USER00,
    KC_LAUNCHPAD,
    KC_TASK,
    KC_FLXP
};

#define KC_MCTL KC_MISSION_CONTROL
#define KC_LPAD KC_LAUNCHPAD

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [MAC_BASE] = LAYOUT_ansi_82(
        KC_ESC,             KC_BRID,  KC_BRIU,  KC_MCTL,  KC_LPAD,  RGB_VAD,  RGB_VAI,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_MUTE,  KC_VOLD,  KC_VOLU,  KC_DEL,   KC_INS,
        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_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_ENT,             KC_HOME,
        KC_LSFT,            KC_Z,     KC_X,     KC_C,     KC_V,     KC_B,     KC_N,     KC_M,     KC_COMM,  KC_DOT,   KC_SLSH,            KC_RSFT,  KC_UP,
        KC_LCTL,  KC_LALT,  KC_LGUI,                                KC_SPC,                                 KC_RGUI, MO(MAC_FN),KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT),

    [MAC_FN] = LAYOUT_ansi_82(
        KC_TRNS,            KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,   KC_TRNS,  KC_TRNS,
        KC_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,
        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,
        KC_TRNS,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,            KC_TRNS,
        KC_TRNS,            KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,  KC_TRNS,
        KC_TRNS,  KC_TRNS,  KC_TRNS,                                KC_TRNS,                                KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS),

    [WIN_BASE] = LAYOUT_ansi_82(
        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_INS,
        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_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_ENT,             KC_HOME,
        KC_LSFT,            KC_Z,     KC_X,     KC_C,     KC_V,     KC_B,     KC_N,     KC_M,     KC_COMM,  KC_DOT,   KC_SLSH,            KC_RSFT,  KC_UP,
        KC_LCTL,  KC_LGUI,  KC_LALT,                                KC_SPC,                                 KC_RALT, MO(WIN_FN),KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT),

    [WIN_FN] = LAYOUT_ansi_82(
        KC_TRNS,            KC_BRID,  KC_BRIU,  KC_TASK,  KC_FLXP,  RGB_VAD,  RGB_VAI,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_MUTE,  KC_VOLD,  KC_VOLU,  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,
        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,
        KC_TRNS,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,            KC_TRNS,
        KC_TRNS,            KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,  KC_TRNS,
        KC_TRNS,  KC_TRNS,  KC_TRNS,                                KC_TRNS,                                KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS)
};

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
        case KC_MISSION_CONTROL:
            if (record->event.pressed) {
                host_consumer_send(0x29F);
            } else {
                host_consumer_send(0);
            }
            return false;  // Skip all further processing of this key
        case KC_LAUNCHPAD:
            if (record->event.pressed) {
                host_consumer_send(0x2A0);
            } else {
                host_consumer_send(0);
            }
            return false;  // Skip all further processing of this key
        case KC_TASK:
            if (record->event.pressed) {
                register_code(KC_LWIN);
                register_code(KC_TAB);
            } else {
                unregister_code(KC_LWIN);
                unregister_code(KC_TAB);
            }
            return false;  // Skip all further processing of this key
        case KC_FLXP:
            if (record->event.pressed) {
                register_code(KC_LWIN);
                register_code(KC_E);
            } else {
                unregister_code(KC_LWIN);
                unregister_code(KC_E);
            }
            return false;  // Skip all further processing of this key
        default:
            return true;  // Process all other keycodes normally
    }
}

D keyboards/keychron/q1/rev_0101/info.json => keyboards/keychron/q1/rev_0101/info.json +0 -197
@@ 1,197 0,0 @@
{
    "keyboard_name": "Q1",
    "manufacturer": "Keychron",
    "url": "https://github.com/Keychron",
    "maintainer": "lalalademaxiya1",
    "usb": {
        "vid": "0x3434",
        "pid": "0x0101",
        "device_version": "1.0.0"
    },
    "layouts": {
        "LAYOUT_ansi_82": {
            "layout": [
                {"label":"Esc", "x":0, "y":0},
                {"label":"F1", "x":1.25, "y":0},
                {"label":"F2", "x":2.25, "y":0},
                {"label":"F3", "x":3.25, "y":0},
                {"label":"F4", "x":4.25, "y":0},
                {"label":"F5", "x":5.5, "y":0},
                {"label":"F6", "x":6.5, "y":0},
                {"label":"F7", "x":7.5, "y":0},
                {"label":"F8", "x":8.5, "y":0},
                {"label":"F9", "x":9.75, "y":0},
                {"label":"F10", "x":10.75, "y":0},
                {"label":"F11", "x":11.75, "y":0},
                {"label":"F12", "x":12.75, "y":0},
                {"label":"Delete", "x":14, "y":0},
                {"label":"Mute", "x":15.25, "y":0},

                {"label":"`~", "x":0, "y":1.25},
                {"label":"1!", "x":1, "y":1.25},
                {"label":"2@", "x":2, "y":1.25},
                {"label":"3#", "x":3, "y":1.25},
                {"label":"4$", "x":4, "y":1.25},
                {"label":"5%", "x":5, "y":1.25},
                {"label":"6^", "x":6, "y":1.25},
                {"label":"7&", "x":7, "y":1.25},
                {"label":"8*", "x":8, "y":1.25},
                {"label":"9(", "x":9, "y":1.25},
                {"label":"0)", "x":10, "y":1.25},
                {"label":"-_", "x":11, "y":1.25},
                {"label":"=+", "x":12, "y":1.25},
                {"label":"Backspace", "x":13, "y":1.25, "w":2},
                {"label":"Page Up", "x":15.25, "y":1.25},

                {"label":"Tab", "x":0, "y":2.25, "w":1.5},
                {"label":"Q", "x":1.5, "y":2.25},
                {"label":"W", "x":2.5, "y":2.25},
                {"label":"E", "x":3.5, "y":2.25},
                {"label":"R", "x":4.5, "y":2.25},
                {"label":"T", "x":5.5, "y":2.25},
                {"label":"Y", "x":6.5, "y":2.25},
                {"label":"U", "x":7.5, "y":2.25},
                {"label":"I", "x":8.5, "y":2.25},
                {"label":"O", "x":9.5, "y":2.25},
                {"label":"P", "x":10.5, "y":2.25},
                {"label":"[{", "x":11.5, "y":2.25},
                {"label":"]}", "x":12.5, "y":2.25},
                {"label":"\\|", "x":13.5, "y":2.25, "w":1.5},
                {"label":"Page Down", "x":15.25, "y":2.25},

                {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75},
                {"label":"A", "x":1.75, "y":3.25},
                {"label":"S", "x":2.75, "y":3.25},
                {"label":"D", "x":3.75, "y":3.25},
                {"label":"F", "x":4.75, "y":3.25},
                {"label":"G", "x":5.75, "y":3.25},
                {"label":"H", "x":6.75, "y":3.25},
                {"label":"J", "x":7.75, "y":3.25},
                {"label":"K", "x":8.75, "y":3.25},
                {"label":"L", "x":9.75, "y":3.25},
                {"label":";:", "x":10.75, "y":3.25},
                {"label":"'\"", "x":11.75, "y":3.25},
                {"label":"Enter", "x":12.75, "y":3.25, "w":2.25},
                {"label":"Home", "x":15.25, "y":3.25},

                {"label":"Shift", "x":0, "y":4.25, "w":2.25},
                {"label":"Z", "x":2.25, "y":4.25},
                {"label":"X", "x":3.25, "y":4.25},
                {"label":"C", "x":4.25, "y":4.25},
                {"label":"V", "x":5.25, "y":4.25},
                {"label":"B", "x":6.25, "y":4.25},
                {"label":"N", "x":7.25, "y":4.25},
                {"label":"M", "x":8.25, "y":4.25},
                {"label":",<", "x":9.25, "y":4.25},
                {"label":".>", "x":10.25, "y":4.25},
                {"label":"/?", "x":11.25, "y":4.25},
                {"label":"Shift", "x":12.25, "y":4.25, "w":1.75},
                {"label":"Up", "x":14.25, "y":4.5},

                {"label":"Ctrl", "x":0, "y":5.25, "w":1.25},
                {"label":"Win", "x":1.25, "y":5.25, "w":1.25},
                {"label":"Alt", "x":2.5, "y":5.25, "w":1.25},
                {"label":"Space", "x":3.75, "y":5.25, "w":6.25},
                {"label":"Alt", "x":10, "y":5.25},
                {"label":"Fn", "x":11, "y":5.25},
                {"label":"Ctrl", "x":12, "y":5.25},
                {"label":"Left", "x":13.25, "y":5.5},
                {"label":"Down", "x":14.25, "y":5.5},
                {"label":"Right", "x":15.25, "y":5.5}
            ]
        },
        "LAYOUT_all": {
            "layout": [
                {"label":"Esc", "x":0, "y":0.5},
                {"label":"F1", "x":1.25, "y":0.5},
                {"label":"F2", "x":2.25, "y":0.5},
                {"label":"F3", "x":3.25, "y":0.5},
                {"label":"F4", "x":4.25, "y":0.5},
                {"label":"F5", "x":5.5, "y":0.5},
                {"label":"F6", "x":6.5, "y":0.5},
                {"label":"F7", "x":7.5, "y":0.5},
                {"label":"F8", "x":8.5, "y":0.5},
                {"label":"F9", "x":9.75, "y":0.5},
                {"label":"F10", "x":10.75, "y":0.5},
                {"label":"F11", "x":11.75, "y":0.5},
                {"label":"F12", "x":12.75, "y":0.5},
                {"label":"Delete", "x":14, "y":0.5},
                {"label":"CCW", "x":15.15, "y":0, "w":0.6, "h":0.5},
                {"label":"Mute", "x":15.25, "y":0.5},
                {"label":"CW", "x":15.75, "y":0, "w":0.6, "h":0.5},

                {"label":"`~", "x":0, "y":1.75},
                {"label":"1!", "x":1, "y":1.75},
                {"label":"2@", "x":2, "y":1.75},
                {"label":"3#", "x":3, "y":1.75},
                {"label":"4$", "x":4, "y":1.75},
                {"label":"5%", "x":5, "y":1.75},
                {"label":"6^", "x":6, "y":1.75},
                {"label":"7&", "x":7, "y":1.75},
                {"label":"8*", "x":8, "y":1.75},
                {"label":"9(", "x":9, "y":1.75},
                {"label":"0)", "x":10, "y":1.75},
                {"label":"-_", "x":11, "y":1.75},
                {"label":"=+", "x":12, "y":1.75},
                {"label":"Backspace", "x":13, "y":1.75, "w":2},
                {"label":"Page Up", "x":15.25, "y":1.75},

                {"label":"Tab", "x":0, "y":2.75, "w":1.5},
                {"label":"Q", "x":1.5, "y":2.75},
                {"label":"W", "x":2.5, "y":2.75},
                {"label":"E", "x":3.5, "y":2.75},
                {"label":"R", "x":4.5, "y":2.75},
                {"label":"T", "x":5.5, "y":2.75},
                {"label":"Y", "x":6.5, "y":2.75},
                {"label":"U", "x":7.5, "y":2.75},
                {"label":"I", "x":8.5, "y":2.75},
                {"label":"O", "x":9.5, "y":2.75},
                {"label":"P", "x":10.5, "y":2.75},
                {"label":"[{", "x":11.5, "y":2.75},
                {"label":"]}", "x":12.5, "y":2.75},
                {"label":"\\|", "x":13.5, "y":2.75, "w":1.5},
                {"label":"Page Down", "x":15.25, "y":2.75},

                {"label":"Caps Lock", "x":0, "y":3.75, "w":1.75},
                {"label":"A", "x":1.75, "y":3.75},
                {"label":"S", "x":2.75, "y":3.75},
                {"label":"D", "x":3.75, "y":3.75},
                {"label":"F", "x":4.75, "y":3.75},
                {"label":"G", "x":5.75, "y":3.75},
                {"label":"H", "x":6.75, "y":3.75},
                {"label":"J", "x":7.75, "y":3.75},
                {"label":"K", "x":8.75, "y":3.75},
                {"label":"L", "x":9.75, "y":3.75},
                {"label":";:", "x":10.75, "y":3.75},
                {"label":"'\"", "x":11.75, "y":3.75},
                {"label":"Enter", "x":12.75, "y":3.75, "w":2.25},
                {"label":"Home", "x":15.25, "y":3.75},

                {"label":"Shift", "x":0, "y":4.75, "w":2.25},
                {"label":"Z", "x":2.25, "y":4.75},
                {"label":"X", "x":3.25, "y":4.75},
                {"label":"C", "x":4.25, "y":4.75},
                {"label":"V", "x":5.25, "y":4.75},
                {"label":"B", "x":6.25, "y":4.75},
                {"label":"N", "x":7.25, "y":4.75},
                {"label":"M", "x":8.25, "y":4.75},
                {"label":",<", "x":9.25, "y":4.75},
                {"label":".>", "x":10.25, "y":4.75},
                {"label":"/?", "x":11.25, "y":4.75},
                {"label":"Shift", "x":12.25, "y":4.75, "w":1.75},
                {"label":"Up", "x":14.25, "y":5},

                {"label":"Ctrl", "x":0, "y":5.75, "w":1.25},
                {"label":"Win", "x":1.25, "y":5.75, "w":1.25},
                {"label":"Alt", "x":2.5, "y":5.75, "w":1.25},
                {"label":"Space", "x":3.75, "y":5.75, "w":6.25},
                {"label":"Alt", "x":10, "y":5.75},
                {"label":"Fn", "x":11, "y":5.75},
                {"label":"Ctrl", "x":12, "y":5.75},
                {"label":"Left", "x":13.25, "y":6},
                {"label":"Down", "x":14.25, "y":6},
                {"label":"Right", "x":15.25, "y":6}
            ]
        }
    }
}

D keyboards/keychron/q1/rev_0101/rev_0101.h => keyboards/keychron/q1/rev_0101/rev_0101.h +0 -52
@@ 1,52 0,0 @@
/* Copyright 2021 @ Keychron (https://www.keychron.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

#include "quantum.h"

#define xxx KC_NO

#define LAYOUT_all( \
        K00,       K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K4E,   K57, K0E, K58, \
        K10, K11,  K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D,      K1E, \
        K20, K21,  K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D,      K2E, \
        K30, K31,  K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B,      K3D,      K3E, \
        K40,       K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B,      K4D, K3C,      \
        K50, K51,  K52,                K56,                K5A, K5B, K5C, K5D, K4C, K5E  \
    ) { \
        { K00, xxx,  K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B,  K0C, K0D, K0E }, \
        { K10, K11,  K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B,  K1C, K1D, K1E }, \
        { K20, K21,  K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B,  K2C, K2D, K2E }, \
        { K30, K31,  K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B,  K3C, K3D, K3E }, \
        { K40, xxx,  K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B,  K4C, K4D, K4E }, \
        { K50, K51,  K52, xxx, xxx, xxx, K56, K57, K58, xxx, K5A, K5B,  K5C, K5D, K5E }  \
    }
#define LAYOUT_ansi_82( \
        K00,       K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K4E, K0E, \
        K10, K11,  K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D,      K1E, \
        K20, K21,  K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D,      K2E, \
        K30, K31,  K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B,      K3D,      K3E, \
        K40,       K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B,      K4D, K3C,      \
        K50, K51,  K52,                K56,                K5A, K5B, K5C, K5D, K4C, K5E  \
    ) { \
        { K00, xxx,  K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B,  K0C, K0D, K0E }, \
        { K10, K11,  K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B,  K1C, K1D, K1E }, \
        { K20, K21,  K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B,  K2C, K2D, K2E }, \
        { K30, K31,  K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B,  K3C, K3D, K3E }, \
        { K40, xxx,  K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B,  K4C, K4D, K4E }, \
        { K50, K51,  K52, xxx, xxx, xxx, K56, xxx, xxx, xxx, K5A, K5B,  K5C, K5D, K5E }  \
    }

D keyboards/keychron/q1/rev_0102/info.json => keyboards/keychron/q1/rev_0102/info.json +0 -105
@@ 1,105 0,0 @@
{
    "keyboard_name": "Q1", 
    "manufacturer": "Keychron",
    "url": "https://github.com/Keychron", 
    "maintainer": "lalalademaxiya1", 
    "usb": {
        "vid": "0x3434",
        "pid": "0x0102",
        "device_version": "1.0.0"
    },
    "layouts": {
        "LAYOUT_iso_83": {
            "layout": [
                {"label":"Esc", "x":0, "y":0},
                {"label":"F1", "x":1.25, "y":0},
                {"label":"F2", "x":2.25, "y":0},
                {"label":"F3", "x":3.25, "y":0},
                {"label":"F4", "x":4.25, "y":0},
                {"label":"F5", "x":5.5, "y":0},
                {"label":"F6", "x":6.5, "y":0},
                {"label":"F7", "x":7.5, "y":0},
                {"label":"F8", "x":8.5, "y":0},
                {"label":"F9", "x":9.75, "y":0},
                {"label":"F10", "x":10.75, "y":0},
                {"label":"F11", "x":11.75, "y":0},
                {"label":"F12", "x":12.75, "y":0},
                {"label":"Delete", "x":14, "y":0},
                {"label":"Insert", "x":15.25, "y":0},

                {"label":"~", "x":0, "y":1.25},
                {"label":"!", "x":1, "y":1.25},
                {"label":"@", "x":2, "y":1.25},
                {"label":"#", "x":3, "y":1.25},
                {"label":"$", "x":4, "y":1.25},
                {"label":"%", "x":5, "y":1.25},
                {"label":"^", "x":6, "y":1.25},
                {"label":"&", "x":7, "y":1.25},
                {"label":"*", "x":8, "y":1.25},
                {"label":"(", "x":9, "y":1.25},
                {"label":")", "x":10, "y":1.25},
                {"label":"_", "x":11, "y":1.25},
                {"label":"+", "x":12, "y":1.25},
                {"label":"Backspace", "x":13, "y":1.25, "w":2},
                {"label":"Page Up", "x":15.25, "y":1.25},

                {"label":"Tab", "x":0, "y":2.25, "w":1.5},
                {"label":"Q", "x":1.5, "y":2.25},
                {"label":"W", "x":2.5, "y":2.25},
                {"label":"E", "x":3.5, "y":2.25},
                {"label":"R", "x":4.5, "y":2.25},
                {"label":"T", "x":5.5, "y":2.25},
                {"label":"Y", "x":6.5, "y":2.25},
                {"label":"U", "x":7.5, "y":2.25},
                {"label":"I", "x":8.5, "y":2.25},
                {"label":"O", "x":9.5, "y":2.25},
                {"label":"P", "x":10.5, "y":2.25},
                {"label":"{", "x":11.5, "y":2.25},
                {"label":"}", "x":12.5, "y":2.25},
                {"label":"Page Down", "x":15.25, "y":2.25},

                {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75},
                {"label":"A", "x":1.75, "y":3.25},
                {"label":"S", "x":2.75, "y":3.25},
                {"label":"D", "x":3.75, "y":3.25},
                {"label":"F", "x":4.75, "y":3.25},
                {"label":"G", "x":5.75, "y":3.25},
                {"label":"H", "x":6.75, "y":3.25},
                {"label":"J", "x":7.75, "y":3.25},
                {"label":"K", "x":8.75, "y":3.25},
                {"label":"L", "x":9.75, "y":3.25},
                {"label":":", "x":10.75, "y":3.25},
                {"label":"\"", "x":11.75, "y":3.25},
                {"label":"#~", "x":12.75, "y":3.25},
                {"label":"Enter", "x":13.75, "y":2.25, "w":1.25, "h":2},
                {"label":"Home", "x":15.25, "y":3.25},

                {"label":"Shift", "x":0, "y":4.25, "w":1.25},
                {"label":"\\|", "x":1.25, "y":4.25},
                {"label":"Z", "x":2.25, "y":4.25},
                {"label":"X", "x":3.25, "y":4.25},
                {"label":"C", "x":4.25, "y":4.25},
                {"label":"V", "x":5.25, "y":4.25},
                {"label":"B", "x":6.25, "y":4.25},
                {"label":"N", "x":7.25, "y":4.25},
                {"label":"M", "x":8.25, "y":4.25},
                {"label":"<", "x":9.25, "y":4.25},
                {"label":">", "x":10.25, "y":4.25},
                {"label":"?", "x":11.25, "y":4.25},
                {"label":"Shift", "x":12.25, "y":4.25, "w":1.75},
                {"label":"\u2191", "x":14.25, "y":4.5},

                {"label":"Ctrl", "x":0, "y":5.25, "w":1.25},
                {"label":"Win", "x":1.25, "y":5.25, "w":1.25},
                {"label":"Alt", "x":2.5, "y":5.25, "w":1.25},
                {"label":"Space", "x":3.75, "y":5.25, "w":6.25},
                {"label":"Alt", "x":10, "y":5.25},
                {"label":"Fn", "x":11, "y":5.25},
                {"label":"Ctrl", "x":12, "y":5.25},
                {"label":"\u2190", "x":13.25, "y":5.5},
                {"label":"\u2193", "x":14.25, "y":5.5},
                {"label":"\u2192", "x":15.25, "y":5.5}
            ]
        }
    }
}

D keyboards/keychron/q1/rev_0102/keymaps/via/keymap.c => keyboards/keychron/q1/rev_0102/keymaps/via/keymap.c +0 -107
@@ 1,107 0,0 @@
/* Copyright 2021 @ Keychron (https://www.keychron.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

enum layers{
  MAC_BASE,
  MAC_FN,
  WIN_BASE,
  WIN_FN
};

enum custom_keycodes {
    KC_MISSION_CONTROL = USER00,
    KC_LAUNCHPAD,
    KC_TASK,
    KC_FLXP
};

#define KC_MCTL KC_MISSION_CONTROL
#define KC_LPAD KC_LAUNCHPAD

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [MAC_BASE] = LAYOUT_iso_83(
        KC_ESC,             KC_BRID,  KC_BRIU,  KC_MCTL,  KC_LPAD,    RGB_VAD,  RGB_VAI,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_MUTE,  KC_VOLD,  KC_VOLU,  KC_DEL,   KC_INS,
        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_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_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_HOME,
        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_RSFT,  KC_UP,
        KC_LCTL,  KC_LALT,  KC_LGUI,                                KC_SPC,                                 KC_RGUI, MO(MAC_FN),KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT),

    [MAC_FN] = LAYOUT_iso_83(
        KC_TRNS,            KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,   KC_TRNS,  KC_TRNS,
        KC_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,
        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,                      KC_TRNS,
        KC_TRNS,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,
        KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,  KC_TRNS,
        KC_TRNS,  KC_TRNS,  KC_TRNS,                                KC_TRNS,                                KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS),

    [WIN_BASE] = LAYOUT_iso_83(
        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_INS,
        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_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_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_HOME,
        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_RSFT,  KC_UP,
        KC_LCTL,  KC_LGUI,  KC_LALT,                                KC_SPC,                                 KC_RALT, MO(WIN_FN),KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT),

    [WIN_FN] = LAYOUT_iso_83(
        KC_TRNS,            KC_BRID,  KC_BRIU,  KC_TASK,  KC_FLXP,  RGB_VAD,  RGB_VAI,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_MUTE,  KC_VOLD,  KC_VOLU,  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,
        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,                      KC_TRNS,
        KC_TRNS,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,
        KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,  KC_TRNS,
        KC_TRNS,  KC_TRNS,  KC_TRNS,                                KC_TRNS,                                KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS)
};

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
        case KC_MISSION_CONTROL:
            if (record->event.pressed) {
                host_consumer_send(0x29F);
            } else {
                host_consumer_send(0);
            }
            return false;  // Skip all further processing of this key
        case KC_LAUNCHPAD:
            if (record->event.pressed) {
                host_consumer_send(0x2A0);
            } else {
                host_consumer_send(0);
            }
            return false;  // Skip all further processing of this key
        case KC_TASK:
            if (record->event.pressed) {
                register_code(KC_LWIN);
                register_code(KC_TAB);
            } else {
                unregister_code(KC_LWIN);
                unregister_code(KC_TAB);
            }
            return false;  // Skip all further processing of this key
        case KC_FLXP:
            if (record->event.pressed) {
                register_code(KC_LWIN);
                register_code(KC_E);
            } else {
                unregister_code(KC_LWIN);
                unregister_code(KC_E);
            }
            return false;  // Skip all further processing of this key
        default:
            return true;  // Process all other keycodes normally
    }
}

R keyboards/keychron/q2/rev_0110/rev_0110.c => keyboards/keychron/q2/ansi/ansi.c +24 -18
@@ 14,7 14,7 @@
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include "quantum.h"
#include "ansi.h"

#ifdef RGB_MATRIX_ENABLE
const ckled2001_led PROGMEM g_ckled2001_leds[RGB_MATRIX_LED_COUNT] = {


@@ 97,27 97,33 @@ const ckled2001_led PROGMEM g_ckled2001_leds[RGB_MATRIX_LED_COUNT] = {
    {1, F_16,   D_16,   E_16},
};

#define __ NO_LED

led_config_t g_led_config = {
     {
        {   0,      1,      2,      3,      4,      5,      6,      7,      8,      9,     10,     11,     12,     13,     14  },
        {  15,     16,     17,     18,     19,     20,     21,     22,     23,     24,     25,     26,     27,     28,     29  },
        {  30,     31,     32,     33,     34,     35,     36,     37,     38,     39,     40,     41,     65,     42,     43  },
        {  44, NO_LED,     45,     46,     47,     48,     49,     50,     51,     52,     53,     54, NO_LED,     55,     56  },
        {  57,     58,     59, NO_LED, NO_LED, NO_LED,     60, NO_LED, NO_LED, NO_LED,     61,     62,     63,     64,     66  },
    {
        // Key Matrix to LED Index
        { 0,  1,  2,  3,  4,  5,  6,  7,  8,  9,  10, 11, 12, 13, 14 },
        { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 },
        { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 65, 42, 43 },
        { 44, __, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, __, 55, 56 },
        { 57, 58, 59, __, __, __, 60, __, __, __, 61, 62, 63, 64, 66 }
    },
    {
        {0, 0}, {15, 0}, {30, 0}, {45, 0}, {60, 0}, {75, 0}, {90, 0}, {105, 0}, {120, 0}, {135, 0}, {150, 0}, {165, 0}, {180, 0}, {195, 0},           {224, 0},
        {0,16}, {15,16}, {30,16}, {45,16}, {60,16}, {75,16}, {90,16}, {105,16}, {120,16}, {135,16}, {150,16}, {165,16}, {180,16}, {195,16},           {224,16},
        {0,32}, {15,32}, {30,32}, {45,32}, {60,32}, {75,32}, {90,32}, {105,32}, {120,32}, {135,32}, {150,32}, {165,32},           {195,32},           {224,32},
        {0,48},          {30,48}, {45,48}, {60,48}, {75,48}, {90,48}, {105,48}, {120,48}, {135,48}, {150,48}, {165,48},           {180,48}, {210,48},
        {0,64}, {15,64}, {30,64},                            {90,64},                               {150,64}, {165,64}, {180,64}, {195,64}, {210,64}, {224,64},
        // LED Index to Physical Position
        {0,0},  {15,0},  {29,0},  {44,0},  {59,0},  {73,0},  {88,0},  {103,0},  {118,0},  {132,0},  {147,0},  {162,0},  {176,0},  {198,0},            {224,0},
        {4,15}, {22,15}, {37,15}, {51,15}, {66,15}, {81,15}, {95,15}, {110,15}, {125,15}, {140,15}, {154,15}, {169,15}, {184,15}, {202,15},           {224,15},
        {6,30}, {26,30}, {40,30}, {55,30}, {70,30}, {84,30}, {99,30}, {114,30}, {129,30}, {143,30}, {158,30}, {173,30},           {196,30},           {224,30},
        {9,45},          {33,45}, {48,45}, {62,45}, {77,45}, {92,45}, {106,45}, {121,45}, {136,45}, {151,45}, {165,45},           {185,45}, {209,49},
        {2,60}, {20,60}, {39,60},                            {94,60},                               {147,60}, {162,60}, {176,60}, {195,64}, {209,64}, {224,64}
    },
    {
        4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,          4,
        4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,          4,
        4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,          4,          4,
        4,          4,    4,    4,    4,    4,    4,    4,    4,    4,    4,          4,    4,
        4,    4,    4,                      4,                      4,    4,    4,    4,    4,    4,
        // RGB LED Index to Flag
        1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,    1,
        1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,    1,
        1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,    1,    1,
        1,    4, 4, 4, 4, 4, 4, 4, 4, 4, 4,    1, 1,
        1, 1, 1,          4,          1, 1, 1, 1, 1, 1
    }
};
#endif

#endif // RGB_MATRIX_ENABLE

A keyboards/keychron/q2/ansi/ansi.h => keyboards/keychron/q2/ansi/ansi.h +19 -0
@@ 0,0 1,19 @@
/* Copyright 2021 @ Keychron (https://www.keychron.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

#include "quantum.h"

R keyboards/keychron/q2/rev_0110/config.h => keyboards/keychron/q2/ansi/config.h +0 -0
A keyboards/keychron/q2/ansi/info.json => keyboards/keychron/q2/ansi/info.json +88 -0
@@ 0,0 1,88 @@
{
    "keyboard_name": "Q2",
    "manufacturer": "Keychron",
    "url": "https://github.com/Keychron",
    "maintainer": "lalalademaxiya1",
    "usb": {
        "vid": "0x3434",
        "pid": "0x0110",
        "device_version": "1.0.0"
    },
    "layouts": {
        "LAYOUT_ansi_67": {
            "layout": [
                {"matrix":[0, 0], "x":0, "y":0.25},
                {"matrix":[0, 1], "x":1, "y":0.25},
                {"matrix":[0, 2], "x":2, "y":0.25},
                {"matrix":[0, 3], "x":3, "y":0.25},
                {"matrix":[0, 4], "x":4, "y":0.25},
                {"matrix":[0, 5], "x":5, "y":0.25},
                {"matrix":[0, 6], "x":6, "y":0.25},
                {"matrix":[0, 7], "x":7, "y":0.25},
                {"matrix":[0, 8], "x":8, "y":0.25},
                {"matrix":[0, 9], "x":9, "y":0.25},
                {"matrix":[0,10], "x":10, "y":0.25},
                {"matrix":[0,11], "x":11, "y":0.25},
                {"matrix":[0,12], "x":12, "y":0.25},
                {"matrix":[0,13], "x":13, "y":0.25, "w":2},
                {"matrix":[0,14], "x":15.25, "y":0},

                {"matrix":[1, 0], "x":0, "y":1.25, "w":1.5},
                {"matrix":[1, 1], "x":1.5, "y":1.25},
                {"matrix":[1, 2], "x":2.5, "y":1.25},
                {"matrix":[1, 3], "x":3.5, "y":1.25},
                {"matrix":[1, 4], "x":4.5, "y":1.25},
                {"matrix":[1, 5], "x":5.5, "y":1.25},
                {"matrix":[1, 6], "x":6.5, "y":1.25},
                {"matrix":[1, 7], "x":7.5, "y":1.25},
                {"matrix":[1, 8], "x":8.5, "y":1.25},
                {"matrix":[1, 9], "x":9.5, "y":1.25},
                {"matrix":[1,10], "x":10.5, "y":1.25},
                {"matrix":[1,11], "x":11.5, "y":1.25},
                {"matrix":[1,12], "x":12.5, "y":1.25},
                {"matrix":[1,13], "x":13.5, "y":1.25, "w":1.5},
                {"matrix":[1,14], "x":15.25, "y":1.25},

                {"matrix":[2, 0], "x":0, "y":2.25, "w":1.75},
                {"matrix":[2, 1], "x":1.75, "y":2.25},
                {"matrix":[2, 2], "x":2.75, "y":2.25},
                {"matrix":[2, 3], "x":3.75, "y":2.25},
                {"matrix":[2, 4], "x":4.75, "y":2.25},
                {"matrix":[2, 5], "x":5.75, "y":2.25},
                {"matrix":[2, 6], "x":6.75, "y":2.25},
                {"matrix":[2, 7], "x":7.75, "y":2.25},
                {"matrix":[2, 8], "x":8.75, "y":2.25},
                {"matrix":[2, 9], "x":9.75, "y":2.25},
                {"matrix":[2,10], "x":10.75, "y":2.25},
                {"matrix":[2,11], "x":11.75, "y":2.25},
                {"matrix":[2,13], "x":12.75, "y":2.25, "w":2.25},
                {"matrix":[2,14], "x":15.25, "y":2.25},

                {"matrix":[3, 0], "x":0, "y":3.25, "w":2.25},
                {"matrix":[3, 2], "x":2.25, "y":3.25},
                {"matrix":[3, 3], "x":3.25, "y":3.25},
                {"matrix":[3, 4], "x":4.25, "y":3.25},
                {"matrix":[3, 5], "x":5.25, "y":3.25},
                {"matrix":[3, 6], "x":6.25, "y":3.25},
                {"matrix":[3, 7], "x":7.25, "y":3.25},
                {"matrix":[3, 8], "x":8.25, "y":3.25},
                {"matrix":[3, 9], "x":9.25, "y":3.25},
                {"matrix":[3,10], "x":10.25, "y":3.25},
                {"matrix":[3,11], "x":11.25, "y":3.25},
                {"matrix":[3,13], "x":12.25, "y":3.25, "w":1.75},
                {"matrix":[3,14], "x":14.25, "y":3.5},

                {"matrix":[4, 0], "x":0, "y":4.25, "w":1.25},
                {"matrix":[4, 1], "x":1.25, "y":4.25, "w":1.25},
                {"matrix":[4, 2], "x":2.5, "y":4.25, "w":1.25},
                {"matrix":[4, 6], "x":3.75, "y":4.25, "w":6.25},
                {"matrix":[4,10], "x":10, "y":4.25},
                {"matrix":[4,11], "x":11, "y":4.25},
                {"matrix":[4,12], "x":12, "y":4.25},
                {"matrix":[4,13], "x":13.25, "y":4.5},
                {"matrix":[2,12], "x":14.25, "y":4.5},
                {"matrix":[4,14], "x":15.25, "y":4.5}
            ]
        }
    }
}

A keyboards/keychron/q2/ansi/keymaps/default/keymap.c => keyboards/keychron/q2/ansi/keymaps/default/keymap.c +65 -0
@@ 0,0 1,65 @@
/* Copyright 2021 @ Keychron (https://www.keychron.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

enum layers{
    MAC_BASE,
    WIN_BASE,
    _FN1,
    _FN2,
    _FN3
};

#define KC_TASK LGUI(KC_TAB)
#define KC_FLXP LGUI(KC_E)

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [MAC_BASE] = LAYOUT_ansi_67(
        KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,  KC_EQL,   KC_BSPC,          KC_INS,
        KC_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_ENT,           KC_HOME,
        KC_LSFT,          KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,            KC_RSFT, KC_UP,
        KC_LCTL, KC_LOPT, KC_LCMD,                            KC_SPC,                             KC_RCMD, MO(_FN1), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),

    [WIN_BASE] = LAYOUT_ansi_67(
        KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,  KC_EQL,   KC_BSPC,          KC_INS,
        KC_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_ENT,           KC_HOME,
        KC_LSFT,          KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,            KC_RSFT, KC_UP,
        KC_LCTL, KC_LWIN, KC_LALT,                            KC_SPC,                             KC_RALT, MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),

    [_FN1] = LAYOUT_ansi_67(
        KC_GRV,  KC_BRID, KC_BRIU, _______, _______, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,  KC_VOLU, _______,          _______,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______,  _______, _______,          _______,
        _______, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______,           _______,          _______,
        _______,          _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______,           _______, _______,
        _______, _______, _______,                            _______,                            _______, _______,  _______, _______, _______, _______),

    [_FN2] = LAYOUT_ansi_67(
        KC_GRV,  KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,  KC_VOLU, _______,          _______,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______,  _______, _______,          _______,
        _______, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______,           _______,          _______,
        _______,          _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______,           _______, _______,
        _______, _______, _______,                            _______,                            _______, _______,  _______, _______, _______, _______),

    [_FN3] = LAYOUT_ansi_67(
        KC_TILD, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,   KC_F12,  _______,          _______,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______,  _______, _______,          _______,
        _______, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______,           _______,          _______,
        _______,          _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,           _______, _______,
        _______, _______, _______,                            _______,                            _______, _______,  _______, _______, _______, _______)
};

A keyboards/keychron/q2/ansi/keymaps/keychron/keymap.c => keyboards/keychron/q2/ansi/keymaps/keychron/keymap.c +71 -0
@@ 0,0 1,71 @@
/* Copyright 2021 @ Keychron (https://www.keychron.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 "keychron_common.h"

enum layers{
    MAC_BASE,
    WIN_BASE,
    _FN1,
    _FN2,
    _FN3
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [MAC_BASE] = LAYOUT_ansi_67(
        KC_ESC,  KC_1,     KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,     KC_MINS,  KC_EQL,   KC_BSPC,          KC_INS,
        KC_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_ENT,           KC_HOME,
        KC_LSFT,           KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,   KC_SLSH,            KC_RSFT, KC_UP,
        KC_LCTL, KC_LOPTN, KC_LCMMD,                           KC_SPC,                             KC_RCMMD, MO(_FN1), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),

    [WIN_BASE] = LAYOUT_ansi_67(
        KC_ESC,  KC_1,     KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,     KC_MINS,  KC_EQL,   KC_BSPC,          KC_INS,
        KC_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_ENT,           KC_HOME,
        KC_LSFT,           KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,   KC_SLSH,            KC_RSFT, KC_UP,
        KC_LCTL, KC_LWIN,  KC_LALT,                            KC_SPC,                             KC_RALT,  MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),

    [_FN1] = LAYOUT_ansi_67(
        KC_GRV,  KC_BRID,  KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE,  KC_VOLD,  KC_VOLU,  _______,          _______,
        RGB_TOG, RGB_MOD,  RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______,  _______,  _______,  _______,          _______,
        _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______,  _______,            _______,          _______,
        _______,           _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______,  _______,            _______, _______,
        _______, _______,  _______,                            _______,                            _______,  _______,  _______,  _______, _______, _______),

    [_FN2] = LAYOUT_ansi_67(
        KC_GRV,  KC_BRID,  KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE,  KC_VOLD,  KC_VOLU,  _______,          _______,
        RGB_TOG, RGB_MOD,  RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______,  _______,  _______,  _______,          _______,
        _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______,  _______,            _______,          _______,
        _______,           _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______,  _______,            _______, _______,
        _______, _______,  _______,                            _______,                            _______,  _______,  _______,  _______, _______, _______),

    [_FN3] = LAYOUT_ansi_67(
        KC_TILD, KC_F1,    KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,   KC_F11,   KC_F12,   _______,          _______,
        RGB_TOG, RGB_MOD,  RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______,  _______,  _______,  _______,          _______,
        _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______,  _______,            _______,          _______,
        _______,           _______, _______, _______, _______, _______, _______, _______, _______, _______,  _______,            _______, _______,
        _______, _______,  _______,                            _______,                            _______,  _______,  _______,  _______, _______, _______)
};

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    if (!process_record_keychron(keycode, record)) {
        return false;
    }

    return true;
}

A keyboards/keychron/q2/ansi/keymaps/keychron/rules.mk => keyboards/keychron/q2/ansi/keymaps/keychron/rules.mk +4 -0
@@ 0,0 1,4 @@
VIA_ENABLE = yes

VPATH += keyboards/keychron/common
SRC += keychron_common.c

R keyboards/keychron/q2/rev_0110/keymaps/ladduro/config.h => keyboards/keychron/q2/ansi/keymaps/ladduro/config.h +0 -0
R keyboards/keychron/q2/rev_0110/keymaps/ladduro/keymap.c => keyboards/keychron/q2/ansi/keymaps/ladduro/keymap.c +0 -0
R keyboards/keychron/q2/rev_0110/keymaps/ladduro/keymap_user.h => keyboards/keychron/q2/ansi/keymaps/ladduro/keymap_user.h +0 -0
R keyboards/keychron/q2/rev_0110/keymaps/ladduro/readme.md => keyboards/keychron/q2/ansi/keymaps/ladduro/readme.md +0 -0
R keyboards/keychron/q2/rev_0110/keymaps/ladduro/rgb_matrix_user.c => keyboards/keychron/q2/ansi/keymaps/ladduro/rgb_matrix_user.c +0 -0
R keyboards/keychron/q2/rev_0110/keymaps/ladduro/rgb_matrix_user.h => keyboards/keychron/q2/ansi/keymaps/ladduro/rgb_matrix_user.h +0 -0
R keyboards/keychron/q2/rev_0110/keymaps/ladduro/rules.mk => keyboards/keychron/q2/ansi/keymaps/ladduro/rules.mk +0 -0
R keyboards/keychron/q2/rev_0110/keymaps/default/keymap.c => keyboards/keychron/q2/ansi/keymaps/via/keymap.c +20 -42
@@ 25,15 25,14 @@ enum layers{
};

enum custom_keycodes {
    KC_MISSION_CONTROL = SAFE_RANGE,
    KC_LAUNCHPAD
    KC_MISSION_CONTROL = USER00,
    KC_LAUNCHPAD,
    KC_TASK,
    KC_FLXP
};

#define KC_WAVE S(KC_GRV)
#define KC_TASK LGUI(KC_TAB)
#define KC_FLXP LGUI(KC_E)
#define KC_MCTL KC_MISSION_CONTROL
#define KC_LPAD KC_LAUNCHPAD

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [MAC_BASE] = LAYOUT_ansi_67(


@@ 48,47 47,26 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        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_ENT,           KC_HOME,
        KC_LSFT,          KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,            KC_RSFT, KC_UP,
        KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                             KC_RALT, MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),
        KC_LCTL, KC_LWIN, KC_LALT,                            KC_SPC,                             KC_RALT, MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),

    [_FN1] = LAYOUT_ansi_67(
        KC_GRV,  KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,  KC_VOLU, KC_TRNS,          KC_TRNS,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS,          KC_TRNS,
        KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,           KC_TRNS,          KC_TRNS,
        KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,           KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
        KC_GRV,  KC_BRID, KC_BRIU, _______, _______, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,  KC_VOLU, _______,          _______,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______,  _______, _______,          _______,
        _______, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______,           _______,          _______,
        _______,          _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______,           _______, _______,
        _______, _______, _______,                            _______,                            _______, _______,  _______, _______, _______, _______),

    [_FN2] = LAYOUT_ansi_67(
        KC_GRV,  KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,  KC_VOLU, KC_TRNS,          KC_TRNS,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS,          KC_TRNS,
        KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,           KC_TRNS,          KC_TRNS,
        KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,           KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
        KC_GRV,  KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,  KC_VOLU, _______,          _______,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______,  _______, _______,          _______,
        _______, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______,           _______,          _______,
        _______,          _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______,           _______, _______,
        _______, _______, _______,                            _______,                            _______, _______,  _______, _______, _______, _______),

    [_FN3] = LAYOUT_ansi_67(
        KC_WAVE, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,   KC_F12,  KC_TRNS,          KC_TRNS,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS,          KC_TRNS,
        KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,           KC_TRNS,          KC_TRNS,
        KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,           KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
        KC_TILD, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,   KC_F12,  _______,          _______,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______,  _______, _______,          _______,
        _______, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______,           _______,          _______,
        _______,          _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,           _______, _______,
        _______, _______, _______,                            _______,                            _______, _______,  _______, _______, _______, _______)
};

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
        case KC_MISSION_CONTROL:
            if (record->event.pressed) {
                host_consumer_send(0x29F);
            } else {
                host_consumer_send(0);
            }
            return false;  // Skip all further processing of this key
        case KC_LAUNCHPAD:
            if (record->event.pressed) {
                host_consumer_send(0x2A0);
            } else {
                host_consumer_send(0);
            }
            return false;  // Skip all further processing of this key
        default:
            return true;  // Process all other keycodes normally
    }
}

R keyboards/keychron/q2/rev_0110/keymaps/via/rules.mk => keyboards/keychron/q2/ansi/keymaps/via/rules.mk +0 -1
@@ 1,2 1,1 @@
VIA_ENABLE = yes
MOUSEKEY_ENABLE = no
\ No newline at end of file

R keyboards/keychron/q2/rev_0110/readme.md => keyboards/keychron/q2/ansi/readme.md +0 -0
R keyboards/keychron/q2/rev_0112/rules.mk => keyboards/keychron/q2/ansi/rules.mk +1 -1
@@ 8,7 8,7 @@ BOOTLOADER = stm32-dfu
#   change yes to no to disable
#
BOOTMAGIC_ENABLE = yes      # Enable Bootmagic Lite
MOUSEKEY_ENABLE = no        # Mouse keys
MOUSEKEY_ENABLE = yes       # Mouse keys
EXTRAKEY_ENABLE = yes       # Audio control and System control
CONSOLE_ENABLE = no         # Console for debug
COMMAND_ENABLE = no         # Commands for debug and configuration

R keyboards/keychron/q2/rev_0111/rev_0111.c => keyboards/keychron/q2/ansi_encoder/ansi_encoder.c +23 -31
@@ 14,7 14,7 @@
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include "quantum.h"
#include "ansi_encoder.h"

#ifdef RGB_MATRIX_ENABLE
const ckled2001_led PROGMEM g_ckled2001_leds[RGB_MATRIX_LED_COUNT] = {


@@ 97,41 97,33 @@ const ckled2001_led PROGMEM g_ckled2001_leds[RGB_MATRIX_LED_COUNT] = {
    {1, F_16,   D_16,   E_16},
};

#define __ NO_LED

led_config_t g_led_config = {
     {
        {   0,      1,      2,      3,      4,      5,      6,      7,      8,      9,     10,     11,     12,     13,     14  },
        {  15,     16,     17,     18,     19,     20,     21,     22,     23,     24,     25,     26,     27,     28,     29  },
        {  30,     31,     32,     33,     34,     35,     36,     37,     38,     39,     40,     41,     65,     42,     43  },
        {  44, NO_LED,     45,     46,     47,     48,     49,     50,     51,     52,     53,     54, NO_LED,     55,     56  },
        {  57,     58,     59, NO_LED, NO_LED, NO_LED,     60, NO_LED, NO_LED, NO_LED,     61,     62,     63,     64,     66  },
    {
        // Key Matrix to LED Index
        { 0,  1,  2,  3,  4,  5,  6,  7,  8,  9,  10, 11, 12, 13, 14 },
        { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 },
        { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 65, 42, 43 },
        { 44, __, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, __, 55, 56 },
        { 57, 58, 59, __, __, __, 60, __, __, __, 61, 62, 63, 64, 66 }
    },
    {
        {0, 0}, {15, 0}, {30, 0}, {45, 0}, {60, 0}, {75, 0}, {90, 0}, {105, 0}, {120, 0}, {135, 0}, {150, 0}, {165, 0}, {180, 0}, {195, 0},           {224, 0},
        {0,16}, {15,16}, {30,16}, {45,16}, {60,16}, {75,16}, {90,16}, {105,16}, {120,16}, {135,16}, {150,16}, {165,16}, {180,16}, {195,16},           {224,16},
        {0,32}, {15,32}, {30,32}, {45,32}, {60,32}, {75,32}, {90,32}, {105,32}, {120,32}, {135,32}, {150,32}, {165,32},           {195,32},           {224,32},
        {0,48},          {30,48}, {45,48}, {60,48}, {75,48}, {90,48}, {105,48}, {120,48}, {135,48}, {150,48}, {165,48},           {180,48}, {210,48},
        {0,64}, {15,64}, {30,64},                            {90,64},                               {150,64}, {165,64}, {180,64}, {195,64}, {210,64}, {224,64},
        // LED Index to Physical Position
        {0,0},  {15,0},  {29,0},  {44,0},  {59,0},  {73,0},  {88,0},  {103,0},  {118,0},  {132,0},  {147,0},  {162,0},  {176,0},  {198,0},            {224,0},
        {4,15}, {22,15}, {37,15}, {51,15}, {66,15}, {81,15}, {95,15}, {110,15}, {125,15}, {140,15}, {154,15}, {169,15}, {184,15}, {202,15},           {224,15},
        {6,30}, {26,30}, {40,30}, {55,30}, {70,30}, {84,30}, {99,30}, {114,30}, {129,30}, {143,30}, {158,30}, {173,30},           {196,30},           {224,30},
        {9,45},          {33,45}, {48,45}, {62,45}, {77,45}, {92,45}, {106,45}, {121,45}, {136,45}, {151,45}, {165,45},           {185,45}, {209,49},
        {2,60}, {20,60}, {39,60},                            {94,60},                               {147,60}, {162,60}, {176,60}, {195,64}, {209,64}, {224,64}
    },
    {
        4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,          4,
        4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,          4,
        4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,          4,          4,
        4,          4,    4,    4,    4,    4,    4,    4,    4,    4,    4,          4,    4,
        4,    4,    4,                      4,                      4,    4,    4,    4,    4,    4,
        // RGB LED Index to Flag
        1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,    1,
        1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,    1,
        1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,    1,    1,
        1,    4, 4, 4, 4, 4, 4, 4, 4, 4, 4,    1, 1,
        1, 1, 1,          4,          1, 1, 1, 1, 1, 1
    }
};
#endif

#ifdef ENCODER_ENABLE
bool encoder_update_kb(uint8_t index, bool clockwise) {
    if (!encoder_update_user(index, clockwise)) { return false; }
    if (index == 0) {
        if (clockwise) {
            tap_code_delay(KC_VOLU, 10);
        } else {
            tap_code_delay(KC_VOLD, 10);
        }
    }
    return true;
}
#endif
#endif // RGB_MATRIX_ENABLE

A keyboards/keychron/q2/ansi_encoder/ansi_encoder.h => keyboards/keychron/q2/ansi_encoder/ansi_encoder.h +19 -0
@@ 0,0 1,19 @@
/* Copyright 2021 @ Keychron (https://www.keychron.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

#include "quantum.h"

R keyboards/keychron/q2/rev_0111/config.h => keyboards/keychron/q2/ansi_encoder/config.h +1 -2
@@ 24,6 24,5 @@
/* Encoder used pins */
#define ENCODERS_PAD_A { A10 }
#define ENCODERS_PAD_B { B5 }

/* Specifies the number of pulses the encoder registers between each detent */
#define ENCODER_RESOLUTION 4
#define ENCODER_DEFAULT_POS 0x3

A keyboards/keychron/q2/ansi_encoder/info.json => keyboards/keychron/q2/ansi_encoder/info.json +88 -0
@@ 0,0 1,88 @@
{
    "keyboard_name": "Q2",
    "manufacturer": "Keychron",
    "url": "https://github.com/Keychron",
    "maintainer": "lalalademaxiya1",
    "usb": {
        "vid": "0x3434",
        "pid": "0x0111",
        "device_version": "1.0.0"
    },
    "layouts": {
        "LAYOUT_ansi_67": {
            "layout": [
                {"matrix":[0, 0], "x":0, "y":0.25},
                {"matrix":[0, 1], "x":1, "y":0.25},
                {"matrix":[0, 2], "x":2, "y":0.25},
                {"matrix":[0, 3], "x":3, "y":0.25},
                {"matrix":[0, 4], "x":4, "y":0.25},
                {"matrix":[0, 5], "x":5, "y":0.25},
                {"matrix":[0, 6], "x":6, "y":0.25},
                {"matrix":[0, 7], "x":7, "y":0.25},
                {"matrix":[0, 8], "x":8, "y":0.25},
                {"matrix":[0, 9], "x":9, "y":0.25},
                {"matrix":[0,10], "x":10, "y":0.25},
                {"matrix":[0,11], "x":11, "y":0.25},
                {"matrix":[0,12], "x":12, "y":0.25},
                {"matrix":[0,13], "x":13, "y":0.25, "w":2},
                {"matrix":[0,14], "x":15.25, "y":0},

                {"matrix":[1, 0], "x":0, "y":1.25, "w":1.5},
                {"matrix":[1, 1], "x":1.5, "y":1.25},
                {"matrix":[1, 2], "x":2.5, "y":1.25},
                {"matrix":[1, 3], "x":3.5, "y":1.25},
                {"matrix":[1, 4], "x":4.5, "y":1.25},
                {"matrix":[1, 5], "x":5.5, "y":1.25},
                {"matrix":[1, 6], "x":6.5, "y":1.25},
                {"matrix":[1, 7], "x":7.5, "y":1.25},
                {"matrix":[1, 8], "x":8.5, "y":1.25},
                {"matrix":[1, 9], "x":9.5, "y":1.25},
                {"matrix":[1,10], "x":10.5, "y":1.25},
                {"matrix":[1,11], "x":11.5, "y":1.25},
                {"matrix":[1,12], "x":12.5, "y":1.25},
                {"matrix":[1,13], "x":13.5, "y":1.25, "w":1.5},
                {"matrix":[1,14], "x":15.25, "y":1.25},

                {"matrix":[2, 0], "x":0, "y":2.25, "w":1.75},
                {"matrix":[2, 1], "x":1.75, "y":2.25},
                {"matrix":[2, 2], "x":2.75, "y":2.25},
                {"matrix":[2, 3], "x":3.75, "y":2.25},
                {"matrix":[2, 4], "x":4.75, "y":2.25},
                {"matrix":[2, 5], "x":5.75, "y":2.25},
                {"matrix":[2, 6], "x":6.75, "y":2.25},
                {"matrix":[2, 7], "x":7.75, "y":2.25},
                {"matrix":[2, 8], "x":8.75, "y":2.25},
                {"matrix":[2, 9], "x":9.75, "y":2.25},
                {"matrix":[2,10], "x":10.75, "y":2.25},
                {"matrix":[2,11], "x":11.75, "y":2.25},
                {"matrix":[2,13], "x":12.75, "y":2.25, "w":2.25},
                {"matrix":[2,14], "x":15.25, "y":2.25},

                {"matrix":[3, 0], "x":0, "y":3.25, "w":2.25},
                {"matrix":[3, 2], "x":2.25, "y":3.25},
                {"matrix":[3, 3], "x":3.25, "y":3.25},
                {"matrix":[3, 4], "x":4.25, "y":3.25},
                {"matrix":[3, 5], "x":5.25, "y":3.25},
                {"matrix":[3, 6], "x":6.25, "y":3.25},
                {"matrix":[3, 7], "x":7.25, "y":3.25},
                {"matrix":[3, 8], "x":8.25, "y":3.25},
                {"matrix":[3, 9], "x":9.25, "y":3.25},
                {"matrix":[3,10], "x":10.25, "y":3.25},
                {"matrix":[3,11], "x":11.25, "y":3.25},
                {"matrix":[3,13], "x":12.25, "y":3.25, "w":1.75},
                {"matrix":[3,14], "x":14.25, "y":3.5},

                {"matrix":[4, 0], "x":0, "y":4.25, "w":1.25},
                {"matrix":[4, 1], "x":1.25, "y":4.25, "w":1.25},
                {"matrix":[4, 2], "x":2.5, "y":4.25, "w":1.25},
                {"matrix":[4, 6], "x":3.75, "y":4.25, "w":6.25},
                {"matrix":[4,10], "x":10, "y":4.25},
                {"matrix":[4,11], "x":11, "y":4.25},
                {"matrix":[4,12], "x":12, "y":4.25},
                {"matrix":[4,13], "x":13.25, "y":4.5},
                {"matrix":[2,12], "x":14.25, "y":4.5},
                {"matrix":[4,14], "x":15.25, "y":4.5}
            ]
        }
    }
}

R keyboards/keychron/q2/rev_0111/keymaps/default/keymap.c => keyboards/keychron/q2/ansi_encoder/keymaps/default/keymap.c +19 -48
@@ 24,16 24,8 @@ enum layers{
    _FN3
};

enum custom_keycodes {
    KC_MISSION_CONTROL = SAFE_RANGE,
    KC_LAUNCHPAD
};

#define KC_WAVE S(KC_GRV)
#define KC_TASK LGUI(KC_TAB)
#define KC_FLXP LGUI(KC_E)
#define KC_MCTL KC_MISSION_CONTROL
#define KC_LPAD KC_LAUNCHPAD

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [MAC_BASE] = LAYOUT_ansi_67(


@@ 48,57 40,36 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        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_ENT,           KC_HOME,
        KC_LSFT,          KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,             KC_RSFT, KC_UP,
        KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                             KC_RALT, MO(_FN2), MO(_FN3),  KC_LEFT, KC_DOWN, KC_RGHT),
        KC_LCTL, KC_LWIN, KC_LALT,                            KC_SPC,                             KC_RALT, MO(_FN2), MO(_FN3),  KC_LEFT, KC_DOWN, KC_RGHT),

    [_FN1] = LAYOUT_ansi_67(
        KC_GRV,  KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,  KC_VOLU,   KC_TRNS,          KC_TRNS,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,   KC_TRNS,          KC_TRNS,
        KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,             KC_TRNS,          KC_TRNS,
        KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,             KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS,  KC_TRNS,   KC_TRNS, KC_TRNS, KC_TRNS),
        KC_GRV,  KC_BRID, KC_BRIU, _______, _______, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,  KC_VOLU,   _______,          RGB_TOG,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______,  _______,   _______,          _______,
        _______, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______,             _______,          _______,
        _______,          _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______,             _______, _______,
        _______, _______, _______,                            _______,                            _______, _______,  _______,   _______, _______, _______),

    [_FN2] = LAYOUT_ansi_67(
        KC_GRV,  KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,  KC_VOLU,   KC_TRNS,          KC_TRNS,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,   KC_TRNS,          KC_TRNS,
        KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,             KC_TRNS,          KC_TRNS,
        KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,             KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS,  KC_TRNS,   KC_TRNS, KC_TRNS, KC_TRNS),
        KC_GRV,  KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,  KC_VOLU,   _______,          RGB_TOG,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______,  _______,   _______,          _______,
        _______, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______,             _______,          _______,
        _______,          _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______,             _______, _______,
        _______, _______, _______,                            _______,                            _______, _______,  _______,   _______, _______, _______),

    [_FN3] = LAYOUT_ansi_67(
        KC_WAVE, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,   KC_F12,    KC_TRNS,          KC_TRNS,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,   KC_TRNS,          KC_TRNS,
        KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,             KC_TRNS,          KC_TRNS,
        KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,             KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS,  KC_TRNS,   KC_TRNS, KC_TRNS, KC_TRNS)
        KC_TILD, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,   KC_F12,    _______,          _______,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______,  _______,   _______,          _______,
        _______, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______,             _______,          _______,
        _______,          _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,             _______, _______,
        _______, _______, _______,                            _______,                            _______, _______,  _______,   _______, _______, _______)
};

#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
    [MAC_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
    [WIN_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
    [_FN1]     = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
    [_FN2]     = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
    [_FN3]     = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
    [_FN1]     = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
    [_FN2]     = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
    [_FN3]     = { ENCODER_CCW_CW(_______, _______) },
};
#endif

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
        case KC_MISSION_CONTROL:
            if (record->event.pressed) {
                host_consumer_send(0x29F);
            } else {
                host_consumer_send(0);
            }
            return false;  // Skip all further processing of this key
        case KC_LAUNCHPAD:
            if (record->event.pressed) {
                host_consumer_send(0x2A0);
            } else {
                host_consumer_send(0);
            }
            return false;  // Skip all further processing of this key
        default:
            return true;  // Process all other keycodes normally
    }
}

R keyboards/keychron/q2/rev_0111/keymaps/default/rules.mk => keyboards/keychron/q2/ansi_encoder/keymaps/default/rules.mk +0 -0
A keyboards/keychron/q2/ansi_encoder/keymaps/keychron/keymap.c => keyboards/keychron/q2/ansi_encoder/keymaps/keychron/keymap.c +81 -0
@@ 0,0 1,81 @@
/* Copyright 2021 @ Keychron (https://www.keychron.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 "keychron_common.h"

enum layers{
    MAC_BASE,
    WIN_BASE,
    _FN1,
    _FN2,
    _FN3
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [MAC_BASE] = LAYOUT_ansi_67(
        KC_ESC,  KC_1,     KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,     KC_MINS,  KC_EQL,   KC_BSPC,          KC_MUTE,
        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_ENT,           KC_HOME,
        KC_LSFT,           KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,   KC_SLSH,            KC_RSFT, KC_UP,
        KC_LCTL, KC_LOPTN, KC_LCMMD,                           KC_SPC,                             KC_RCMMD, MO(_FN1), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),

    [WIN_BASE] = LAYOUT_ansi_67(
        KC_ESC,  KC_1,     KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,     KC_MINS,  KC_EQL,   KC_BSPC,          KC_MUTE,
        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_ENT,           KC_HOME,
        KC_LSFT,           KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,   KC_SLSH,            KC_RSFT, KC_UP,
        KC_LCTL, KC_LWIN,  KC_LALT,                            KC_SPC,                             KC_RALT,  MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),

    [_FN1] = LAYOUT_ansi_67(
        KC_GRV,  KC_BRID,  KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE,  KC_VOLD,  KC_VOLU,  _______,          RGB_TOG,
        RGB_TOG, RGB_MOD,  RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______,  _______,  _______,  _______,          _______,
        _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______,  _______,            _______,          _______,
        _______,           _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______,  _______,            _______, _______,
        _______, _______,  _______,                            _______,                            _______,  _______,  _______,  _______, _______, _______),

    [_FN2] = LAYOUT_ansi_67(
        KC_GRV,  KC_BRID,  KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE,  KC_VOLD,  KC_VOLU,  _______,          RGB_TOG,
        RGB_TOG, RGB_MOD,  RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______,  _______,  _______,  _______,          _______,
        _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______,  _______,            _______,          _______,
        _______,           _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______,  _______,            _______, _______,
        _______, _______,  _______,                            _______,                            _______,  _______,  _______,  _______, _______, _______),

    [_FN3] = LAYOUT_ansi_67(
        KC_TILD, KC_F1,    KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,   KC_F11,   KC_F12,   _______,          _______,
        RGB_TOG, RGB_MOD,  RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______,  _______,  _______,  _______,          _______,
        _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______,  _______,            _______,          _______,
        _______,           _______, _______, _______, _______, _______, _______, _______, _______, _______,  _______,            _______, _______,
        _______, _______,  _______,                            _______,                            _______,  _______,  _______,  _______, _______, _______)
};

#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
    [MAC_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
    [WIN_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
    [_FN1]     = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
    [_FN2]     = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
    [_FN3]     = { ENCODER_CCW_CW(_______, _______) },
};
#endif

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    if (!process_record_keychron(keycode, record)) {
        return false;
    }

    return true;
}

A keyboards/keychron/q2/ansi_encoder/keymaps/keychron/rules.mk => keyboards/keychron/q2/ansi_encoder/keymaps/keychron/rules.mk +5 -0
@@ 0,0 1,5 @@
VIA_ENABLE = yes
ENCODER_MAP_ENABLE = yes

VPATH += keyboards/keychron/common
SRC += keychron_common.c

A keyboards/keychron/q2/ansi_encoder/keymaps/via/keymap.c => keyboards/keychron/q2/ansi_encoder/keymaps/via/keymap.c +75 -0
@@ 0,0 1,75 @@
/* Copyright 2021 @ Keychron (https://www.keychron.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

enum layers{
    MAC_BASE,
    WIN_BASE,
    _FN1,
    _FN2,
    _FN3
};

#define KC_TASK LGUI(KC_TAB)
#define KC_FLXP LGUI(KC_E)

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [MAC_BASE] = LAYOUT_ansi_67(
        KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,  KC_EQL,   KC_BSPC,          KC_MUTE,
        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_ENT,           KC_HOME,
        KC_LSFT,          KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,            KC_RSFT, KC_UP,
        KC_LCTL, KC_LOPT, KC_LCMD,                            KC_SPC,                             KC_RCMD, MO(_FN1), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),

    [WIN_BASE] = LAYOUT_ansi_67(
        KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,  KC_EQL,   KC_BSPC,          KC_MUTE,
        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_ENT,           KC_HOME,
        KC_LSFT,          KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,            KC_RSFT, KC_UP,
        KC_LCTL, KC_LWIN, KC_LALT,                            KC_SPC,                             KC_RALT, MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),

    [_FN1] = LAYOUT_ansi_67(
        KC_GRV,  KC_BRID, KC_BRIU, _______, _______, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,  KC_VOLU,  _______,          RGB_TOG,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______,  _______,  _______,          _______,
        _______, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______,            _______,          _______,
        _______,          _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______,            _______, _______,
        _______, _______, _______,                            _______,                            _______, _______,  _______,  _______, _______, _______),

    [_FN2] = LAYOUT_ansi_67(
        KC_GRV,  KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,  KC_VOLU,  _______,          RGB_TOG,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______,  _______,  _______,          _______,
        _______, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______,            _______,          _______,
        _______,          _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______,            _______, _______,
        _______, _______, _______,                            _______,                            _______, _______,  _______,  _______, _______, _______),

    [_FN3] = LAYOUT_ansi_67(
        KC_TILD, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,   KC_F12,   _______,          _______,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______,  _______,  _______,          _______,
        _______, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______,            _______,          _______,
        _______,          _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,            _______, _______,
        _______, _______, _______,                            _______,                            _______, _______,  _______,  _______, _______, _______)
};

#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
    [MAC_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
    [WIN_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
    [_FN1]     = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
    [_FN2]     = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
    [_FN3]     = { ENCODER_CCW_CW(_______, _______) },
};
#endif

R keyboards/keychron/q2/rev_0111/keymaps/via/rules.mk => keyboards/keychron/q2/ansi_encoder/keymaps/via/rules.mk +0 -0
R keyboards/keychron/q2/rev_0111/readme.md => keyboards/keychron/q2/ansi_encoder/readme.md +0 -0
R keyboards/keychron/q2/rev_0113/rules.mk => keyboards/keychron/q2/ansi_encoder/rules.mk +1 -1
@@ 8,7 8,7 @@ BOOTLOADER = stm32-dfu
#   change yes to no to disable
#
BOOTMAGIC_ENABLE = yes      # Enable Bootmagic Lite
MOUSEKEY_ENABLE = no        # Mouse keys
MOUSEKEY_ENABLE = yes       # Mouse keys
EXTRAKEY_ENABLE = yes       # Audio control and System control
CONSOLE_ENABLE = no         # Console for debug
COMMAND_ENABLE = no         # Commands for debug and configuration

M keyboards/keychron/q2/config.h => keyboards/keychron/q2/config.h +10 -16
@@ 46,18 46,12 @@
/* Disable DIP switch in matrix data */
#define MATRIX_MASKED

/* NKRO */
#define FORCE_NKRO

/* turn off effects when suspended */
#define RGB_DISABLE_WHEN_USB_SUSPENDED

/* Use 5 dynamic keymap layers */
#define DYNAMIC_KEYMAP_LAYER_COUNT 5

/* We have 2KB EEPROM size on STM32L432 */
#define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 2047

/* EEPROM Driver Configuration */
#define WEAR_LEVELING_LOGICAL_SIZE 2048
#define WEAR_LEVELING_BACKING_SIZE (WEAR_LEVELING_LOGICAL_SIZE * 2)


@@ 74,7 68,7 @@
// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
// #define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
// #define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
#define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
#define ENABLE_RGB_MATRIX_CYCLE_ALL
#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN


@@ 86,12 80,12 @@
#define ENABLE_RGB_MATRIX_DUAL_BEACON
#define ENABLE_RGB_MATRIX_RAINBOW_BEACON
// #define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
#define ENABLE_RGB_MATRIX_RAINDROPS
// #define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
// #define ENABLE_RGB_MATRIX_RAINDROPS
#define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
// #define ENABLE_RGB_MATRIX_HUE_BREATHING
// #define ENABLE_RGB_MATRIX_HUE_PENDULUM
// #define ENABLE_RGB_MATRIX_HUE_WAVE
// #define ENABLE_RGB_MATRIX_PIXEL_RAIN
#define ENABLE_RGB_MATRIX_PIXEL_RAIN
// #define ENABLE_RGB_MATRIX_PIXEL_FLOW
// #define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined


@@ 99,14 93,14 @@
#define ENABLE_RGB_MATRIX_DIGITAL_RAIN
// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE
// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
#define ENABLE_RGB_MATRIX_SPLASH
#define ENABLE_RGB_MATRIX_MULTISPLASH
// #define ENABLE_RGB_MATRIX_MULTISPLASH
#define ENABLE_RGB_MATRIX_SOLID_SPLASH
#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH

R keyboards/keychron/q2/rev_0112/config.h => keyboards/keychron/q2/iso/config.h +0 -0
A keyboards/keychron/q2/iso/info.json => keyboards/keychron/q2/iso/info.json +89 -0
@@ 0,0 1,89 @@
{
    "keyboard_name": "Q2",
    "manufacturer": "Keychron",
    "url": "https://github.com/Keychron",
    "maintainer": "lalalademaxiya1",
    "usb": {
        "vid": "0x3434",
        "pid": "0x0112",
        "device_version": "1.0.0"
    },
    "layouts": {
        "LAYOUT_iso_68": {
            "layout": [
                {"matrix":[0, 0], "x":0, "y":0.25},
                {"matrix":[0, 1], "x":1, "y":0.25},
                {"matrix":[0, 2], "x":2, "y":0.25},
                {"matrix":[0, 3], "x":3, "y":0.25},
                {"matrix":[0, 4], "x":4, "y":0.25},
                {"matrix":[0, 5], "x":5, "y":0.25},
                {"matrix":[0, 6], "x":6, "y":0.25},
                {"matrix":[0, 7], "x":7, "y":0.25},
                {"matrix":[0, 8], "x":8, "y":0.25},
                {"matrix":[0, 9], "x":9, "y":0.25},
                {"matrix":[0,10], "x":10, "y":0.25},
                {"matrix":[0,11], "x":11, "y":0.25},
                {"matrix":[0,12], "x":12, "y":0.25},
                {"matrix":[0,13], "x":13, "y":0.25, "w":2},
                {"matrix":[0,14], "x":15.25, "y":0},

                {"matrix":[1, 0], "x":0, "y":1.25, "w":1.5},
                {"matrix":[1, 1], "x":1.5, "y":1.25},
                {"matrix":[1, 2], "x":2.5, "y":1.25},
                {"matrix":[1, 3], "x":3.5, "y":1.25},
                {"matrix":[1, 4], "x":4.5, "y":1.25},
                {"matrix":[1, 5], "x":5.5, "y":1.25},
                {"matrix":[1, 6], "x":6.5, "y":1.25},
                {"matrix":[1, 7], "x":7.5, "y":1.25},
                {"matrix":[1, 8], "x":8.5, "y":1.25},
                {"matrix":[1, 9], "x":9.5, "y":1.25},
                {"matrix":[1,10], "x":10.5, "y":1.25},
                {"matrix":[1,11], "x":11.5, "y":1.25},
                {"matrix":[1,12], "x":12.5, "y":1.25},
                {"matrix":[1,14], "x":15.25, "y":1.25},

                {"matrix":[2, 0], "x":0, "y":2.25, "w":1.75},
                {"matrix":[2, 1], "x":1.75, "y":2.25},
                {"matrix":[2, 2], "x":2.75, "y":2.25},
                {"matrix":[2, 3], "x":3.75, "y":2.25},
                {"matrix":[2, 4], "x":4.75, "y":2.25},
                {"matrix":[2, 5], "x":5.75, "y":2.25},
                {"matrix":[2, 6], "x":6.75, "y":2.25},
                {"matrix":[2, 7], "x":7.75, "y":2.25},
                {"matrix":[2, 8], "x":8.75, "y":2.25},
                {"matrix":[2, 9], "x":9.75, "y":2.25},
                {"matrix":[2,10], "x":10.75, "y":2.25},
                {"matrix":[2,11], "x":11.75, "y":2.25},
                {"matrix":[2,13], "x":12.75, "y":2.25},
                {"matrix":[1,13], "x":13.75, "y":1.25, "w":1.25, "h":2},
                {"matrix":[2,14], "x":15.25, "y":2.25},

                {"matrix":[3, 0], "x":0, "y":3.25, "w":1.25},
                {"matrix":[3, 1], "x":1.25, "y":3.25},
                {"matrix":[3, 2], "x":2.25, "y":3.25},
                {"matrix":[3, 3], "x":3.25, "y":3.25},
                {"matrix":[3, 4], "x":4.25, "y":3.25},
                {"matrix":[3, 5], "x":5.25, "y":3.25},
                {"matrix":[3, 6], "x":6.25, "y":3.25},
                {"matrix":[3, 7], "x":7.25, "y":3.25},
                {"matrix":[3, 8], "x":8.25, "y":3.25},
                {"matrix":[3, 9], "x":9.25, "y":3.25},
                {"matrix":[3,10], "x":10.25, "y":3.25},
                {"matrix":[3,11], "x":11.25, "y":3.25},
                {"matrix":[3,13], "x":12.25, "y":3.25, "w":1.75},
                {"matrix":[3,14], "x":14.25, "y":3.5},

                {"matrix":[4, 0], "x":0, "y":4.25, "w":1.25},
                {"matrix":[4, 1], "x":1.25, "y":4.25, "w":1.25},
                {"matrix":[4, 2], "x":2.5, "y":4.25, "w":1.25},
                {"matrix":[4, 6], "x":3.75, "y":4.25, "w":6.25},
                {"matrix":[4,10], "x":10, "y":4.25},
                {"matrix":[4,11], "x":11, "y":4.25},
                {"matrix":[4,12], "x":12, "y":4.25},
                {"matrix":[4,13], "x":13.25, "y":4.5},
                {"matrix":[2,12], "x":14.25, "y":4.5},
                {"matrix":[4,14], "x":15.25, "y":4.5}
            ]
        }
    }
}

R keyboards/keychron/q2/rev_0112/rev_0112.c => keyboards/keychron/q2/iso/iso.c +24 -18
@@ 14,7 14,7 @@
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include "quantum.h"
#include "iso.h"

#ifdef RGB_MATRIX_ENABLE
const ckled2001_led PROGMEM g_ckled2001_leds[RGB_MATRIX_LED_COUNT] = {


@@ 98,27 98,33 @@ const ckled2001_led PROGMEM g_ckled2001_leds[RGB_MATRIX_LED_COUNT] = {
    {1, F_16,   D_16,   E_16}
};

#define __ NO_LED

led_config_t g_led_config = {
     {
        {   0,      1,      2,      3,      4,      5,      6,      7,      8,      9,     10,     11,     12,     13,     14  },
        {  15,     16,     17,     18,     19,     20,     21,     22,     23,     24,     25,     26,     27,     42,     28  },
        {  29,     30,     31,     32,     33,     34,     35,     36,     37,     38,     39,     40,     66,     41,     43  },
        {  44,     45,     46,     47,     48,     49,     50,     51,     52,     53,     54,     55, NO_LED,     56,     57  },
        {  58,     59,     60,  NO_LED, NO_LED, NO_LED,    61, NO_LED, NO_LED, NO_LED,     62,     63,     64,     65,     67  }
    {
        // Key Matrix to LED Index
        { 0,  1,  2,  3,  4,  5,  6,  7,  8,   9, 10, 11, 12, 13, 14 },
        { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 42, 28 },
        { 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 66, 41, 43 },
        { 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, __, 56, 57 },
        { 58, 59, 60, __, __, __, 61, __, __, __, 62, 63, 64, 65, 67 }
    },
    {
        {0, 0}, {15, 0}, {30, 0}, {45, 0}, {60, 0}, {75, 0}, {90, 0}, {105, 0}, {120, 0}, {135, 0}, {150, 0}, {165, 0}, {180, 0}, {195, 0},           {224, 0},
        {0,16}, {15,16}, {30,16}, {45,16}, {60,16}, {75,16}, {90,16}, {105,16}, {120,16}, {135,16}, {150,16}, {165,16}, {180,16},                     {224,16},
        {0,32}, {15,32}, {30,32}, {45,32}, {60,32}, {75,32}, {90,32}, {105,32}, {120,32}, {135,32}, {150,32}, {165,32}, {180,32}, {195,16},           {224,32},
        {0,48}, {15,48}, {30,48}, {45,48}, {60,48}, {75,48}, {90,48}, {105,48}, {120,48}, {135,48}, {150,48}, {165,48},           {180,48}, {210,48},
        {0,64}, {15,64}, {30,64},                            {90,64},                               {150,64}, {165,64}, {180,64}, {195,64}, {210,64}, {224,64}
        // LED Index to Physical Position
        {0,0},  {15,0},  {29,0},  {44,0},  {59,0},  {73,0},  {88,0},  {103,0},  {118,0},  {132,0},  {147,0},  {162,0},  {176,0},  {198,0},            {224,0},
        {4,15}, {22,15}, {37,15}, {51,15}, {66,15}, {81,15}, {95,15}, {110,15}, {125,15}, {140,15}, {154,15}, {169,15}, {184,15},                     {224,15},
        {6,30}, {26,30}, {40,30}, {55,30}, {70,30}, {84,30}, {99,30}, {114,30}, {129,30}, {143,30}, {158,30}, {173,30}, {187,30}, {204,23},           {224,30},
        {2,45}, {18,45}, {33,45}, {48,45}, {62,45}, {77,45}, {92,45}, {106,45}, {121,45}, {136,45}, {151,45}, {165,45},           {185,45}, {209,49},
        {2,60}, {20,60}, {39,60},                            {94,60},                               {147,60}, {162,60}, {176,60}, {195,64}, {209,64}, {224,64}
    },
    {
        4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,          4,
        4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,          4,
        4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,          4,          4,
        4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,          4,    4,
        4,    4,    4,                      4,                      4,    4,    4,    4,    4,    4
        // RGB LED Index to Flag
        1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,    1,
        1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,       1,
        1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,    1,
        1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,    1, 1,
        1, 1, 1,          4,          1, 1, 1, 1, 1, 1
    }
};
#endif

#endif // RGB_MATRIX_ENABLE

A keyboards/keychron/q2/iso/iso.h => keyboards/keychron/q2/iso/iso.h +19 -0
@@ 0,0 1,19 @@
/* Copyright 2021 @ Keychron (https://www.keychron.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

#include "quantum.h"

R keyboards/keychron/q2/rev_0112/keymaps/default/keymap.c => keyboards/keychron/q2/iso/keymaps/default/keymap.c +16 -45
@@ 24,16 24,8 @@ enum layers{
    _FN3
};

enum custom_keycodes {
    KC_MISSION_CONTROL = SAFE_RANGE,
    KC_LAUNCHPAD
};

#define KC_WAVE S(KC_GRV)
#define KC_TASK LGUI(KC_TAB)
#define KC_FLXP LGUI(KC_E)
#define KC_MCTL KC_MISSION_CONTROL
#define KC_LPAD KC_LAUNCHPAD

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [MAC_BASE] = LAYOUT_iso_68(


@@ 48,47 40,26 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        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_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_HOME,
        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_RSFT, KC_UP,
        KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                             KC_RALT, MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),
        KC_LCTL, KC_LWIN, KC_LALT,                            KC_SPC,                             KC_RALT, MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),

    [_FN1] = LAYOUT_iso_68(
        KC_GRV,  KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,  KC_VOLU,  KC_TRNS,          KC_TRNS,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,                    KC_TRNS,
        KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS,          KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,            KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS),
        KC_GRV,  KC_BRID, KC_BRIU, _______, _______, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,  KC_VOLU,  _______,          _______,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______,  _______,                    _______,
        _______, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______,  _______,  _______,          _______,
        _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______,            _______, _______,
        _______, _______, _______,                            _______,                            _______, _______,  _______,  _______, _______, _______),

    [_FN2] = LAYOUT_iso_68(
        KC_GRV,  KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,  KC_VOLU,  KC_TRNS,          KC_TRNS,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,                    KC_TRNS,
        KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS,          KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,            KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS),
        KC_GRV,  KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,  KC_VOLU,  _______,          _______,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______,  _______,                    _______,
        _______, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______,  _______,  _______,          _______,
        _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______,            _______, _______,
        _______, _______, _______,                            _______,                            _______, _______,  _______,  _______, _______, _______),

    [_FN3] = LAYOUT_iso_68(
        KC_WAVE, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,   KC_F12,   KC_TRNS,          KC_TRNS,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,                    KC_TRNS,
        KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS,          KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,            KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS)
        KC_TILD, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,   KC_F12,   _______,          _______,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______,  _______,                    _______,
        _______, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______,  _______,  _______,          _______,
        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,            _______, _______,
        _______, _______, _______,                            _______,                            _______, _______,  _______,  _______, _______, _______)
};

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
        case KC_MISSION_CONTROL:
            if (record->event.pressed) {
                host_consumer_send(0x29F);
            } else {
                host_consumer_send(0);
            }
            return false;  // Skip all further processing of this key
        case KC_LAUNCHPAD:
            if (record->event.pressed) {
                host_consumer_send(0x2A0);
            } else {
                host_consumer_send(0);
            }
            return false;  // Skip all further processing of this key
        default:
            return true;  // Process all other keycodes normally
    }
}

A keyboards/keychron/q2/iso/keymaps/keychron/keymap.c => keyboards/keychron/q2/iso/keymaps/keychron/keymap.c +71 -0
@@ 0,0 1,71 @@
/* Copyright 2021 @ Keychron (https://www.keychron.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 "keychron_common.h"

enum layers{
    MAC_BASE,
    WIN_BASE,
    _FN1,
    _FN2,
    _FN3
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [MAC_BASE] = LAYOUT_iso_68(
        KC_ESC,  KC_1,     KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,     KC_MINS,  KC_EQL,   KC_BSPC,          KC_INS,
        KC_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_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_HOME,
        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_RSFT, KC_UP,
        KC_LCTL, KC_LOPTN, KC_LCMMD,                           KC_SPC,                             KC_RCMMD, MO(_FN1), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),

    [WIN_BASE] = LAYOUT_iso_68(
        KC_ESC,  KC_1,     KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,     KC_MINS,  KC_EQL,   KC_BSPC,          KC_INS,
        KC_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_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_HOME,
        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_RSFT, KC_UP,
        KC_LCTL, KC_LWIN,  KC_LALT,                            KC_SPC,                             KC_RALT,  MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),

    [_FN1] = LAYOUT_iso_68(
        KC_GRV,  KC_BRID,  KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE,  KC_VOLD,  KC_VOLU,  _______,          _______,
        RGB_TOG, RGB_MOD,  RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______,  _______,  _______,                    _______,
        _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______,  _______,  _______,  _______,          _______,
        _______, _______,  _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______,  _______,            _______, _______,
        _______, _______,  _______,                            _______,                            _______,  _______,  _______,  _______, _______, _______),

    [_FN2] = LAYOUT_iso_68(
        KC_GRV,  KC_BRID,  KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE,  KC_VOLD,  KC_VOLU,  _______,          _______,
        RGB_TOG, RGB_MOD,  RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______,  _______,  _______,                    _______,
        _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______,  _______,  _______,  _______,          _______,
        _______, _______,  _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______,  _______,            _______, _______,
        _______, _______,  _______,                            _______,                            _______,  _______,  _______,  _______, _______, _______),

    [_FN3] = LAYOUT_iso_68(
        KC_TILD, KC_F1,    KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,   KC_F11,   KC_F12,   _______,          _______,
        RGB_TOG, RGB_MOD,  RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______,  _______,  _______,                    _______,
        _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______,  _______,  _______,  _______,          _______,
        _______, _______,  _______, _______, _______, _______, _______, _______, _______, _______, _______,  _______,            _______, _______,
        _______, _______,  _______,                            _______,                            _______,  _______,  _______,  _______, _______, _______)
};

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    if (!process_record_keychron(keycode, record)) {
        return false;
    }

    return true;
}

A keyboards/keychron/q2/iso/keymaps/keychron/rules.mk => keyboards/keychron/q2/iso/keymaps/keychron/rules.mk +4 -0
@@ 0,0 1,4 @@
VIA_ENABLE = yes

VPATH += keyboards/keychron/common
SRC += keychron_common.c

A keyboards/keychron/q2/iso/keymaps/via/keymap.c => keyboards/keychron/q2/iso/keymaps/via/keymap.c +65 -0
@@ 0,0 1,65 @@
/* Copyright 2021 @ Keychron (https://www.keychron.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

enum layers{
    MAC_BASE,
    WIN_BASE,
    _FN1,
    _FN2,
    _FN3
};

#define KC_TASK LGUI(KC_TAB)
#define KC_FLXP LGUI(KC_E)

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [MAC_BASE] = LAYOUT_iso_68(
        KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,  KC_EQL,   KC_BSPC,          KC_INS,
        KC_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_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_HOME,
        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_RSFT, KC_UP,
        KC_LCTL, KC_LOPT, KC_LCMD,                            KC_SPC,                             KC_RCMD, MO(_FN1), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),

    [WIN_BASE] = LAYOUT_iso_68(
        KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,  KC_EQL,   KC_BSPC,          KC_INS,
        KC_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_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_HOME,
        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_RSFT, KC_UP,
        KC_LCTL, KC_LWIN, KC_LALT,                            KC_SPC,                             KC_RALT, MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),

    [_FN1] = LAYOUT_iso_68(
        KC_GRV,  KC_BRID, KC_BRIU, _______, _______, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,  KC_VOLU,  _______,          _______,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______,  _______,                    _______,
        _______, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______,  _______,  _______,          _______,
        _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______,            _______, _______,
        _______, _______, _______,                            _______,                            _______, _______,  _______,  _______, _______, _______),

    [_FN2] = LAYOUT_iso_68(
        KC_GRV,  KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,  KC_VOLU,  _______,          _______,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______,  _______,                    _______,
        _______, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______,  _______,  _______,          _______,
        _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______,            _______, _______,
        _______, _______, _______,                            _______,                            _______, _______,  _______,  _______, _______, _______),

    [_FN3] = LAYOUT_iso_68(
        KC_TILD, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,   KC_F12,   _______,          _______,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______,  _______,                    _______,
        _______, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______,  _______,  _______,          _______,
        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,            _______, _______,
        _______, _______, _______,                            _______,                            _______, _______,  _______,  _______, _______, _______)
};

R keyboards/keychron/q2/rev_0112/keymaps/via/rules.mk => keyboards/keychron/q2/iso/keymaps/via/rules.mk +0 -1
@@ 1,2 1,1 @@
VIA_ENABLE = yes
MOUSEKEY_ENABLE = no
\ No newline at end of file

R keyboards/keychron/q2/rev_0112/readme.md => keyboards/keychron/q2/iso/readme.md +0 -0
R keyboards/keychron/q2/rev_0110/rules.mk => keyboards/keychron/q2/iso/rules.mk +0 -0
R keyboards/keychron/q2/rev_0113/config.h => keyboards/keychron/q2/iso_encoder/config.h +1 -2
@@ 24,6 24,5 @@
/* Encoder used pins */
#define ENCODERS_PAD_A { A10 }
#define ENCODERS_PAD_B { B5 }

/* Specifies the number of pulses the encoder registers between each detent */
#define ENCODER_RESOLUTION 4
#define ENCODER_DEFAULT_POS 0x3

A keyboards/keychron/q2/iso_encoder/info.json => keyboards/keychron/q2/iso_encoder/info.json +89 -0
@@ 0,0 1,89 @@
{
    "keyboard_name": "Q2",
    "manufacturer": "Keychron",
    "url": "https://github.com/Keychron",
    "maintainer": "lalalademaxiya1",
    "usb": {
        "vid": "0x3434",
        "pid": "0x0113",
        "device_version": "1.0.0"
    },
    "layouts": {
        "LAYOUT_iso_68": {
            "layout": [
                {"matrix":[0, 0], "x":0, "y":0.25},
                {"matrix":[0, 1], "x":1, "y":0.25},
                {"matrix":[0, 2], "x":2, "y":0.25},
                {"matrix":[0, 3], "x":3, "y":0.25},
                {"matrix":[0, 4], "x":4, "y":0.25},
                {"matrix":[0, 5], "x":5, "y":0.25},
                {"matrix":[0, 6], "x":6, "y":0.25},
                {"matrix":[0, 7], "x":7, "y":0.25},
                {"matrix":[0, 8], "x":8, "y":0.25},
                {"matrix":[0, 9], "x":9, "y":0.25},
                {"matrix":[0,10], "x":10, "y":0.25},
                {"matrix":[0,11], "x":11, "y":0.25},
                {"matrix":[0,12], "x":12, "y":0.25},
                {"matrix":[0,13], "x":13, "y":0.25, "w":2},
                {"matrix":[0,14], "x":15.25, "y":0},

                {"matrix":[1, 0], "x":0, "y":1.25, "w":1.5},
                {"matrix":[1, 1], "x":1.5, "y":1.25},
                {"matrix":[1, 2], "x":2.5, "y":1.25},
                {"matrix":[1, 3], "x":3.5, "y":1.25},
                {"matrix":[1, 4], "x":4.5, "y":1.25},
                {"matrix":[1, 5], "x":5.5, "y":1.25},
                {"matrix":[1, 6], "x":6.5, "y":1.25},
                {"matrix":[1, 7], "x":7.5, "y":1.25},
                {"matrix":[1, 8], "x":8.5, "y":1.25},
                {"matrix":[1, 9], "x":9.5, "y":1.25},
                {"matrix":[1,10], "x":10.5, "y":1.25},
                {"matrix":[1,11], "x":11.5, "y":1.25},
                {"matrix":[1,12], "x":12.5, "y":1.25},
                {"matrix":[1,14], "x":15.25, "y":1.25},

                {"matrix":[2, 0], "x":0, "y":2.25, "w":1.75},
                {"matrix":[2, 1], "x":1.75, "y":2.25},
                {"matrix":[2, 2], "x":2.75, "y":2.25},
                {"matrix":[2, 3], "x":3.75, "y":2.25},
                {"matrix":[2, 4], "x":4.75, "y":2.25},
                {"matrix":[2, 5], "x":5.75, "y":2.25},
                {"matrix":[2, 6], "x":6.75, "y":2.25},
                {"matrix":[2, 7], "x":7.75, "y":2.25},
                {"matrix":[2, 8], "x":8.75, "y":2.25},
                {"matrix":[2, 9], "x":9.75, "y":2.25},
                {"matrix":[2,10], "x":10.75, "y":2.25},
                {"matrix":[2,11], "x":11.75, "y":2.25},
                {"matrix":[2,13], "x":12.75, "y":2.25},
                {"matrix":[1,13], "x":13.75, "y":1.25, "w":1.25, "h":2},
                {"matrix":[2,14], "x":15.25, "y":2.25},

                {"matrix":[3, 0], "x":0, "y":3.25, "w":1.25},
                {"matrix":[3, 1], "x":1.25, "y":3.25},
                {"matrix":[3, 2], "x":2.25, "y":3.25},
                {"matrix":[3, 3], "x":3.25, "y":3.25},
                {"matrix":[3, 4], "x":4.25, "y":3.25},
                {"matrix":[3, 5], "x":5.25, "y":3.25},
                {"matrix":[3, 6], "x":6.25, "y":3.25},
                {"matrix":[3, 7], "x":7.25, "y":3.25},
                {"matrix":[3, 8], "x":8.25, "y":3.25},
                {"matrix":[3, 9], "x":9.25, "y":3.25},
                {"matrix":[3,10], "x":10.25, "y":3.25},
                {"matrix":[3,11], "x":11.25, "y":3.25},
                {"matrix":[3,13], "x":12.25, "y":3.25, "w":1.75},
                {"matrix":[3,14], "x":14.25, "y":3.5},

                {"matrix":[4, 0], "x":0, "y":4.25, "w":1.25},
                {"matrix":[4, 1], "x":1.25, "y":4.25, "w":1.25},
                {"matrix":[4, 2], "x":2.5, "y":4.25, "w":1.25},
                {"matrix":[4, 6], "x":3.75, "y":4.25, "w":6.25},
                {"matrix":[4,10], "x":10, "y":4.25},
                {"matrix":[4,11], "x":11, "y":4.25},
                {"matrix":[4,12], "x":12, "y":4.25},
                {"matrix":[4,13], "x":13.25, "y":4.5},
                {"matrix":[2,12], "x":14.25, "y":4.5},
                {"matrix":[4,14], "x":15.25, "y":4.5}
            ]
        }
    }
}

R keyboards/keychron/q2/rev_0113/rev_0113.c => keyboards/keychron/q2/iso_encoder/iso_encoder.c +23 -31
@@ 14,7 14,7 @@
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include "quantum.h"
#include "iso_encoder.h"

#ifdef RGB_MATRIX_ENABLE
const ckled2001_led PROGMEM g_ckled2001_leds[RGB_MATRIX_LED_COUNT] = {


@@ 98,41 98,33 @@ const ckled2001_led PROGMEM g_ckled2001_leds[RGB_MATRIX_LED_COUNT] = {
    {1, F_16,   D_16,   E_16}
};

#define __ NO_LED

led_config_t g_led_config = {
     {
        {   0,      1,      2,      3,      4,      5,      6,      7,      8,      9,     10,     11,     12,     13,     14  },
        {  15,     16,     17,     18,     19,     20,     21,     22,     23,     24,     25,     26,     27,     42,     28  },
        {  29,     30,     31,     32,     33,     34,     35,     36,     37,     38,     39,     40,     66,     41,     43  },
        {  44,     45,     46,     47,     48,     49,     50,     51,     52,     53,     54,     55, NO_LED,     56,     57  },
        {  58,     59,     60,  NO_LED, NO_LED, NO_LED,    61, NO_LED, NO_LED, NO_LED,     62,     63,     64,     65,     67  }
    {
        // Key Matrix to LED Index
        { 0,  1,  2,  3,  4,  5,  6,  7,  8,   9, 10, 11, 12, 13, 14 },
        { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 42, 28 },
        { 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 66, 41, 43 },
        { 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, __, 56, 57 },
        { 58, 59, 60, __, __, __, 61, __, __, __, 62, 63, 64, 65, 67 }
    },
    {
        {0, 0}, {15, 0}, {30, 0}, {45, 0}, {60, 0}, {75, 0}, {90, 0}, {105, 0}, {120, 0}, {135, 0}, {150, 0}, {165, 0}, {180, 0}, {195, 0},           {224, 0},
        {0,16}, {15,16}, {30,16}, {45,16}, {60,16}, {75,16}, {90,16}, {105,16}, {120,16}, {135,16}, {150,16}, {165,16}, {180,16},                     {224,16},
        {0,32}, {15,32}, {30,32}, {45,32}, {60,32}, {75,32}, {90,32}, {105,32}, {120,32}, {135,32}, {150,32}, {165,32}, {180,32}, {195,16},           {224,32},
        {0,48}, {15,48}, {30,48}, {45,48}, {60,48}, {75,48}, {90,48}, {105,48}, {120,48}, {135,48}, {150,48}, {165,48},           {180,48}, {210,48},
        {0,64}, {15,64}, {30,64},                            {90,64},                               {150,64}, {165,64}, {180,64}, {195,64}, {210,64}, {224,64}
        // LED Index to Physical Position
        {0,0},  {15,0},  {29,0},  {44,0},  {59,0},  {73,0},  {88,0},  {103,0},  {118,0},  {132,0},  {147,0},  {162,0},  {176,0},  {198,0},            {224,0},
        {4,15}, {22,15}, {37,15}, {51,15}, {66,15}, {81,15}, {95,15}, {110,15}, {125,15}, {140,15}, {154,15}, {169,15}, {184,15},                     {224,15},
        {6,30}, {26,30}, {40,30}, {55,30}, {70,30}, {84,30}, {99,30}, {114,30}, {129,30}, {143,30}, {158,30}, {173,30}, {187,30}, {204,23},           {224,30},
        {2,45}, {18,45}, {33,45}, {48,45}, {62,45}, {77,45}, {92,45}, {106,45}, {121,45}, {136,45}, {151,45}, {165,45},           {185,45}, {209,49},
        {2,60}, {20,60}, {39,60},                            {94,60},                               {147,60}, {162,60}, {176,60}, {195,64}, {209,64}, {224,64}
    },
    {
        4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,          4,
        4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,          4,
        4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,          4,          4,
        4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,    4,          4,    4,
        4,    4,    4,                      4,                      4,    4,    4,    4,    4,    4
        // RGB LED Index to Flag
        1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,    1,
        1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,       1,
        1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,    1,
        1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,    1, 1,
        1, 1, 1,          4,          1, 1, 1, 1, 1, 1
    }
};
#endif

#ifdef ENCODER_ENABLE
bool encoder_update_kb(uint8_t index, bool clockwise) {
    if (!encoder_update_user(index, clockwise)) { return false; }
    if (index == 0) {
        if (clockwise) {
            tap_code_delay(KC_VOLU, 10);
        } else {
            tap_code_delay(KC_VOLD, 10);
        }
    }
    return true;
}
#endif
#endif // RGB_MATRIX_ENABLE

R keyboards/keychron/q2/rev_0110/rev_0110.h => keyboards/keychron/q2/iso_encoder/iso_encoder.h +0 -16
@@ 17,19 17,3 @@
#pragma once

#include "quantum.h"

#define XXX KC_NO

#define LAYOUT_ansi_67( \
    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D,      K0E,\
    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D,      K1E,\
    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B,      K2D,      K2E,\
    K30,      K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B,      K3D, K3E,     \
    K40, K41, K42,                K46,                K4A, K4B, K4C, K4D, K2C, K4E \
) { \
    { K00, K01,  K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B,  K0C, K0D, K0E, }, \
    { K10, K11,  K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B,  K1C, K1D, K1E, }, \
    { K20, K21,  K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B,  K2C, K2D, K2E, }, \
    { K30, XXX,  K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B,  XXX, K3D, K3E, }, \
    { K40, K41,  K42, XXX, XXX, XXX, K46, XXX, XXX, XXX, K4A, K4B,  K4C, K4D, K4E, }  \
}

R keyboards/keychron/q2/rev_0113/keymaps/default/keymap.c => keyboards/keychron/q2/iso_encoder/keymaps/default/keymap.c +19 -48
@@ 24,16 24,8 @@ enum layers{
    _FN3
};

enum custom_keycodes {
    KC_MISSION_CONTROL = SAFE_RANGE,
    KC_LAUNCHPAD
};

#define KC_WAVE S(KC_GRV)
#define KC_TASK LGUI(KC_TAB)
#define KC_FLXP LGUI(KC_E)
#define KC_MCTL KC_MISSION_CONTROL
#define KC_LPAD KC_LAUNCHPAD

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [MAC_BASE] = LAYOUT_iso_68(


@@ 48,57 40,36 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        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_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_HOME,
        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_RSFT, KC_UP,
        KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                             KC_RALT, MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),
        KC_LCTL, KC_LWIN, KC_LALT,                            KC_SPC,                             KC_RALT, MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),

    [_FN1] = LAYOUT_iso_68(
        KC_GRV,  KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,  KC_VOLU,  KC_TRNS,          KC_TRNS,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,                    KC_TRNS,
        KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS,          KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,            KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS),
        KC_GRV,  KC_BRID, KC_BRIU, _______, _______, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,  KC_VOLU,  _______,          _______,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______,  _______,                    _______,
        _______, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______,  _______,  _______,          _______,
        _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______,            _______, _______,
        _______, _______, _______,                            _______,                            _______, _______,  _______,  _______, _______, _______),

    [_FN2] = LAYOUT_iso_68(
        KC_GRV,  KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,  KC_VOLU,  KC_TRNS,          KC_TRNS,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,                    KC_TRNS,
        KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS,          KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,            KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS),
        KC_GRV,  KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,  KC_VOLU,  _______,          _______,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______,  _______,                    _______,
        _______, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______,  _______,  _______,          _______,
        _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______,            _______, _______,
        _______, _______, _______,                            _______,                            _______, _______,  _______,  _______, _______, _______),

    [_FN3] = LAYOUT_iso_68(
        KC_WAVE, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,   KC_F12,   KC_TRNS,          KC_TRNS,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,                    KC_TRNS,
        KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS,          KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,            KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS)
        KC_TILD, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,   KC_F12,   _______,          _______,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______,  _______,                    _______,
        _______, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______,  _______,  _______,          _______,
        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,            _______, _______,
        _______, _______, _______,                            _______,                            _______, _______,  _______,  _______, _______, _______)
};

#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
    [MAC_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
    [WIN_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
    [_FN1]     = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
    [_FN2]     = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
    [_FN3]     = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
    [_FN1]     = { ENCODER_CCW_CW(_______, _______) },
    [_FN2]     = { ENCODER_CCW_CW(_______, _______) },
    [_FN3]     = { ENCODER_CCW_CW(_______, _______) },
};
#endif

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
        case KC_MISSION_CONTROL:
            if (record->event.pressed) {
                host_consumer_send(0x29F);
            } else {
                host_consumer_send(0);
            }
            return false;  // Skip all further processing of this key
        case KC_LAUNCHPAD:
            if (record->event.pressed) {
                host_consumer_send(0x2A0);
            } else {
                host_consumer_send(0);
            }
            return false;  // Skip all further processing of this key
        default:
            return true;  // Process all other keycodes normally
    }
}

R keyboards/keychron/q2/rev_0113/keymaps/default/rules.mk => keyboards/keychron/q2/iso_encoder/keymaps/default/rules.mk +0 -0
R keyboards/keychron/q2/rev_0113/keymaps/dhertz/keymap.c => keyboards/keychron/q2/iso_encoder/keymaps/dhertz/keymap.c +0 -0
R keyboards/keychron/q2/rev_0113/keymaps/dhertz/rules.mk => keyboards/keychron/q2/iso_encoder/keymaps/dhertz/rules.mk +0 -0
A keyboards/keychron/q2/iso_encoder/keymaps/keychron/keymap.c => keyboards/keychron/q2/iso_encoder/keymaps/keychron/keymap.c +81 -0
@@ 0,0 1,81 @@
/* Copyright 2021 @ Keychron (https://www.keychron.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 "keychron_common.h"

enum layers{
    MAC_BASE,
    WIN_BASE,
    _FN1,
    _FN2,
    _FN3
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [MAC_BASE] = LAYOUT_iso_68(
        KC_ESC,  KC_1,     KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,     KC_MINS,  KC_EQL,   KC_BSPC,          KC_MUTE,
        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_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_HOME,
        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_RSFT, KC_UP,
        KC_LCTL, KC_LOPTN, KC_LCMMD,                           KC_SPC,                             KC_RCMMD, MO(_FN1), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),

    [WIN_BASE] = LAYOUT_iso_68(
        KC_ESC,  KC_1,     KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,     KC_MINS,  KC_EQL,   KC_BSPC,          KC_MUTE,
        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_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_HOME,
        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_RSFT, KC_UP,
        KC_LCTL, KC_LWIN,  KC_LALT,                            KC_SPC,                             KC_RALT,  MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),

    [_FN1] = LAYOUT_iso_68(
        KC_GRV,  KC_BRID,  KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE,  KC_VOLD,  KC_VOLU,  _______,          RGB_TOG,
        RGB_TOG, RGB_MOD,  RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______,  _______,  _______,                    _______,
        _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______,  _______,  _______,  _______,          _______,
        _______, _______,  _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______,  _______,            _______, _______,
        _______, _______,  _______,                            _______,                            _______,  _______,  _______,  _______, _______, _______),

    [_FN2] = LAYOUT_iso_68(
        KC_GRV,  KC_BRID,  KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE,  KC_VOLD,  KC_VOLU,  _______,          RGB_TOG,
        RGB_TOG, RGB_MOD,  RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______,  _______,  _______,                    _______,
        _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______,  _______,  _______,  _______,          _______,
        _______, _______,  _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______,  _______,            _______, _______,
        _______, _______,  _______,                            _______,                            _______,  _______,  _______,  _______, _______, _______),

    [_FN3] = LAYOUT_iso_68(
        KC_TILD, KC_F1,    KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,   KC_F11,   KC_F12,   _______,          _______,
        RGB_TOG, RGB_MOD,  RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______,  _______,  _______,                    _______,
        _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______,  _______,  _______,  _______,          _______,
        _______, _______,  _______, _______, _______, _______, _______, _______, _______, _______, _______,  _______,            _______, _______,
        _______, _______,  _______,                            _______,                            _______,  _______,  _______,  _______, _______, _______)
};

#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
    [MAC_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
    [WIN_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
    [_FN1]     = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
    [_FN2]     = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
    [_FN3]     = { ENCODER_CCW_CW(_______, _______) },
};
#endif

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    if (!process_record_keychron(keycode, record)) {
        return false;
    }

    return true;
}

A keyboards/keychron/q2/iso_encoder/keymaps/keychron/rules.mk => keyboards/keychron/q2/iso_encoder/keymaps/keychron/rules.mk +5 -0
@@ 0,0 1,5 @@
VIA_ENABLE = yes
ENCODER_MAP_ENABLE = yes

VPATH += keyboards/keychron/common
SRC += keychron_common.c

A keyboards/keychron/q2/iso_encoder/keymaps/via/keymap.c => keyboards/keychron/q2/iso_encoder/keymaps/via/keymap.c +75 -0
@@ 0,0 1,75 @@
/* Copyright 2021 @ Keychron (https://www.keychron.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

enum layers{
    MAC_BASE,
    WIN_BASE,
    _FN1,
    _FN2,
    _FN3
};

#define KC_TASK LGUI(KC_TAB)
#define KC_FLXP LGUI(KC_E)

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [MAC_BASE] = LAYOUT_iso_68(
        KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,  KC_EQL,   KC_BSPC,          KC_MUTE,
        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_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_HOME,
        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_RSFT, KC_UP,
        KC_LCTL, KC_LOPT, KC_LCMD,                            KC_SPC,                             KC_RCMD, MO(_FN1), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),

    [WIN_BASE] = LAYOUT_iso_68(
        KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,  KC_EQL,   KC_BSPC,          KC_MUTE,
        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_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_HOME,
        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_RSFT, KC_UP,
        KC_LCTL, KC_LWIN, KC_LALT,                            KC_SPC,                             KC_RALT, MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),

    [_FN1] = LAYOUT_iso_68(
        KC_GRV,  KC_BRID, KC_BRIU, _______, _______, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,  KC_VOLU,  _______,          RGB_TOG,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______,  _______,                    _______,
        _______, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______,  _______,  _______,          _______,
        _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______,            _______, _______,
        _______, _______, _______,                            _______,                            _______, _______,  _______,  _______, _______, _______),

    [_FN2] = LAYOUT_iso_68(
        KC_GRV,  KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,  KC_VOLU,  _______,          RGB_TOG,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______,  _______,                    _______,
        _______, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______,  _______,  _______,          _______,
        _______, _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______,            _______, _______,
        _______, _______, _______,                            _______,                            _______, _______,  _______,  _______, _______, _______),

    [_FN3] = LAYOUT_iso_68(
        KC_TILD, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,   KC_F12,   _______,          _______,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______,  _______,                    _______,
        _______, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______,  _______,  _______,          _______,
        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,            _______, _______,
        _______, _______, _______,                            _______,                            _______, _______,  _______,  _______, _______, _______)
};

#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
    [MAC_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
    [WIN_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
    [_FN1]     = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
    [_FN2]     = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
    [_FN3]     = { ENCODER_CCW_CW(_______, _______) },
};
#endif

R keyboards/keychron/q2/rev_0113/keymaps/via/rules.mk => keyboards/keychron/q2/iso_encoder/keymaps/via/rules.mk +1 -1
@@ 1,2 1,2 @@
VIA_ENABLE = yes
MOUSEKEY_ENABLE = no
\ No newline at end of file
ENCODER_MAP_ENABLE = yes

R keyboards/keychron/q2/rev_0113/readme.md => keyboards/keychron/q2/iso_encoder/readme.md +0 -0
R keyboards/keychron/q2/rev_0111/rules.mk => keyboards/keychron/q2/iso_encoder/rules.mk +0 -0
M keyboards/keychron/q2/q2.c => keyboards/keychron/q2/q2.c +4 -0
@@ 24,6 24,8 @@ const matrix_row_t matrix_mask[] = {
    0b1111111111101111,
};

#ifdef DIP_SWITCH_ENABLE

bool dip_switch_update_kb(uint8_t index, bool active) {
    if (!dip_switch_update_user(index, active)) { return false;}
    if (index == 0) {


@@ 31,3 33,5 @@ bool dip_switch_update_kb(uint8_t index, bool active) {
    }
    return true;
}

#endif // DIP_SWITCH_ENABLE

M keyboards/keychron/q2/q2.h => keyboards/keychron/q2/q2.h +8 -8
@@ 18,12 18,12 @@

#include "quantum.h"

#if   defined(KEYBOARD_keychron_q2_rev_0110)
#    include "rev_0110.h"
#elif defined(KEYBOARD_keychron_q2_rev_0111)
#    include "rev_0111.h"
#elif defined(KEYBOARD_keychron_q2_rev_0112)
#    include "rev_0112.h"
#elif defined(KEYBOARD_keychron_q2_rev_0113)
#    include "rev_0113.h"
#if   defined(KEYBOARD_keychron_q2_ansi)
#    include "ansi.h"
#elif defined(KEYBOARD_keychron_q2_ansi_encoder)
#    include "ansi_encoder.h"
#elif defined(KEYBOARD_keychron_q2_iso)
#    include "iso.h"
#elif defined(KEYBOARD_keychron_q2_iso_encoder)
#    include "iso_encoder.h"
#endif

M keyboards/keychron/q2/readme.md => keyboards/keychron/q2/readme.md +2 -2
@@ 8,11 8,11 @@ A customizable 65% keyboard.

Make example for this keyboard (after setting up your build environment):

    make keychron/q2/rev_0110:default
  make keychron/q2/ansi:default

Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))

    make keychron/q2/rev_0110:default:flash
  make keychron/q2/ansi:default:flash

**Reset Key**: Hold down the key located at *K00*, commonly programmed as *Esc* while plugging in the keyboard.


D keyboards/keychron/q2/rev_0110/info.json => keyboards/keychron/q2/rev_0110/info.json +0 -88
@@ 1,88 0,0 @@
{
    "keyboard_name": "Q2",
    "manufacturer": "Keychron",
    "url": "https://github.com/Keychron",
    "maintainer": "lalalademaxiya1",
    "usb": {
        "vid": "0x3434",
        "pid": "0x0110",
        "device_version": "1.0.0"
    },
    "layouts": {
        "LAYOUT_ansi_67": {
            "layout": [
                {"label":"Esc", "x":0, "y":0.25},
                {"label":"1!", "x":1, "y":0.25},
                {"label":"2@", "x":2, "y":0.25},
                {"label":"3#", "x":3, "y":0.25},
                {"label":"4$", "x":4, "y":0.25},
                {"label":"5%", "x":5, "y":0.25},
                {"label":"6^", "x":6, "y":0.25},
                {"label":"7&", "x":7, "y":0.25},
                {"label":"8*", "x":8, "y":0.25},
                {"label":"9(", "x":9, "y":0.25},
                {"label":"0)", "x":10, "y":0.25},
                {"label":"-_", "x":11, "y":0.25},
                {"label":"=+", "x":12, "y":0.25},
                {"label":"Backspace", "x":13, "y":0.25, "w":2},
                {"label":"Insert", "x":15.25, "y":0},

                {"label":"Tab", "x":0, "y":1.25, "w":1.5},
                {"label":"Q", "x":1.5, "y":1.25},
                {"label":"W", "x":2.5, "y":1.25},
                {"label":"E", "x":3.5, "y":1.25},
                {"label":"R", "x":4.5, "y":1.25},
                {"label":"T", "x":5.5, "y":1.25},
                {"label":"Y", "x":6.5, "y":1.25},
                {"label":"U", "x":7.5, "y":1.25},
                {"label":"I", "x":8.5, "y":1.25},
                {"label":"O", "x":9.5, "y":1.25},
                {"label":"P", "x":10.5, "y":1.25},
                {"label":"[{", "x":11.5, "y":1.25},
                {"label":"]}", "x":12.5, "y":1.25},
                {"label":"\\|", "x":13.5, "y":1.25, "w":1.5},
                {"label":"Delete", "x":15.25, "y":1.25},

                {"label":"Caps Lock", "x":0, "y":2.25, "w":1.75},
                {"label":"A", "x":1.75, "y":2.25},
                {"label":"S", "x":2.75, "y":2.25},
                {"label":"D", "x":3.75, "y":2.25},
                {"label":"F", "x":4.75, "y":2.25},
                {"label":"G", "x":5.75, "y":2.25},
                {"label":"H", "x":6.75, "y":2.25},
                {"label":"J", "x":7.75, "y":2.25},
                {"label":"K", "x":8.75, "y":2.25},
                {"label":"L", "x":9.75, "y":2.25},
                {"label":";:", "x":10.75, "y":2.25},
                {"label":"'\"", "x":11.75, "y":2.25},
                {"label":"Enter", "x":12.75, "y":2.25, "w":2.25},
                {"label":"Home", "x":15.25, "y":2.25},

                {"label":"Shift", "x":0, "y":3.25, "w":2.25},
                {"label":"Z", "x":2.25, "y":3.25},
                {"label":"X", "x":3.25, "y":3.25},
                {"label":"C", "x":4.25, "y":3.25},
                {"label":"V", "x":5.25, "y":3.25},
                {"label":"B", "x":6.25, "y":3.25},
                {"label":"N", "x":7.25, "y":3.25},
                {"label":"M", "x":8.25, "y":3.25},
                {"label":",<", "x":9.25, "y":3.25},
                {"label":".>", "x":10.25, "y":3.25},
                {"label":"/?", "x":11.25, "y":3.25},
                {"label":"Shift", "x":12.25, "y":3.25, "w":1.75},
                {"label":"Up", "x":14.25, "y":3.5},

                {"label":"Ctrl", "x":0, "y":4.25, "w":1.25},
                {"label":"Win", "x":1.25, "y":4.25, "w":1.25},
                {"label":"Alt", "x":2.5, "y":4.25, "w":1.25},
                {"label":"Space", "x":3.75, "y":4.25, "w":6.25},
                {"label":"Alt", "x":10, "y":4.25},
                {"label":"Fn1", "x":11, "y":4.25},
                {"label":"Fn2", "x":12, "y":4.25},
                {"label":"Left", "x":13.25, "y":4.5},
                {"label":"Down", "x":14.25, "y":4.5},
                {"label":"Right", "x":15.25, "y":4.5}
            ]
        }
    }
}

D keyboards/keychron/q2/rev_0110/keymaps/via/keymap.c => keyboards/keychron/q2/rev_0110/keymaps/via/keymap.c +0 -112
@@ 1,112 0,0 @@
/* Copyright 2021 @ Keychron (https://www.keychron.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

enum layers{
    MAC_BASE,
    WIN_BASE,
    _FN1,
    _FN2,
    _FN3
};

enum custom_keycodes {
    KC_MISSION_CONTROL = USER00,
    KC_LAUNCHPAD,
    KC_TASK,
    KC_FLXP
};

#define KC_WAVE S(KC_GRV)
#define KC_MCTL KC_MISSION_CONTROL
#define KC_LPAD KC_LAUNCHPAD

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [MAC_BASE] = LAYOUT_ansi_67(
        KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,  KC_EQL,   KC_BSPC,          KC_INS,
        KC_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_ENT,           KC_HOME,
        KC_LSFT,          KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,            KC_RSFT, KC_UP,
        KC_LCTL, KC_LOPT, KC_LCMD,                            KC_SPC,                             KC_RCMD, MO(_FN1), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),

    [WIN_BASE] = LAYOUT_ansi_67(
        KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,  KC_EQL,   KC_BSPC,          KC_INS,
        KC_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_ENT,           KC_HOME,
        KC_LSFT,          KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,            KC_RSFT, KC_UP,
        KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                             KC_RALT, MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),

    [_FN1] = LAYOUT_ansi_67(
        KC_GRV,  KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,  KC_VOLU, KC_TRNS,          KC_TRNS,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS,          KC_TRNS,
        KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,           KC_TRNS,          KC_TRNS,
        KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,           KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),

    [_FN2] = LAYOUT_ansi_67(
        KC_GRV,  KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,  KC_VOLU, KC_TRNS,          KC_TRNS,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS,          KC_TRNS,
        KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,           KC_TRNS,          KC_TRNS,
        KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,           KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),

    [_FN3] = LAYOUT_ansi_67(
        KC_WAVE, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,   KC_F12,  KC_TRNS,          KC_TRNS,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS,          KC_TRNS,
        KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,           KC_TRNS,          KC_TRNS,
        KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,           KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
};

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
        case KC_MISSION_CONTROL:
            if (record->event.pressed) {
                host_consumer_send(0x29F);
            } else {
                host_consumer_send(0);
            }
            return false;  // Skip all further processing of this key
        case KC_LAUNCHPAD:
            if (record->event.pressed) {
                host_consumer_send(0x2A0);
            } else {
                host_consumer_send(0);
            }
            return false;  // Skip all further processing of this key
        case KC_TASK:
            if (record->event.pressed) {
                register_code(KC_LWIN);
                register_code(KC_TAB);
            } else {
                unregister_code(KC_LWIN);
                unregister_code(KC_TAB);
            }
            return false;  // Skip all further processing of this key
        case KC_FLXP:
            if (record->event.pressed) {
                register_code(KC_LWIN);
                register_code(KC_E);
            } else {
                unregister_code(KC_LWIN);
                unregister_code(KC_E);
            }
            return false;  // Skip all further processing of this key
        default:
            return true;  // Process all other keycodes normally
    }
}

D keyboards/keychron/q2/rev_0111/info.json => keyboards/keychron/q2/rev_0111/info.json +0 -165
@@ 1,165 0,0 @@
{
    "keyboard_name": "Q2",
    "manufacturer": "Keychron",
    "url": "https://github.com/Keychron",
    "maintainer": "lalalademaxiya1",
    "usb": {
        "vid": "0x3434",
        "pid": "0x0111",
        "device_version": "1.0.0"
    },
    "layouts": {
        "LAYOUT_ansi_67": {
            "layout": [
                {"label":"Esc", "x":0, "y":0.25},
                {"label":"1!", "x":1, "y":0.25},
                {"label":"2@", "x":2, "y":0.25},
                {"label":"3#", "x":3, "y":0.25},
                {"label":"4$", "x":4, "y":0.25},
                {"label":"5%", "x":5, "y":0.25},
                {"label":"6^", "x":6, "y":0.25},
                {"label":"7&", "x":7, "y":0.25},
                {"label":"8*", "x":8, "y":0.25},
                {"label":"9(", "x":9, "y":0.25},
                {"label":"0)", "x":10, "y":0.25},
                {"label":"-_", "x":11, "y":0.25},
                {"label":"=+", "x":12, "y":0.25},
                {"label":"Backspace", "x":13, "y":0.25, "w":2},
                {"label":"Mute", "x":15.25, "y":0},

                {"label":"Tab", "x":0, "y":1.25, "w":1.5},
                {"label":"Q", "x":1.5, "y":1.25},
                {"label":"W", "x":2.5, "y":1.25},
                {"label":"E", "x":3.5, "y":1.25},
                {"label":"R", "x":4.5, "y":1.25},
                {"label":"T", "x":5.5, "y":1.25},
                {"label":"Y", "x":6.5, "y":1.25},
                {"label":"U", "x":7.5, "y":1.25},
                {"label":"I", "x":8.5, "y":1.25},
                {"label":"O", "x":9.5, "y":1.25},
                {"label":"P", "x":10.5, "y":1.25},
                {"label":"[{", "x":11.5, "y":1.25},
                {"label":"]}", "x":12.5, "y":1.25},
                {"label":"\\|", "x":13.5, "y":1.25, "w":1.5},
                {"label":"Delete", "x":15.25, "y":1.25},

                {"label":"Caps Lock", "x":0, "y":2.25, "w":1.75},
                {"label":"A", "x":1.75, "y":2.25},
                {"label":"S", "x":2.75, "y":2.25},
                {"label":"D", "x":3.75, "y":2.25},
                {"label":"F", "x":4.75, "y":2.25},
                {"label":"G", "x":5.75, "y":2.25},
                {"label":"H", "x":6.75, "y":2.25},
                {"label":"J", "x":7.75, "y":2.25},
                {"label":"K", "x":8.75, "y":2.25},
                {"label":"L", "x":9.75, "y":2.25},
                {"label":";:", "x":10.75, "y":2.25},
                {"label":"'\"", "x":11.75, "y":2.25},
                {"label":"Enter", "x":12.75, "y":2.25, "w":2.25},
                {"label":"Home", "x":15.25, "y":2.25},

                {"label":"Shift", "x":0, "y":3.25, "w":2.25},
                {"label":"Z", "x":2.25, "y":3.25},
                {"label":"X", "x":3.25, "y":3.25},
                {"label":"C", "x":4.25, "y":3.25},
                {"label":"V", "x":5.25, "y":3.25},
                {"label":"B", "x":6.25, "y":3.25},
                {"label":"N", "x":7.25, "y":3.25},
                {"label":"M", "x":8.25, "y":3.25},
                {"label":",<", "x":9.25, "y":3.25},
                {"label":".>", "x":10.25, "y":3.25},
                {"label":"/?", "x":11.25, "y":3.25},
                {"label":"Shift", "x":12.25, "y":3.25, "w":1.75},
                {"label":"Up", "x":14.25, "y":3.5},

                {"label":"Ctrl", "x":0, "y":4.25, "w":1.25},
                {"label":"Win", "x":1.25, "y":4.25, "w":1.25},
                {"label":"Alt", "x":2.5, "y":4.25, "w":1.25},
                {"label":"Space", "x":3.75, "y":4.25, "w":6.25},
                {"label":"Alt", "x":10, "y":4.25},
                {"label":"Fn1", "x":11, "y":4.25},
                {"label":"Fn2", "x":12, "y":4.25},
                {"label":"Left", "x":13.25, "y":4.5},
                {"label":"Down", "x":14.25, "y":4.5},
                {"label":"Right", "x":15.25, "y":4.5}
            ]
        },
        "LAYOUT_all": {
            "layout": [
                {"label":"Esc", "x":0, "y":0.75},
                {"label":"1!", "x":1, "y":0.75},
                {"label":"2@", "x":2, "y":0.75},
                {"label":"3#", "x":3, "y":0.75},
                {"label":"4$", "x":4, "y":0.75},
                {"label":"5%", "x":5, "y":0.75},
                {"label":"6^", "x":6, "y":0.75},
                {"label":"7&", "x":7, "y":0.75},
                {"label":"8*", "x":8, "y":0.75},
                {"label":"9(", "x":9, "y":0.75},
                {"label":"0)", "x":10, "y":0.75},
                {"label":"-_", "x":11, "y":0.75},
                {"label":"=+", "x":12, "y":0.75},
                {"label":"Backspace", "x":13, "y":0.75, "w":2},
                {"label":"CCW", "x":15.15, "y":0, "w":0.6, "h":0.5},
                {"label":"Mute", "x":15.25, "y":0.5},
                {"label":"CW", "x":15.75, "y":0, "w":0.6, "h":0.5},

                {"label":"Tab", "x":0, "y":1.75, "w":1.5},
                {"label":"Q", "x":1.5, "y":1.75},
                {"label":"W", "x":2.5, "y":1.75},
                {"label":"E", "x":3.5, "y":1.75},
                {"label":"R", "x":4.5, "y":1.75},
                {"label":"T", "x":5.5, "y":1.75},
                {"label":"Y", "x":6.5, "y":1.75},
                {"label":"U", "x":7.5, "y":1.75},
                {"label":"I", "x":8.5, "y":1.75},
                {"label":"O", "x":9.5, "y":1.75},
                {"label":"P", "x":10.5, "y":1.75},
                {"label":"[{", "x":11.5, "y":1.75},
                {"label":"]}", "x":12.5, "y":1.75},
                {"label":"\\|", "x":13.5, "y":1.75, "w":1.5},
                {"label":"Delete", "x":15.25, "y":1.75},

                {"label":"Caps Lock", "x":0, "y":2.75, "w":1.75},
                {"label":"A", "x":1.75, "y":2.75},
                {"label":"S", "x":2.75, "y":2.75},
                {"label":"D", "x":3.75, "y":2.75},
                {"label":"F", "x":4.75, "y":2.75},
                {"label":"G", "x":5.75, "y":2.75},
                {"label":"H", "x":6.75, "y":2.75},
                {"label":"J", "x":7.75, "y":2.75},
                {"label":"K", "x":8.75, "y":2.75},
                {"label":"L", "x":9.75, "y":2.75},
                {"label":";:", "x":10.75, "y":2.75},
                {"label":"'\"", "x":11.75, "y":2.75},
                {"label":"Enter", "x":12.75, "y":2.75, "w":2.25},
                {"label":"Home", "x":15.25, "y":2.75},

                {"label":"Shift", "x":0, "y":3.75, "w":2.25},
                {"label":"Z", "x":2.25, "y":3.75},
                {"label":"X", "x":3.25, "y":3.75},
                {"label":"C", "x":4.25, "y":3.75},
                {"label":"V", "x":5.25, "y":3.75},
                {"label":"B", "x":6.25, "y":3.75},
                {"label":"N", "x":7.25, "y":3.75},
                {"label":"M", "x":8.25, "y":3.75},
                {"label":",<", "x":9.25, "y":3.75},
                {"label":".>", "x":10.25, "y":3.75},
                {"label":"/?", "x":11.25, "y":3.75},
                {"label":"Shift", "x":12.25, "y":3.75, "w":1.75},
                {"label":"Up", "x":14.25, "y":4},

                {"label":"Ctrl", "x":0, "y":4.75, "w":1.25},
                {"label":"Win", "x":1.25, "y":4.75, "w":1.25},
                {"label":"Alt", "x":2.5, "y":4.75, "w":1.25},
                {"label":"Space", "x":3.75, "y":4.75, "w":6.25},
                {"label":"Alt", "x":10, "y":4.75},
                {"label":"Fn1", "x":11, "y":4.75},
                {"label":"Fn2", "x":12, "y":4.75},
                {"label":"Left", "x":13.25, "y":5},
                {"label":"Down", "x":14.25, "y":5},
                {"label":"Right", "x":15.25, "y":5}
            ]
        }
    }
}

D keyboards/keychron/q2/rev_0111/keymaps/via/keymap.c => keyboards/keychron/q2/rev_0111/keymaps/via/keymap.c +0 -122
@@ 1,122 0,0 @@
/* Copyright 2021 @ Keychron (https://www.keychron.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

enum layers{
    MAC_BASE,
    WIN_BASE,
    _FN1,
    _FN2,
    _FN3
};

enum custom_keycodes {
    KC_MISSION_CONTROL = USER00,
    KC_LAUNCHPAD,
    KC_TASK,
    KC_FLXP
};

#define KC_WAVE S(KC_GRV)
#define KC_MCTL KC_MISSION_CONTROL
#define KC_LPAD KC_LAUNCHPAD

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [MAC_BASE] = LAYOUT_all(
        KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,  KC_EQL,   KC_BSPC,            KC_VOLD, KC_MUTE, KC_VOLU,
        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_ENT,           KC_HOME,
        KC_LSFT,          KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,            KC_RSFT, KC_UP,
        KC_LCTL, KC_LOPT, KC_LCMD,                            KC_SPC,                             KC_RCMD, MO(_FN1), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),

    [WIN_BASE] = LAYOUT_all(
        KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,  KC_EQL,   KC_BSPC,            KC_VOLD, KC_MUTE, KC_VOLU,
        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_ENT,           KC_HOME,
        KC_LSFT,          KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,            KC_RSFT, KC_UP,
        KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                             KC_RALT, MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),

    [_FN1] = LAYOUT_all(
        KC_GRV,  KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,  KC_VOLU, KC_TRNS,            KC_TRNS, KC_TRNS, KC_TRNS,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS,          KC_TRNS,
        KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,           KC_TRNS,          KC_TRNS,
        KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,           KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),

    [_FN2] = LAYOUT_all(
        KC_GRV,  KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,  KC_VOLU, KC_TRNS,            KC_TRNS, KC_TRNS, KC_TRNS,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS,          KC_TRNS,
        KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,           KC_TRNS,          KC_TRNS,
        KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,           KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),

    [_FN3] = LAYOUT_all(
        KC_WAVE, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,   KC_F12,  KC_TRNS,            KC_TRNS, KC_TRNS, KC_TRNS,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS,          KC_TRNS,
        KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,           KC_TRNS,          KC_TRNS,
        KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,           KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
};

#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
    [MAC_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
    [WIN_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
    [_FN1]     = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
    [_FN2]     = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
    [_FN3]     = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
};
#endif

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
        case KC_MISSION_CONTROL:
            if (record->event.pressed) {
                host_consumer_send(0x29F);
            } else {
                host_consumer_send(0);
            }
            return false;  // Skip all further processing of this key
        case KC_LAUNCHPAD:
            if (record->event.pressed) {
                host_consumer_send(0x2A0);
            } else {
                host_consumer_send(0);
            }
            return false;  // Skip all further processing of this key
        case KC_TASK:
            if (record->event.pressed) {
                register_code(KC_LWIN);
                register_code(KC_TAB);
            } else {
                unregister_code(KC_LWIN);
                unregister_code(KC_TAB);
            }
            return false;  // Skip all further processing of this key
        case KC_FLXP:
            if (record->event.pressed) {
                register_code(KC_LWIN);
                register_code(KC_E);
            } else {
                unregister_code(KC_LWIN);
                unregister_code(KC_E);
            }
            return false;  // Skip all further processing of this key
        default:
            return true;  // Process all other keycodes normally
    }
}

D keyboards/keychron/q2/rev_0111/rev_0111.h => keyboards/keychron/q2/rev_0111/rev_0111.h +0 -48
@@ 1,48 0,0 @@
/* Copyright 2021 @ Keychron (https://www.keychron.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

#include "quantum.h"

#define XXX KC_NO

#define LAYOUT_all( \
    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D,        K47, K0E, K48, \
    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D,      K1E,\
    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B,      K2D,      K2E,\
    K30,      K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B,      K3D, K3E,     \
    K40, K41, K42,                K46,                K4A, K4B, K4C, K4D, K2C, K4E \
) { \
    { K00, K01,  K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B,  K0C, K0D, K0E, }, \
    { K10, K11,  K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B,  K1C, K1D, K1E, }, \
    { K20, K21,  K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B,  K2C, K2D, K2E, }, \
    { K30, XXX,  K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B,  XXX, K3D, K3E, }, \
    { K40, K41,  K42, XXX, XXX, XXX, K46, K47, K48, XXX, K4A, K4B,  K4C, K4D, K4E, }  \
}
#define LAYOUT_ansi_67( \
    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D,      K0E,\
    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D,      K1E,\
    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B,      K2D,      K2E,\
    K30,      K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B,      K3D, K3E,     \
    K40, K41, K42,                K46,                K4A, K4B, K4C, K4D, K2C, K4E \
) { \
    { K00, K01,  K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B,  K0C, K0D, K0E, }, \
    { K10, K11,  K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B,  K1C, K1D, K1E, }, \
    { K20, K21,  K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B,  K2C, K2D, K2E, }, \
    { K30, XXX,  K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B,  XXX, K3D, K3E, }, \
    { K40, K41,  K42, XXX, XXX, XXX, K46, XXX, XXX, XXX, K4A, K4B,  K4C, K4D, K4E, }  \
}

D keyboards/keychron/q2/rev_0112/info.json => keyboards/keychron/q2/rev_0112/info.json +0 -89
@@ 1,89 0,0 @@
{
    "keyboard_name": "Q2",
    "manufacturer": "Keychron",
    "url": "https://github.com/Keychron",
    "maintainer": "lalalademaxiya1",
    "usb": {
        "vid": "0x3434",
        "pid": "0x0112",
        "device_version": "1.0.0"
    },
    "layouts": {
        "LAYOUT_iso_68": {
            "layout": [
                {"label":"Esc", "x":0, "y":0.25},
                {"label":"1!", "x":1, "y":0.25},
                {"label":"2\"", "x":2, "y":0.25},
                {"label":"3\u00a3", "x":3, "y":0.25},
                {"label":"4$", "x":4, "y":0.25},
                {"label":"5%", "x":5, "y":0.25},
                {"label":"6^", "x":6, "y":0.25},
                {"label":"7&", "x":7, "y":0.25},
                {"label":"8*", "x":8, "y":0.25},
                {"label":"9(", "x":9, "y":0.25},
                {"label":"0)", "x":10, "y":0.25},
                {"label":"-_", "x":11, "y":0.25},
                {"label":"=+", "x":12, "y":0.25},
                {"label":"Backspace", "x":13, "y":0.25, "w":2},
                {"label":"Insert", "x":15.25, "y":0},

                {"label":"Tab", "x":0, "y":1.25, "w":1.5},
                {"label":"Q", "x":1.5, "y":1.25},
                {"label":"W", "x":2.5, "y":1.25},
                {"label":"E", "x":3.5, "y":1.25},
                {"label":"R", "x":4.5, "y":1.25},
                {"label":"T", "x":5.5, "y":1.25},
                {"label":"Y", "x":6.5, "y":1.25},
                {"label":"U", "x":7.5, "y":1.25},
                {"label":"I", "x":8.5, "y":1.25},
                {"label":"O", "x":9.5, "y":1.25},
                {"label":"P", "x":10.5, "y":1.25},
                {"label":"[{", "x":11.5, "y":1.25},
                {"label":"]}", "x":12.5, "y":1.25},
                {"label":"Delete", "x":15.25, "y":1.25},

                {"label":"Caps Lock", "x":0, "y":2.25, "w":1.75},
                {"label":"A", "x":1.75, "y":2.25},
                {"label":"S", "x":2.75, "y":2.25},
                {"label":"D", "x":3.75, "y":2.25},
                {"label":"F", "x":4.75, "y":2.25},
                {"label":"G", "x":5.75, "y":2.25},
                {"label":"H", "x":6.75, "y":2.25},
                {"label":"J", "x":7.75, "y":2.25},
                {"label":"K", "x":8.75, "y":2.25},
                {"label":"L", "x":9.75, "y":2.25},
                {"label":";:", "x":10.75, "y":2.25},
                {"label":"'@", "x":11.75, "y":2.25},
                {"label":"#~", "x":12.75, "y":2.25},
                {"label":"Enter", "x":13.75, "y":1.25, "w":1.25, "h":2},
                {"label":"Home", "x":15.25, "y":2.25},

                {"label":"Shift", "x":0, "y":3.25, "w":1.25},
                {"label":"\\|", "x":1.25, "y":3.25},
                {"label":"Z", "x":2.25, "y":3.25},
                {"label":"X", "x":3.25, "y":3.25},
                {"label":"C", "x":4.25, "y":3.25},
                {"label":"V", "x":5.25, "y":3.25},
                {"label":"B", "x":6.25, "y":3.25},
                {"label":"N", "x":7.25, "y":3.25},
                {"label":"M", "x":8.25, "y":3.25},
                {"label":",<", "x":9.25, "y":3.25},
                {"label":".>", "x":10.25, "y":3.25},
                {"label":"/?", "x":11.25, "y":3.25},
                {"label":"Shift", "x":12.25, "y":3.25, "w":1.75},
                {"label":"Up", "x":14.25, "y":3.5},

                {"label":"Ctrl", "x":0, "y":4.25, "w":1.25},
                {"label":"Win", "x":1.25, "y":4.25, "w":1.25},
                {"label":"Alt", "x":2.5, "y":4.25, "w":1.25},
                {"label":"Space", "x":3.75, "y":4.25, "w":6.25},
                {"label":"Alt", "x":10, "y":4.25},
                {"label":"Fn1", "x":11, "y":4.25},
                {"label":"Fn2", "x":12, "y":4.25},
                {"label":"Left", "x":13.25, "y":4.5},
                {"label":"Down", "x":14.25, "y":4.5},
                {"label":"Right", "x":15.25, "y":4.5}
            ]
        }
    }
}

D keyboards/keychron/q2/rev_0112/keymaps/via/keymap.c => keyboards/keychron/q2/rev_0112/keymaps/via/keymap.c +0 -112
@@ 1,112 0,0 @@
/* Copyright 2021 @ Keychron (https://www.keychron.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

enum layers{
    MAC_BASE,
    WIN_BASE,
    _FN1,
    _FN2,
    _FN3
};

enum custom_keycodes {
    KC_MISSION_CONTROL = USER00,
    KC_LAUNCHPAD,
    KC_TASK,
    KC_FLXP
};

#define KC_WAVE S(KC_GRV)
#define KC_MCTL KC_MISSION_CONTROL
#define KC_LPAD KC_LAUNCHPAD

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [MAC_BASE] = LAYOUT_iso_68(
        KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,  KC_EQL,   KC_BSPC,          KC_INS,
        KC_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_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_HOME,
        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_RSFT, KC_UP,
        KC_LCTL, KC_LOPT, KC_LCMD,                            KC_SPC,                             KC_RCMD, MO(_FN1), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),

    [WIN_BASE] = LAYOUT_iso_68(
        KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,  KC_EQL,   KC_BSPC,          KC_INS,
        KC_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_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_HOME,
        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_RSFT, KC_UP,
        KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                             KC_RALT, MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),

    [_FN1] = LAYOUT_iso_68(
        KC_GRV,  KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,  KC_VOLU,  KC_TRNS,          KC_TRNS,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,                    KC_TRNS,
        KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS,          KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,            KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS),

    [_FN2] = LAYOUT_iso_68(
        KC_GRV,  KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,  KC_VOLU,  KC_TRNS,          KC_TRNS,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,                    KC_TRNS,
        KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS,          KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,            KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS),

    [_FN3] = LAYOUT_iso_68(
        KC_WAVE, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,   KC_F12,   KC_TRNS,          KC_TRNS,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,                    KC_TRNS,
        KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS,          KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,            KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS)
};

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
        case KC_MISSION_CONTROL:
            if (record->event.pressed) {
                host_consumer_send(0x29F);
            } else {
                host_consumer_send(0);
            }
            return false;  // Skip all further processing of this key
        case KC_LAUNCHPAD:
            if (record->event.pressed) {
                host_consumer_send(0x2A0);
            } else {
                host_consumer_send(0);
            }
            return false;  // Skip all further processing of this key
        case KC_TASK:
            if (record->event.pressed) {
                register_code(KC_LWIN);
                register_code(KC_TAB);
            } else {
                unregister_code(KC_LWIN);
                unregister_code(KC_TAB);
            }
            return false;  // Skip all further processing of this key
        case KC_FLXP:
            if (record->event.pressed) {
                register_code(KC_LWIN);
                register_code(KC_E);
            } else {
                unregister_code(KC_LWIN);
                unregister_code(KC_E);
            }
            return false;  // Skip all further processing of this key
        default:
            return true;  // Process all other keycodes normally
    }
}

D keyboards/keychron/q2/rev_0113/info.json => keyboards/keychron/q2/rev_0113/info.json +0 -167
@@ 1,167 0,0 @@
{
    "keyboard_name": "Q2",
    "manufacturer": "Keychron",
    "url": "https://github.com/Keychron",
    "maintainer": "lalalademaxiya1",
    "usb": {
        "vid": "0x3434",
        "pid": "0x0113",
        "device_version": "1.0.0"
    },
    "layouts": {
        "LAYOUT_iso_68": {
            "layout": [
                {"label":"Esc", "x":0, "y":0.25},
                {"label":"1!", "x":1, "y":0.25},
                {"label":"2\"", "x":2, "y":0.25},
                {"label":"3\u00a3", "x":3, "y":0.25},
                {"label":"4$", "x":4, "y":0.25},
                {"label":"5%", "x":5, "y":0.25},
                {"label":"6^", "x":6, "y":0.25},
                {"label":"7&", "x":7, "y":0.25},
                {"label":"8*", "x":8, "y":0.25},
                {"label":"9(", "x":9, "y":0.25},
                {"label":"0)", "x":10, "y":0.25},
                {"label":"-_", "x":11, "y":0.25},
                {"label":"=+", "x":12, "y":0.25},
                {"label":"Backspace", "x":13, "y":0.25, "w":2},
                {"label":"Mute", "x":15.25, "y":0},

                {"label":"Tab", "x":0, "y":1.25, "w":1.5},
                {"label":"Q", "x":1.5, "y":1.25},
                {"label":"W", "x":2.5, "y":1.25},
                {"label":"E", "x":3.5, "y":1.25},
                {"label":"R", "x":4.5, "y":1.25},
                {"label":"T", "x":5.5, "y":1.25},
                {"label":"Y", "x":6.5, "y":1.25},
                {"label":"U", "x":7.5, "y":1.25},
                {"label":"I", "x":8.5, "y":1.25},
                {"label":"O", "x":9.5, "y":1.25},
                {"label":"P", "x":10.5, "y":1.25},
                {"label":"[{", "x":11.5, "y":1.25},
                {"label":"]}", "x":12.5, "y":1.25},
                {"label":"Delete", "x":15.25, "y":1.25},

                {"label":"Caps Lock", "x":0, "y":2.25, "w":1.75},
                {"label":"A", "x":1.75, "y":2.25},
                {"label":"S", "x":2.75, "y":2.25},
                {"label":"D", "x":3.75, "y":2.25},
                {"label":"F", "x":4.75, "y":2.25},
                {"label":"G", "x":5.75, "y":2.25},
                {"label":"H", "x":6.75, "y":2.25},
                {"label":"J", "x":7.75, "y":2.25},
                {"label":"K", "x":8.75, "y":2.25},
                {"label":"L", "x":9.75, "y":2.25},
                {"label":";:", "x":10.75, "y":2.25},
                {"label":"'@", "x":11.75, "y":2.25},
                {"label":"#~", "x":12.75, "y":2.25},
                {"label":"Enter", "x":13.75, "y":1.25, "w":1.25, "h":2},
                {"label":"Home", "x":15.25, "y":2.25},

                {"label":"Shift", "x":0, "y":3.25, "w":1.25},
                {"label":"\\|", "x":1.25, "y":3.25},
                {"label":"Z", "x":2.25, "y":3.25},
                {"label":"X", "x":3.25, "y":3.25},
                {"label":"C", "x":4.25, "y":3.25},
                {"label":"V", "x":5.25, "y":3.25},
                {"label":"B", "x":6.25, "y":3.25},
                {"label":"N", "x":7.25, "y":3.25},
                {"label":"M", "x":8.25, "y":3.25},
                {"label":",<", "x":9.25, "y":3.25},
                {"label":".>", "x":10.25, "y":3.25},
                {"label":"/?", "x":11.25, "y":3.25},
                {"label":"Shift", "x":12.25, "y":3.25, "w":1.75},
                {"label":"Up", "x":14.25, "y":3.5},

                {"label":"Ctrl", "x":0, "y":4.25, "w":1.25},
                {"label":"Win", "x":1.25, "y":4.25, "w":1.25},
                {"label":"Alt", "x":2.5, "y":4.25, "w":1.25},
                {"label":"Space", "x":3.75, "y":4.25, "w":6.25},
                {"label":"Alt", "x":10, "y":4.25},
                {"label":"Fn1", "x":11, "y":4.25},
                {"label":"Fn2", "x":12, "y":4.25},
                {"label":"Left", "x":13.25, "y":4.5},
                {"label":"Down", "x":14.25, "y":4.5},
                {"label":"Right", "x":15.25, "y":4.5}
            ]
        },
        "LAYOUT_all": {
            "layout": [
                {"label":"Esc", "x":0, "y":0.75},
                {"label":"1!", "x":1, "y":0.75},
                {"label":"2\"", "x":2, "y":0.75},
                {"label":"3\u00a3", "x":3, "y":0.75},
                {"label":"4$", "x":4, "y":0.75},
                {"label":"5%", "x":5, "y":0.75},
                {"label":"6^", "x":6, "y":0.75},
                {"label":"7&", "x":7, "y":0.75},
                {"label":"8*", "x":8, "y":0.75},
                {"label":"9(", "x":9, "y":0.75},
                {"label":"0)", "x":10, "y":0.75},
                {"label":"-_", "x":11, "y":0.75},
                {"label":"=+", "x":12, "y":0.75},
                {"label":"Backspace", "x":13, "y":0.75, "w":2},
                {"label":"CCW", "x":15.15, "y":0, "w":0.6, "h":0.5},
                {"label":"Mute", "x":15.25, "y":0.5},
                {"label":"CW", "x":15.75, "y":0, "w":0.6, "h":0.5},

                {"label":"Tab", "x":0, "y":1.75, "w":1.5},
                {"label":"Q", "x":1.5, "y":1.75},
                {"label":"W", "x":2.5, "y":1.75},
                {"label":"E", "x":3.5, "y":1.75},
                {"label":"R", "x":4.5, "y":1.75},
                {"label":"T", "x":5.5, "y":1.75},
                {"label":"Y", "x":6.5, "y":1.75},
                {"label":"U", "x":7.5, "y":1.75},
                {"label":"I", "x":8.5, "y":1.75},
                {"label":"O", "x":9.5, "y":1.75},
                {"label":"P", "x":10.5, "y":1.75},
                {"label":"[{", "x":11.5, "y":1.75},
                {"label":"]}", "x":12.5, "y":1.75},
                {"label":"Delete", "x":15.25, "y":1.75},

                {"label":"Caps Lock", "x":0, "y":2.75, "w":1.75},
                {"label":"A", "x":1.75, "y":2.75},
                {"label":"S", "x":2.75, "y":2.75},
                {"label":"D", "x":3.75, "y":2.75},
                {"label":"F", "x":4.75, "y":2.75},
                {"label":"G", "x":5.75, "y":2.75},
                {"label":"H", "x":6.75, "y":2.75},
                {"label":"J", "x":7.75, "y":2.75},
                {"label":"K", "x":8.75, "y":2.75},
                {"label":"L", "x":9.75, "y":2.75},
                {"label":";:", "x":10.75, "y":2.75},
                {"label":"'@", "x":11.75, "y":2.75},
                {"label":"#~", "x":12.75, "y":2.75},
                {"label":"Enter", "x":13.75, "y":1.75, "w":1.25, "h":2},
                {"label":"Home", "x":15.25, "y":2.75},

                {"label":"Shift", "x":0, "y":3.75, "w":1.25},
                {"label":"\\|", "x":1.25, "y":3.75},
                {"label":"Z", "x":2.25, "y":3.75},
                {"label":"X", "x":3.25, "y":3.75},
                {"label":"C", "x":4.25, "y":3.75},
                {"label":"V", "x":5.25, "y":3.75},
                {"label":"B", "x":6.25, "y":3.75},
                {"label":"N", "x":7.25, "y":3.75},
                {"label":"M", "x":8.25, "y":3.75},
                {"label":",<", "x":9.25, "y":3.75},
                {"label":".>", "x":10.25, "y":3.75},
                {"label":"/?", "x":11.25, "y":3.75},
                {"label":"Shift", "x":12.25, "y":3.75, "w":1.75},
                {"label":"Up", "x":14.25, "y":4},

                {"label":"Ctrl", "x":0, "y":4.75, "w":1.25},
                {"label":"Win", "x":1.25, "y":4.75, "w":1.25},
                {"label":"Alt", "x":2.5, "y":4.75, "w":1.25},
                {"label":"Space", "x":3.75, "y":4.75, "w":6.25},
                {"label":"Alt", "x":10, "y":4.75},
                {"label":"Fn1", "x":11, "y":4.75},
                {"label":"Fn2", "x":12, "y":4.75},
                {"label":"Left", "x":13.25, "y":5},
                {"label":"Down", "x":14.25, "y":5},
                {"label":"Right", "x":15.25, "y":5}
            ]
        }
    }
}

D keyboards/keychron/q2/rev_0113/keymaps/via/keymap.c => keyboards/keychron/q2/rev_0113/keymaps/via/keymap.c +0 -154
@@ 1,154 0,0 @@
/* Copyright 2021 @ Keychron (https://www.keychron.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

enum layers{
    MAC_BASE,
    WIN_BASE,
    _FN1,
    _FN2,
    _FN3
};

enum custom_keycodes {
    KC_MISSION_CONTROL = USER00,
    KC_LAUNCHPAD,
    KC_TASK,
    KC_FLXP
};

#define KC_WAVE S(KC_GRV)
#define KC_MCTL KC_MISSION_CONTROL
#define KC_LPAD KC_LAUNCHPAD

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [MAC_BASE] = LAYOUT_all(
        KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,  KC_EQL,   KC_BSPC,            KC_VOLD, KC_MUTE, KC_VOLU,
        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_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_HOME,
        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_RSFT, KC_UP,
        KC_LCTL, KC_LOPT, KC_LCMD,                            KC_SPC,                             KC_RCMD, MO(_FN1), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),

    [WIN_BASE] = LAYOUT_all(
        KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,  KC_EQL,   KC_BSPC,            KC_VOLD, KC_MUTE, KC_VOLU,
        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_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_HOME,
        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_RSFT, KC_UP,
        KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                             KC_RALT, MO(_FN2), MO(_FN3), KC_LEFT, KC_DOWN, KC_RGHT),

    [_FN1] = LAYOUT_all(
        KC_GRV,  KC_BRID, KC_BRIU, KC_MCTL, KC_LPAD, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,  KC_VOLU,  KC_TRNS,            KC_TRNS, KC_TRNS, KC_TRNS,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,                    KC_TRNS,
        KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS,          KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,            KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS),

    [_FN2] = LAYOUT_all(
        KC_GRV,  KC_BRID, KC_BRIU, KC_TASK, KC_FLXP, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD,  KC_VOLU,  KC_TRNS,            KC_TRNS, KC_TRNS, KC_TRNS,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,                    KC_TRNS,
        KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS,          KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,            KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS),

    [_FN3] = LAYOUT_all(
        KC_WAVE, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,   KC_F12,   KC_TRNS,            KC_TRNS, KC_TRNS, KC_TRNS,
        RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,                    KC_TRNS,
        KC_TRNS, RGB_RMOD,RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS,          KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,            KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS)
};

#if defined(VIA_ENABLE) && defined(ENCODER_ENABLE)

#define ENCODERS 1
static uint8_t  encoder_state[ENCODERS] = {0};
static keypos_t encoder_cw[ENCODERS]    = {{ 8, 4 }};
static keypos_t encoder_ccw[ENCODERS]  = {{ 7, 4 }};

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 encoder_action_unregister(void) {
    for (int index = 0; index < ENCODERS; ++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 matrix_scan_user(void) {
    encoder_action_unregister();
}

bool encoder_update_user(uint8_t index, bool clockwise) {
    encoder_action_register(index, clockwise);
    return false;
};

#endif

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
        case KC_MISSION_CONTROL:
            if (record->event.pressed) {
                host_consumer_send(0x29F);
            } else {
                host_consumer_send(0);
            }
            return false;  // Skip all further processing of this key
        case KC_LAUNCHPAD:
            if (record->event.pressed) {
                host_consumer_send(0x2A0);
            } else {
                host_consumer_send(0);
            }
            return false;  // Skip all further processing of this key
        case KC_TASK:
            if (record->event.pressed) {
                register_code(KC_LWIN);
                register_code(KC_TAB);
            } else {
                unregister_code(KC_LWIN);
                unregister_code(KC_TAB);
            }
            return false;  // Skip all further processing of this key
        case KC_FLXP:
            if (record->event.pressed) {
                register_code(KC_LWIN);
                register_code(KC_E);
            } else {
                unregister_code(KC_LWIN);
                unregister_code(KC_E);
            }
            return false;  // Skip all further processing of this key
        default:
            return true;  // Process all other keycodes normally
    }
}

D keyboards/keychron/q2/rev_0113/rev_0113.h => keyboards/keychron/q2/rev_0113/rev_0113.h +0 -48
@@ 1,48 0,0 @@
/* Copyright 2021 @ Keychron (https://www.keychron.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

#include "quantum.h"

#define XXX KC_NO

#define LAYOUT_all( \
    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D,        K47, K0E, K48,\
    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C,           K1E,\
    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K1D,      K2E,\
    K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B,      K3D, K3E,     \
    K40, K41, K42,                K46,                K4A, K4B, K4C, K4D, K2C, K4E \
) { \
    { K00, K01,  K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B,  K0C, K0D, K0E, }, \
    { K10, K11,  K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B,  K1C, K1D, K1E, }, \
    { K20, K21,  K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B,  K2C, K2D, K2E, }, \
    { K30, K31,  K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B,  XXX, K3D, K3E, }, \
    { K40, K41,  K42, XXX, XXX, XXX, K46, K47, K48, XXX, K4A, K4B,  K4C, K4D, K4E, }  \
}
#define LAYOUT_iso_68( \
    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D,      K0E,\
    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C,           K1E,\
    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K1D,      K2E,\
    K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B,      K3D, K3E,     \
    K40, K41, K42,                K46,                K4A, K4B, K4C, K4D, K2C, K4E \
) { \
    { K00, K01,  K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B,  K0C, K0D, K0E, }, \
    { K10, K11,  K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B,  K1C, K1D, K1E, }, \
    { K20, K21,  K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B,  K2C, K2D, K2E, }, \
    { K30, K31,  K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B,  XXX, K3D, K3E, }, \
    { K40, K41,  K42, XXX, XXX, XXX, K46, XXX, XXX, XXX, K4A, K4B,  K4C, K4D, K4E, }  \
}