~ruther/qmk_firmware

4add8748676596cfa67f82d7ca1a6a1154ba0c7c — Drashna Jael're 3 years ago df30327 + 45cc7f1
Merge remote-tracking branch 'origin/master' into develop
A keyboards/cherrybstudio/cb65/cb65.c => keyboards/cherrybstudio/cb65/cb65.c +14 -0
@@ 0,0 1,14 @@
/*
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 "cb65.h"

A keyboards/cherrybstudio/cb65/cb65.h => keyboards/cherrybstudio/cb65/cb65.h +35 -0
@@ 0,0 1,35 @@
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#pragma once

#include "quantum.h"

#define LAYOUT_all( \
    K000, K001, K002, K003, K004, K005, K006, K007, K100, K101, K102, K103, K104, K105, K106, K107,  \
    K200,   K201, K202, K203, K204, K205, K206, K207, K300, K301, K302, K303, K304,   K305,   K306,  \
    K307,     K400, K401, K402, K403, K404, K405, K406, K407, K500, K501, K502, K503,  K504,  K505,  \
    K506, K507, K600, K601, K602, K603, K604, K605, K606, K607, K700, K701, K702,    K703,    K704,  \
    K705,  K706,  K707,                     K800,                    K801,  K802, K803, K804, K805   \
) { \
	{ K000,  K001,  K002,  K003,  K004,  K005,  K006,  K007 }, \
	{ K100,  K101,  K102,  K103,  K104,  K105,  K106,  K107 }, \
	{ K200,  K201,  K202,  K203,  K204,  K205,  K206,  K207 }, \
	{ K300,  K301,  K302,  K303,  K304,  K305,  K306,  K307 }, \
	{ K400,  K401,  K402,  K403,  K404,  K405,  K406,  K407 }, \
	{ K500,  K501,  K502,  K503,  K504,  K505,  K506,  K507 }, \
	{ K600,  K601,  K602,  K603,  K604,  K605,  K606,  K607 }, \
	{ K700,  K701,  K702,  K703,  K704,  K705,  K706,  K707 }, \
	{ K800,  K801,  K802,  K803,  K804,  K805               }  \
}


A keyboards/cherrybstudio/cb65/config.h => keyboards/cherrybstudio/cb65/config.h +68 -0
@@ 0,0 1,68 @@
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#pragma once

#include "config_common.h"

/* key matrix size */
#define MATRIX_ROWS 9
#define MATRIX_COLS 8

/*
 * Keyboard Matrix Assignments
 *
 * Change this to how you wired your keyboard
 * COLS: AVR pins used for columns, left to right
 * ROWS: AVR pins used for rows, top to bottom
 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
 *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
 *
 *                        0   1   2   3   4   5   6   7   8
*/
#define MATRIX_ROW_PINS { B0, B1, B2, B3, B7, D0, D1, D2, D3 }
#define MATRIX_COL_PINS { D5, D4, D6, D7, F7, B5, B6, C6 }

/* Encoder configuration */
//#define ENCODERS_PAD_A { F5 }
//#define ENCODERS_PAD_B { F6 }
//#define ENCODER_RESOLUTION 4

/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION COL2ROW

#define LED_CAPS_LOCK_PIN F1
#define LED_SCROLL_LOCK_PIN F4
#define LED_PIN_ON_STATE 0

/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 5

/* RGB Lighting */
#define RGB_DI_PIN F0
#ifdef RGB_DI_PIN
#define RGBLIGHT_EFFECT_BREATHING
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
#define RGBLIGHT_EFFECT_SNAKE
#define RGBLIGHT_EFFECT_KNIGHT
#define RGBLIGHT_EFFECT_CHRISTMAS
#define RGBLIGHT_EFFECT_STATIC_GRADIENT
#define RGBLIGHT_EFFECT_RGB_TEST
#define RGBLIGHT_EFFECT_ALTERNATING
#define RGBLIGHT_EFFECT_TWINKLE
#define RGBLED_NUM 24
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
#endif

A keyboards/cherrybstudio/cb65/info.json => keyboards/cherrybstudio/cb65/info.json +87 -0
@@ 0,0 1,87 @@
{
    "keyboard_name": "CherryB CB65",
    "manufacturer": "CherryB Works",
    "url": "https://discord.gg/qVwv3gcq83",
    "maintainer": "lunaticwhat",
    "usb": {
        "vid": "0x4342",
        "pid": "0x6565",
        "device_version": "0.0.1"
    },
    "layouts": {
        "LAYOUT_all": {
            "layout": [
                {"x":0, "y":0},
                {"x":1, "y":0},
                {"x":2, "y":0},
                {"x":3, "y":0},
                {"x":4, "y":0},
                {"x":5, "y":0},
                {"x":6, "y":0},
                {"x":7, "y":0},
                {"x":8, "y":0},
                {"x":9, "y":0},
                {"x":10, "y":0},
                {"x":11, "y":0},
                {"x":12, "y":0},
                {"x":13, "y":0},
                {"x":14, "y":0},
                {"x":15, "y":0},
                {"x":0, "y":1, "w":1.5},
                {"x":1.5, "y":1},
                {"x":2.5, "y":1},
                {"x":3.5, "y":1},
                {"x":4.5, "y":1},
                {"x":5.5, "y":1},
                {"x":6.5, "y":1},
                {"x":7.5, "y":1},
                {"x":8.5, "y":1},
                {"x":9.5, "y":1},
                {"x":10.5, "y":1},
                {"x":11.5, "y":1},
                {"x":12.5, "y":1},
                {"x":13.5, "y":1, "w":1.5},
                {"x":15, "y":1},
                {"x":0, "y":2, "w":1.75},
                {"x":1.75, "y":2},
                {"x":2.75, "y":2},
                {"x":3.75, "y":2},
                {"x":4.75, "y":2},
                {"x":5.75, "y":2},
                {"x":6.75, "y":2},
                {"x":7.75, "y":2},
                {"x":8.75, "y":2},
                {"x":9.75, "y":2},
                {"x":10.75, "y":2},
                {"x":11.75, "y":2},
                {"x":12.75, "y":2},
                {"x":13.75, "y":2, "w":1.25},
                {"x":15, "y":2},
                {"x":0, "y":3, "w":1.25},
                {"x":1.25, "y":3},
                {"x":2.25, "y":3},
                {"x":3.25, "y":3},
                {"x":4.25, "y":3},
                {"x":5.25, "y":3},
                {"x":6.25, "y":3},
                {"x":7.25, "y":3},
                {"x":8.25, "y":3},
                {"x":9.25, "y":3},
                {"x":10.25, "y":3},
                {"x":11.25, "y":3},
                {"x":12.25, "y":3, "w":1.75},
                {"x":14, "y":3},
                {"x":15, "y":3},
                {"x":0, "y":4, "w":1.25},
                {"x":1.25, "y":4, "w":1.25},
                {"x":2.5, "y":4, "w":1.25},
                {"x":3.75, "y":4, "w":6.25},
                {"x":10, "y":4, "w":1.25},
                {"x":11.25, "y":4, "w":1.25},
                {"x":13, "y":4},
                {"x":14, "y":4},
                {"x":15, "y":4}
            ]
        }
    }
}

