~ruther/qmk_firmware

2c8d8be7187e800cfd465674449255b25e5d02b9 — Danny 6 years ago 70329b4
[Keyboard] Add JNAO keyboard (#6598)

* Add JNAO keyboard

* Use layout macro for default_4x12

* Add bakingpy keymap

* Add info.json data

* Remove bakingpy keymap from jnao, add ortho_4x12 layout fetching

* Clear up default keymaps
A keyboards/jnao/config.h => keyboards/jnao/config.h +52 -0
@@ 0,0 1,52 @@
/*
Copyright 2012 Jun Wako <wakojun@gmail.com>

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

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

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

#pragma once

#include "config_common.h"

/* USB Device descriptor parameter */
#define VENDOR_ID       0x1337
#define PRODUCT_ID      0x6017
#define DEVICE_VER      0x0001
#define MANUFACTURER    Maple Computing
#define PRODUCT         JNAO Keyboard
#define DESCRIPTION     A no-frills ortholinear keyboard

/* key matrix size */
#define MATRIX_ROWS 5
#define MATRIX_COLS 12

#define MATRIX_ROW_PINS { E6, F0, F5, F6, F7 }
#define MATRIX_COL_PINS { F1, F4, B1, B2, B3, B7, D1, D2, D4, D6, D7, B4 }
#define UNUSED_PINS

#define BACKLIGHT_PIN D0

/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW

/* number of backlight levels */
#define BACKLIGHT_LEVELS 3

/* 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

A keyboards/jnao/info.json => keyboards/jnao/info.json +125 -0
@@ 0,0 1,125 @@
{
  "keyboard_name": "JNAO",
  "url": "",
  "maintainer": "That-Canadian",
  "width": 12,
  "height": 5,
  "layouts": {
    "LAYOUT_ortho_5x12": {
      "layout": [
        {"label":"`", "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":"Backspace", "x":11, "y":0},
        {"label":"Tab", "x":0, "y":1},
        {"label":"Q", "x":1, "y":1},
        {"label":"W", "x":2, "y":1},
        {"label":"E", "x":3, "y":1},
        {"label":"R", "x":4, "y":1},
        {"label":"T", "x":5, "y":1},
        {"label":"Y", "x":6, "y":1},
        {"label":"U", "x":7, "y":1},
        {"label":"I", "x":8, "y":1},
        {"label":"O", "x":9, "y":1},
        {"label":"P", "x":10, "y":1},
        {"label":"Delete", "x":11, "y":1},
        {"label":"Esc", "x":0, "y":2},
        {"label":"A", "x":1, "y":2},
        {"label":"S", "x":2, "y":2},
        {"label":"D", "x":3, "y":2},
        {"label":"F", "x":4, "y":2},
        {"label":"G", "x":5, "y":2},
        {"label":"H", "x":6, "y":2},
        {"label":"J", "x":7, "y":2},
        {"label":"K", "x":8, "y":2},
        {"label":"L", "x":9, "y":2},
        {"label":";", "x":10, "y":2},
        {"label":"'", "x":11, "y":2},
        {"label":"Shift", "x":0, "y":3},
        {"label":"Z", "x":1, "y":3},
        {"label":"X", "x":2, "y":3},
        {"label":"C", "x":3, "y":3},
        {"label":"V", "x":4, "y":3},
        {"label":"B", "x":5, "y":3},
        {"label":"N", "x":6, "y":3},
        {"label":"M", "x":7, "y":3},
        {"label":",", "x":8, "y":3},
        {"label":".", "x":9, "y":3},
        {"label":"/", "x":10, "y":3},
        {"label":"Enter", "x":11, "y":3},
        {"label":"Fn", "x":0, "y":4},
        {"label":"Ctrl", "x":1, "y":4},
        {"label":"Alt", "x":2, "y":4},
        {"label":"Meta", "x":3, "y":4},
        {"label":"Lower", "x":4, "y":4},
        {"label":"Space", "x":5, "y":4},
        {"label":"Space", "x":6, "y":4},
        {"label":"Raise", "x":7, "y":4},
        {"label":"Left", "x":8, "y":4},
        {"label":"Down", "x":9, "y":4},
        {"label":"Up", "x":10, "y":4},
        {"label":"Right", "x":11, "y":4}
      ]
    },
    "LAYOUT_ortho_4x12": {
      "layout": [
        {"label":"Tab", "x":0, "y":0},
        {"label":"Q", "x":1, "y":0},
        {"label":"W", "x":2, "y":0},
        {"label":"E", "x":3, "y":0},
        {"label":"R", "x":4, "y":0},
        {"label":"T", "x":5, "y":0},
        {"label":"Y", "x":6, "y":0},
        {"label":"U", "x":7, "y":0},
        {"label":"I", "x":8, "y":0},
        {"label":"O", "x":9, "y":0},
        {"label":"P", "x":10, "y":0},
        {"label":"Delete", "x":11, "y":0},
        {"label":"Esc", "x":0, "y":1},
        {"label":"A", "x":1, "y":1},
        {"label":"S", "x":2, "y":1},
        {"label":"D", "x":3, "y":1},
        {"label":"F", "x":4, "y":1},
        {"label":"G", "x":5, "y":1},
        {"label":"H", "x":6, "y":1},
        {"label":"J", "x":7, "y":1},
        {"label":"K", "x":8, "y":1},
        {"label":"L", "x":9, "y":1},
        {"label":";", "x":10, "y":1},
        {"label":"'", "x":11, "y":1},
        {"label":"Shift", "x":0, "y":2},
        {"label":"Z", "x":1, "y":2},
        {"label":"X", "x":2, "y":2},
        {"label":"C", "x":3, "y":2},
        {"label":"V", "x":4, "y":2},
        {"label":"B", "x":5, "y":2},
        {"label":"N", "x":6, "y":2},
        {"label":"M", "x":7, "y":2},
        {"label":",", "x":8, "y":2},
        {"label":".", "x":9, "y":2},
        {"label":"/", "x":10, "y":2},
        {"label":"Enter", "x":11, "y":2},
        {"label":"Fn", "x":0, "y":3},
        {"label":"Ctrl", "x":1, "y":3},
        {"label":"Alt", "x":2, "y":3},
        {"label":"Meta", "x":3, "y":3},
        {"label":"Lower", "x":4, "y":3},
        {"label":"Space", "x":5, "y":3},
        {"label":"Space", "x":6, "y":3},
        {"label":"Raise", "x":7, "y":3},
        {"label":"Left", "x":8, "y":3},
        {"label":"Down", "x":9, "y":3},
        {"label":"Up", "x":10, "y":3},
        {"label":"Right", "x":11, "y":3}
      ]
    }
  }
}

A keyboards/jnao/jnao.c => keyboards/jnao/jnao.c +1 -0
@@ 0,0 1,1 @@
#include "jnao.h"

A keyboards/jnao/jnao.h => keyboards/jnao/jnao.h +32 -0
@@ 0,0 1,32 @@
#pragma once

#include "quantum.h"

#define LAYOUT_ortho_5x12( \
    k01, k02, k03, k04, k05, k06, k07, k08, k09, k010, k011, k012, \
    k11, k12, k13, k14, k15, k16, k17, k18, k19, k110, k111, k112, \
    k21, k22, k23, k24, k25, k26, k27, k28, k29, k210, k211, k212, \
    k31, k32, k33, k34, k35, k36, k37, k38, k39, k310, k311, k312, \
    k41, k42, k43, k44, k45, k46, k47, k48, k49, k410, k411, k412 \
) \
{ \
    { k01, k02, k03, k04, k05, k06, k07, k08, k09, k010, k011, k012 }, \
    { k11, k12, k13, k14, k15, k16, k17, k18, k19, k110, k111, k112 }, \
    { k21, k22, k23, k24, k25, k26, k27, k28, k29, k210, k211, k212 }, \
    { k31, k32, k33, k34, k35, k36, k37, k38, k39, k310, k311, k312 }, \
    { k41, k42, k43, k44, k45, k46, k47, k48, k49, k410, k411, k412 } \
}

#define LAYOUT_ortho_4x12( \
    k01, k02, k03, k04, k05, k06, k07, k08, k09, k010, k011, k012, \
    k11, k12, k13, k14, k15, k16, k17, k18, k19, k110, k111, k112, \
    k21, k22, k23, k24, k25, k26, k27, k28, k29, k210, k211, k212, \
    k31, k32, k33, k34, k35, k36, k37, k38, k39, k310, k311, k312 \
) \
{ \
    {k01, k02, k03, k04, k05, k06, k07, k08, k09, k010, k011, k012}, \
    {k11, k12, k13, k14, k15, k16, k17, k18, k19, k110, k111, k112}, \
    {k21, k22, k23, k24, k25, k26, k27, k28, k29, k210, k211, k212}, \
    {k31, k32, k33, k34, k35, k36, k37, k38, k39, k310, k311, k312}, \
    {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO} \
}

A keyboards/jnao/keymaps/default/keymap.c => keyboards/jnao/keymaps/default/keymap.c +155 -0
@@ 0,0 1,155 @@
#include QMK_KEYBOARD_H

enum layer_names {
    _QWERTY,
    _LOWER,
    _RAISE,
    _FUNCTION,
    _ADJUST,
};

enum jnao_keycodes {
  QWERTY = SAFE_RANGE,
  LOWER,
  RAISE,
};

// Defines for task manager and such
#define CALTDEL LCTL(LALT(KC_DEL))
#define TSKMGR LCTL(LSFT(KC_ESC))

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

/* Qwerty
 * ,-----------------------------------------------------------------------------------.
 * |  Esc |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Del  |
 * |------+------+------+------+------+------+------+------+------+------+------+------|
 * | Tab  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Bksp |
 * |------+------+------+------+------+-------------+------+------+------+------+------|
 * | Func |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  | Enter|
 * |------+------+------+------+------+------|------+------+------+------+------+------|
 * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |  '   |
 * |------+------+------+------+------+------+------+------+------+------+------+------|
 * | Ctrl |  `   | GUI  | ALT  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
 * `-----------------------------------------------------------------------------------'
 */
[_QWERTY] = LAYOUT_ortho_5x12( \
  KC_ESC,        KC_1,   KC_2,    KC_3,    KC_4,  KC_5,   KC_6,   KC_7,  KC_8,    KC_9,    KC_0,    KC_DEL,  \
  KC_TAB,        KC_Q,   KC_W,    KC_E,    KC_R,  KC_T,   KC_Y,   KC_U,  KC_I,    KC_O,    KC_P,    KC_BSPC, \
  MO(_FUNCTION), KC_A,   KC_S,    KC_D,    KC_F,  KC_G,   KC_H,   KC_J,  KC_K,    KC_L,    KC_SCLN, KC_ENT,  \
  OSM(MOD_LSFT), KC_Z,   KC_X,    KC_C,    KC_V,  KC_B,   KC_N,   KC_M,  KC_COMM, KC_DOT,  KC_SLSH, KC_QUOT, \
  KC_LCTL,       KC_GRV, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT  \
),

/* Lower
 * ,-----------------------------------------------------------------------------------.
 * |   ~  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |  F7  |  F8  |  F9  |  F10 |  F11 |
 * |------+------+------+------+------+-------------+------+------+------+------+------|
 * | Esc  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Del  |
 * |------+------+------+------+------+-------------+------+------+------+------+------|
 * |      |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |Enter |
 * |------+------+------+------+------+------|------+------+------+------+------+------|
 * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |      |      | Mute |      |  |   |
 * |------+------+------+------+------+------+------+------+------+------+------+------|
 * |      |      |      |      |Lower |    Bksp     |Raise | Next | Vol- | Vol+ | Play |
 * `-----------------------------------------------------------------------------------'
 */
[_LOWER] = LAYOUT_ortho_5x12( \
  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_ESC,  KC_EXLM,  KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,  \
  _______, KC_F1,    KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, _______, \
  _______, KC_F7,    KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, _______, KC_MUTE, _______, KC_PIPE, \
  _______, _______,  _______, _______, _______, KC_BSPC, KC_BSPC, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY  \
),

/* Raise
 * ,-----------------------------------------------------------------------------------.
 * |   `  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |  F7  |  F8  |  F9  |  F10 |  F11 |
 * |------+------+------+------+------+------+------+------+------+------+------+------|
 * | Esc  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Del  |
 * |------+------+------+------+------+-------------+------+------+------+------+------|
 * |      |   4  |   5  |   6  |   +  |  F5  |  F6  |   -  |   =  |   [  |   ]  |Enter |
 * |------+------+------+------+------+------|------+------+------+------+------+------|
 * |Enter |   7  |   8  |   9  |   -  |  F11 |  F12 |ISO # |ISO / | Mute |      |   \  |
 * |------+------+------+------+------+------+------+------+------+------+------+------|
 * |      |   ,  |   0  |  .   |Lower |    Bksp     |Raise | Next | Vol- | Vol+ | Play |
 * `-----------------------------------------------------------------------------------'
 */
[_RAISE] = LAYOUT_ortho_5x12( \
  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_ESC,  KC_1,    KC_2,  KC_3,   KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_DEL,  \
  _______, KC_4,    KC_5,  KC_6,   KC_PLUS, KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, _______, \
  KC_ENT,  KC_7,    KC_8,  KC_9,   KC_MINS, KC_F11,  KC_F12,  KC_NUHS, KC_NUBS, KC_MUTE, _______, KC_BSLS, \
  _______, KC_COMM, KC_0,  KC_DOT, _______, KC_BSPC, KC_BSPC, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY  \
),

/* Adjust (Lower + Raise)
 * ,-----------------------------------------------------------------------------------.
 * |  ESC |  F1  |  F2  |  F3  |ALTF4 |  F5  |  F6  |  F7  |  F8  |  F9  |  F10 |  F11 |
 * |------+------+------+------+------+------+------+------+------+------+------+------|
 * |Taskmg|      |      |      |      |      |      |      |      |      |      |caltde|
 * |------+------+------+------+------+-------------+------+------+------+------+------|
 * |      |      |      |Aud on|Audoff|AGnorm|AGswap|Qwerty|      |      |      |      |
 * |------+------+------+------+------+------|------+------+------+------+------+------|
 * |      |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof|      |      |      |      |      |
 * |------+------+------+------+------+------+------+------+------+------+------+------|
 * |      |      |      |      |      |      |      |      |      |      |      |RESET |
 * `-----------------------------------------------------------------------------------'
 */
[_ADJUST] = LAYOUT_ortho_5x12( \
  KC_ESC,  KC_F1,   KC_F2,   KC_F3,   LALT(KC_F4), KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  \
  TSKMGR,  _______, _______, _______, _______,     _______, _______, _______, _______, _______, _______, CALTDEL, \
  _______, _______, _______, AU_ON,   AU_OFF,      AG_NORM, AG_SWAP, QWERTY,  _______, _______, _______, _______, \
  _______,  MUV_DE, MUV_IN,  MU_ON,   MU_OFF,      MI_ON,   MI_OFF,  _______, _______, _______, _______, _______, \
  _______, _______, _______, _______, _______,     _______, _______, _______, _______, _______, _______, RESET    \
),

/* Function
 * ,-----------------------------------------------------------------------------------.
 * |  Esc |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |  F7  |  F8  |  F9  |  F10 |  F11 |
 * |------+------+------+------+------+------+------+------+------+------+------+------|
 * |      |      |      |      |      |      |      |      |   up |      |      |      |
 * |------+------+------+------+------+-------------+------+------+------+------+------|
 * |      |      |      |      |      |      |      | Left | Down |Right |      |      |
 * |------+------+------+------+------+------|------+------+------+------+------+------|
 * | Caps |      |      |      |      |      |      |      |      |      |      |      |
 * |------+------+------+------+------+------+------+------+------+------+------+------|
 * |      |      |      |      |      |      |      |      |      |      |      |
 * `-----------------------------------------------------------------------------------'
 */
[_FUNCTION] = LAYOUT_ortho_5x12( \
  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_UP,   _______, _______, _______, \
  _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, \
  KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______  \
)


};

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  switch (keycode) {
        case LOWER:
          if (record->event.pressed) {
            layer_on(_LOWER);
            update_tri_layer(_LOWER, _RAISE, _ADJUST);
          } else {
            layer_off(_LOWER);
            update_tri_layer(_LOWER, _RAISE, _ADJUST);
          }
          return false;
          break;
        case RAISE:
          if (record->event.pressed) {
            layer_on(_RAISE);
            update_tri_layer(_LOWER, _RAISE, _ADJUST);
          } else {
            layer_off(_RAISE);
            update_tri_layer(_LOWER, _RAISE, _ADJUST);
          }
          return false;
          break;
      }
    return true;
};

