~ruther/qmk_firmware

ff854565ce012a325ad04b09a7bcb7c8bb9d43c5 — Jonas Avellana 6 years ago 2a948e7
[Keymap] ninjonas keymap for crkbd & ninjonas userspace updates (#6797)

* [keymap(crkbd)] introducing crkbd keymap on ninjonas profile

* [keymap(crkbd)] introducing crkbd keymap on ninjonas profile

* [refactor(crkbd)] reducing file size by selecting RGB animations

* [refactor(crkbd)] added shiftit key

* [refactor(crkbd)] added shiftit key

* [chore(crkbd)] adding SLEEP_LED_ENABLE on rules.mk

* [refactor(crkbd)] added keylog & removed static rainbow RGB

* [feat(crkbd)] introduced em-dash '—' keymap

* [feat(crkbd)] added screenshot functionality

* [refactor(lily58,pinky3)] moving media keys

* [refactor(lily58)] Added emdash key

* [chore] removing NUMBERS & FUNCTIONS layers as they're useless

* [chore] removing NUMBERS & FUNCTIONS layers as they're useless

* [chore(crkbd,lily48)] Updating README.md

* [feat] added K_LAPP & K_RAPP to mimic command + tab

* [feat] added K_LAPP & K_RAPP to mimic command + tab

* [fix(#6797)] resolving changes requested by @drashna

* [fix(#6797)] first cut on using QMK OLED Driver

* [fix(#6797)] cleaning up rules.mk

* [fix(#6797)] making scrolling logo work

* [fix(#6797)] Using OLED Driver for Lily58

* [fix(#6797)] Moved OLED driver implementation to ninjonas userspace

* [fix(#6797)] Bringing back crkbd & lily58 logos

* [fix(#6797)] Turning off OLED based off @drashna's workaround in #5982

* [fix(#6797)] whoops! forgot to checkin crkbd/config.h

* [fix(#6797)] fixing issue with OLED randomly turning on

* [fix(#6797)] using default glcdfont.c for lily58 & crkbd

* [fix(#6797)] Using LINK_TIME_OPTIMIZATION_ENABLE rather than EXTRAFLAGS as per code review

* [fix(#6797)] updating M_MALL macro as per code review by @fauxpark
A keyboards/crkbd/keymaps/ninjonas/README.md => keyboards/crkbd/keymaps/ninjonas/README.md +99 -0
@@ 0,0 1,99 @@
# ninjonas Keymap for [Corne Keyboard (crkbd)](https://github.com/foostan/crkbd)

## Keymap
This keymap is designed based off my typing habits and is subject to change. Information about custom user macros and tap dances can be found [here](../../../../users/ninjonas).

More information about the crkbd keyboard can be found [here](https://thomasbaart.nl/2018/11/26/corne-keyboard-helidox-build-log/)

### QWERTY
```c
  //,----------------------------------------------------.      ,----------------------------------------------------.
  //      Tab,       Q,       W,       E,       R,      T,              Y,       U,       I,       O,       P,     \
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
  //      ESC,       A,       S,       D,       F,      G,              H,       J,       K,       L,       ;,     '
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
  //   LShift,       Z,       X,       C,       V,      B,              N,       M,       ,,       .,       /,     =
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
                                 //    ,    Ctrl,  Space,          Enter,  BackSP, Del
                                 //`---------------------'      `---------------------'
```

### DVORAK
```c
  //,----------------------------------------------------.      ,----------------------------------------------------.
  //      Tab,       ',       ,,       .,       P,      Y,              F,       G,       C,       R,       L,     \
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
  //      ESC,       A,       O,       E,       U,      I,              D,       H,       T,       N,       S,     /
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
  //   LShift,       ;,       Q,       J,       K,      X,              B,       M,       W,       V,       Z,     =
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
                                 //    ,    Ctrl,  Space,          Enter,  BackSP, Del
                                 //`---------------------'      `---------------------'
```

### COLEMAK
```c
  //,----------------------------------------------------.      ,----------------------------------------------------.
  //      Tab,       Q,       W,       F,       P,      G,              J,       L,       U,       Y,       ;,     \
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
  //      ESC,       A,       R,       S,       T,      D,              H,       N,       E,       I,       O,     '
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
  //   LShift,       Z,       X,       C,       V,      B,              K,       M,       ,,       .,       /,     =
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
                                 //    ,    Ctrl,  Space,          Enter,  BackSP, Del
                                 //`---------------------'      `---------------------'
```

### LOWER
```c
  //,----------------------------------------------------.      ,----------------------------------------------------.
  //         ,        , KC_BRIU,    Play,    Mute, K_CSCN,           PgUp,    Home,      Up,     End,        ,  K_MDSH
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
  //         ,        , KC_BRID,    Next,   VolUp,       ,           PgDn,    Left,    Down,   Right,  K_LOCK,
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
  //         ,        ,        ,    Prev,   VolDn,      [,              ],        ,        ,  M_CODE,  M_ZOOM, M_PYNV,
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
                                 //     ,        ,       ,               ,        ,
                                 //`---------------------'      `---------------------'
```

### RAISE
```c
  //,----------------------------------------------------.      ,----------------------------------------------------.
  //        `,       1,       2,       3,       4,      5,              6,       7,       8,       9,       0,      -
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
  //        ~,       !,       @,       #,       $,      %,              ^,       &,       *,       (,       ),      _
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
  //      F11,      F1,      F2,      F3,      F4,     F5,             F6,      F7,      F8,      F9,     F10,    F12
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
                                 //     ,        ,       ,               ,        ,
                                 //`---------------------'      `---------------------'
```

### ADJUST
```c
  //,----------------------------------------------------.      ,----------------------------------------------------.
  //   M_MAKE, EEP_RST,        ,        ,        ,        ,       RGB_TOG,        ,        , COLEMAK,  DVORAK, QWERTY,
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
  //   M_VRSN,  M_MALL,        , RGB_SAI, RGB_HUI, RGB_VAI,              ,        ,        ,        ,        ,        ,
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
  //   M_FLSH,        ,        , RGB_SAD, RGB_HUD, RGB_VAD,       RGB_M_P, RGB_M_B,RGB_M_SW,        ,        ,        ,
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
                                 //     ,        ,       ,               ,        ,
                                 //`---------------------'      `---------------------'
```

<!--
### TEMPLATE
```c
  //,----------------------------------------------------.      ,----------------------------------------------------.
  //         ,        ,        ,        ,        ,       ,               ,        ,        ,        ,        ,
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
  //         ,        ,        ,        ,        ,       ,               ,        ,        ,        ,        ,
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
  //         ,        ,        ,        ,        ,       ,               ,        ,        ,        ,        ,
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
                                 //     ,        ,       ,               ,        ,
                                 //`---------------------'      `---------------------'
```
-->
\ No newline at end of file

A keyboards/crkbd/keymaps/ninjonas/config.h => keyboards/crkbd/keymaps/ninjonas/config.h +48 -0
@@ 0,0 1,48 @@
/*
This is the c configuration file for the keymap

Copyright 2012 Jun Wako <wakojun@gmail.com>
Copyright 2015 Jack Humbert

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

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

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

#pragma once

//#define USE_MATRIX_I2C

/* Select hand configuration */

#define MASTER_LEFT
// #define MASTER_RIGHT
// #define EE_HANDS

#define USE_SERIAL_PD2

#define TAPPING_FORCE_HOLD

#ifdef RGBLIGHT_ENABLE
    #undef RGBLED_NUM
    #undef RGBLIGHT_ANIMATIONS   // https://docs.qmk.fm/#/feature_rgblight?id=effect-and-animation-toggles
    #define RGBLIGHT_EFFECT_BREATHING
    #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
    #define RGBLED_NUM 27
    #define RGBLIGHT_LIMIT_VAL 120
    #define RGBLIGHT_HUE_STEP 10
    #define RGBLIGHT_SAT_STEP 17
    #define RGBLIGHT_VAL_STEP 17
#endif 

#define OLED_FONT_H "keyboards/crkbd/lib/glcdfont.c"
#define OLED_DISABLE_TIMEOUT
\ No newline at end of file

A keyboards/crkbd/keymaps/ninjonas/keymap.c => keyboards/crkbd/keymaps/ninjonas/keymap.c +89 -0
@@ 0,0 1,89 @@
#include QMK_KEYBOARD_H
#include "ninjonas.h"

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  [_QWERTY] = LAYOUT_wrapper(
  //,----------------------------------------------------.      ,----------------------------------------------------.
     _____________________QWERTY_L1______________________,       _____________________QWERTY_R1______________________,
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
     _____________________QWERTY_L2______________________,       _____________________QWERTY_R2______________________,
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
     _____________________QWERTY_L3______________________,       _____________________QWERTY_R3______________________,
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
                                    T_GUI, KC_LCTL,LT_RAI,       LT_LOW,KC_BSPC,KC_DEL
                                 //`---------------------'      `---------------------'
  ),

  [_DVORAK] = LAYOUT_wrapper(
  //,----------------------------------------------------.      ,----------------------------------------------------.
     _____________________DVORAK_L1______________________,       _____________________DVORAK_R1______________________,
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
     _____________________DVORAK_L2______________________,       _____________________DVORAK_R2______________________,
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
     _____________________DVORAK_L3______________________,       _____________________DVORAK_R3______________________,
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
                                    T_GUI, KC_LCTL,LT_RAI,       LT_LOW,KC_BSPC,KC_DEL
                                 //`---------------------'      `---------------------'
  ),

  [_COLEMAK] = LAYOUT_wrapper(
  //,----------------------------------------------------.      ,----------------------------------------------------.
     _____________________COLEMAK_L1_____________________,       _____________________COLEMAK_R1_____________________,
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
     _____________________COLEMAK_L2_____________________,       _____________________COLEMAK_R2_____________________,
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
     _____________________COLEMAK_L3_____________________,       _____________________COLEMAK_R3_____________________,
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
                                    T_GUI, KC_LCTL,LT_RAI,       LT_LOW,KC_BSPC,KC_DEL
                                 //`---------------------'      `---------------------'
  ),

  [_LOWER] = LAYOUT_wrapper(
  //,----------------------------------------------------.      ,----------------------------------------------------.
     XXXXXXX, XXXXXXX, _________MEDIA_1_________,  K_CSCN,       _______________NAV_1______________,  XXXXXXX, K_MDSH,
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
     XXXXXXX, XXXXXXX, _________MEDIA_2_________, XXXXXXX,       _______________NAV_2______________,   K_LOCK, XXXXXXX,
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
     _______,  M_SHFT, _________MEDIA_3_________,  T_LBRC,         T_RBRC, _______, XXXXXXX,  M_CODE,  M_ZOOM, M_PYNV,
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
                                    _______,_______,_______,     _______,_______,_______
                                 //`---------------------'      `---------------------'
  ),

  [_RAISE] = LAYOUT_wrapper( \
  //,----------------------------------------------------.      ,----------------------------------------------------.
     _____________________NUM_LEFT_______________________,       _____________________NUM_RIGHT______________________,
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
     _____________________SYM_LEFT_______________________,       _____________________SYM_RIGHT______________________,
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
     _____________________FUNC_LEFT______________________,       _____________________FUNC_RIGHT_____________________,
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
                                    _______,_______,_______,     _______,_______,_______
                                 //`---------------------'      `---------------------'
  ),

  [_ADJUST] = LAYOUT_wrapper( \
  //,----------------------------------------------------.      ,----------------------------------------------------.
       M_MAKE, EEP_RST, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,       RGB_TOG, XXXXXXX, XXXXXXX, COLEMAK,  DVORAK, QWERTY,
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
       M_VRSN,  M_MALL, XXXXXXX, RGB_SAI, RGB_HUI, RGB_VAI,       XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
       M_FLSH, XXXXXXX, XXXXXXX, RGB_SAD, RGB_HUD, RGB_VAD,       RGB_M_P, RGB_M_B,RGB_M_SW, XXXXXXX, XXXXXXX, XXXXXXX,
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
                                    _______,_______,_______,     _______,_______,_______
                                 //`---------------------'      `---------------------'
  ),
/*
  [_TEMPLATE] = LAYOUT_wrapper( \
  //,----------------------------------------------------.      ,----------------------------------------------------.
      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,       XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,       XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,       XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  //|--------+--------+--------+--------+--------+-------|      |--------+--------+--------+--------+--------+-------|
                                    _______,_______,_______,     _______,_______,_______
                                 //`---------------------'      `---------------------'
  ),
*/
};
\ No newline at end of file

A keyboards/crkbd/keymaps/ninjonas/rgb.c => keyboards/crkbd/keymaps/ninjonas/rgb.c +27 -0
@@ 0,0 1,27 @@
#include QMK_KEYBOARD_H

extern keymap_config_t keymap_config;

#ifdef RGBLIGHT_ENABLE
//Following line allows macro to read current RGB settings
extern rgblight_config_t rgblight_config;
#endif

extern uint8_t is_master;

int RGB_current_mode;

// Setting ADJUST layer RGB back to default
void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
  if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
    layer_on(layer3);
  } else {
    layer_off(layer3);
  }
}

void keyboard_post_init_user(void) {
    #ifdef RGBLIGHT_ENABLE
      RGB_current_mode = rgblight_config.mode;
    #endif
}
\ No newline at end of file

A keyboards/crkbd/keymaps/ninjonas/rules.mk => keyboards/crkbd/keymaps/ninjonas/rules.mk +11 -0
@@ 0,0 1,11 @@
RGBLIGHT_ENABLE = yes
MOUSEKEY_ENABLE = no
OLED_DRIVER_ENABLE = yes
LINK_TIME_OPTIMIZATION_ENABLE = yes

# 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 you want to change the display of OLED, you need to change here
SRC +=  ./lib/rgb_state_reader.c \
        rgb.c

M keyboards/hotdox/keymaps/ninjonas/keymap.c => keyboards/hotdox/keymaps/ninjonas/keymap.c +1 -1
@@ 277,7 277,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        //LEFT HAND
        XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
        M_MAKE,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
        M_VRSN,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
        M_VRSN,   M_MALL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
        M_FLSH,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
        XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
                                                   // LEFT THUMB

M keyboards/lily58/keymaps/ninjonas/README.md => keyboards/lily58/keymaps/ninjonas/README.md +3 -3
@@ 67,11 67,11 @@ More information about the Lily58 pro keyboard can be found [here](https://yuchi
 * ,------------------------------------------.                    ,------------------------------------------.
 * | F11  |  F1  |  F2  |  F3   |  F4  |  F5  |                    |  F6  |  F7  |  F8  |  F9  |  F10  | F12  |
 * |------+------+------+-------+------+------|                    |------+------+------+------+-------+------|
 * |      |      |      |KC_BRIU| Play | Mute |                    | PgUp | Home |  Up  | End  |       |      |
 * |      |      |KC_BRIU| Play | Mute |      |                    | PgUp | Home |  Up  | End  |       |K_MDSH|
 * |------+------+------+-------+------+------|                    |------+------+------+------+-------+------|
 * |      |      |      |KC_BRID| Next |VolUp |-------.    ,-------| PgDn | Left | Down |Right |K_LOCK |      |
 * |      |      |KC_BRID| Next |VolUp |      |-------.    ,-------| PgDn | Left | Down |Right |K_LOCK |      |
 * |------+------+------+-------+------+------|       |    |       |------+------+------+------+-------+------|
 * |      |M_SHFT|      |       | Prev |VolDn |-------|    |-------|      |      |      |      |M_ZOOM |M_PYNV|
 * |M_SHFT|      |      | Prev  |VolDn |      |-------|    |-------|      |      |      |      |M_ZOOM |M_PYNV|
 * `------------------------------------------/       /     \      \------------------------------------------'
 *                    |      |      |      | /       /       \      \  |      |M_CODE|      |
 *                    |      |      |      |/       /         \      \ |      |      |      |

M keyboards/lily58/keymaps/ninjonas/config.h => keyboards/lily58/keymaps/ninjonas/config.h +4 -2
@@ 26,6 26,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
// #define MASTER_RIGHT
// #define EE_HANDS

#define SSD1306OLED
#define USE_SERIAL_PD2
#define TAPPING_FORCE_HOLD
\ No newline at end of file
#define TAPPING_FORCE_HOLD

#define OLED_FONT_H "keyboards/lily58/lib/glcdfont.c"
#define OLED_DISABLE_TIMEOUT
\ No newline at end of file

M keyboards/lily58/keymaps/ninjonas/keymap.c => keyboards/lily58/keymaps/ninjonas/keymap.c +13 -13
@@ 88,11 88,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 * ,------------------------------------------.                    ,------------------------------------------.
 * | F11  |  F1  |  F2  |  F3   |  F4  |  F5  |                    |  F6  |  F7  |  F8  |  F9  |  F10  | F12  |
 * |------+------+------+-------+------+------|                    |------+------+------+------+-------+------|
 * |      |      |      |KC_BRIU| Play | Mute |                    | PgUp | Home |  Up  | End  |       |      |
 * |      |      |KC_BRIU| Play | Mute |      |                    | PgUp | Home |  Up  | End  |       |K_MDSH|
 * |------+------+------+-------+------+------|                    |------+------+------+------+-------+------|
 * |      |      |      |KC_BRID| Next |VolUp |-------.    ,-------| PgDn | Left | Down |Right |K_LOCK |      |
 * |      |      |KC_BRID| Next |VolUp |      |-------.    ,-------| PgDn | Left | Down |Right |K_LOCK |      |
 * |------+------+------+-------+------+------|       |    |       |------+------+------+------+-------+------|
 * |M_SHFT|      |      |       | Prev |VolDn |-------|    |-------|      |      |      |      |M_ZOOM |M_PYNV|
 * |M_SHFT|      |      | Prev  |VolDn |      |-------|    |-------|      |      |      |      |M_ZOOM |M_PYNV|
 * `------------------------------------------/       /     \      \------------------------------------------'
 *                    |      |      |      | /       /       \      \  |      |M_CODE|      |
 *                    |      |      |      |/       /         \      \ |      |      |      |


@@ 100,9 100,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 */
[_LOWER] = LAYOUT_wrapper( \
	_____________________FUNC_LEFT______________________,                     _____________________FUNC_RIGHT_____________________, \
	_______, _______, _______, _________MEDIA_1_________,                     _______________NAV_1______________, _______, _______, \
	_______, _______, _______, _________MEDIA_2_________,                     _______________NAV_2______________, K_LOCK,  _______, \
	M_SHFT,  _______, _______, _________MEDIA_3_________, _______,   _______, _______, _______, _______, _______, M_ZOOM,  M_PYNV, \
	_______, _______, _________MEDIA_1_________, _______,                     _______________NAV_1______________, _______,  K_MDSH, \
	_______, _______, _________MEDIA_2_________, _______,                     _______________NAV_2______________, K_LOCK,  _______, \
	M_SHFT,  _______, _________MEDIA_3_________, _______, _______,   _______, _______, _______, _______, _______, M_ZOOM,  M_PYNV, \
	                           __________________________________,   _______, _______, M_CODE,  _______ \
	),



@@ 132,20 132,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 * ,------------------------------------------.                    ,-----------------------------------------.
 * |EEP_RST|      |      |      |      |      |                    |      |      |      |COLMAK|DVORAK|QWERTY|
 * |-------+------+------+------+------+------|                    |------+------+------+------+------+------|
 * | M_MAKE|      |      |      |      |      |                    |      |      |      |      |      |      |
 * |M_MAKE |      |      |      |      |      |                    |      |      |      |      |      |      |
 * |-------+------+------+------+------+------|                    |------+------+------+------+------+------|
 * | M_VRSN|      |      |      |      |      |-------.    ,-------|      |      |      |      |      |      |
 * |M_VRSN |M_MALL|      |      |      |      |-------.    ,-------|      |      |      |      |      |      |
 * |-------+------+------+------+------+------|       |    |       |------+------+------+------+------+------|
 * | M_FLSH|      |      |      |      |      |-------|    |-------|      |      |      |      |      |      |
 * |M_FLSH |      |      |      |      |      |-------|    |-------|      |      |      |      |      |      |
 * `------------------------------------------/       /     \      \-----------------------------------------'
 *                   |      |      |      | /       /       \      \  |      |      |      |
 *                   |      |      |      |/       /         \      \ |      |      |      |
 *                   `----------------------------'           '------''--------------------'
 *                    |      |      |      | /       /       \      \  |      |      |      |
 *                    |      |      |      |/       /         \      \ |      |      |      |
 *                    `----------------------------'           '------''--------------------'
 */
[_ADJUST] = LAYOUT_wrapper( \
  EEP_RST, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                        XXXXXXX, XXXXXXX, XXXXXXX, COLEMAK,  DVORAK,  QWERTY, \
  M_MAKE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                        XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
  M_VRSN, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                        XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
  M_VRSN, M_MALL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                        XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
  M_FLSH, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\
                            __________________________________,      __________________________________ \
  ),

D keyboards/lily58/keymaps/ninjonas/layer_state_reader.c => keyboards/lily58/keymaps/ninjonas/layer_state_reader.c +0 -37
@@ 1,37 0,0 @@
#include QMK_KEYBOARD_H
#include <stdio.h>
#include "lily58.h"
#include "ninjonas.h"

char layer_state_str[24];

const char *read_layer_state(void) {
  switch (biton32(layer_state))
  {
  case _RAISE:
    snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Raise");
    break;
  case _LOWER:
    snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Lower");
    break;
  case _ADJUST:
    snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Adjust");
    break;
  default:
    switch (biton32(default_layer_state)) {
        case _COLEMAK:
           snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Colemak");
           break;
        case _DVORAK:
           snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Dvorak");
           break;
         case _QWERTY:
            snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Qwerty");
            break;
        default:
            snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Undef-%ld", layer_state);
    }
  }

  return layer_state_str;
}
\ No newline at end of file

M keyboards/lily58/keymaps/ninjonas/rules.mk => keyboards/lily58/keymaps/ninjonas/rules.mk +1 -5
@@ 1,5 1,1 @@
# If you want to change the display of OLED, you need to change here
SRC +=  ./lib/glcdfont.c \
        layer_state_reader.c \
        ./lib/logo_reader.c \
        ./lib/keylogger.c \
OLED_DRIVER_ENABLE = yes

M keyboards/pinky/3/keymaps/ninjonas/README.md => keyboards/pinky/3/keymaps/ninjonas/README.md +7 -36
@@ 15,7 15,7 @@ More information about the Pinky3 keyboard can be found [here](https://github.co
|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|
|    Shift|        Z|        X|        C|        V|        B|  Spc/RAI|  |  Ent/LOW|        N|        M|        ,|        .|        /|        =|
`---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------'
                              |      ALT|        |     CTRL|  Spc/NUM|  | Ent/FUNC| BckSpace|      Del|    LOWER|
                              |      ALT|        |     CTRL|  KC_LAPP|  |  KC_RAPP| BckSpace|      Del|    LOWER|
                              `---------------------------------------'  `---------------------------------------'
*/
```


@@ 30,7 30,7 @@ More information about the Pinky3 keyboard can be found [here](https://github.co
|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|
|    Shift|        ;|        Q|        J|        K|        X|  Spc/RAI|  |  Ent/LOW|        B|        M|        W|        V|        Z|        =|
`---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------'
                              |      ALT|        |     CTRL|  Spc/NUM|  | Ent/FUNC| BckSpace|      Del|    LOWER|
                              |      ALT|        |     CTRL|  KC_LAPP|  |  KC_RAPP| BckSpace|      Del|    LOWER|
                              `---------------------------------------'  `---------------------------------------'
*/
```


@@ 45,7 45,7 @@ More information about the Pinky3 keyboard can be found [here](https://github.co
|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|
|    Shift|        Z|        X|        C|        V|        B|  Spc/RAI|  |  Ent/LOW|        K|        M|        ,|        .|        /|        =|
`---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------'
                              |      ALT|        |     CTRL|  Spc/NUM|  | Ent/FUNC| BckSpace|      Del|    LOWER|
                              |      ALT|        |     CTRL|  KC_LAPP|  |  KC_RAPP| BckSpace|      Del|    LOWER|
                              `---------------------------------------'  `---------------------------------------'
*/
```


@@ 54,7 54,7 @@ More information about the Pinky3 keyboard can be found [here](https://github.co
```c
/*
,---------------------------------------------------------------------.  ,---------------------------------------------------------------------.
|         |         |         |    BriUp|     Play|     Mute|   K_CSCN|  |         |     PgUp|     Home|       Up|      End|         |         |
|         |         |         |    BriUp|     Play|     Mute|   K_CSCN|  |         |     PgUp|     Home|       Up|      End|         |   K_MDSH|
|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|
|         |         |         |    BriDn|     Next|    VolUp|         |  |         |     PgDn|     Left|     Down|    Right|   K_LOCK|         |
|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|


@@ 69,11 69,11 @@ More information about the Pinky3 keyboard can be found [here](https://github.co
```c
/*
,---------------------------------------------------------------------.  ,---------------------------------------------------------------------.
|         |         |     MS_1|     MS_U|     MS_2|     WH_U|         |  |         |         |         |         |         |         |         |
|        `|        1|        2|        3|        4|        5|         |  |         |        6|        7|        8|        9|        0|        -|
|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|
|         |         |     MS_L|     MS_D|     MS_R|     WH_D|         |  |         |         |         |         |         |         |         |
|        ~|        !|        @|        #|        $|        %|         |  |         |        ^|        &|        *|        (|        )|        _|
|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|
|         |         |         |         |         |         |         |  |         |         |         |         |         |         |         |
|      F11|       F2|       F3|       F4|       F4|       F5|         |  |         |       F6|       F7|       F8|       F9|      F10|      F12|
`---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------'
                              |         |         |         |         |  |         |         |         |         |
                              `---------------------------------------'  `---------------------------------------'


@@ 95,35 95,6 @@ More information about the Pinky3 keyboard can be found [here](https://github.co
*/
```

### NUMBERS
```c
/*
,---------------------------------------------------------------------.  ,---------------------------------------------------------------------.
|        `|        1|        2|        3|        4|        5|         |  |         |        6|        7|        8|        9|        0|        -|
|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|
|        ~|        !|        @|        #|        $|        %|         |  |         |        ^|        &|        *|        (|        )|        _|
|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|
|         |         |         |         |         |         |         |  |         |         |         |         |         |         |         |
`---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------'
                              |         |         |         |         |  |         |         |         |         |
                              `---------------------------------------'  `---------------------------------------'
*/
```

### FUNCTIONS
```c
/*
,---------------------------------------------------------------------.  ,---------------------------------------------------------------------.
|      F11|       F2|       F3|       F4|       F4|       F5|         |  |         |       F6|       F7|       F8|       F9|      F10|      F12|
|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|
|         |         |         |         |         |         |         |  |         |         |         |         |         |         |         |
|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|
|         |         |         |         |         |         |         |  |         |         |         |         |         |         |         |
`---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------'
                              |         |         |         |         |  |         |         |         |         |
                              `---------------------------------------'  `---------------------------------------'
*/
```
<!--
### TEMPLATE
```c

M keyboards/pinky/3/keymaps/ninjonas/keymap.c => keyboards/pinky/3/keymaps/ninjonas/keymap.c +33 -57
@@ 14,7 14,7 @@
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
#include QMK_KEYBOARD_H
#include "ninjonas.h"		
#include "ninjonas.h"

// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.


@@ 25,110 25,86 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  [_QWERTY] = LAYOUT_wrapper(
  //,---------------------------------------------------------------------.  ,---------------------------------------------------------------------.
            _____________________QWERTY_L1______________________,  KC_MPLY,     KC_MUTE, _____________________QWERTY_R1______________________,\
            _____________________QWERTY_L1______________________,  KC_MPLY,     KC_MUTE, _____________________QWERTY_R1______________________,
  //|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|
            _____________________QWERTY_L2______________________,   T_LBRC,      T_RBRC, _____________________QWERTY_R2______________________,\
            _____________________QWERTY_L2______________________,   T_LBRC,      T_RBRC, _____________________QWERTY_R2______________________,
  //|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|
            _____________________QWERTY_L3______________________,   LT_RAI,      LT_LOW, _____________________QWERTY_R3______________________,\
            _____________________QWERTY_L3______________________,   LT_RAI,      LT_LOW, _____________________QWERTY_R3______________________,
  //|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|
                                       ________MOD_LEFT_________,   LT_NUM,     LT_FUNC,  ________MOD_RIGHT________ \
                                   ________MOD_LEFT_________,       K_LAPP,   K_RAPP,   ________MOD_RIGHT________
                                //`---------------------------------------'  `---------------------------------------'
  ),

  [_DVORAK] = LAYOUT_wrapper(
  //,---------------------------------------------------------------------.  ,---------------------------------------------------------------------.
            _____________________DVORAK_L1______________________,  KC_MPLY,     KC_MUTE, _____________________DVORAK_R1______________________,\
            _____________________DVORAK_L1______________________,  KC_MPLY,     KC_MUTE, _____________________DVORAK_R1______________________,
  //|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|
            _____________________DVORAK_L2______________________,   T_LBRC,      T_RBRC, _____________________DVORAK_R2______________________,\
            _____________________DVORAK_L2______________________,   T_LBRC,      T_RBRC, _____________________DVORAK_R2______________________,
  //|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|
            _____________________DVORAK_L3______________________,   LT_RAI,      LT_LOW, _____________________DVORAK_R3______________________,\
            _____________________DVORAK_L3______________________,   LT_RAI,      LT_LOW, _____________________DVORAK_R3______________________,
  //|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|
                                       ________MOD_LEFT_________,   LT_NUM,     LT_FUNC,  ________MOD_RIGHT________ \
                                   ________MOD_LEFT_________,       K_LAPP,   K_RAPP,   ________MOD_RIGHT________
                                //`---------------------------------------'  `---------------------------------------'
  ),

  [_COLEMAK] = LAYOUT_wrapper(
  //,---------------------------------------------------------------------.  ,---------------------------------------------------------------------.
            _____________________COLEMAK_L1_____________________,  KC_MPLY,     KC_MUTE, _____________________COLEMAK_R1_____________________,\
            _____________________COLEMAK_L1_____________________,  KC_MPLY,     KC_MUTE, _____________________COLEMAK_R1_____________________,
  //|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|
            _____________________COLEMAK_L2_____________________,   T_LBRC,      T_RBRC, _____________________COLEMAK_R2_____________________,\
            _____________________COLEMAK_L2_____________________,   T_LBRC,      T_RBRC, _____________________COLEMAK_R2_____________________,
  //|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|
            _____________________COLEMAK_L3_____________________,   LT_RAI,      LT_LOW, _____________________COLEMAK_R3_____________________,\
            _____________________COLEMAK_L3_____________________,   LT_RAI,      LT_LOW, _____________________COLEMAK_R3_____________________,
  //|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|
                                       ________MOD_LEFT_________,   LT_NUM,     LT_FUNC,  ________MOD_RIGHT________ \
                                   ________MOD_LEFT_________,       K_LAPP,   K_RAPP,   ________MOD_RIGHT________
                                //`---------------------------------------'  `---------------------------------------'
  ),

  [_LOWER] = LAYOUT_wrapper( \
  [_LOWER] = LAYOUT_wrapper(
  //,---------------------------------------------------------------------.  ,---------------------------------------------------------------------.
       XXXXXXX,  XXXXXXX,  XXXXXXX,    _________MEDIA_1_________,   K_CSCN,     XXXXXXX, _______________NAV_1______________,      XXXXXXX,  XXXXXXX,\
       XXXXXXX,  XXXXXXX,  _________MEDIA_1_________,    XXXXXXX,   K_CSCN,     XXXXXXX, _______________NAV_1______________,      XXXXXXX,  K_MDSH,
  //|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|
       XXXXXXX,  XXXXXXX,  XXXXXXX,    _________MEDIA_2_________,  XXXXXXX,     XXXXXXX, _______________NAV_2______________,       K_LOCK,  XXXXXXX,\
       XXXXXXX,  XXXXXXX,  _________MEDIA_2_________,    XXXXXXX,  XXXXXXX,     XXXXXXX, _______________NAV_2______________,       K_LOCK,  XXXXXXX,
  //|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|
        M_SHFT,  XXXXXXX,  XXXXXXX,    _________MEDIA_3_________,  _______,     _______,  XXXXXXX,  _______,  XXXXXXX,  XXXXXXX,   M_ZOOM,   M_PYNV,\
        M_SHFT,  XXXXXXX,  _________MEDIA_3_________,    XXXXXXX,  _______,     _______,  XXXXXXX,  _______,  XXXXXXX,  XXXXXXX,   M_ZOOM,   M_PYNV,
  //|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|
                                        __________________________________,     _______,  _______,   M_CODE,  _______ \
                                        __________________________________,     _______,  _______,   M_CODE,  _______
                                //`---------------------------------------'  `---------------------------------------'
  ),

  [_RAISE] = LAYOUT_wrapper( \
  [_RAISE] = LAYOUT_wrapper(
  //,---------------------------------------------------------------------.  ,---------------------------------------------------------------------.
       XXXXXXX,  XXXXXXX,     _____________MOUSE_1______________,  XXXXXXX,     XXXXXXX,  _____________________XXXXXXX________________________,\
            _____________________NUM_LEFT_______________________,  XXXXXXX,     XXXXXXX,  _____________________NUM_RIGHT______________________,
  //|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|
       XXXXXXX,  XXXXXXX,     _____________MOUSE_2______________,  XXXXXXX,     XXXXXXX,  _____________________XXXXXXX________________________,\
            _____________________SYM_LEFT_______________________,  XXXXXXX,     XXXXXXX,  _____________________SYM_RIGHT______________________,
  //|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|
            _____________________XXXXXXX________________________,  _______,     _______,  _____________________XXXXXXX________________________,\
            _____________________FUNC_LEFT______________________,  _______,     _______,  _____________________FUNC_RIGHT_____________________,
  //|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|
                                        __________________________________,     __________________________________ \
                                        __________________________________,     __________________________________
                                //`---------------------------------------'  `---------------------------------------'
  ),

  [_ADJUST] = LAYOUT_wrapper( \
  [_ADJUST] = LAYOUT_wrapper(
  //,---------------------------------------------------------------------.  ,---------------------------------------------------------------------.
        M_MAKE,  EEP_RST,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,     XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  COLEMAK,   DVORAK,   QWERTY,\
        M_MAKE,  EEP_RST,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,     XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  COLEMAK,   DVORAK,   QWERTY,
  //|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|
        M_VRSN,       _____________________XXXXXXX________________________,     XXXXXXX,  _____________________XXXXXXX________________________,\
        M_VRSN,   M_MALL,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,     XXXXXXX,  _____________________XXXXXXX________________________,
  //|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|
        M_FLSH,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  _______,     _______,  _____________________XXXXXXX________________________,\
        M_FLSH,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  _______,     _______,  _____________________XXXXXXX________________________,
  //|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|
                                        __________________________________,     __________________________________ \
                                //`---------------------------------------'  `---------------------------------------'
  ),

  [_NUMBERS] = LAYOUT_wrapper( \
  //,---------------------------------------------------------------------.  ,---------------------------------------------------------------------.
            _____________________NUM_LEFT_______________________,  XXXXXXX,     XXXXXXX,  _____________________NUM_RIGHT______________________,\
  //|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|
            _____________________SYM_LEFT_______________________,  XXXXXXX,     XXXXXXX,  _____________________SYM_RIGHT______________________,\
  //|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|
            ____________________________________________________,  _______,     _______,  ____________________________________________________,\
  //|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|
                                        __________________________________,     __________________________________ \
                                //`---------------------------------------'  `---------------------------------------'
  ),

  [_FUNCTIONS] = LAYOUT_wrapper( \
  //,---------------------------------------------------------------------.  ,---------------------------------------------------------------------.
            _____________________FUNC_LEFT______________________,  XXXXXXX,     XXXXXXX,  _____________________FUNC_RIGHT_____________________,\
  //|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|
            _____________________XXXXXXX________________________,  XXXXXXX,     XXXXXXX,  _____________________XXXXXXX________________________,\
  //|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|
            _____________________XXXXXXX________________________,  _______,     _______,  _____________________XXXXXXX________________________,\
  //|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|
                                        __________________________________,     __________________________________ \
                                        __________________________________,     __________________________________
                                //`---------------------------------------'  `---------------------------------------'
  ),

  /*
  [_TEMPLATE] = LAYOUT( \
  [_TEMPLATE] = LAYOUT(
  //,---------------------------------------------------------------------.  ,---------------------------------------------------------------------.
       _______,  _______,  _______,  _______,  _______,  _______,  _______,     _______,  _______,  _______,  _______,  _______,  _______,  _______,\
       _______,  _______,  _______,  _______,  _______,  _______,  _______,     _______,  _______,  _______,  _______,  _______,  _______,  _______,
  //|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|
       _______,  _______,  _______,  _______,  _______,  _______,  _______,     _______,  _______,  _______,  _______,  _______,  _______,  _______,\
       _______,  _______,  _______,  _______,  _______,  _______,  _______,     _______,  _______,  _______,  _______,  _______,  _______,  _______,
  //|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|
       _______,  _______,  _______,  _______,  _______,  _______,  _______,     _______,  _______,  _______,  _______,  _______,  _______,  _______,\
       _______,  _______,  _______,  _______,  _______,  _______,  _______,     _______,  _______,  _______,  _______,  _______,  _______,  _______,
  //|---------+---------+---------+---------+---------+---------+---------|  |---------+---------+---------+---------+---------+---------+---------|
                                     _______,  _______,  _______,  _______,     _______,  _______,  _______,  _______ \
                                     _______,  _______,  _______,  _______,     _______,  _______,  _______,  _______
                                //`---------------------------------------'  `---------------------------------------'
  )
  */

A keyboards/pinky/3/keymaps/ninjonas/rules.mk => keyboards/pinky/3/keymaps/ninjonas/rules.mk +2 -0
@@ 0,0 1,2 @@
MOUSEKEY_ENABLE = no
LINK_TIME_OPTIMIZATION_ENABLE = yes
\ No newline at end of file

M users/ninjonas/README.md => users/ninjonas/README.md +16 -8
@@ 6,27 6,35 @@ See: https://docs.qmk.fm/#/feature_userspace
- ninjonas [QMK user configuration](https://github.com/qmk/qmk_firmware/blob/master/docs/feature_userspace.md)
- On `keymap.c` include `ninjonas.h`
  ```c
  #include "ninjonas.h"     
  #include "ninjonas.h"
  ```

## Supported Keyboards
- [Crkbd ](../../keyboards/crkbd/keymaps/ninjonas)
- [Hotdox](../../keyboards/hotdox/keymaps/ninjonas)
- [Pinky3](../../keyboards/pinky/3/keymaps/ninjonas)
- [Lily58](../../keyboards/lily58/keymaps/ninjonas)

## Features
### [Keys](ninjonas.h#L44)
### [Keys](ninjonas.h#L40)
|Code | Description |
|---|---|
|K_LOCK | MacOS shortcut to execute lock command  + ctrl + Q |
|K_CSCN | MacOS shortcut to copy a portion of the screen to the clipboard |
|K_MDSH | MacOS shortcut to get em-dash `–` |
|K_RAPP | MacOS shortcut to switch apps to the right |
|K_LAPP | MacOS shortcut to switch apps to the left |

### [Layers](ninjonas.h#L48)
### [Layers](ninjonas.h#L47)
|Code | Description |
|---|---|
|LT_LOW | Tap for ENTER, hold for RAISE |
|LT_FUNC | Tap for ENTER, hold for FUNCTIONS |
|LT_RAI | Tap for SPACE, hold for LOWER |
|LT_NUM | Tap for SPACE, hold for NUMBERS |
|LT_LOW + LT_RAI | Hold for ADJUST  |
|L_LOWER | Dedicated key to momentarily toggle to use LOWER layer |
|LM_LOW | Dedicated key to momentarily toggle to use LOWER layer |
|LM_RAI | Dedicated key to momentarily toggle to use RAISE layer |

### [Layout Blocks](ninjonas.h#L57)
### [Layout Blocks](ninjonas.h#L53)
Predefined keyboard layout templates to speed up configuring split keyboards

|Code | Description |


@@ 69,7 77,7 @@ There's times where you have macros you don't want to share like emails, passwor

```c
// secrets.c
#include "ninjonas.h" 
#include "ninjonas.h"

bool process_record_secrets(uint16_t keycode, keyrecord_t *record) {
  switch (keycode) {

M users/ninjonas/ninjonas.c => users/ninjonas/ninjonas.c +1 -49
@@ 17,52 17,4 @@

layer_state_t layer_state_set_user (layer_state_t state) {
  return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}

// BEGIN: SSD1306OLED
// SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
#if defined(KEYBOARD_lily58_rev1) & defined(PROTOCOL_LUFA)
extern uint8_t is_master;

void matrix_init_user(void) {
    //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
    iota_gfx_init(!has_usb());   // turns on the display
}

// When add source files to SRC in rules.mk, you can use functions.
const char *read_layer_state(void);
const char *read_logo(void);
//void set_keylog(uint16_t keycode, keyrecord_t *record); // Moved to process_records.h
const char *read_keylog(void);
const char *read_keylogs(void);

void matrix_scan_user(void) {
   iota_gfx_task();
}

void matrix_render_user(struct CharacterMatrix *matrix) {
  if (is_master) {
    // If you want to change the display of OLED, you need to change here
    matrix_write_ln(matrix, read_layer_state());
    matrix_write_ln(matrix, read_keylog());
    matrix_write_ln(matrix, read_keylogs());
  } else {
    matrix_write(matrix, read_logo());
  }
}

void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) {
  if (memcmp(dest->display, source->display, sizeof(dest->display))) {
    memcpy(dest->display, source->display, sizeof(dest->display));
    dest->dirty = true;
  }
}

void iota_gfx_task_user(void) {
  struct CharacterMatrix matrix;
  matrix_clear(&matrix);
  matrix_render_user(&matrix);
  matrix_update(&display, &matrix);
}
#endif
// END: SSD1306OLED
\ No newline at end of file
}
\ No newline at end of file

M users/ninjonas/ninjonas.h => users/ninjonas/ninjonas.h +6 -10
@@ 36,23 36,19 @@
#define _LOWER 3
#define _RAISE 4
#define _ADJUST 5
#ifdef KEYBOARD_pinky_3
  #define _NUMBERS 6
  #define _FUNCTIONS 7
#endif

// Shortcut Keys
#define K_LOCK LGUI(LCTL(KC_Q)) // Locks screen on MacOS
#define K_CSCN LGUI(LCTL(LSFT(KC_4))) // Copy a portion of the screen to the clipboard
#define K_MDSH LSFT(LALT(KC_MINS))
#define K_LAPP SGUI(KC_TAB) //  + Shift + Tab
#define K_RAPP LGUI(KC_TAB) //  + Tab

// Layer Keys
#define L_LOWER MO(_LOWER)
#define LM_LOW MO(_LOWER)
#define LM_RAI MO(_RAISE)
#define LT_LOW LT(_LOWER, KC_ENT)
#define LT_RAI LT(_RAISE, KC_SPC)
#ifdef KEYBOARD_pinky_3
  #define LT_NUM LT(_NUMBERS, KC_SPC)
  #define LT_FUNC LT(_FUNCTIONS, KC_ENT)
#endif

// Layout blocks
#define _____________________QWERTY_L1______________________ T_TAB, T_Q, T_W, KC_E, KC_R, KC_T


@@ 105,7 101,7 @@
#define _________MEDIA_3_________ XXXXXXX, KC_MRWD, KC__VOLDOWN

#define ________MOD_LEFT_________ KC_LALT, T_GUI, KC_LCTL
#define ________MOD_RIGHT________ KC_BSPC, KC_DEL, L_LOWER
#define ________MOD_RIGHT________ KC_BSPC, KC_DEL, LM_LOW

// Layout wrappers
#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)

A users/ninjonas/oled.c => users/ninjonas/oled.c +82 -0
@@ 0,0 1,82 @@
#include QMK_KEYBOARD_H
#include <stdio.h>
#include "ninjonas.h"

#ifdef OLED_DRIVER_ENABLE

static uint16_t oled_timer = 0;
extern uint8_t is_master;

bool process_record_oled(uint16_t keycode, keyrecord_t *record) { 
    if (record->event.pressed) {
        oled_timer = timer_read();
    }	    
    return true;
}

void render_default_layer_state(void) {
  oled_write_P(PSTR("Layout: "), false);
  switch (biton32(default_layer_state)) {
      case _COLEMAK:
        oled_write_P(PSTR("Colemak"), false);
        break;
      case _DVORAK:
        oled_write_P(PSTR("Dvorak"), false);
        break;
      case _QWERTY:
        oled_write_P(PSTR("Qwerty"), false);
        break;
      default:
        oled_write_ln_P(PSTR("Undefined"), false);
  }
}

void render_layer_state(void) {
    oled_write_P(PSTR("\nLayer:"), false);
    oled_write_P(PSTR(" LOW"), layer_state_is(_LOWER));
    oled_write_P(PSTR(" RAI"), layer_state_is(_RAISE));
    oled_write_P(PSTR(" ADJ"), layer_state_is(_ADJUST));
}

void render_mod_status(uint8_t modifiers) {
    oled_write_P(PSTR("\nMods: "), false);
    oled_write_P(PSTR("SHF "), (modifiers & MOD_MASK_SHIFT));
    oled_write_P(PSTR("CTL "), (modifiers & MOD_MASK_CTRL));
    oled_write_P(PSTR("ALT "), (modifiers & MOD_MASK_ALT));
    oled_write_P(PSTR("GUI"), (modifiers & MOD_MASK_GUI));
}

void render_status(void){
  render_default_layer_state();
  render_layer_state();
  render_mod_status(get_mods()|get_oneshot_mods());
}

static void render_logo(void) {
  static const char PROGMEM qmk_logo[] = {
      0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94,
      0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4,
      0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4,
      0};

  oled_write_P(qmk_logo, false);
}

void oled_task_user(void) {
    if (timer_elapsed(oled_timer) > 30000) {
        oled_off();
        return;
    }
    #ifndef SPLIT_KEYBOARD
    else { oled_on(); }
    #endif
    
    if (is_master) {
        render_status();     
    } else {
        render_logo();       
        oled_scroll_left();  
    }
}

#endif
\ No newline at end of file

M users/ninjonas/process_records.c => users/ninjonas/process_records.c +14 -2
@@ 6,10 6,15 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { return true;
__attribute__((weak))
bool process_record_secrets(uint16_t keycode, keyrecord_t *record) { return true; }

#ifdef OLED_DRIVER_ENABLE
__attribute__((weak))
bool process_record_oled(uint16_t keycode, keyrecord_t *record) { return true; }
#endif

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  if (record->event.pressed) {
    #ifdef SSD1306OLED
    set_keylog(keycode, record);
    #ifdef OLED_DRIVER_ENABLE
    process_record_oled(keycode, record);
    #endif
  }



@@ 42,6 47,13 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
      }
      break;

    // Sends QMK make command to compile all keyboards
    case M_MALL:
     if (record->event.pressed) {
        SEND_STRING("rm -f *.hex && rm -rf .build/ && make crkbd:ninjonas lily58:ninjonas hotdox:ninjonas pinky/3:ninjonas\n");
      }
      break;

    // Sends QMK make command with the correct bootloader
    case M_FLSH:
      if (!record->event.pressed) {

M users/ninjonas/process_records.h => users/ninjonas/process_records.h +1 -0
@@ 11,6 11,7 @@ enum custom_keycodes {
  M_PYNV,
  M_SHFT,
  M_MAKE,
  M_MALL,
  M_FLSH,
  M_VRSN,
  M_CODE,

M users/ninjonas/rules.mk => users/ninjonas/rules.mk +2 -7
@@ 3,15 3,10 @@ MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
TAP_DANCE_ENABLE = yes      # Enable Tap Dance.

Link_Time_Optimization = no # if firmware size over limit, try this option

ifeq ($(strip $(Link_Time_Optimization)),yes)
    EXTRAFLAGS += -flto -DUSE_Link_Time_Optimization
endif

SRC += ninjonas.c \
       process_records.c \
       tap_dances.c
       tap_dances.c \
       oled.c

ifneq ("$(wildcard $(USER_PATH)/secrets.c)","")
    SRC += secrets.c