A keyboards/cherrybstudio/cb65/keymaps/default/keymap.c => keyboards/cherrybstudio/cb65/keymaps/default/keymap.c +32 -0
@@ 0,0 1,32 @@
/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#include QMK_KEYBOARD_H

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     [0] = LAYOUT_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_BSPC, QK_BOOT,
        KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS,          KC_DEL,
        KC_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,           KC_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_END,
        KC_LCTL, KC_LGUI, KC_LALT,                                     KC_SPC,                             KC_RALT, MO(1),   KC_LEFT, KC_DOWN, KC_RGHT
    ),
    [1] = LAYOUT_all(
        KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_TRNS, KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_DEL,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_PGUP,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_VOLU, KC_PGDN,
        KC_TRNS, KC_TRNS, KC_TRNS,                                     KC_TRNS,                            KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT
    ),

};

A keyboards/cherrybstudio/cb65/keymaps/default/readme.md => keyboards/cherrybstudio/cb65/keymaps/default/readme.md +1 -0
@@ 0,0 1,1 @@
# The default keymap for CB65

A keyboards/cherrybstudio/cb65/keymaps/via/keymap.c => keyboards/cherrybstudio/cb65/keymaps/via/keymap.c +49 -0
@@ 0,0 1,49 @@
/*
Copyright 2020 Tybera
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#include QMK_KEYBOARD_H

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [0] = LAYOUT_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_BSPC, QK_BOOT,
        KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS,          KC_DEL,
        KC_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,           KC_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_END,
        KC_LCTL, KC_LGUI, KC_LALT,                                     KC_SPC,                             KC_RALT, MO(1),   KC_LEFT, KC_DOWN, KC_RGHT
    ),
    [1] = LAYOUT_all(
        KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_TRNS, KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_DEL,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_PGUP,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_VOLU, KC_PGDN,
        KC_TRNS, KC_TRNS, KC_TRNS,                                     KC_TRNS,                            KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT
    ),
    [2] = LAYOUT_all(
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS,                                     KC_TRNS,                            KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
    ),
    [3] = LAYOUT_all(
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS,                                     KC_TRNS,                            KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
    ),
};




A keyboards/cherrybstudio/cb65/keymaps/via/rules.mk => keyboards/cherrybstudio/cb65/keymaps/via/rules.mk +2 -0
@@ 0,0 1,2 @@
LTO_ENABLE = yes
VIA_ENABLE = yes

A keyboards/cherrybstudio/cb65/readme.md => keyboards/cherrybstudio/cb65/readme.md +26 -0
@@ 0,0 1,26 @@
# CherryB Works CB65

![CB65](https://i.imgur.com/3qopFIWh.jpg)

An universal 65 percents PCB for many keyboard with USB daughterboard 
Board has a rotary encoder but disabled for VIA support.

* Keyboard Maintainer: lunaticwhat
* Hardware Supported: CB65, atmega32u4
* Hardware Availability: [CherryB Studio](https://discord.gg/qVwv3gcq83)

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

    make cherrybstudio/cb65:default

Flashing example for this keyboard:

    make cherrybstudio/cb65:default:flash

## Accessing Bootloader Mode

To access Bootloader Mode, do one of the following:

* Hold the top left key of the keyboard while connecting the USB cable

See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).

A keyboards/cherrybstudio/cb65/rules.mk => keyboards/cherrybstudio/cb65/rules.mk +19 -0
@@ 0,0 1,19 @@
# MCU name
MCU = atmega32u4

# Bootloader selection
BOOTLOADER = atmel-dfu

# Build Options
#   change yes to no to disable
#
BOOTMAGIC_ENABLE = yes      # Enable Bootmagic Lite
MOUSEKEY_ENABLE = yes       # Mouse keys
EXTRAKEY_ENABLE = yes       # Audio control and System control
CONSOLE_ENABLE = no         # Console for debug
COMMAND_ENABLE = no         # Commands for debug and configuration
NKRO_ENABLE = yes           # Enable N-Key Rollover
BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes       # Enable keyboard RGB underglow
AUDIO_ENABLE = no           # Audio output
ENCODER_ENABLE = no		# Encoder support

M keyboards/kegen/gboy/info.json => keyboards/kegen/gboy/info.json +77 -76
@@ 1,8 1,8 @@
{
    "keyboard_name": "G-Boy", 
    "keyboard_name": "G-Boy",
    "manufacturer": "Kegen",
    "url": "", 
    "maintainer": "@mattchan", 
    "url": "https://github.com/qmk/qmk_firmware/tree/master/keyboards/kegen/gboy",
    "maintainer": "mattchan",
    "usb": {
        "vid": "0x4B65",
        "pid": "0x6762",


@@ 11,81 11,82 @@
    "layouts": {
        "LAYOUT_all": {
            "layout": [
                {"x":0, "y":0},
                {"x":1, "y":0},
                {"x":2, "y":0},
                {"x":3, "y":0},
                {"x":4, "y":0},
                {"x":5, "y":0},
                {"x":6, "y":0},
                {"x":7, "y":0},
                {"x":8, "y":0},
                {"x":9, "y":0},
                {"x":10, "y":0},
                {"x":11, "y":0},
                {"x":12, "y":0},
                {"x":13, "y":0},
                {"x":14, "y":0},
                {"x":15, "y":0},
                
                {"x":0, "y":1, "w":1.5},
                {"x":1.5, "y":1},
                {"x":2.5, "y":1},
                {"x":3.5, "y":1},
                {"x":4.5, "y":1},
                {"x":5.5, "y":1},
                {"x":6.5, "y":1},
                {"x":7.5, "y":1},
                {"x":8.5, "y":1},
                {"x":9.5, "y":1},
                {"x":10.5, "y":1},
                {"x":11.5, "y":1},
                {"x":12.5, "y":1},
                {"x":13.5, "y":1, "w":1.5},
                {"x":15, "y":1},
                {"label": "GESC",  "x":0,      "y":0},
                {"label": "1",     "x":1,      "y":0},
                {"label": "2",     "x":2,      "y":0},
                {"label": "3",     "x":3,      "y":0},
                {"label": "4",     "x":4,      "y":0},
                {"label": "5",     "x":5,      "y":0},
                {"label": "6",     "x":6,      "y":0},
                {"label": "7",     "x":7,      "y":0},
                {"label": "8",     "x":8,      "y":0},
                {"label": "9",     "x":9,      "y":0},
                {"label": "0",     "x":10,     "y":0},
                {"label": "MINS",  "x":11,     "y":0},
                {"label": "EQL",   "x":12,     "y":0},
                {"label": "BSPC",  "x":13,     "y":0},
                {"label": "BSPC",  "x":14,     "y":0},
                {"label": "HOME",  "x":15,     "y":0},

                {"x":0, "y":2, "w":1.75},
                {"x":1.75, "y":2},
                {"x":2.75, "y":2},
                {"x":3.75, "y":2},
                {"x":4.75, "y":2},
                {"x":5.75, "y":2},
                {"x":6.75, "y":2},
                {"x":7.75, "y":2},
                {"x":8.75, "y":2},
                {"x":9.75, "y":2},
                {"x":10.75, "y":2},
                {"x":11.75, "y":2},
                {"x":12.75, "y":2},
                {"x":13.75, "y":2, "w":1.25},
                {"x":15, "y":2},
                {"label": "TAB",   "x":0,      "y":1, "w":1.5},
                {"label": "Q",     "x":1.5,    "y":1},
                {"label": "W",     "x":2.5,    "y":1},
                {"label": "E",     "x":3.5,    "y":1},
                {"label": "R",     "x":4.5,    "y":1},
                {"label": "T",     "x":5.5,    "y":1},
                {"label": "Y",     "x":6.5,    "y":1},
                {"label": "U",     "x":7.5,    "y":1},
                {"label": "I",     "x":8.5,    "y":1},
                {"label": "O",     "x":9.5,    "y":1},
                {"label": "P",     "x":10.5,   "y":1},
                {"label": "LBRC",  "x":11.5,   "y":1},
                {"label": "RBRC",  "x":12.5,   "y":1},
                {"label": "BSLS",  "x":13.5,   "y":1, "w":1.5},
                {"label": "PGUP",  "x":15,     "y":1},

                {"x":0, "y":3, "w":1.25},
                {"x":1.25, "y":3},
                {"x":2.25, "y":3},
                {"x":3.25, "y":3},
                {"x":4.25, "y":3},
                {"x":5.25, "y":3},
                {"x":6.25, "y":3},
                {"x":7.25, "y":3},
                {"x":8.25, "y":3},
                {"x":9.25, "y":3},
                {"x":10.25, "y":3},
                {"x":11.25, "y":3},
                {"x":12.25, "y":3, "w":1.75},
                {"x":14, "y":3},
                {"x":15, "y":3},
                {"label": "CAPS",  "x":0,      "y":2, "w":1.75},
                {"label": "A",     "x":1.75,   "y":2},
                {"label": "S",     "x":2.75,   "y":2},
                {"label": "D",     "x":3.75,   "y":2},
                {"label": "F",     "x":4.75,   "y":2},
                {"label": "G",     "x":5.75,   "y":2},
                {"label": "H",     "x":6.75,   "y":2},
                {"label": "J",     "x":7.75,   "y":2},
                {"label": "K",     "x":8.75,   "y":2},
                {"label": "L",     "x":9.75,   "y":2},
                {"label": "SCLN",  "x":10.75,  "y":2},
                {"label": "QUOT",  "x":11.75,  "y":2},
                {"label": "BSLS",  "x":12.75,  "y":2},
                {"label": "ENT",   "x":13.75,  "y":2, "w":1.25},
                {"label": "PGDN",  "x":15,     "y":2},

                {"x":0, "y":4, "w":1.25},
                {"x":1.25, "y":4, "w":1.25},
                {"x":2.5, "y":4, "w":1.25},
                {"x":3.75, "y":4, "w":6.25},
                {"x":10, "y":4},
                {"x":11, "y":4},
                {"x":12, "y":4},
                {"x":13, "y":4},
                {"x":14, "y":4},
                {"x":15, "y":4}]
                {"label": "LSFT",  "x":0,      "y":3, "w":1.25},
                {"label": "SLSH",  "x":1.25,   "y":3},
                {"label": "Z",     "x":2.25,   "y":3},
                {"label": "X",     "x":3.25,   "y":3},
                {"label": "C",     "x":4.25,   "y":3},
                {"label": "V",     "x":5.25,   "y":3},
                {"label": "B",     "x":6.25,   "y":3},
                {"label": "N",     "x":7.25,   "y":3},
                {"label": "M",     "x":8.25,   "y":3},
                {"label": "COMM",  "x":9.25,   "y":3},
                {"label": "DOT",   "x":10.25,  "y":3},
                {"label": "SLSH",  "x":11.25,  "y":3},
                {"label": "RSFT",  "x":12.25,  "y":3, "w":1.75},
                {"label": "UP",    "x":14,     "y":3},
                {"label": "END",   "x":15,     "y":3},

                {"label": "LCTL",   "x":0,     "y":4, "w":1.25},
                {"label": "LGUI",   "x":1.25,  "y":4, "w":1.25},
                {"label": "LALT",   "x":2.5,   "y":4, "w":1.25},
                {"label": "SPC",    "x":3.75,  "y":4, "w":6.25},
                {"label": "RALT",   "x":10,    "y":4},
                {"label": "MO(1)",  "x":11,    "y":4},
                {"label": "RCTL",   "x":12,    "y":4},
                {"label": "LEFT",   "x":13,    "y":4},
                {"label": "DOWN",   "x":14,    "y":4},
                {"label": "RGHT",   "x":15,    "y":4}
            ]
        }
    }
}
\ No newline at end of file
}

M keyboards/kegen/gboy/readme.md => keyboards/kegen/gboy/readme.md +1 -1
@@ 6,7 6,7 @@

* Keyboard Maintainer: [Matt Chan](https://github.com/mattchan)
* Hardware Supported: Kegen G-Boy
* Hardware Availability: Unfortunately, there is no site for this, and the Kegen Discord is ghost town.
* Hardware Availability: Unfortunately, there is no site for this, and the Kegen Discord is no longer active. The group buy runners appear to have disappeared after round two units were delivered.

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


A keyboards/om60/config.h => keyboards/om60/config.h +104 -0
@@ 0,0 1,104 @@
/*
Copyright 2021 Salicylic_Acid
Copyright 2021 3araht
Copyright 2022 jun10000

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#pragma once

#include "config_common.h"


/* key matrix size */
#define MATRIX_ROWS 10
#define MATRIX_COLS 8