A keyboards/jnao/keymaps/default_4x12/keymap.c => keyboards/jnao/keymaps/default_4x12/keymap.c +150 -0
@@ 0,0 1,150 @@
#include QMK_KEYBOARD_H

enum layer_names {
    _QWERTY,
    _LOWER,
    _RAISE,
    _FUNCTION,
    _ADJUST,
};

enum planck_keycodes {
  QWERTY = SAFE_RANGE,
  LOWER,
  RAISE
};

// Defines for task manager and such
#define CALTDEL LCTL(LALT(KC_DEL))
#define TSKMGR LCTL(LSFT(KC_ESC))

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

/* Qwerty
 * ,-----------------------------------------------------------------------------------.
 * | Tab  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Bksp |
 * |------+------+------+------+------+-------------+------+------+------+------+------|
 * | Func |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  | Enter|
 * |------+------+------+------+------+------|------+------+------+------+------+------|
 * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |  '   |
 * |------+------+------+------+------+------+------+------+------+------+------+------|
 * | Ctrl |  `   | GUI  | Alt  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
 * `-----------------------------------------------------------------------------------'
 */
[_QWERTY] = LAYOUT_ortho_4x12(
  KC_TAB,        KC_Q,   KC_W,    KC_E,    KC_R,  KC_T,   KC_Y,   KC_U,  KC_I,    KC_O,    KC_P,    KC_BSPC,
  MO(_FUNCTION), KC_A,   KC_S,    KC_D,    KC_F,  KC_G,   KC_H,   KC_J,  KC_K,    KC_L,    KC_SCLN, KC_ENT,
  OSM(MOD_LSFT), KC_Z,   KC_X,    KC_C,    KC_V,  KC_B,   KC_N,   KC_M,  KC_COMM, KC_DOT,  KC_SLSH, KC_QUOT,
  KC_LCTL,       KC_GRV, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT
),

/* Lower
 * ,-----------------------------------------------------------------------------------.
 * | Esc  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Del  |
 * |------+------+------+------+------+-------------+------+------+------+------+------|
 * |      |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |Enter |
 * |------+------+------+------+------+------|------+------+------+------+------+------|
 * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |      |      | Mute |      |  |   |
 * |------+------+------+------+------+------+------+------+------+------+------+------|
 * |      |      |      |      |Lower | Bksp | Bksp |Raise | Next | Vol- | Vol+ | Play |
 * `-----------------------------------------------------------------------------------'
 */
[_LOWER] = LAYOUT_ortho_4x12(
  KC_ESC,  KC_EXLM,  KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
  _______, KC_F1,    KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, _______,
  _______, KC_F7,    KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, _______, KC_MUTE, _______, KC_PIPE,
  _______, _______,  _______, _______, _______, KC_BSPC, KC_BSPC, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
),

/* Raise
 * ,-----------------------------------------------------------------------------------.
 * | Esc  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Del  |
 * |------+------+------+------+------+-------------+------+------+------+------+------|
 * |      |   4  |   5  |   6  |   +  |  F5  |  F6  |   -  |   =  |   [  |   ]  |Enter |
 * |------+------+------+------+------+------|------+------+------+------+------+------|
 * |Enter |   7  |   8  |   9  |   -  |  F11 |  F12 |ISO # |ISO / | Mute |      |   \  |
 * |------+------+------+------+------+------+------+------+------+------+------+------|
 * |      |   ,  |   0  |  .   |Lower | Bksp | Bksp |Raise | Next | Vol- | Vol+ | Play |
 * `-----------------------------------------------------------------------------------'
 */