// wiring of each half
#define MATRIX_ROW_PINS { D1, D0, D4, C6, D7 }
#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2, E6 }

/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 5

/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE

/* ws2812 RGB LED */
#define RGB_DI_PIN D3

#ifndef RGBLED_NUM
  #define RGBLED_NUM 69
  #define RGBLIGHT_LED_MAP { \
       0,    1, 2, 3, \
       8, 7, 6, 5, 4, \
       9,10,11,12,13, \
      18,17,16,15,14, \
      19,20,21,22,23, \
      28,27,26,25,24, \
      29,30,31,32,33, \
      38,37,36,35,34, \
      39,40,41,42,43, \
      48,47,46,45,44, \
      49,50,51,52,53, \
      58,57,56,55,54, \
      59,60,61,62,63, \
      68,67,66,65,64  \
  }

  #define RGBLIGHT_SLEEP
#endif

#define RGBLIGHT_EFFECT_BREATHING
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
#define RGBLIGHT_EFFECT_SNAKE
#define RGBLIGHT_EFFECT_KNIGHT
#define RGBLIGHT_EFFECT_CHRISTMAS
#define RGBLIGHT_EFFECT_STATIC_GRADIENT
#define RGBLIGHT_EFFECT_RGB_TEST
#define RGBLIGHT_EFFECT_ALTERNATING
#define RGBLIGHT_EFFECT_TWINKLE

#ifndef IOS_DEVICE_ENABLE
  #define RGBLIGHT_LIMIT_VAL 90
  #define RGBLIGHT_VAL_STEP 17
#else
  #define RGBLIGHT_LIMIT_VAL 30
  #define RGBLIGHT_VAL_STEP 4
#endif
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17

#if defined(RGBLIGHT_ENABLE) && !defined(IOS_DEVICE_ENABLE)
// USB_MAX_POWER_CONSUMPTION value for naked48 keyboard
//  120  RGBoff, OLEDoff
//  120  OLED
//  330  RGB 6
//  300  RGB 32
//  310  OLED & RGB 32
  #define USB_MAX_POWER_CONSUMPTION 400
#else
  // fix iPhone and iPad power adapter issue
  // iOS device need lessthan 100
  #define USB_MAX_POWER_CONSUMPTION 100
#endif

#define TAP_CODE_DELAY 10

#define ENCODERS_PAD_A { B4 }
#define ENCODERS_PAD_B { B5 }