[_RAISE] = LAYOUT_ortho_4x12(
  KC_ESC,  KC_1,    KC_2,  KC_3,   KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_DEL,
  _______, KC_4,    KC_5,  KC_6,   KC_PLUS, KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, _______,
  KC_ENT,  KC_7,    KC_8,  KC_9,   KC_MINS, KC_F11,  KC_F12,  KC_NUHS, KC_NUBS, KC_MUTE, _______, KC_BSLS,
  _______, KC_COMM, KC_0,  KC_DOT, _______, KC_BSPC, KC_BSPC, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
),

/* Adjust (Lower + Raise)
 * ,-----------------------------------------------------------------------------------.
 * |Taskmg|      |      |      |      |      |      |      |      |      |      |caltde|
 * |------+------+------+------+------+-------------+------+------+------+------+------|
 * |      |      |      |Aud on|Audoff|AGnorm|AGswap|Qwerty|      |      |      |      |
 * |------+------+------+------+------+------|------+------+------+------+------+------|
 * |      |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof|      |      |      |      |      |
 * |------+------+------+------+------+------+------+------+------+------+------+------|
 * |      |      |      |      |      |      |      |      |      |      |      | RESET|
 * `-----------------------------------------------------------------------------------'
 */
[_ADJUST] = LAYOUT_ortho_4x12(
  TSKMGR,  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, CALTDEL,
  _______, _______, _______, AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, QWERTY,  _______, _______, _______, _______,
  _______,  MUV_DE, MUV_IN,  MU_ON,   MU_OFF,  MI_ON,   MI_OFF,  _______, _______, _______, _______, _______,
  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET
),