A keyboards/om60/info.json => keyboards/om60/info.json +16 -0
@@ 0,0 1,16 @@
{
  "keyboard_name": "OM60", 
  "manufacturer": "jun10000",
  "url": "https://github.com/jun10000", 
  "maintainer": "jun10000", 
  "usb": {
      "vid": "0x6A6E",
      "pid": "0x0001",
      "device_version": "1.0.0"
  },
  "layouts": {
      "LAYOUT": {
          "layout": [{"label":"0,0", "x":0, "y":0}, {"label":"4,0", "x":1.5, "y":0}, {"label":"4,1", "x":2.5, "y":0}, {"label":"4,2", "x":3.5, "y":0}, {"label":"4,3", "x":4.5, "y":0}, {"label":"4,4", "x":5.5, "y":0}, {"label":"4,5", "x":6.5, "y":0}, {"label":"4,6", "x":7.5, "y":0}, {"label":"4,7", "x":8.5, "y":0}, {"label":"9,0", "x":9.5, "y":0}, {"label":"9,1", "x":10.5, "y":0}, {"label":"9,2", "x":11.5, "y":0}, {"label":"9,3", "x":12.5, "y":0}, {"label":"9,4", "x":13.5, "y":0}, {"label":"0,1", "x":1.5, "y":1}, {"label":"0,2", "x":2.5, "y":1}, {"label":"0,3", "x":3.5, "y":1}, {"label":"0,4", "x":4.5, "y":1}, {"label":"0,5", "x":5.5, "y":1}, {"label":"0,6", "x":6.5, "y":1}, {"label":"0,7", "x":7.5, "y":1}, {"label":"5,0", "x":8.5, "y":1}, {"label":"5,1", "x":9.5, "y":1}, {"label":"5,2", "x":10.5, "y":1}, {"label":"5,3", "x":11.5, "y":1}, {"label":"5,4", "x":12.5, "y":1}, {"label":"5,5", "x":13.5, "y":1}, {"label":"1,0", "x":0, "y":2}, {"label":"1,1", "x":1.5, "y":2}, {"label":"1,2", "x":2.5, "y":2}, {"label":"1,3", "x":3.5, "y":2}, {"label":"1,4", "x":4.5, "y":2}, {"label":"1,5", "x":5.5, "y":2}, {"label":"1,6", "x":6.5, "y":2}, {"label":"1,7", "x":7.5, "y":2}, {"label":"6,0", "x":8.5, "y":2}, {"label":"6,1", "x":9.5, "y":2}, {"label":"6,2", "x":10.5, "y":2}, {"label":"6,3", "x":11.5, "y":2}, {"label":"6,4", "x":12.5, "y":2}, {"label":"6,5", "x":13.5, "y":2}, {"label":"2,0", "x":0, "y":3}, {"label":"2,1", "x":1.5, "y":3}, {"label":"2,2", "x":2.5, "y":3}, {"label":"2,3", "x":3.5, "y":3}, {"label":"2,4", "x":4.5, "y":3}, {"label":"2,5", "x":5.5, "y":3}, {"label":"2,6", "x":6.5, "y":3}, {"label":"2,7", "x":7.5, "y":3}, {"label":"7,0", "x":8.5, "y":3}, {"label":"7,1", "x":9.5, "y":3}, {"label":"7,2", "x":10.5, "y":3}, {"label":"7,3", "x":11.5, "y":3}, {"label":"7,4", "x":12.5, "y":3}, {"label":"7,5", "x":13.5, "y":3}, {"label":"3,0", "x":0, "y":4}, {"label":"3,1", "x":1.5, "y":4}, {"label":"3,2", "x":2.5, "y":4}, {"label":"3,3", "x":3.5, "y":4}, {"label":"3,4", "x":4.5, "y":4}, {"label":"3,5", "x":5.5, "y":4}, {"label":"3,6", "x":6.5, "y":4}, {"label":"3,7", "x":7.5, "y":4}, {"label":"8,0", "x":8.5, "y":4}, {"label":"8,1", "x":9.5, "y":4}, {"label":"8,2", "x":10.5, "y":4}, {"label":"8,3", "x":11.5, "y":4}, {"label":"8,4", "x":12.5, "y":4}, {"label":"8,5", "x":13.5, "y":4}]
      }
  }
}
\ No newline at end of file