/* Function
 * ,-----------------------------------------------------------------------------------.
 * |      |      |      |      |      |      |      |      |  Up  |      |      |      |
 * |------+------+------+------+------+-------------+------+------+------+------+------|
 * |      |      |      |      |      |      |      | Left | Down |Right |      |      |
 * |------+------+------+------+------+------|------+------+------+------+------+------|
 * | Caps |      |      |      |      |      |      |      |      |      |      |      |
 * |------+------+------+------+------+------+------+------+------+------+------+------|
 * |      |      |      |      |      |      |      |      |      |      |      |
 * `-----------------------------------------------------------------------------------'
 */
[_FUNCTION] = LAYOUT_ortho_4x12(
  _______, _______, _______, _______, _______, _______, _______, _______, KC_UP,   _______, _______, _______,
  _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______,
  KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)

};

#ifdef AUDIO_ENABLE

float tone_startup[][2]    = SONG(STARTUP_SOUND);
float tone_qwerty[][2]     = SONG(QWERTY_SOUND);
float tone_dvorak[][2]     = SONG(DVORAK_SOUND);
float tone_colemak[][2]    = SONG(COLEMAK_SOUND);
float music_scale[][2]     = SONG(MUSIC_SCALE_SOUND);

float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
#endif

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  switch (keycode) {
    case LOWER:
      if (record->event.pressed) {
        layer_on(_LOWER);
        update_tri_layer(_LOWER, _RAISE, _ADJUST);
      } else {
        layer_off(_LOWER);
        update_tri_layer(_LOWER, _RAISE, _ADJUST);
      }
      return false;
      break;
    case RAISE:
      if (record->event.pressed) {
        layer_on(_RAISE);
        update_tri_layer(_LOWER, _RAISE, _ADJUST);
      } else {
        layer_off(_RAISE);
        update_tri_layer(_LOWER, _RAISE, _ADJUST);
      }
      return false;
      break;
  }
  return true;
}

A keyboards/jnao/readme.md => keyboards/jnao/readme.md +14 -0
@@ 0,0 1,14 @@
JNAO
====

An no-frills 5x12 or 4x12 ortholinear keyboard

Keyboard Maintainer: [That-Canadian](https://github.com/that-canadian)  
Hardware Supported: JNAO PCB  
Hardware Availability: [SpaceCat](https://spacecat.design) and [Keebio](https://keeb.io/)

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

    make jnao:default

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

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


# Bootloader selection
#   Teensy       halfkay
#   Pro Micro    caterina
#   Atmel DFU    atmel-dfu
#   LUFA DFU     lufa-dfu
#   QMK DFU      qmk-dfu
#   atmega32a    bootloadHID
BOOTLOADER = atmel-dfu


# If you don't know the bootloader type, then you can specify the
# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
#   Teensy halfKay      512
#   Teensy++ halfKay    1024
#   Atmel DFU loader    4096
#   LUFA bootloader     4096
#   USBaspLoader        2048
# OPT_DEFS += -DBOOTLOADER_SIZE=4096


# Build Options
#   change yes to no to disable
#
BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = no        # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
CONSOLE_ENABLE = yes        # Console for debug(+400)
COMMAND_ENABLE = yes        # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = no            # USB Nkey Rollover
BACKLIGHT_ENABLE = yes      # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
MIDI_ENABLE = no            # MIDI support (+2400 to 4200, depending on config)
UNICODE_ENABLE = no         # Unicode
BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no           # Audio output on port C6
FAUXCLICKY_ENABLE = no      # Use buzzer to emulate clicky switches
HD44780_ENABLE = no 		# Enable support for HD44780 based LCDs (+400)

LAYOUTS = ortho_5x12 ortho_4x12
LAYOUTS_HAS_RGB = no

M layouts/community/ortho_4x12/bakingpy/keymap.c => layouts/community/ortho_4x12/bakingpy/keymap.c +28 -16
@@ 2,13 2,15 @@

extern keymap_config_t keymap_config;

#define _MAC 0
#define _WINDOWS 1
#define _TESTMODE 2
#define _LOWER 3
#define _RAISE 4
#define _FKEYS 5
#define _ADJUST 16
enum layer_names {
    _MAC,
    _WINDOWS,
    _TESTMODE,
    _LOWER,
    _RAISE,
    _FKEYS,
    _ADJUST,
};

enum custom_keycodes {
  MAC = SAFE_RANGE,


@@ 17,7 19,6 @@ enum custom_keycodes {
  LOWER,
  RAISE,
  ADJUST,
  PLAY_ALLSTAR,
};

#define KC_ KC_TRNS


@@ 35,6 36,22 @@ enum custom_keycodes {
#define KC_BL_T BL_TOGG
#define KC_RMOD RGB_MOD

#ifndef LAYOUT_kc_ortho_4x12
#define LAYOUT_kc_ortho_4x12( \
    L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
    L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
    L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
    L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35 \
    ) \
    LAYOUT_ortho_4x12( \
        KC_##L00, KC_##L01, KC_##L02, KC_##L03, KC_##L04, KC_##L05, KC_##R00, KC_##R01, KC_##R02, KC_##R03, KC_##R04, KC_##R05, \
        KC_##L10, KC_##L11, KC_##L12, KC_##L13, KC_##L14, KC_##L15, KC_##R10, KC_##R11, KC_##R12, KC_##R13, KC_##R14, KC_##R15, \
        KC_##L20, KC_##L21, KC_##L22, KC_##L23, KC_##L24, KC_##L25, KC_##R20, KC_##R21, KC_##R22, KC_##R23, KC_##R24, KC_##R25, \
        KC_##L30, KC_##L31, KC_##L32, KC_##L33, KC_##L34, KC_##L35, KC_##R30, KC_##R31, KC_##R32, KC_##R33, KC_##R34, KC_##R35 \
    )

#endif

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

  [_MAC] = LAYOUT_kc_ortho_4x12(


@@ 130,28 147,23 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

};

void persistent_default_layer_set(uint16_t default_layer) {
  eeconfig_update_default_layer(default_layer);
  default_layer_set(default_layer);
}

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  switch (keycode) {
    case MAC:
      if (record->event.pressed) {
        persistent_default_layer_set(1UL<<_MAC);
        set_single_persistent_default_layer(_MAC);
      }
      return false;
      break;
    case WINDOWS:
      if (record->event.pressed) {
        persistent_default_layer_set(1UL<<_WINDOWS);
        set_single_persistent_default_layer(_WINDOWS);
      }
      return false;
      break;
    case TESTMODE:
      if (record->event.pressed) {
        persistent_default_layer_set(1UL<<_TESTMODE);
        set_single_persistent_default_layer(_TESTMODE);
      }
      return false;
      break;

M layouts/community/ortho_4x12/bakingpy/rules.mk => layouts/community/ortho_4x12/bakingpy/rules.mk +1 -1
@@ 1,5 1,5 @@
ifneq ($(LAYOUTS_HAS_RGB), no)
	RGBLIGHT_ENABLE = yes
  RGBLIGHT_ENABLE = yes
endif
AUDIO_ENABLE = no
ifeq ($(strip $(KEYBOARD)), zlant)