A keyboards/om60/keymaps/default/keymap.c => keyboards/om60/keymaps/default/keymap.c +70 -0
@@ 0,0 1,70 @@
/*
Copyright 2021 Salicylic_Acid
Copyright 2021 3araht
Copyright 2022 jun10000

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

#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
    [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
    [1] = { ENCODER_CCW_CW(_______, _______) },
    [2] = { ENCODER_CCW_CW(_______, _______) },
};
#endif

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  [0] = LAYOUT(
  //,-----------------------------------------------------------------------------------------------------------------------------.
      KC_MUTE,  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_TAB,    KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P, KC_BSLS, KC_BSPC,
  //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
        TO(0),  KC_GRV,    KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L, KC_SCLN, KC_QUOT,  KC_ENT,
  //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
        TO(1), KC_LSFT,    KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M, KC_COMM,  KC_DOT, KC_SLSH,   KC_UP, KC_RSFT,
  //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
        TO(2),KC_LCTRL, KC_LGUI, KC_LALT,  KC_DEL, KC_LBRC,  KC_SPC,  KC_SPC, KC_RBRC, KC_RALT, KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT
  //|-----------------------------------------------------------------------------------------------------------------------------'
  ),
  [1] = LAYOUT(
  //,-----------------------------------------------------------------------------------------------------------------------------.
      _______,  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_SLSH, KC_ASTR, KC_MINS, KC_PLUS, KC_BSPC, _______,
  //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
        TO(0), _______,    KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,  KC_EQL, _______,
  //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
        TO(1), _______, _______, _______, _______, _______, _______, _______, _______, _______,  KC_DOT,  KC_ENT, _______, _______,
  //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
        TO(2), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  //|-----------------------------------------------------------------------------------------------------------------------------'
  ),
  [2] = LAYOUT(
  //,-----------------------------------------------------------------------------------------------------------------------------.
      _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,  EE_CLR,
  //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
               _______, _______, _______,   KC_UP, _______, _______, _______,RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, _______, _______,
  //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
        TO(0), _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______,
  //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
        TO(1), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
        TO(2), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  //|-----------------------------------------------------------------------------------------------------------------------------'
  )
};

A keyboards/om60/keymaps/default/rules.mk => keyboards/om60/keymaps/default/rules.mk +2 -0
@@ 0,0 1,2 @@
LTO_ENABLE = yes
ENCODER_MAP_ENABLE = yes

A keyboards/om60/keymaps/via/keymap.c => keyboards/om60/keymaps/via/keymap.c +84 -0
@@ 0,0 1,84 @@
/*
Copyright 2021 Salicylic_Acid
Copyright 2021 3araht
Copyright 2022 jun10000

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

#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
    [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
    [1] = { ENCODER_CCW_CW(_______, _______) },
    [2] = { ENCODER_CCW_CW(_______, _______) },
    [3] = { ENCODER_CCW_CW(_______, _______) },
};
#endif

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  [0] = LAYOUT(
  //,-----------------------------------------------------------------------------------------------------------------------------.
      KC_MUTE,  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_TAB,    KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P, KC_BSLS, KC_BSPC,
  //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
        TO(0),  KC_GRV,    KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L, KC_SCLN, KC_QUOT,  KC_ENT,
  //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
        TO(1), KC_LSFT,    KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M, KC_COMM,  KC_DOT, KC_SLSH,   KC_UP, KC_RSFT,
  //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
        TO(2),KC_LCTRL, KC_LGUI, KC_LALT,  KC_DEL, KC_LBRC,  KC_SPC,  KC_SPC, KC_RBRC, KC_RALT, KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT
  //|-----------------------------------------------------------------------------------------------------------------------------'
  ),
  [1] = LAYOUT(
  //,-----------------------------------------------------------------------------------------------------------------------------.
      _______,  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_SLSH, KC_ASTR, KC_MINS, KC_PLUS, KC_BSPC, _______,
  //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
        TO(0), _______,    KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,  KC_EQL, _______,
  //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
        TO(1), _______, _______, _______, _______, _______, _______, _______, _______, _______,  KC_DOT,  KC_ENT, _______, _______,
  //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
        TO(2), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  //|-----------------------------------------------------------------------------------------------------------------------------'
  ),
  [2] = LAYOUT(
  //,-----------------------------------------------------------------------------------------------------------------------------.
      _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,  EE_CLR,
  //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
               _______, _______, _______,   KC_UP, _______, _______, _______,RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, _______, _______,
  //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
        TO(0), _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______,
  //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
        TO(1), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
        TO(2), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  //|-----------------------------------------------------------------------------------------------------------------------------'
  ),
  [3] = LAYOUT(
  //,-----------------------------------------------------------------------------------------------------------------------------.
      _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
               _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
        TO(0), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
        TO(1), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
        TO(2), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  //|-----------------------------------------------------------------------------------------------------------------------------'
  )
};

A keyboards/om60/keymaps/via/rules.mk => keyboards/om60/keymaps/via/rules.mk +3 -0
@@ 0,0 1,3 @@
VIA_ENABLE = yes
LTO_ENABLE = yes
ENCODER_MAP_ENABLE = yes

A keyboards/om60/matrix.c => keyboards/om60/matrix.c +166 -0
@@ 0,0 1,166 @@
/*
Copyright 2012-2018 Jun Wako, Jack Humbert, Yiancar
Copyright 2022 jun10000

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 "quantum.h"

#if (MATRIX_COLS <= 8)
#    define ROW_SHIFTER ((uint8_t)1)
#elif (MATRIX_COLS <= 16)
#    define ROW_SHIFTER ((uint16_t)1)
#elif (MATRIX_COLS <= 32)
#    define ROW_SHIFTER  ((uint32_t)1)
#endif

static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;

static void select_row(uint8_t row)
{
    setPinOutput(row_pins[row]);
    writePinLow(row_pins[row]);
}

static void unselect_row(uint8_t row)
{
    setPinInputHigh(row_pins[row]);
}

static void unselect_rows(void)
{
    for(uint8_t x = 0; x < MATRIX_ROWS; x++) {
        setPinInputHigh(row_pins[x]);
    }
}

static void select_col(uint8_t col)
{
    setPinOutput(col_pins[col]);
    writePinLow(col_pins[col]);
}

static void unselect_col(uint8_t col)
{
    setPinInputHigh(col_pins[col]);
}

static void unselect_cols(void)
{
    for(uint8_t x = 0; x < MATRIX_COLS; x++) {
        setPinInputHigh(col_pins[x]);
    }
}

static void init_pins(void) {
  unselect_rows();
  unselect_cols();
  for (uint8_t x = 0; x < MATRIX_COLS; x++) {
    setPinInputHigh(col_pins[x]);
  }
  for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
    setPinInputHigh(row_pins[x]);
  }
}

static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
{
    // Store last value of row prior to reading
    matrix_row_t last_row_value = current_matrix[current_row];

    // Clear data in matrix row
    current_matrix[current_row] = 0;

    // Select row and wait for row selecton to stabilize
    select_row(current_row);
    wait_us(30);

    // For each col...
    for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {

        // Select the col pin to read (active low)
        uint8_t pin_state = readPin(col_pins[col_index]);

        // Populate the matrix row with the state of the col pin
        current_matrix[current_row] |=  pin_state ? 0 : (ROW_SHIFTER << col_index);
    }

    // Unselect row
    unselect_row(current_row);

    return (last_row_value != current_matrix[current_row]);
}

static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
{
    bool matrix_changed = false;

    // Select col and wait for col selecton to stabilize
    select_col(current_col);
    wait_us(30);

    // For each row...
    for(uint8_t row_index = 0; row_index < MATRIX_ROWS/2; row_index++)
    {
        uint8_t tmp = row_index + MATRIX_ROWS/2;
        // Store last value of row prior to reading
        matrix_row_t last_row_value = current_matrix[tmp];

        // Check row pin state
        if (readPin(row_pins[row_index]) == 0)
        {
            // Pin LO, set col bit
            current_matrix[tmp] |= (ROW_SHIFTER << current_col);
        }
        else
        {
            // Pin HI, clear col bit
            current_matrix[tmp] &= ~(ROW_SHIFTER << current_col);
        }

        // Determine if the matrix changed state
        if ((last_row_value != current_matrix[tmp]) && !(matrix_changed))
        {
            matrix_changed = true;
        }
    }

    // Unselect col
    unselect_col(current_col);

    return matrix_changed;
}

void matrix_init_custom(void) {
    // initialize key pins
    init_pins();
}

bool matrix_scan_custom(matrix_row_t current_matrix[])
{
  bool changed = false;

  // Set row, read cols
  for (uint8_t current_row = 0; current_row < MATRIX_ROWS / 2; current_row++) {
    changed |= read_cols_on_row(current_matrix, current_row);
  }
  //else
  // Set col, read rows
  for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
    changed |= read_rows_on_col(current_matrix, current_col);
  }
  
  return (uint8_t)changed;
}

A keyboards/om60/om60.c => keyboards/om60/om60.c +19 -0
@@ 0,0 1,19 @@
/*
Copyright 2021 Salicylic_Acid
Copyright 2022 jun10000

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 "om60.h"

A keyboards/om60/om60.h => keyboards/om60/om60.h +41 -0
@@ 0,0 1,41 @@
/*
Copyright 2021 Salicylic_Acid
Copyright 2022 jun10000

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#pragma once

#include "quantum.h"

#define LAYOUT( \
    L01, L05, L10, L15, L20, L25, L30, L35, L40, R45, R50, R55, R60, R65, \
         L06, L11, L16, L21, L26, L31, L36, R41, R46, R51, R56, R61, R66, \
    L02, L07, L12, L17, L22, L27, L32, L37, R42, R47, R52, R57, R62, R67, \
    L03, L08, L13, L18, L23, L28, L33, L38, R43, R48, R53, R58, R63, R68, \
    L04, L09, L14, L19, L24, L29, L34, L39, R44, R49, R54, R59, R64, R69  \
  ) \
  { \
    {   L01,   L06,   L11,   L16,   L21,   L26,   L31,   L36 }, \
    {   L02,   L07,   L12,   L17,   L22,   L27,   L32,   L37 }, \
    {   L03,   L08,   L13,   L18,   L23,   L28,   L33,   L38 }, \
    {   L04,   L09,   L14,   L19,   L24,   L29,   L34,   L39 }, \
    {   L05,   L10,   L15,   L20,   L25,   L30,   L35,   L40 }, \
    {   R41,   R46,   R51,   R56,   R61,   R66, KC_NO, KC_NO }, \
    {   R42,   R47,   R52,   R57,   R62,   R67, KC_NO, KC_NO }, \
    {   R43,   R48,   R53,   R58,   R63,   R68, KC_NO, KC_NO }, \
    {   R44,   R49,   R54,   R59,   R64,   R69, KC_NO, KC_NO }, \
    {   R45,   R50,   R55,   R60,   R65, KC_NO, KC_NO, KC_NO }  \
  }

A keyboards/om60/readme.md => keyboards/om60/readme.md +27 -0
@@ 0,0 1,27 @@
# OM60

![OM60](https://i.imgur.com/WoO8oezh.jpg)

The 60% Poker compatible Ortholinear keyboard or jumbo Macropad.

* Keyboard Maintainer: [jun10000](https://github.com/jun10000)
* Hardware Supported: OM60 PCB, Pro Micro
* Hardware Availability: [junsgamingstore.booth.pm](https://junsgamingstore.booth.pm/)

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

    make om60:default

Flashing example for this keyboard:

    make om60:default:flash

See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).

## Bootloader

Enter the bootloader in 3 ways:

* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
\ No newline at end of file

A keyboards/om60/rules.mk => keyboards/om60/rules.mk +24 -0
@@ 0,0 1,24 @@
# MCU name
MCU = atmega32u4

# Bootloader selection
BOOTLOADER = caterina

# Build Options
#   change yes to no to disable
#
BOOTMAGIC_ENABLE = yes      # Enable Bootmagic Lite
MOUSEKEY_ENABLE = yes       # Mouse keys
EXTRAKEY_ENABLE = yes       # Audio control and System control
CONSOLE_ENABLE = no         # Console for debug
COMMAND_ENABLE = no         # Commands for debug and configuration
NKRO_ENABLE = no            # Enable N-Key Rollover
BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes       # Enable keyboard RGB underglow
AUDIO_ENABLE = no           # Audio output

ENCODER_ENABLE = yes

CUSTOM_MATRIX = lite

SRC += matrix.c

A keyboards/takashicompany/goat51/info.json => keyboards/takashicompany/goat51/info.json +498 -0
@@ 0,0 1,498 @@
{
    "manufacturer": "takashicompany",
    "keyboard_name": "GOAT51",
    "maintainer": "takashicompany",
    "development_board": "promicro",
    "diode_direction": "COL2ROW",
    "features": {
        "bootmagic": true,
        "command": false,
        "console": false,
        "extrakey": true,
        "mousekey": true,
        "nkro": true,
        "encoder": true,
        "rgblight": true
    },
    "matrix_pins": {
        "cols": [
            "D4",
            "C6",
            "D7",
            "E6",
            "B4",
            "B5",
            "D2"
        ],
        "rows": [
            "F4",
            "F5",
            "F6",
            "F7",
            "B1",
            "B3",
            "B2",
            "B6"
        ]
    },
    "encoder": {
        "rotary": [
            { "pin_a": "D1", "pin_b": "D0" }
         ]
    },
    "url": "https://github.com/takashicompany/goat51",
    "usb": {
        "device_version": "1.0.0",
        "pid": "0x0029",
        "vid": "0x7463"
    },
    "rgblight": {
        "led_count": 11,
        "pin": "D3",
        "hue_steps": 10,
        "saturation_steps": 17,
        "brightness_steps": 17,
        "animations": {
            "alternating": true,
            "breathing": true,
            "christmas": true,
            "knight": true,
            "rainbow_mood": true,
            "rainbow_swirl": true,
            "rgb_test": true,
            "snake": true,
            "static_gradient": true,
            "twinkle": true
        }
    },
    "layouts": {
        "LAYOUT": {
            "layout": [
                {
                    "matrix": [
                        0,
                        0
                    ],
                    "x": 0,
                    "y": 0.5
                },
                {
                    "matrix": [
                        0,
                        1
                    ],
                    "x": 1,
                    "y": 0.5
                },
                {
                    "matrix": [
                        0,
                        2
                    ],
                    "x": 2,
                    "y": 0.25
                },
                {
                    "matrix": [
                        0,
                        3
                    ],
                    "x": 3,
                    "y": 0
                },
                {
                    "matrix": [
                        0,
                        4
                    ],
                    "x": 4,
                    "y": 0
                },
                {
                    "matrix": [
                        0,
                        5
                    ],
                    "x": 5,
                    "y": 0
                },
                {
                    "matrix": [
                        4,
                        1
                    ],
                    "x": 10,
                    "y": 0
                },
                {
                    "matrix": [
                        4,
                        2
                    ],
                    "x": 11,
                    "y": 0
                },
                {
                    "matrix": [
                        4,
                        3
                    ],
                    "x": 12,
                    "y": 0
                },
                {
                    "matrix": [
                        4,
                        4
                    ],
                    "x": 13,
                    "y": 0.25
                },
                {
                    "matrix": [
                        4,
                        5
                    ],
                    "x": 14,
                    "y": 0.5
                },
                {
                    "matrix": [
                        4,
                        6
                    ],
                    "x": 15,
                    "y": 0.5
                },
                {
                    "matrix": [
                        1,
                        0
                    ],
                    "x": 0,
                    "y": 1.5
                },
                {
                    "matrix": [
                        1,
                        1
                    ],
                    "x": 1,
                    "y": 1.5
                },
                {
                    "matrix": [
                        1,
                        2
                    ],
                    "x": 2,
                    "y": 1.25
                },
                {
                    "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": 7.5,
                    "y": 0.5
                },
                {
                    "matrix": [
                        5,
                        1
                    ],
                    "x": 10,
                    "y": 1
                },
                {
                    "matrix": [
                        5,
                        2
                    ],
                    "x": 11,
                    "y": 1
                },
                {
                    "matrix": [
                        5,
                        3
                    ],
                    "x": 12,
                    "y": 1
                },
                {
                    "matrix": [
                        5,
                        4
                    ],
                    "x": 13,
                    "y": 1.25
                },
                {
                    "matrix": [
                        5,
                        5
                    ],
                    "x": 14,
                    "y": 1.5
                },
                {
                    "matrix": [
                        5,
                        6
                    ],
                    "x": 15,
                    "y": 1.5
                },
                {
                    "matrix": [
                        2,
                        0
                    ],
                    "x": 0,
                    "y": 2.5
                },
                {
                    "matrix": [
                        2,
                        1
                    ],
                    "x": 1,
                    "y": 2.5
                },
                {
                    "matrix": [
                        2,
                        2
                    ],
                    "x": 2,
                    "y": 2.25
                },
                {
                    "matrix": [
                        2,
                        3
                    ],
                    "x": 3,
                    "y": 2
                },
                {
                    "matrix": [
                        2,
                        4
                    ],
                    "x": 4,
                    "y": 2
                },
                {
                    "matrix": [
                        2,
                        5
                    ],
                    "x": 5,
                    "y": 2
                },
                {
                    "matrix": [
                        6,
                        1
                    ],
                    "x": 10,
                    "y": 2
                },
                {
                    "matrix": [
                        6,
                        2
                    ],
                    "x": 11,
                    "y": 2
                },
                {
                    "matrix": [
                        6,
                        3
                    ],
                    "x": 12,
                    "y": 2
                },
                {
                    "matrix": [
                        6,
                        4
                    ],
                    "x": 13,
                    "y": 2.25
                },
                {
                    "matrix": [
                        6,
                        5
                    ],
                    "x": 14,
                    "y": 2.5
                },
                {
                    "matrix": [
                        6,
                        6
                    ],
                    "x": 15,
                    "y": 2.5
                },
                {
                    "matrix": [
                        3,
                        0
                    ],
                    "x": 0,
                    "y": 3.5
                },
                {
                    "matrix": [
                        3,
                        1
                    ],
                    "x": 1,
                    "y": 3.5
                },
                {
                    "matrix": [
                        3,
                        2
                    ],
                    "x": 2,
                    "y": 3.25
                },
                {
                    "matrix": [
                        3,
                        3
                    ],
                    "x": 3,
                    "y": 3
                },
                {
                    "matrix": [
                        3,
                        4
                    ],
                    "x": 4,
                    "y": 3
                },
                {
                    "matrix": [
                        3,
                        5
                    ],
                    "x": 5,
                    "y": 3
                },
                {
                    "matrix": [
                        3,
                        6
                    ],
                    "x": 6,
                    "y": 3
                },
                {
                    "matrix": [
                        7,
                        0
                    ],
                    "x": 9,
                    "y": 3
                },
                {
                    "matrix": [
                        7,
                        1
                    ],
                    "x": 10,
                    "y": 3
                },
                {
                    "matrix": [
                        7,
                        2
                    ],
                    "x": 11,
                    "y": 3
                },
                {
                    "matrix": [
                        7,
                        3
                    ],
                    "x": 12,
                    "y": 3
                },
                {
                    "matrix": [
                        7,
                        4
                    ],
                    "x": 13,
                    "y": 3.25
                },
                {
                    "matrix": [
                        7,
                        5
                    ],
                    "x": 14,
                    "y": 3.5
                },
                {
                    "matrix": [
                        7,
                        6
                    ],
                    "x": 15,
                    "y": 3.5
                },
                {
                    "matrix": [
                        0,
                        6
                    ],
                    "x": 7,
                    "y": 1.5
                },
                {
                    "matrix": [
                        4,
                        0
                    ],
                    "x": 8,
                    "y": 1.5
                }
            ]
        }
    }
}
\ No newline at end of file

A keyboards/takashicompany/goat51/keymaps/default/keymap.c => keyboards/takashicompany/goat51/keymaps/default/keymap.c +123 -0
@@ 0,0 1,123 @@
// Copyright 2022 takashicompany (@takashicompany)
// SPDX-License-Identifier: GPL-2.0-or-later

#include QMK_KEYBOARD_H

enum custom_keycodes {
    GOAT51 = SAFE_RANGE,
    WEB,
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

    // 0: JIS-Alphabet
    LAYOUT(
        KC_ESC, LT(7, KC_Q), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
        KC_LCTL, KC_A, KC_S, LT(6, KC_D), KC_F, KC_G, GOAT51, KC_H, KC_J, LT(6, KC_K), KC_L, KC_ENT, KC_ENT,
        KC_LSFT, LSFT_T(KC_Z), LGUI_T(KC_X), KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, LCTL_T(KC_DOT), KC_BSPC, KC_DEL,
        TG(6), KC_PGUP, KC_PGDN, KC_LCTL, KC_LGUI, ALT_T(KC_LANG2), LSFT_T(KC_TAB), LT(2, KC_SPC), LT(1, KC_LANG1), KC_RALT, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
        KC_PGDN, KC_PGUP
    ),

    // 1: JIS-Num
    LAYOUT(
        KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
        KC_TRNS, LCTL_T(KC_EQL), KC_LBRC, KC_SLSH, KC_MINS, KC_RO, GOAT51, KC_SCLN, KC_QUOT, KC_RBRC, KC_NUHS, KC_JYEN, KC_TRNS,
        KC_TRNS, LSFT_T(KC_PLUS), KC_LCBR, KC_QUES, KC_UNDS, LSFT(KC_RO), KC_COLN, KC_DQUO, KC_RCBR, LSFT(KC_NUHS), LSFT(KC_JYEN), KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS
    ),
    
    // 2: JIS-Shift-Num
    LAYOUT(
        KC_TRNS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, LGUI(KC_JYEN), KC_TRNS,
        KC_TRNS, KC_PLUS, KC_LCBR, KC_QUES, KC_UNDS, LSFT(KC_RO), GOAT51, KC_COLN, KC_DQUO, KC_RCBR, LSFT(KC_NUHS), LSFT(KC_JYEN), KC_TRNS,
        KC_TRNS, KC_LSFT, KC_LGUI, KC_LALT, KC_LANG2, KC_LSFT, KC_SPC, KC_LANG1, KC_TRNS, KC_TRNS, KC_DEL, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS
    ),
    
    // 3: US-Alphabet
    LAYOUT(
        KC_TRNS, LT(7, KC_Q), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_TRNS,
        KC_TRNS, KC_A, KC_S, LT(6, KC_D), KC_F, KC_G, GOAT51, KC_H, KC_J, LT(6, KC_K), KC_L, KC_ENT, KC_TRNS,
        KC_TRNS, LSFT_T(KC_Z), LGUI_T(KC_X), KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, LCTL_T(KC_DOT), KC_BSPC, KC_TRNS,
        TG(6), KC_PGUP, KC_PGDN, KC_LCTL, KC_LGUI, ALT_T(KC_LANG2), LSFT_T(KC_TAB), LT(5, KC_SPC), LT(4, KC_LANG1), KC_RALT, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
        KC_PGDN, KC_PGUP
    ),
    
    // 4: US-Num
    LAYOUT(
        KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
        KC_TRNS, KC_CIRC, KC_AT, KC_SLSH, KC_MINS, KC_UNDS, GOAT51, KC_SCLN, KC_COLN, KC_LBRC, KC_RBRC, KC_JYEN, KC_TRNS,
        KC_TRNS, LT(5, KC_TILD), KC_GRV, KC_QUES, KC_EQL, KC_UNDS, KC_PLUS, KC_ASTR, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS
    ),
    
    // 5: US-Shift-Num
    LAYOUT(
        KC_TRNS, KC_EXLM, KC_DQUO, KC_HASH, KC_DLR, KC_PERC, KC_AMPR, KC_QUOT, KC_LPRN, KC_RPRN, KC_BSLS, KC_TRNS,
        KC_TRNS, KC_TILD, KC_GRV, KC_QUES, KC_EQL, KC_UNDS, GOAT51, KC_PLUS, KC_ASTR, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS,
        KC_TRNS, KC_LSFT, KC_LGUI, KC_LALT, KC_LANG2, KC_LSFT, KC_SPC, KC_LANG1, KC_TRNS, KC_TRNS, KC_DEL, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS
    ),
    
    // 6: Cursor
    LAYOUT(
        KC_TRNS, KC_P7, KC_P8, KC_P9, KC_PSLS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS,
        KC_TRNS, KC_P4, KC_P5, KC_P6, KC_PAST, KC_PCMM, GOAT51, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS,
        KC_TRNS, LSFT_T(KC_P1), KC_P2, KC_P3, KC_PMNS, KC_KP_EQUAL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
        TG(6), KC_P0, KC_PDOT, KC_PENT, KC_PPLS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS
    ), 
    
    // 7: Function
    LAYOUT(
        KC_TRNS, KC_TRNS, KC_TAB, KC_TRNS, KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, 
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, GOAT51, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, 
        KC_TRNS, KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(8), MO(9), KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS
    ),
    
    // 8: LED
    LAYOUT(
        KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, DF(0), DF(3), KC_TRNS,
        KC_TRNS, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, GOAT51, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
        KC_TRNS, RGB_M_K, RGB_M_X, RGB_M_G, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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 GOAT51:
            if (record->event.pressed) {
                SEND_STRING("GOAT51");
                rgblight_toggle();
            }
            return false;

        case WEB:
            if (record->event.pressed) {
                SEND_STRING("github.com/takashicompany/goat51");
            }
            return false;
    }
    
    return true;
}

bool encoder_update_user(uint8_t index, bool clockwise) {

    if (clockwise) {
        tap_code(KC_MS_WH_DOWN);
    } else {
        tap_code(KC_MS_WH_UP);
    }

    return true;
}
\ No newline at end of file

A keyboards/takashicompany/goat51/keymaps/via/config.h => keyboards/takashicompany/goat51/keymaps/via/config.h +6 -0
@@ 0,0 1,6 @@
// Copyright 2022 takashicompany (@takashicompany)
// SPDX-License-Identifier: GPL-2.0-or-later

#pragma once

#define DYNAMIC_KEYMAP_LAYER_COUNT 7
\ No newline at end of file

A keyboards/takashicompany/goat51/keymaps/via/keymap.c => keyboards/takashicompany/goat51/keymaps/via/keymap.c +106 -0
@@ 0,0 1,106 @@
// Copyright 2022 takashicompany (@takashicompany)
// SPDX-License-Identifier: GPL-2.0-or-later

#include QMK_KEYBOARD_H

enum custom_keycodes {
    GOAT51 = SAFE_RANGE,
    WEB,
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

    // 0: JIS-Alphabet
    LAYOUT(
        KC_ESC, LT(4, KC_Q), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
        KC_LCTL, KC_A, KC_S, LT(3, KC_D), KC_F, KC_G, GOAT51, KC_H, KC_J, LT(3, KC_K), KC_L, KC_ENT, KC_ENT,
        KC_LSFT, LSFT_T(KC_Z), LGUI_T(KC_X), KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, LCTL_T(KC_DOT), KC_BSPC, KC_DEL,
        TG(3), KC_PGUP, KC_PGDN, KC_LCTL, KC_LGUI, ALT_T(KC_LANG2), LSFT_T(KC_TAB), LT(2, KC_SPC), LT(1, KC_LANG1), KC_RALT, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
        KC_PGDN, KC_PGUP
    ),

    // 1: JIS-Num
    LAYOUT(
        KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
        KC_TRNS, LCTL_T(KC_EQL), KC_LBRC, KC_SLSH, KC_MINS, KC_RO, GOAT51, KC_SCLN, KC_QUOT, KC_RBRC, KC_NUHS, KC_JYEN, KC_TRNS,
        KC_TRNS, LSFT_T(KC_PLUS), KC_LCBR, KC_QUES, KC_UNDS, LSFT(KC_RO), KC_COLN, KC_DQUO, KC_RCBR, LSFT(KC_NUHS), LSFT(KC_JYEN), KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS
    ),
    
    // 2: JIS-Shift-Num
    LAYOUT(
        KC_TRNS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, LGUI(KC_JYEN), KC_TRNS,
        KC_TRNS, KC_PLUS, KC_LCBR, KC_QUES, KC_UNDS, LSFT(KC_RO), GOAT51, KC_COLN, KC_DQUO, KC_RCBR, LSFT(KC_NUHS), LSFT(KC_JYEN), KC_TRNS,
        KC_TRNS, KC_LSFT, KC_LGUI, KC_LALT, KC_LANG2, KC_LSFT, KC_SPC, KC_LANG1, KC_TRNS, KC_TRNS, KC_DEL, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS
    ),
    
    // 3: Cursor
    LAYOUT(
        KC_TRNS, KC_P7, KC_P8, KC_P9, KC_PSLS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS,
        KC_TRNS, KC_P4, KC_P5, KC_P6, KC_PAST, KC_PCMM, GOAT51, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS,
        KC_TRNS, LSFT_T(KC_P1), KC_P2, KC_P3, KC_PMNS, KC_KP_EQUAL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
        TG(3), KC_P0, KC_PDOT, KC_PENT, KC_PPLS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS
    ), 
    
    // 4: Function
    LAYOUT(
        KC_TRNS, KC_TRNS, KC_TAB, KC_TRNS, KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, 
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, GOAT51, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, 
        KC_TRNS, KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(5), MO(6), KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS
    ),
    
    // 5: LED
    LAYOUT(
        KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
        KC_TRNS, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, GOAT51, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
        KC_TRNS, RGB_M_K, RGB_M_X, RGB_M_G, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS
    ),

    LAYOUT(
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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 GOAT51:
            if (record->event.pressed) {
                SEND_STRING("GOAT51");
                rgblight_toggle();
            }
            return false;

        case WEB:
            if (record->event.pressed) {
                SEND_STRING("github.com/takashicompany/goat51");
            }
            return false;
    }
    
    return true;
}

#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
    { ENCODER_CCW_CW(KC_MS_WH_UP, KC_MS_WH_DOWN) },
    { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
    { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
    { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
    { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
    { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
    { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
};
#endif
\ No newline at end of file

A keyboards/takashicompany/goat51/keymaps/via/rules.mk => keyboards/takashicompany/goat51/keymaps/via/rules.mk +2 -0
@@ 0,0 1,2 @@
VIA_ENABLE = yes
ENCODER_MAP_ENABLE = yes
\ No newline at end of file

A keyboards/takashicompany/goat51/readme.md => keyboards/takashicompany/goat51/readme.md +40 -0
@@ 0,0 1,40 @@
# 🐐 GOAT51

![takashicompany/GOAT51](https://i.imgur.com/7xD9a4zh.jpg)

GOAT51は51キーのキーボードです。
特徴的な放射状のキーレイアウトは指を自然に置くことができ、効率的な入力が可能です。
MX互換のキースイッチとChoc v1キースイッチの取り付けに対応しております。
またPCBにキースイッチソケットを取り付けることが可能で、容易にキースイッチの交換ができます。
キーボードの中央にはお気に入りのキーキャップを取り付ける専用スペースがあり、アルチザンキーキャップやお気に入りのキーキャップを飾ることができます。
実はそこにはロータリーエンコーダを置くこともできちゃいます。

---
GOAT51 is a 51-key keyboard.
The distinctive radial key layout allows the fingers to be placed naturally for efficient typing.
It supports the installation of MX compatible key switches and Choc v1 key switches.
A key switch socket can also be installed on the PCB for easy keyswitch replacement.
There is a dedicated space in the center of the keyboard for mounting your favorite keycaps, allowing you to display Artisan keycaps or your favorite keycaps.
In fact, you can even place a rotary encoder there.

* Keyboard Maintainer: [takashicompany](https://github.com/takashicompany)
* Hardware Supported: GOAT51 PCB, Pro Micro
* Hardware Availability: https://github.com/takashicompany/goat51

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

    make takashicompany/goat51:default

Flashing example for this keyboard:

    make takashicompany/goat51:default:flash

See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).

## Bootloader

Enter the bootloader in 3 ways:

* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

A keyboards/takashicompany/goat51/rules.mk => keyboards/takashicompany/goat51/rules.mk +1 -0
@@ 0,0 1,1 @@
# This file intentionally left blank
\ No newline at end of file