Преглед изворни кода

Merge remote-tracking branch 'origin/master' into develop

Drashna Jael're пре 3 година
родитељ
комит
8e8ec6338c
100 измењених фајлова са 4295 додато и 951 уклоњено
  1. 57 0
      keyboards/bastardkb/skeletyl/config.h
  2. 49 0
      keyboards/bastardkb/skeletyl/info.json
  3. 70 0
      keyboards/bastardkb/skeletyl/keymaps/default/keymap.c
  4. 17 0
      keyboards/bastardkb/skeletyl/readme.md
  5. 33 0
      keyboards/bastardkb/skeletyl/rules.mk
  6. 57 0
      keyboards/bastardkb/skeletyl/skeletyl.c
  7. 37 0
      keyboards/bastardkb/skeletyl/skeletyl.h
  8. 0 42
      keyboards/custommk/genesis/config.h
  9. 2 2
      keyboards/custommk/genesis/readme.md
  10. 65 0
      keyboards/custommk/genesis/rev1/config.h
  11. 1 1
      keyboards/custommk/genesis/rev1/info.json
  12. 0 0
      keyboards/custommk/genesis/rev1/keymaps/default/keymap.c
  13. 0 0
      keyboards/custommk/genesis/rev1/keymaps/default/readme.md
  14. 0 0
      keyboards/custommk/genesis/rev1/keymaps/numpad/keymap.c
  15. 0 0
      keyboards/custommk/genesis/rev1/keymaps/numpad/readme.md
  16. 2 2
      keyboards/custommk/genesis/rev1/keymaps/via/keymap.c
  17. 0 0
      keyboards/custommk/genesis/rev1/keymaps/via/readme.md
  18. 0 0
      keyboards/custommk/genesis/rev1/keymaps/via/rules.mk
  19. 19 0
      keyboards/custommk/genesis/rev1/readme.md
  20. 17 17
      keyboards/custommk/genesis/rev1/rev1.c
  21. 20 20
      keyboards/custommk/genesis/rev1/rev1.h
  22. 0 0
      keyboards/custommk/genesis/rev1/rules.mk
  23. 66 0
      keyboards/custommk/genesis/rev2/config.h
  24. 76 0
      keyboards/custommk/genesis/rev2/info.json
  25. 76 0
      keyboards/custommk/genesis/rev2/keymaps/default/keymap.c
  26. 6 0
      keyboards/custommk/genesis/rev2/keymaps/default/readme.md
  27. 89 0
      keyboards/custommk/genesis/rev2/keymaps/numpad/keymap.c
  28. 3 0
      keyboards/custommk/genesis/rev2/keymaps/numpad/readme.md
  29. 167 0
      keyboards/custommk/genesis/rev2/keymaps/via/keymap.c
  30. 3 0
      keyboards/custommk/genesis/rev2/keymaps/via/readme.md
  31. 2 0
      keyboards/custommk/genesis/rev2/keymaps/via/rules.mk
  32. 19 0
      keyboards/custommk/genesis/rev2/readme.md
  33. 39 0
      keyboards/custommk/genesis/rev2/rev2.c
  34. 66 0
      keyboards/custommk/genesis/rev2/rev2.h
  35. 23 0
      keyboards/custommk/genesis/rev2/rules.mk
  36. 3 1
      keyboards/custommk/genesis/rules.mk
  37. 1 1
      keyboards/kbdfans/kbd67/mkiirgb/v3/config.h
  38. 115 0
      keyboards/keyprez/rhino/config.h
  39. 179 0
      keyboards/keyprez/rhino/info.json
  40. 116 0
      keyboards/keyprez/rhino/keymaps/default/keymap.c
  41. 1 0
      keyboards/keyprez/rhino/keymaps/default/readme.md
  42. 117 0
      keyboards/keyprez/rhino/keymaps/default_7u/keymap.c
  43. 1 0
      keyboards/keyprez/rhino/keymaps/default_7u/readme.md
  44. 124 0
      keyboards/keyprez/rhino/keymaps/default_ergo/keymap.c
  45. 1 0
      keyboards/keyprez/rhino/keymaps/default_ergo/readme.md
  46. 22 0
      keyboards/keyprez/rhino/readme.md
  47. 32 0
      keyboards/keyprez/rhino/rhino.c
  48. 80 0
      keyboards/keyprez/rhino/rhino.h
  49. 23 0
      keyboards/keyprez/rhino/rules.mk
  50. 27 0
      keyboards/moonlander/keymaps/jjerrell/config.h
  51. 117 0
      keyboards/moonlander/keymaps/jjerrell/keymap.c
  52. 3 0
      keyboards/moonlander/keymaps/jjerrell/readme.md
  53. 1 0
      keyboards/moonlander/keymaps/jjerrell/rules.mk
  54. 38 0
      keyboards/peej/tripel/config.h
  55. 82 0
      keyboards/peej/tripel/info.json
  56. 54 0
      keyboards/peej/tripel/keymaps/default/keymap.c
  57. 50 0
      keyboards/peej/tripel/keymaps/via/keymap.c
  58. 1 0
      keyboards/peej/tripel/keymaps/via/rules.mk
  59. 38 0
      keyboards/peej/tripel/left/left.h
  60. 21 0
      keyboards/peej/tripel/left/readme.md
  61. 1 0
      keyboards/peej/tripel/left/rules.mk
  62. 38 0
      keyboards/peej/tripel/middle/middle.h
  63. 21 0
      keyboards/peej/tripel/middle/readme.md
  64. 1 0
      keyboards/peej/tripel/middle/rules.mk
  65. 21 0
      keyboards/peej/tripel/right/readme.md
  66. 38 0
      keyboards/peej/tripel/right/right.h
  67. 1 0
      keyboards/peej/tripel/right/rules.mk
  68. 24 0
      keyboards/peej/tripel/rules.mk
  69. 33 0
      keyboards/planck/keymaps/kuatsure/config.h
  70. 318 0
      keyboards/planck/keymaps/kuatsure/keymap.c
  71. 1 0
      keyboards/planck/keymaps/kuatsure/readme.md
  72. 6 0
      keyboards/planck/keymaps/kuatsure/rules.mk
  73. 2 0
      keyboards/preonic/keymaps/kuatsure/keymap.c
  74. 110 0
      keyboards/spacey/config.h
  75. 87 0
      keyboards/spacey/info.json
  76. 47 0
      keyboards/spacey/keymaps/default/keymap.c
  77. 1 0
      keyboards/spacey/keymaps/default/readme.md
  78. 19 0
      keyboards/spacey/readme.md
  79. 23 0
      keyboards/spacey/rules.mk
  80. 29 0
      keyboards/spacey/spacey.c
  81. 41 0
      keyboards/spacey/spacey.h
  82. 67 19
      keyboards/ungodly/launch_pad/config.h
  83. 30 30
      keyboards/ungodly/launch_pad/info.json
  84. 216 181
      keyboards/ungodly/launch_pad/keymaps/default/keymap.c
  85. 293 0
      keyboards/ungodly/launch_pad/keymaps/via/keymap.c
  86. 1 0
      keyboards/ungodly/launch_pad/keymaps/via/rules.mk
  87. 269 0
      keyboards/ungodly/launch_pad/keymaps/warzone/keymap.c
  88. 2 0
      keyboards/ungodly/launch_pad/keymaps/warzone/rules.mk
  89. 0 17
      keyboards/ungodly/launch_pad/launch_pad.c
  90. 58 4
      keyboards/ungodly/launch_pad/readme.md
  91. 0 4
      layouts/community/ergodox/bocaj/config.h
  92. 0 175
      layouts/community/ergodox/bocaj/keymap.c
  93. 0 28
      layouts/community/ergodox/bocaj/readme.md
  94. 0 14
      layouts/community/ergodox/bocaj/rules.mk
  95. 21 0
      layouts/community/ergodox/jjerrell/config.h
  96. 129 0
      layouts/community/ergodox/jjerrell/keymap.c
  97. 5 0
      layouts/community/ergodox/jjerrell/readme.md
  98. 14 0
      layouts/community/ergodox/jjerrell/rules.mk
  99. 0 106
      layouts/community/ortho_4x12/bocaj/config.h
  100. 0 287
      layouts/community/ortho_4x12/bocaj/keymap.c

+ 57 - 0
keyboards/bastardkb/skeletyl/config.h

@@ -0,0 +1,57 @@
+/* 
+ * Copyright 2021 Quentin LEBASTARD <qlebastard@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"
+#define VENDOR_ID 0xA8F8
+#define PRODUCT_ID 0x1830
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Bastard Keyboards
+#define PRODUCT Skeletyl
+
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 5
+#define RGBLIGHT_LIMIT_VAL 180
+#define MATRIX_ROW_PINS { B5, F7, F6, B6 }
+#define MATRIX_COL_PINS { E6, C6, B1, B3, B2 }
+
+#define DIODE_DIRECTION ROW2COL
+
+#define RGB_DI_PIN D2
+#define RGBLED_NUM 36
+#define RGBLED_SPLIT { 18, 18 }
+#define RGBLIGHT_ANIMATIONS
+
+#define DEBOUNCE 5
+
+#define SOFT_SERIAL_PIN D0
+
+#define USB_POLLING_INTERVAL_MS 1
+#define MASTER_RIGHT
+
+// RGB matrix support
+#ifdef RGB_MATRIX_ENABLE
+#    define SPLIT_TRANSPORT_MIRROR
+#    define DRIVER_LED_TOTAL 36 // Number of LEDs
+#    define RGB_MATRIX_SPLIT { 18, 18 }
+#    define RGB_MATRIX_MAXIMUM_BRIGHTNESS 50
+#    define RGB_MATRIX_STARTUP_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS
+#    ifndef RGB_DISABLE_WHEN_USB_SUSPENDED
+#        define RGB_DISABLE_WHEN_USB_SUSPENDED true
+#    endif
+#    define RGB_MATRIX_KEYPRESSES
+#endif

+ 49 - 0
keyboards/bastardkb/skeletyl/info.json

@@ -0,0 +1,49 @@
+{
+    "keyboard_name": "Skeletyl",
+    "url": "https://www.bastardkb.com",
+    "maintainer": "Quentin Lebastard",
+    "width": 17,
+    "height": 4,
+    "layouts": {
+        "LAYOUT_split_3x5_3": {
+            "layout": [
+                {"label":"L00", "x":0, "y":0},
+                {"label":"L01", "x":1, "y":0},
+                {"label":"L02", "x":2, "y":0},
+                {"label":"L03", "x":3, "y":0},
+                {"label":"L04", "x":4, "y":0},
+                {"label":"R00", "x":11, "y":0},
+                {"label":"R01", "x":12, "y":0},
+                {"label":"R02", "x":13, "y":0},
+                {"label":"R03", "x":14, "y":0},
+                {"label":"R04", "x":15, "y":0},
+                {"label":"L10", "x":0, "y":1},
+                {"label":"L11", "x":1, "y":1},
+                {"label":"L12", "x":2, "y":1},
+                {"label":"L13", "x":3, "y":1},
+                {"label":"L14", "x":4, "y":1},
+                {"label":"R10", "x":11, "y":1},
+                {"label":"R11", "x":12, "y":1},
+                {"label":"R12", "x":13, "y":1},
+                {"label":"R13", "x":14, "y":1},
+                {"label":"R14", "x":15, "y":1},
+                {"label":"L20", "x":0, "y":2},
+                {"label":"L21", "x":1, "y":2},
+                {"label":"L22", "x":2, "y":2},
+                {"label":"L23", "x":3, "y":2},
+                {"label":"L24", "x":4, "y":2},
+                {"label":"R20", "x":11, "y":2},
+                {"label":"R21", "x":12, "y":2},
+                {"label":"R22", "x":13, "y":2},
+                {"label":"R23", "x":14, "y":2},
+                {"label":"R24", "x":15, "y":2},
+                {"label":"L33", "x":4, "y":3},
+                {"label":"L34", "x":5, "y":3},
+                {"label":"L31", "x":6, "y":3},
+                {"label":"R33", "x":9, "y":3},
+                {"label":"R34", "x":10, "y":3},
+                {"label":"R31", "x":11, "y":3}
+            ]
+        }
+    }
+}

+ 70 - 0
keyboards/bastardkb/skeletyl/keymaps/default/keymap.c

@@ -0,0 +1,70 @@
+/* 
+ * Copyright 2021 Quentin LEBASTARD <qlebastard@gmail.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+  [0] = LAYOUT_split_3x5_3(
+  //,-----------------------------------------------------.                    ,-----------------------------------------------------.
+       KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,                         KC_Y,    KC_U,    KC_I,    KC_O,   KC_P,
+  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
+      KC_A,    KC_S,    KC_D,    KC_F,    KC_G,                         KC_H,    KC_J,    KC_K,    KC_L, KC_SCLN,
+  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
+      KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,                         KC_N,    KC_M, KC_COMM,  KC_DOT, KC_SLSH, 
+  //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
+                                          KC_LGUI, KC_SPC  ,  MO(1),     MO(2), KC_ENT , KC_RALT
+                                      //`--------------------------'  `--------------------------'
+
+  ),
+
+  [1] = LAYOUT_split_3x5_3(
+  //,-----------------------------------------------------.                    ,-----------------------------------------------------.
+      KC_1,    KC_2,    KC_3,    KC_4,    KC_5,                         KC_6,    KC_7,    KC_8,    KC_9,    KC_0,
+  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
+      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                      KC_LEFT, KC_DOWN,   KC_UP,KC_RIGHT, XXXXXXX,
+  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
+      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+  //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
+                                          KC_LGUI, KC_SPC,  _______,     MO(3), KC_ENT, KC_RALT
+                                      //`--------------------------'  `--------------------------'
+  ),
+
+  [2] = LAYOUT_split_3x5_3(
+  //,-----------------------------------------------------.                    ,-----------------------------------------------------.
+      KC_EXLM,   KC_AT, KC_HASH,  KC_DLR, KC_PERC,                      KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN,
+  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
+      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                      KC_MINS,  KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
+      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                      KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+  //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
+                                          KC_LGUI,  KC_SPC,  MO(3),     _______, KC_ENT, KC_RALT
+                                      //`--------------------------'  `--------------------------'
+  ),
+
+  [3] = LAYOUT_split_3x5_3(
+  //,-----------------------------------------------------.                    ,-----------------------------------------------------.
+      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
+      RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX,                      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
+      RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX,                      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+  //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
+                                          KC_LGUI,  KC_SPC, _______,     _______, KC_ENT, KC_RALT
+                                      //`--------------------------'  `--------------------------'
+  )
+};

+ 17 - 0
keyboards/bastardkb/skeletyl/readme.md

@@ -0,0 +1,17 @@
+# Skeletyl
+
+A very small keyboard made for ergonomic enthusiasts.
+
+* Keyboard Maintainer: [Bastard Keyboards](https://github.com/Bastardkb/)
+* Hardware Supported: elite-C V4
+* Hardware Availability: [Bastardkb.com](https://bastardkb.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+    make bastardkb/skeletyl:default
+    
+This keyboard is made to be used with the Miryoku layout, do not use the default keymap.
+
+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).
+
+See the [keyboard build instructions](http://docs.bastardkb.com/)

+ 33 - 0
keyboards/bastardkb/skeletyl/rules.mk

@@ -0,0 +1,33 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite     # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes       # Mouse keys
+EXTRAKEY_ENABLE = yes       # Audio control and System control
+CONSOLE_ENABLE = no         # Console for debug
+COMMAND_ENABLE = no         # Commands for debug and configuration
+# 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 = yes            # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
+RGB_MATRIX_ENABLE = yes     # Enable keyboard RGB matrix (do not use together with RGBLIGHT_ENABLE)
+RGB_MATRIX_DRIVER = WS2812  # RGB matrix driver support
+BLUETOOTH_ENABLE = no       # Enable Bluetooth
+AUDIO_ENABLE = no           # Audio output
+SPLIT_KEYBOARD = yes
+TAP_DANCE_ENABLE = no
+LTO_ENABLE = yes
+
+AUDIO_SUPPORTED = no
+RGB_MATRIX_SUPPORTED = yes
+RGBLIGHT_SUPPORTED = yes
+
+LAYOUTS = split_3x5_3

+ 57 - 0
keyboards/bastardkb/skeletyl/skeletyl.c

@@ -0,0 +1,57 @@
+/* 
+ * Copyright 2021 Quentin LEBASTARD <qlebastard@gmail.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "skeletyl.h"
+
+#ifdef RGB_MATRIX_ENABLE
+led_config_t g_led_config = { {
+    // left
+    {  0,  5,  6, 11, 12 },
+    {  1,  4,  7, 10, 13 },
+    {  2,  3,  8,  9, 14 },
+    { 15, NO_LED, 16, 17, NO_LED },
+    // right
+    { 18, 23, 24, 29, 30 },
+    { 19, 22, 25, 28, 31 },
+    { 20, 21, 26, 27, 32 },
+    { 33, NO_LED, 34, 35, NO_LED }
+}, {
+    // left
+    {   0,   0 }, {   0,  21 }, {   0,  42 }, // col 1
+    {  25,  42 }, {  25,  21 }, {  25,   0 }, // col 2
+    {  50,   0 }, {  50,  21 }, {  50,  42 },
+    {  74,  42 }, {  74,  21 }, {  74,   0 },
+    {  99,   0 }, {  99,  21 }, {  99,  42 },
+    {  50,  64 }, {  74,  64 }, {  99,  64 }, // left thumb cluster
+    // right
+    { 224,   0 }, { 224,  21 }, { 224,  42 }, // col 10
+    { 198,  42 }, { 198,  21 }, { 198,   0 }, // col 9
+    { 174,   0 }, { 174,  21 }, { 174,  42 },
+    { 149,  42 }, { 149,  21 }, { 149,   0 },
+    { 124,   0 }, { 124,  21 }, { 124,  42 },
+    { 174,  64 }, { 149,  64 }, { 124,  64 }  // right thumb cluster
+}, {
+    // left
+    4, 4, 4, 4, 4, 4, 4,
+    4, 4, 4, 4, 4, 4, 4, 4,
+    2, 2, 2,
+    // right
+    4, 4, 4, 4, 4, 4, 4,
+    4, 4, 4, 4, 4, 4, 4, 4,
+    2, 2, 2
+} };
+#endif

+ 37 - 0
keyboards/bastardkb/skeletyl/skeletyl.h

@@ -0,0 +1,37 @@
+/* 
+ * Copyright 2021 Quentin LEBASTARD <qlebastard@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 "quantum.h"
+
+#define LAYOUT_split_3x5_3( \
+	k00, k01, k02, k03, k04,     			k44, k43, k42, k41, k40, \
+	k10, k11, k12, k13, k14,	    		k54, k53, k52, k51, k50, \
+	k20, k21, k22, k23, k24,    			k64, k63, k62, k61, k60, \
+		       k33, k34, k31,		        k71, k74, k73  \
+)\
+{\
+	{ k00, k01, k02, k03, k04 }, \
+	{ k10, k11, k12, k13, k14 }, \
+	{ k20, k21, k22, k23, k24 }, \
+	{ k31, KC_NO, k33, k34, KC_NO }, \
+	{ k40, k41, k42, k43, k44 }, \
+	{ k50, k51, k52, k53, k54 }, \
+	{ k60, k61, k62, k63, k64 }, \
+	{ k71, KC_NO, k73, k74, KC_NO }, \
+}

+ 0 - 42
keyboards/custommk/genesis/config.h

@@ -18,45 +18,3 @@
 
 
 #include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID       0xF35B
-#define PRODUCT_ID      0xFAB0
-#define DEVICE_VER      0x0001
-#define MANUFACTURER    customMK
-#define PRODUCT         Genesis
-
-/* key matrix size */
-#define MATRIX_ROWS 5
-#define MATRIX_COLS 4
-
-/* key matrix pins */
-#define MATRIX_ROW_PINS { F0, C7, C6, B6, B5 }
-#define MATRIX_COL_PINS { F4, F5, D7, B4 }
-#define UNUSED_PINS
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION COL2ROW
-
-/* 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
-
-#define ENCODERS_PAD_A { F6, D2 }
-#define ENCODERS_PAD_B { F7, D1 }
-#define ENCODER_RESOLUTION 4
-#define TAP_CODE_DELAY 10
-
-#define RGB_DI_PIN E6
-#define RGBLIGHT_ANIMATIONS
-#define RGBLED_NUM 13
-#define RGBLIGHT_HUE_STEP 8
-#define RGBLIGHT_SAT_STEP 8
-#define RGBLIGHT_VAL_STEP 8
-#define RGBLIGHT_LIMIT_VAL 128
-

+ 2 - 2
keyboards/custommk/genesis/readme.md

@@ -1,10 +1,10 @@
 # Genesis
 
+Genesis is a 5x4 ortholinear macro pad designed and produced by customMK. 
+
 ![Genesis Macro Pad](https://i.imgur.com/voBjLrM.jpeg)
 ![Genesis Macro Pad PCB](https://i.imgur.com/ST2vtkV.jpeg)
 
-Genesis is a 5x4 ortholinear macro pad designed and produced by customMK. 
-
 * Keyboard Maintainer: [customMK](https://github.com/customMK)
 * Hardware Supported: Genesis Macro Pad
 * Hardware Availability: [customMK](https://shop.custommk.com/products/genesis_macropad)

+ 65 - 0
keyboards/custommk/genesis/rev1/config.h

@@ -0,0 +1,65 @@
+/* Copyright 2020 customMK
+ *
+ * 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       0xF35B
+#define PRODUCT_ID      0xFAB0
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    customMK
+#define PRODUCT         GenesisRev1
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 4
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { F0, C7, C6, B6, B5 }
+#define MATRIX_COL_PINS { F4, F5, D7, B4 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+#define ENCODERS_PAD_A { F6, D2 }
+#define ENCODERS_PAD_B { F7, D1 }
+#define ENCODER_RESOLUTION 2
+#define TAP_CODE_DELAY 10
+
+#define RGB_DI_PIN E6
+#define RGBLIGHT_EFFECT_BREATHING
+#define RGBLIGHT_EFFECT_RAINBOW_MOOD
+#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+#define RGBLIGHT_EFFECT_SNAKE
+#define RGBLIGHT_EFFECT_KNIGHT
+#define RGBLIGHT_EFFECT_CHRISTMAS
+#define RGBLIGHT_EFFECT_STATIC_GRADIENT
+#define RGBLIGHT_EFFECT_RGB_TEST
+#define RGBLIGHT_EFFECT_ALTERNATING
+#define RGBLIGHT_EFFECT_TWINKLE
+#define RGBLED_NUM 13
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#define RGBLIGHT_LIMIT_VAL 128
+#define RGBLIGHT_DEFAULT_MODE RGBLIGHT_MODE_RAINBOW_SWIRL + 4
+

+ 1 - 1
keyboards/custommk/genesis/info.json → keyboards/custommk/genesis/rev1/info.json

@@ -1,5 +1,5 @@
 {
-    "keyboard_name": "Genesis", 
+    "keyboard_name": "Genesis Rev1", 
     "url": "https://www.customMK.com", 
     "maintainer": "customMK", 
     "width": 4, 

+ 0 - 0
keyboards/custommk/genesis/keymaps/default/keymap.c → keyboards/custommk/genesis/rev1/keymaps/default/keymap.c


+ 0 - 0
keyboards/custommk/genesis/keymaps/default/readme.md → keyboards/custommk/genesis/rev1/keymaps/default/readme.md


+ 0 - 0
keyboards/custommk/genesis/keymaps/numpad/keymap.c → keyboards/custommk/genesis/rev1/keymaps/numpad/keymap.c


+ 0 - 0
keyboards/custommk/genesis/keymaps/numpad/readme.md → keyboards/custommk/genesis/rev1/keymaps/numpad/readme.md


+ 2 - 2
keyboards/custommk/genesis/keymaps/via/keymap.c → keyboards/custommk/genesis/rev1/keymaps/via/keymap.c

@@ -20,8 +20,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
 	[0] = LAYOUT_ortho_5x4(
 			MO(1),   KC_PSLS, KC_PAST, KC_PMNS, 
-			KC_P7,   KC_P8,   KC_P9,   KC_PPLS, 
-			KC_P4,   KC_P5,   KC_P6,   KC_PGUP, 
+			KC_P7,   KC_P8,   KC_P9,   KC_PGUP, 
+			KC_P4,   KC_P5,   KC_P6,   KC_PPLS, 
 			KC_P1,   KC_P2,   KC_P3,   KC_PGDN, 
 			KC_P0,   KC_SPC,  KC_PDOT, KC_PENT),
 

+ 0 - 0
keyboards/custommk/genesis/keymaps/via/readme.md → keyboards/custommk/genesis/rev1/keymaps/via/readme.md


+ 0 - 0
keyboards/custommk/genesis/keymaps/via/rules.mk → keyboards/custommk/genesis/rev1/keymaps/via/rules.mk


+ 19 - 0
keyboards/custommk/genesis/rev1/readme.md

@@ -0,0 +1,19 @@
+# Genesis
+
+Genesis is a 5x4 ortholinear macro pad designed and produced by customMK. 
+
+* Keyboard Maintainer: [customMK](https://github.com/customMK)
+* Hardware Supported: Genesis Macro Pad
+* Hardware Availability: [customMK](https://shop.custommk.com/products/genesis_macropad)
+
+Make example for this keyboard (after setting up your build environment):
+
+    make custommk/genesis/rev1:default
+
+Flashing example for this keyboard:
+
+    make custommk/genesis/rev1:default:flash
+
+Genesis Macro Pad has qmk-dfu bootloader preinstalled. To enter the bootloader, run the flashing command above, and then either plug in the USB connection while holding the top-left key, or alternatively, plug in the USB connection and then press the reset button on the PCB
+
+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).

+ 17 - 17
keyboards/custommk/genesis/genesis.c → keyboards/custommk/genesis/rev1/rev1.c

@@ -14,25 +14,25 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "genesis.h"
+#include "rev1.h"
 
 bool encoder_update_kb(uint8_t index, bool clockwise) {
     if (!encoder_update_user(index, clockwise)) return false;
-	/* top left encoder */
-	if (index == 0) {
-		if (clockwise) {
-			tap_code(KC_VOLU);
-		} else {
-			tap_code(KC_VOLD);
-		}
-	}
-	/* top right encoder */
-	else if (index == 1) {
-		if (clockwise) {
-			tap_code(KC_VOLU);
-		} else {
-			tap_code(KC_VOLD);
-		}
-	}
+    /* top left encoder */
+    if (index == 0) {
+        if (clockwise) {
+            tap_code(KC_VOLU);
+        } else {
+            tap_code(KC_VOLD);
+        }
+    }
+    /* top right encoder */
+    else if (index == 1) {
+        if (clockwise) {
+            tap_code(KC_VOLU);
+        } else {
+            tap_code(KC_VOLD);
+        }
+    }
     return true;
 }

+ 20 - 20
keyboards/custommk/genesis/genesis.h → keyboards/custommk/genesis/rev1/rev1.h

@@ -19,30 +19,30 @@
 #include "quantum.h"
 
 #define LAYOUT_numpad_5x4( \
-	K00, K01, K02, K03, \
-	K10, K11, K12,      \
-	K20, K21, K22, K23, \
-	K30, K31, K32,      \
-	K40,      K42, K43  \
+    K00, K01, K02, K03, \
+    K10, K11, K12,      \
+    K20, K21, K22, K23, \
+    K30, K31, K32,      \
+    K40,      K42, K43  \
 ) { \
-	{ K00,   K01,   K02,   K03 }, \
-	{ K10,   K11,   K12,   KC_NO }, \
-	{ K20,   K21,   K22,   K23 }, \
-	{ K30,   K31,   K32,   KC_NO }, \
-	{ K40,   KC_NO, K42,   K43 }  \
+    { K00,   K01,   K02,   K03 }, \
+    { K10,   K11,   K12,   KC_NO }, \
+    { K20,   K21,   K22,   K23 }, \
+    { K30,   K31,   K32,   KC_NO }, \
+    { K40,   KC_NO, K42,   K43 }  \
 }
 
 #define LAYOUT_ortho_5x4( \
-	K00, K01, K02, K03, \
-	K10, K11, K12, K13, \
-	K20, K21, K22, K23, \
-	K30, K31, K32, K33, \
-	K40, K41, K42, K43  \
+    K00, K01, K02, K03, \
+    K10, K11, K12, K13, \
+    K20, K21, K22, K23, \
+    K30, K31, K32, K33, \
+    K40, K41, K42, K43  \
 ) { \
-	{ K00,   K01,   K02,   K03 }, \
-	{ K10,   K11,   K12,   K13 }, \
-	{ K20,   K21,   K22,   K23 }, \
-	{ K30,   K31,   K32,   K33 }, \
-	{ K40,   K41,   K42,   K43 }  \
+    { K00,   K01,   K02,   K03 }, \
+    { K10,   K11,   K12,   K13 }, \
+    { K20,   K21,   K22,   K23 }, \
+    { K30,   K31,   K32,   K33 }, \
+    { K40,   K41,   K42,   K43 }  \
 }
 

+ 0 - 0
keyboards/custommk/genesis/rev1/rules.mk


+ 66 - 0
keyboards/custommk/genesis/rev2/config.h

@@ -0,0 +1,66 @@
+/* Copyright 2020 customMK
+ *
+ * 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       0xF35B
+#define PRODUCT_ID      0xFAB1
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    customMK
+#define PRODUCT         GenesisRev2
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 4
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { F0, C7, C6, B6, B5, B0}
+#define MATRIX_COL_PINS { F4, F5, D7, B4 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+#define ENCODERS_PAD_A { F6, D2 }
+#define ENCODERS_PAD_B { F7, D1 }
+#define ENCODER_RESOLUTION 2
+#define TAP_CODE_DELAY 10
+
+#define RGB_DI_PIN E6
+#define RGBLIGHT_EFFECT_BREATHING
+#define RGBLIGHT_EFFECT_RAINBOW_MOOD
+#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+#define RGBLIGHT_EFFECT_SNAKE
+#define RGBLIGHT_EFFECT_KNIGHT
+#define RGBLIGHT_EFFECT_CHRISTMAS
+#define RGBLIGHT_EFFECT_STATIC_GRADIENT
+#define RGBLIGHT_EFFECT_RGB_TEST
+#define RGBLIGHT_EFFECT_ALTERNATING
+#define RGBLIGHT_EFFECT_TWINKLE
+#define RGBLED_NUM 13
+#define RGBLIGHT_LAYERS
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#define RGBLIGHT_LIMIT_VAL 128
+#define RGBLIGHT_DEFAULT_MODE RGBLIGHT_MODE_RAINBOW_SWIRL + 4
+

+ 76 - 0
keyboards/custommk/genesis/rev2/info.json

@@ -0,0 +1,76 @@
+{
+    "keyboard_name": "Genesis Rev2", 
+    "url": "https://www.customMK.com", 
+    "maintainer": "customMK", 
+    "width": 4, 
+    "height": 6, 
+    "layouts": {
+        "LAYOUT_ortho_5x4": {
+            "layout": [{"label":"MO(1)", "x":0, "y":0},
+                       {"label":"/", "x":1, "y":0},
+                       {"label":"*", "x":2, "y":0},
+                       {"label":"Mute", "x":3, "y":0},
+                       {"label":"7", "x":0, "y":1},
+                       {"label":"8", "x":1, "y":1},
+                       {"label":"9", "x":2, "y":1},
+                       {"label":"+", "x":3, "y":1},
+                       {"label":"4", "x":0, "y":2},
+                       {"label":"5", "x":1, "y":2},
+                       {"label":"6", "x":2, "y":2},
+                       {"label":"Pg Up", "x":3, "y":2},
+                       {"label":"1", "x":0, "y":3},
+                       {"label":"2", "x":1, "y":3},
+                       {"label":"3", "x":2, "y":3},
+                       {"label":"Pg Dn", "x":3, "y":3},
+                       {"label":"0", "x":0, "y":4},
+                       {"label":"Spc", "x":1, "y":4},
+                       {"label":".", "x":2, "y":4},
+                       {"label":"Enter", "x":3, "y":4}]
+        },
+        "LAYOUT_numpad_5x4": {
+            "layout": [{"label":"MO(1)", "x":0, "y":0},
+                {"label":"/", "x":1, "y":0},
+                {"label":"*", "x":2, "y":0},
+                {"label":"-", "x":3, "y":0},
+                {"label":"7", "x":0, "y":1},
+                {"label":"8", "x":1, "y":1},
+                {"label":"9", "x":2, "y":1}, 
+                {"label":"+", "x":3, "y":1, "h":2},
+                {"label":"4", "x":0, "y":2},
+                {"label":"5", "x":1, "y":2},
+                {"label":"6", "x":2, "y":2},
+                {"label":"1", "x":0, "y":3},
+                {"label":"2", "x":1, "y":3},
+                {"label":"3", "x":2, "y":3},
+                {"label":"Enter", "x":3, "y":3, "h":2},
+                {"label":"0", "x":0, "y":4, "w":2},
+                {"label":".", "x":2, "y":4}]
+        },
+        "LAYOUT_via_6x4": {
+            "layout": [{"label":"Vol-", "x":0, "y":0},
+                       {"label":"Vol+", "x":1, "y":0},
+                       {"label":"Vol-", "x":3, "y":0},
+                       {"label":"Vol+", "x":4, "y":0},
+                       {"label":"MO(1)", "x":0.5, "y":1.1},
+                       {"label":"/", "x":1.5, "y":1.1},
+                       {"label":"*", "x":2.5, "y":1.1}, 
+                       {"label":"Mute", "x":3.5, "y":1.1}, 
+                       {"label":"7", "x":0.5, "y":2.1}, 
+                       {"label":"8", "x":1.5, "y":2.1}, 
+                       {"label":"9", "x":2.5, "y":2.1}, 
+                       {"label":"+", "x":3.5, "y":2.1}, 
+                       {"label":"4", "x":0.5, "y":3.1}, 
+                       {"label":"5", "x":1.5, "y":3.1}, 
+                       {"label":"6", "x":2.5, "y":3.1}, 
+                       {"label":"Pg Up", "x":3.5, "y":3.1}, 
+                       {"label":"1", "x":0.5, "y":4.1}, 
+                       {"label":"2", "x":1.5, "y":4.1}, 
+                       {"label":"3", "x":2.5, "y":4.1}, 
+                       {"label":"Pg Dn", "x":3.5, "y":4.1}, 
+                       {"label":"0", "x":0.5, "y":5.1}, 
+                       {"label":"Spc", "x":1.5, "y":5.1}, 
+                       {"label":".", "x":2.5, "y":5.1}, 
+                       {"label":"Enter", "x":3.5, "y":5.1}]
+        }
+    }
+}

+ 76 - 0
keyboards/custommk/genesis/rev2/keymaps/default/keymap.c

@@ -0,0 +1,76 @@
+/* Copyright 2020 customMK
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+//#define GENESIS_LAYER_COLORS
+#define GENESIS_LAYER1_COLOR HSV_CYAN
+#define GENESIS_LAYER2_COLOR HSV_GREEN
+#define GENESIS_LAYER3_COLOR HSV_WHITE
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+	[0] = LAYOUT_ortho_5x4(
+			MO(1),   KC_PSLS, KC_PAST, KC_PMNS, 
+			KC_P7,   KC_P8,   KC_P9,   KC_BSPC, 
+			KC_P4,   KC_P5,   KC_P6,   KC_PPLS, 
+			KC_P1,   KC_P2,   KC_P3,   KC_CAPS,
+			KC_P0,   KC_SPC,  KC_PDOT, KC_ENT),
+
+	[1] = LAYOUT_ortho_5x4(
+			KC_TRNS, KC_VOLU, RGB_TOG, RGB_MOD, 
+			KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+			RGB_VAI, RGB_VAD, RGB_SPI, RGB_SPD, 
+			KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+			RGB_HUI, KC_TRNS, KC_TRNS, RGB_HUD),
+
+};
+
+
+#ifdef GENESIS_LAYER_COLORS
+const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+		{0,13,GENESIS_LAYER1_COLOR}
+	);
+
+const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+		{0,13,GENESIS_LAYER2_COLOR}
+	);
+
+const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+		{0,13,GENESIS_LAYER3_COLOR}
+	);
+
+
+const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(
+		my_layer1_layer,
+		my_layer2_layer,
+		my_layer3_layer
+	);
+
+//Set the appropriate layer color
+layer_state_t layer_state_set_user(layer_state_t state) {
+    rgblight_set_layer_state(0, layer_state_cmp(state, 1));
+    rgblight_set_layer_state(1, layer_state_cmp(state, 2));
+    rgblight_set_layer_state(2, layer_state_cmp(state, 3));
+    return state;
+}
+
+void keyboard_post_init_user(void) {
+	//Enable the LED layers
+	rgblight_layers = my_rgb_layers;
+}
+#endif

+ 6 - 0
keyboards/custommk/genesis/rev2/keymaps/default/readme.md

@@ -0,0 +1,6 @@
+# Default Genesis Macro Pad Layout
+
+This is the default layout for the Genesis Macro Pad. It assumes all 1u switches 
+and optional rotary encoder in the top-left or top-right corner for media volume 
+control. The top left switch activates Layer 1 which enables control of the RGB
+underglow.

+ 89 - 0
keyboards/custommk/genesis/rev2/keymaps/numpad/keymap.c

@@ -0,0 +1,89 @@
+/* Copyright 2020 customMK
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+//#define GENESIS_LAYER_COLORS
+#define GENESIS_LAYER1_COLOR HSV_CYAN
+#define GENESIS_LAYER2_COLOR HSV_GREEN
+#define GENESIS_LAYER3_COLOR HSV_WHITE
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+	[0] = LAYOUT_numpad_5x4(
+			MO(1),  KC_PSLS,  KC_PAST, KC_PMNS, 
+			KC_P7,  KC_P8,    KC_P9,    
+			KC_P4,  KC_P5,    KC_P6,   KC_PPLS, 
+			KC_P1,  KC_P2,    KC_P3,    
+			KC_P0,            KC_PDOT, KC_ENT),
+
+	[1] = LAYOUT_numpad_5x4(
+			KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, 
+			KC_TRNS, KC_TRNS, KC_TRNS,   
+			RGB_VAI, RGB_VAD, RGB_SPI, RGB_SPD, 
+			KC_TRNS, KC_TRNS, KC_TRNS, 	 
+			RGB_HUI, 	      KC_TRNS, RGB_HUD),
+
+	[2] = LAYOUT_numpad_5x4(
+			KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+			KC_TRNS, KC_TRNS, KC_TRNS,   
+			KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+			KC_TRNS, KC_TRNS, KC_TRNS,   
+			KC_TRNS,          KC_TRNS, KC_TRNS),
+
+	[3] = LAYOUT_numpad_5x4(
+			KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+			KC_TRNS, KC_TRNS, KC_TRNS,   
+			KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+			KC_TRNS, KC_TRNS, KC_TRNS,   
+			KC_TRNS,          KC_TRNS, KC_TRNS),
+
+};
+
+
+#ifdef GENESIS_LAYER_COLORS
+const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+		{0,13,GENESIS_LAYER1_COLOR}
+	);
+
+const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+		{0,13,GENESIS_LAYER2_COLOR}
+	);
+
+const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+		{0,13,GENESIS_LAYER3_COLOR}
+	);
+
+
+const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(
+		my_layer1_layer,
+		my_layer2_layer,
+		my_layer3_layer
+	);
+
+//Set the appropriate layer color
+layer_state_t layer_state_set_user(layer_state_t state) {
+    rgblight_set_layer_state(0, layer_state_cmp(state, 1));
+    rgblight_set_layer_state(1, layer_state_cmp(state, 2));
+    rgblight_set_layer_state(2, layer_state_cmp(state, 3));
+    return state;
+}
+
+void keyboard_post_init_user(void) {
+	//Enable the LED layers
+	rgblight_layers = my_rgb_layers;
+}
+#endif

+ 3 - 0
keyboards/custommk/genesis/rev2/keymaps/numpad/readme.md

@@ -0,0 +1,3 @@
+# Numpad Genesis Macro Pad Layout
+
+This is the numpad layout for the Genesis Macro Pad. It assumes the 0, +, and enter keys are all 2u size, with an optional rotary encoder in the top-left or top-right corner for media volume control. The top left switch activates Layer 1 which enables control of the RGB underglow.

+ 167 - 0
keyboards/custommk/genesis/rev2/keymaps/via/keymap.c

@@ -0,0 +1,167 @@
+/* Copyright 2020 customMK
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+ 
+#include QMK_KEYBOARD_H
+
+//#define GENESIS_LAYER_COLORS
+#define GENESIS_LAYER1_COLOR HSV_CYAN
+#define GENESIS_LAYER2_COLOR HSV_GREEN
+#define GENESIS_LAYER3_COLOR HSV_WHITE
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+	[0] = LAYOUT_via_6x4(
+		    KC_VOLD, KC_VOLU, KC_VOLD, KC_VOLU,
+			MO(1),   KC_PSLS, KC_PAST, KC_PMNS, 
+			KC_P7,   KC_P8,   KC_P9,   KC_PGUP, 
+			KC_P4,   KC_P5,   KC_P6,   KC_PPLS, 
+			KC_P1,   KC_P2,   KC_P3,   KC_PGDN, 
+			KC_P0,   KC_SPC,  KC_PDOT, KC_PENT),
+
+	[1] = LAYOUT_via_6x4(
+		    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+			KC_TRNS, RGB_TOG, RGB_MOD, KC_TRNS, 
+			KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+			RGB_VAI, RGB_VAD, RGB_SPI, RGB_SPD, 
+			KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+			RGB_HUI, RGB_HUD, KC_TRNS, KC_TRNS),
+
+	[2] = LAYOUT_via_6x4(
+		    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+			KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+			KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+			KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+			KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+			KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+	[3] = LAYOUT_via_6x4(
+		    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+			KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+			KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+			KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+			KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+			KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+};
+
+#ifdef GENESIS_LAYER_COLORS
+const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+		{0,13,GENESIS_LAYER1_COLOR}
+	);
+
+const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+		{0,13,GENESIS_LAYER2_COLOR}
+	);
+
+const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+		{0,13,GENESIS_LAYER3_COLOR}
+	);
+
+
+const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(
+		my_layer1_layer,
+		my_layer2_layer,
+		my_layer3_layer
+	);
+
+//Set the appropriate layer color
+layer_state_t layer_state_set_user(layer_state_t state) {
+    rgblight_set_layer_state(0, layer_state_cmp(state, 1));
+    rgblight_set_layer_state(1, layer_state_cmp(state, 2));
+    rgblight_set_layer_state(2, layer_state_cmp(state, 3));
+    return state;
+}
+
+void keyboard_post_init_user(void) {
+	//Enable the LED layers
+	rgblight_layers = my_rgb_layers;
+}
+#endif
+
+
+keyevent_t encoder_left_ccw = {
+    .key = (keypos_t){.row = 5, .col = 0},
+    .pressed = false
+};
+
+keyevent_t encoder_left_cw = {
+    .key = (keypos_t){.row = 5, .col = 1},
+    .pressed = false
+};
+
+keyevent_t encoder_right_ccw = {
+    .key = (keypos_t){.row = 5, .col = 2},
+    .pressed = false
+};
+
+keyevent_t encoder_right_cw = {
+    .key = (keypos_t){.row = 5, .col = 3},
+    .pressed = false
+};
+
+void matrix_scan_user(void) {
+    if (IS_PRESSED(encoder_left_ccw)) {
+        encoder_left_ccw.pressed = false;
+        encoder_left_ccw.time = (timer_read() | 1);
+        action_exec(encoder_left_ccw);
+    }
+
+    if (IS_PRESSED(encoder_left_cw)) {
+        encoder_left_cw.pressed = false;
+        encoder_left_cw.time = (timer_read() | 1);
+        action_exec(encoder_left_cw);
+    }
+
+    if (IS_PRESSED(encoder_right_ccw)) {
+        encoder_right_ccw.pressed = false;
+        encoder_right_ccw.time = (timer_read() | 1);
+        action_exec(encoder_right_ccw);
+    }
+
+    if (IS_PRESSED(encoder_right_cw)) {
+        encoder_right_cw.pressed = false;
+        encoder_right_cw.time = (timer_read() | 1);
+        action_exec(encoder_right_cw);
+    }
+	
+}
+
+
+bool encoder_update_user(uint8_t index, bool clockwise) {
+	if (index == 0) {
+		if (clockwise) {
+			encoder_left_cw.pressed = true;
+			encoder_left_cw.time = (timer_read() | 1);
+			action_exec(encoder_left_cw);
+		} else {
+			encoder_left_ccw.pressed = true;
+			encoder_left_ccw.time = (timer_read() | 1);
+			action_exec(encoder_left_ccw);
+		}
+	} else {
+		if (clockwise) {
+			encoder_right_cw.pressed = true;
+			encoder_right_cw.time = (timer_read() | 1);
+			action_exec(encoder_right_cw);
+		} else {
+			encoder_right_ccw.pressed = true;
+			encoder_right_ccw.time = (timer_read() | 1);
+			action_exec(encoder_right_ccw);
+		}
+	}
+    return false;
+}

+ 3 - 0
keyboards/custommk/genesis/rev2/keymaps/via/readme.md

@@ -0,0 +1,3 @@
+# Genesis Macro Pad Layout for VIA
+
+This is the via layout for the Genesis Macro Pad. It is identical to the default 1u layout which assumes all 1u switches and optional rotary encoder in the top-left or top-right corner for media volume control. The top-left switch activates Layer 1 which enables control of the RGB underglow.

+ 2 - 0
keyboards/custommk/genesis/rev2/keymaps/via/rules.mk

@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes

+ 19 - 0
keyboards/custommk/genesis/rev2/readme.md

@@ -0,0 +1,19 @@
+# Genesis
+
+Genesis Rev2 is the same as Genesis Rev1 firmware, except Rev2 allows encoder function remapping using VIA.
+
+* Keyboard Maintainer: [customMK](https://github.com/customMK)
+* Hardware Supported: Genesis Macro Pad
+* Hardware Availability: [customMK](https://shop.custommk.com/products/genesis_macropad)
+
+Make example for this keyboard (after setting up your build environment):
+
+    make custommk/genesis/rev2:default
+
+Flashing example for this keyboard:
+
+    make custommk/genesis/rev2:default:flash
+
+Genesis Macro Pad has qmk-dfu bootloader preinstalled. To enter the bootloader, run the flashing command above, and then either plug in the USB connection while holding the top-left key, or alternatively, plug in the USB connection and then press the reset button on the PCB
+
+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).

+ 39 - 0
keyboards/custommk/genesis/rev2/rev2.c

@@ -0,0 +1,39 @@
+/* Copyright 2020 customMK
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "rev2.h"
+
+bool encoder_update_kb(uint8_t index, bool clockwise) {
+    if (!encoder_update_user(index, clockwise)) { return false; }
+    /* top left encoder */
+    if (index == 0) {
+        if (clockwise) {
+            tap_code(KC_VOLU);
+        } else {
+            tap_code(KC_VOLD);
+        }
+    }
+    /* top right encoder */
+    else if (index == 1) {
+        if (clockwise) {
+            tap_code(KC_VOLU);
+        } else {
+            tap_code(KC_VOLD);
+        }
+    }
+    return false;
+}
+

+ 66 - 0
keyboards/custommk/genesis/rev2/rev2.h

@@ -0,0 +1,66 @@
+/* Copyright 2020 customMK
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT_numpad_5x4(   \
+    K00,  K01,   K02,  K03,  \
+    K10,  K11,   K12,        \
+    K20,  K21,   K22,  K23,  \
+    K30,  K31,   K32,        \
+    K40,         K42,  K43   \
+) { \
+    { K00,   K01,   K02,   K03 }, \
+    { K10,   K11,   K12,   KC_NO }, \
+    { K20,   K21,   K22,   K23 }, \
+    { K30,   K31,   K32,   KC_NO }, \
+    { K40,   KC_NO, K42,   K43 }, \
+    { KC_NO, KC_NO, KC_NO, KC_NO} \
+}
+
+#define LAYOUT_ortho_5x4( \
+    K00,  K01,   K02,  K03,  \
+    K10,  K11,   K12,  K13,  \
+    K20,  K21,   K22,  K23,  \
+    K30,  K31,   K32,  K33,  \
+    K40,  K41,   K42,  K43   \
+) { \
+    { K00,   K01,   K02,   K03  }, \
+    { K10,   K11,   K12,   K13  }, \
+    { K20,   K21,   K22,   K23  }, \
+    { K30,   K31,   K32,   K33  }, \
+    { K40,   K41,   K42,   K43  }, \
+    { KC_NO, KC_NO, KC_NO, KC_NO}  \
+}
+
+
+#define LAYOUT_via_6x4( \
+    E00A, E00B,  E01A, E01B, \
+    K00,  K01,   K02,  K03,  \
+    K10,  K11,   K12,  K13,  \
+    K20,  K21,   K22,  K23,  \
+    K30,  K31,   K32,  K33,  \
+    K40,  K41,   K42,  K43   \
+) { \
+    { K00,   K01,   K02,   K03  }, \
+    { K10,   K11,   K12,   K13  }, \
+    { K20,   K21,   K22,   K23  }, \
+    { K30,   K31,   K32,   K33  }, \
+    { K40,   K41,   K42,   K43  }, \
+    { E00A,  E00B,  E01A,  E01B }  \
+}

+ 23 - 0
keyboards/custommk/genesis/rev2/rules.mk

@@ -0,0 +1,23 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = qmk-dfu
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite     # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes       # Mouse keys
+EXTRAKEY_ENABLE = yes       # Audio control and System control
+CONSOLE_ENABLE = no         # Console for debug
+COMMAND_ENABLE = no         # Commands for debug and configuration
+# 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 = yes           # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes        # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no       # Enable Bluetooth
+AUDIO_ENABLE = no           # Audio output
+ENCODER_ENABLE = yes

+ 3 - 1
keyboards/custommk/genesis/rules.mk

@@ -20,4 +20,6 @@ BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
 RGBLIGHT_ENABLE = yes        # Enable keyboard RGB underglow
 BLUETOOTH_ENABLE = no       # Enable Bluetooth
 AUDIO_ENABLE = no           # Audio output
-ENCODER_ENABLE = yes
+ENCODER_ENABLE = yes
+
+DEFAULT_FOLDER = custommk/genesis/rev2

+ 1 - 1
keyboards/kbdfans/kbd67/mkiirgb/v3/config.h

@@ -42,7 +42,7 @@
 #define NO_ACTION_FUNCTION
 #ifdef RGB_MATRIX_ENABLE
 #define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
-#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
+#define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended
 #define USB_SUSPEND_WAKEUP_DELAY 5000
 #define RGB_MATRIX_KEYPRESSES
 #define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN	

+ 115 - 0
keyboards/keyprez/rhino/config.h

@@ -0,0 +1,115 @@
+/*
+Copyright 2021 Christian Sandven
+
+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    0xFEED
+#define PRODUCT_ID   0x0000
+#define DEVICE_VER   0x0001
+#define MANUFACTURER Christian Sandven
+#define PRODUCT      rhino
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 7
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+ */
+#define MATRIX_ROW_PINS { B3, B2, B6, B1, F4, F5, F6, F7 }
+#define MATRIX_COL_PINS { D3, D2, D4, D7, E6, B4, B5 }
+
+/* COL2ROW, ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+#define ENCODERS_PAD_A { D1 }
+#define ENCODERS_PAD_B { D0 }
+#define ENCODER_RESOLUTION 4
+
+#define AUDIO_PIN C6
+#define MUSIC_MAP
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 2
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* 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
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is useful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+//#define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+
+/* disable these deprecated features by default */
+#define NO_ACTION_MACRO
+#define NO_ACTION_FUNCTION
+
+/* Bootmagic Lite key configuration */
+//#define BOOTMAGIC_LITE_ROW 0
+//#define BOOTMAGIC_LITE_COLUMN 0

+ 179 - 0
keyboards/keyprez/rhino/info.json

@@ -0,0 +1,179 @@
+{
+    "keyboard_name": "rhino",
+    "url": "",
+    "maintainer": "Christian Sandven",
+    "width": 14,
+    "height": 4,
+    "layouts": {
+        "LAYOUT_ortho_2x2u": {
+            "layout": [
+                {"x": 0, "y": 0, "w": 1.5},
+                {"x": 1.5, "y": 0},
+                {"x": 2.5, "y": 0},
+                {"x": 3.5, "y": 0},
+                {"x": 4.5, "y": 0},
+                {"x": 5.5, "y": 0},
+                {"x": 6.5, "y": 0},
+                {"x": 7.5, "y": 0},
+                {"x": 8.5, "y": 0},
+                {"x": 9.5, "y": 0},
+                {"x": 10.5, "y": 0},
+                {"x": 11.5, "y": 0},
+                {"x": 12.5, "y": 0},
+                {"x": 13.5, "y": 0, "w": 1.5},
+
+                {"x": 0, "y": 1, "w": 1.5},
+                {"x": 1.5, "y": 1},
+                {"x": 2.5, "y": 1},
+                {"x": 3.5, "y": 1},
+                {"x": 4.5, "y": 1},
+                {"x": 5.5, "y": 1},
+                {"x": 6.5, "y": 1},
+                {"x": 7.5, "y": 1},
+                {"x": 8.5, "y": 1},
+                {"x": 9.5, "y": 1},
+                {"x": 10.5, "y": 1},
+                {"x": 11.5, "y": 1},
+                {"x": 12.5, "y": 1},
+                {"x": 13.5, "y": 1, "w": 1.5},
+
+                {"x": 0, "y": 2, "w": 1.5},
+                {"x": 1.5, "y": 2},
+                {"x": 2.5, "y": 2},
+                {"x": 3.5, "y": 2},
+                {"x": 4.5, "y": 2},
+                {"x": 5.5, "y": 2},
+                {"x": 6.5, "y": 2},
+                {"x": 7.5, "y": 2},
+                {"x": 8.5, "y": 2},
+                {"x": 9.5, "y": 2},
+                {"x": 10.5, "y": 2},
+                {"x": 11.5, "y": 2},
+                {"x": 12.5, "y": 2},
+                {"x": 13.5, "y": 2, "w": 1.5},
+
+                {"x": 1.5, "y": 4},
+                {"x": 2.5, "y": 4},
+                {"x": 3.5, "y": 4},
+                {"x": 4.5, "y": 4},
+                {"x": 5.5, "y": 4, "w": 2},
+                {"x": 7.5, "y": 4, "w": 2},
+                {"x": 9.5, "y": 4},
+                {"x": 10.5, "y": 4},
+                {"x": 11.5, "y": 4},
+                {"x": 12.5, "y": 4}
+            ]
+        },
+
+        "LAYOUT_ergo_2x2u": {
+            "layout": [
+                {"x": 0, "y": 0, "w": 1.5},
+                {"x": 1.5, "y": 0},
+                {"x": 2.5, "y": 0},
+                {"x": 3.5, "y": 0},
+                {"x": 4.5, "y": 0},
+                {"x": 5.5, "y": 0},
+                {"x": 6.5, "y": 0, "h": 1.5},
+                {"x": 7.5, "y": 0, "h": 1.5},
+                {"x": 8.5, "y": 0},
+                {"x": 9.5, "y": 0},
+                {"x": 10.5, "y": 0},
+                {"x": 11.5, "y": 0},
+                {"x": 12.5, "y": 0},
+                {"x": 13.5, "y": 0, "w": 1.5},
+
+                {"x": 0, "y": 1, "w": 1.5},
+                {"x": 1.5, "y": 1},
+                {"x": 2.5, "y": 1},
+                {"x": 3.5, "y": 1},
+                {"x": 4.5, "y": 1},
+                {"x": 5.5, "y": 1},
+                {"x": 6.5, "y": 1.5, "h": 1.5},
+                {"x": 7.5, "y": 1.5, "h": 1.5},
+                {"x": 8.5, "y": 1},
+                {"x": 9.5, "y": 1},
+                {"x": 10.5, "y": 1},
+                {"x": 11.5, "y": 1},
+                {"x": 12.5, "y": 1},
+                {"x": 13.5, "y": 1, "w": 1.5},
+
+                {"x": 0, "y": 2, "w": 1.5},
+                {"x": 1.5, "y": 2},
+                {"x": 2.5, "y": 2},
+                {"x": 3.5, "y": 2},
+                {"x": 4.5, "y": 2},
+                {"x": 5.5, "y": 2},
+                {"x": 8.5, "y": 2},
+                {"x": 9.5, "y": 2},
+                {"x": 10.5, "y": 2},
+                {"x": 11.5, "y": 2},
+                {"x": 12.5, "y": 2},
+                {"x": 13.5, "y": 2, "w": 1.5},
+
+                {"x": 1.5, "y": 4},
+                {"x": 2.5, "y": 4},
+                {"x": 3.5, "y": 4},
+                {"x": 4.5, "y": 4},
+                {"x": 5.5, "y": 4, "w": 2},
+                {"x": 7.5, "y": 4, "w": 2},
+                {"x": 9.5, "y": 4},
+                {"x": 10.5, "y": 4},
+                {"x": 11.5, "y": 4},
+                {"x": 12.5, "y": 4}
+            ]
+        },
+
+        "LAYOUT_ortho_7u": {
+            "layout": [
+                {"x": 0, "y": 0, "w": 1.5},
+                {"x": 1.5, "y": 0},
+                {"x": 2.5, "y": 0},
+                {"x": 3.5, "y": 0},
+                {"x": 4.5, "y": 0},
+                {"x": 5.5, "y": 0},
+                {"x": 6.5, "y": 0, "h": 1.5},
+                {"x": 7.5, "y": 0, "h": 1.5},
+                {"x": 8.5, "y": 0},
+                {"x": 9.5, "y": 0},
+                {"x": 10.5, "y": 0},
+                {"x": 11.5, "y": 0},
+                {"x": 12.5, "y": 0},
+                {"x": 13.5, "y": 0, "w": 1.5},
+
+                {"x": 0, "y": 1, "w": 1.5},
+                {"x": 1.5, "y": 1},
+                {"x": 2.5, "y": 1},
+                {"x": 3.5, "y": 1},
+                {"x": 4.5, "y": 1},
+                {"x": 5.5, "y": 1},
+                {"x": 6.5, "y": 1.5, "h": 1.5},
+                {"x": 7.5, "y": 1.5, "h": 1.5},
+                {"x": 8.5, "y": 1},
+                {"x": 9.5, "y": 1},
+                {"x": 10.5, "y": 1},
+                {"x": 11.5, "y": 1},
+                {"x": 12.5, "y": 1, "w": 1.5},
+                {"x": 14, "y": 1},
+
+                {"x": 0, "y": 2, "w": 1.5},
+                {"x": 1.5, "y": 2},
+                {"x": 2.5, "y": 2},
+                {"x": 3.5, "y": 2},
+                {"x": 4.5, "y": 2},
+                {"x": 5.5, "y": 2},
+                {"x": 8.5, "y": 2},
+                {"x": 9.5, "y": 2},
+                {"x": 10.5, "y": 2},
+                {"x": 11.5, "y": 2, "w": 1.5},
+                {"x": 13, "y": 2},
+                {"x": 14, "y": 2},
+
+                {"x": 1.5, "y": 4},
+                {"x": 2.5, "y": 4, "w": 1.5},
+                {"x": 4, "y": 4, "w": 7},
+                {"x": 11, "y": 4, "w": 1.5},
+                {"x": 12.5, "y": 4}
+            ]
+        }
+    }
+}

+ 116 - 0
keyboards/keyprez/rhino/keymaps/default/keymap.c

@@ -0,0 +1,116 @@
+/* Copyright 2021 Christian Sandven
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+    _BASE,
+    _FN,
+    _LOWER,
+    _RAISE
+};
+
+#define LOWER MO(_LOWER)
+#define FN MO(_FN)
+#define TAB_CTL MT(MOD_LCTL, KC_TAB)
+#define SPC_RAISE LT(_RAISE, KC_SPC)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+    /* Base Layer
+     * .-----------------------------------------------------------------------------------------------------------------------------.
+     * |                                                                                                                     KC_MUTE |
+     * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+     * | GESC   | Q      | W      | E      | R      | T      | [      | ]      | Y      | U      | I      | O      | P      | '      |
+     * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
+     * | TAB    | A      | S      | D      | F      | G      | HOME   | PG UP  | H      | J      | K      | L      | ;      | BACKSP |
+     * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+     * | LSHIFT | Z      | X      | C      | V      | B      | END    | PG DN  | N      | M      | ,      | .      | /      | ENTER  |
+     * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+-----------------+--------+--------|
+     * |        | LGUI   | FN     | LALT   | LOWER  |      SPACE      |      SPACE      | LEFT   | UP     | DOWN   | RIGHT  |        |
+     * '-----------------------------------------------------------------------------------------------------------------------------'
+     */
+    [_BASE] = LAYOUT_ortho_2x2u(
+                                                                                                                             KC_MUTE,
+        KC_GESC, KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_LBRC, KC_RBRC, KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_QUOT,
+        TAB_CTL, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_HOME, KC_PGUP, KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_BSPC,
+        KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_END,  KC_PGDN, KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT,
+                 KC_LGUI, FN,      KC_LALT, LOWER,       KC_SPC,          KC_SPC,     KC_LEFT, KC_UP,   KC_DOWN, KC_RGHT
+    ),
+
+    /* FN Layer
+     * .-----------------------------------------------------------------------------------------------------------------------------.
+     * |                                                                                                                     KC_APP |
+     * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+     * | `      | F1     | F2     | F3     | F4     | F5     | F6     | F7     | F8     | F9     | F10    | F11    | F12    |        |
+     * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
+     * |        | F7     | F8     | F9     | F10    | F11    | F12    |        |        |        |        |        | DEL    | PRT SC |
+     * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+     * |        |        |        |        |        |        |        |        |        |        |        |        |        | RESET  |
+     * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+-----------------+--------+--------|
+     * |        |        |        |        |        |                 |                 | MUTE   | VOL UP |VOL DOWN| PAUSE  |        |
+     * '-----------------------------------------------------------------------------------------------------------------------------'
+     */
+    [_FN] = LAYOUT_ortho_2x2u(
+                                                                                                                             KC_APP,
+        KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______,
+        _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, _______, _______, _______, _______, KC_DEL,  KC_PSCR,
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET,
+                 MU_TOG,  MU_MOD,  _______, _______,     _______,           _______,     KC_MUTE, KC_VOLU, KC_VOLD, KC_MPLY
+    ),
+
+    /* LOWER Layer
+     * .-----------------------------------------------------------------------------------------------------------------------------.
+     * |                                                                                                                     KC_APP |
+     * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+     * | `      | 1      | 2      | 3      | 4      | 5      | 6      | 7      | 8      | 9      | 0      | -      | =      | DEL    |
+     * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
+     * |        | F1     | F2     | F3     | F4     | F5     | F6     |        |        |        |        |        |        | INSERT |
+     * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+     * |        | F7     | F8     | F9     | F10    | F11    | F12    | ISO #  | ISO /  |        |        |        | \      |        |
+     * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+-----------------+--------+--------|
+     * |        |        |        |        |        |                 |                 | HOME   | PG UP  | PG DN  | END    |        |
+     * '-----------------------------------------------------------------------------------------------------------------------------'
+     */
+    [_LOWER] = LAYOUT_ortho_2x2u(
+                                                                                                                            KC_APP,
+        KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,   KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_DEL,
+        _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,  _______, _______, _______, _______, _______, _______, KC_INS,
+        _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, KC_BSLS, _______,
+                 _______, _______, _______, _______,     _______,           _______,    KC_HOME, KC_PGUP, KC_PGDOWN, KC_END
+    ),
+
+    /* RAISE Layer
+     * .-----------------------------------------------------------------------------------------------------------------------------.
+     * |                                                                                                                     KC_APP |
+     * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+     * | ~      | !      | @      | #      | $      | %      | ^      | &      | *      | (      | )      | -      | =      | |      |
+     * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
+     * |        | F1     | F2     | F3     | F4     | F5     | F6     | -      | =      | {      | }      |        |        | DEL    |
+     * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+     * |        | F7     | F8     | F9     | F10    | F11    | F12    | ISO ~  | ISO |  |        |        |        |        | INSERT |
+     * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+-----------------+--------+--------|
+     * |        |        |        |        |        |                 |                 |        |        |        |        |        |
+     * '-----------------------------------------------------------------------------------------------------------------------------'
+     */
+    [_RAISE] = LAYOUT_ortho_2x2u(
+                                                                                                                             KC_APP,
+        KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR,    KC_ASTR,    KC_LPRN, KC_RPRN, KC_MINS, KC_EQL,  KC_PIPE,
+        _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS,    KC_PLUS,    KC_LCBR, KC_RCBR, _______, _______, KC_DEL,
+        _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  S(KC_NUHS), S(KC_NUBS), _______, _______, _______, _______, KC_INS,
+                 _______, _______, _______, _______,     _______,           _______,    _______, _______, _______, _______
+    ),
+};

+ 1 - 0
keyboards/keyprez/rhino/keymaps/default/readme.md

@@ -0,0 +1 @@
+# The default keymap for rhino

+ 117 - 0
keyboards/keyprez/rhino/keymaps/default_7u/keymap.c

@@ -0,0 +1,117 @@
+/* Copyright 2021 Christian Sandven
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+    _BASE,
+    _FN,
+    _LOWER,
+    _RAISE
+};
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+#define FN MO(_FN)
+#define ESC_CTL MT(MOD_LCTL, KC_ESC)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+    /* Base Layer
+     * .-----------------------------------------------------------------------------------------------------------------------------.
+     * |                                                                                                                     KC_MUTE |
+     * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+     * | TAB    | Q      | W      | E      | R      | T      | Y      | U      | I      | O      | P      | [      | ]      | \      |
+     * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
+     * | ESC    | A      | S      | D      | F      | G      | H      | J      | K      | L      | ;      | '      | BACKSP | PG UP  |
+     * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+     * | LSHIFT | Z      | X      | C      | V      | B      | N      | M      | ,      | .      | /      | ENTER  | FN     | PG DN  |
+     * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+-----------------+--------+--------|
+     * |        | LGUI   |     LALT   |                             SPACE                             | RALT       | RGUI   |        |
+     * '-----------------------------------------------------------------------------------------------------------------------------'
+     */
+    [_BASE] = LAYOUT_ortho_7u(
+                                                                                                                             KC_MUTE,
+        KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS,
+        ESC_CTL, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, KC_BSPC, KC_PGUP,
+        KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT,  FN,      KC_PGDN,
+                 LOWER, KC_LALT,                               KC_SPC,                                     RAISE, KC_RGUI
+    ),
+
+    /* FN Layer
+     * .-----------------------------------------------------------------------------------------------------------------------------.
+     * |                                                                                                                     KC_APP |
+     * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+     * | `      | F1     | F2     | F3     | F4     | F5     | F6     | F7     | F8     | F9     | F10    | F11    | F12    |        |
+     * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
+     * |        | F7     | F8     | F9     | F10    | F11    | F12    |        |        |        |        |        | DEL    | PRT SC |
+     * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+     * |        |        |        |        |        |        |        |        |        |        |        |        |        | RESET  |
+     * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+-----------------+--------+--------|
+     * |        | MU TOG | MU MOD     |                                                               |            |        |        |
+     * '-----------------------------------------------------------------------------------------------------------------------------'
+     */
+    [_FN] = LAYOUT_ortho_7u(
+                                                                                                                             KC_APP,
+        KC_GRV,   KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   _______, _______, _______, KC_UP,   _______, _______, _______,
+        _______,  KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL,  KC_PSCR,
+        _______,  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET,
+                  MU_TOG,  MU_MOD,                             _______,                                   _______, _______
+    ),
+
+    /* LOWER Layer
+     * .-----------------------------------------------------------------------------------------------------------------------------.
+     * |                                                                                                                     KC_APP |
+     * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+     * | `      | 1      | 2      | 3      | 4      | 5      | 6      | 7      | 8      | 9      | 0      | -      | =      | |      |
+     * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
+     * |        | F1     | F2     | F3     | F4     | F5     | LEFT   | DOWN   | UP     | RIGHT  |        |        | DEL    | INSERT |
+     * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+     * |        | F7     | F8     | F9     | F10    | F11    | F12    | ISO #  | ISO /  |        |        |        |        | \      |        |
+     * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+-----------------+--------+--------|
+     * |        |        | F6         |                                                               |            |        |        |
+     * '-----------------------------------------------------------------------------------------------------------------------------'
+     */
+    [_LOWER] = LAYOUT_ortho_7u(
+                                                                                                                            KC_APP,
+        KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_PIPE,
+        _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, _______, _______, KC_DEL,  KC_INS,
+        _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_NUHS, KC_NUBS, _______, _______, _______, _______, KC_BSLS,
+                 _______, KC_F6,                              _______,                                   _______, _______
+    ),
+
+    /* RAISE Layer
+     * .-----------------------------------------------------------------------------------------------------------------------------.
+     * |                                                                                                                     KC_APP |
+     * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+     * | ~      | !      | @      | #      | $      | %      | ^      | &      | *      | (      | )      | -      | =      | |      |
+     * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
+     * |        | F1     | F2     | F3     | F4     | F5     | F6     | -      | =      | {      | }      |        | DEL    | INSERT |
+     * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+     * |        | F7     | F8     | F9     | F10    | F11    | F12    | ISO ~  | ISO |  |        |        |        |        | \      |        |
+     * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+-----------------+--------+--------|
+     * |        |        |            |                                                               |            |        |        |
+     * '-----------------------------------------------------------------------------------------------------------------------------'
+     */
+    [_RAISE] = LAYOUT_ortho_7u(
+                                                                                                                             KC_APP,
+        KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR,    KC_ASTR,    KC_LPRN, KC_RPRN, KC_MINS, KC_EQL,  KC_PIPE,
+        _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS,    KC_PLUS,    KC_LCBR, KC_RCBR, _______, KC_DEL,  KC_INS,
+        _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  S(KC_NUHS), S(KC_NUBS), _______, _______, _______, _______, KC_BSLS,
+                 _______, _______,                              _______,                                   _______, _______
+    ),
+};
+

+ 1 - 0
keyboards/keyprez/rhino/keymaps/default_7u/readme.md

@@ -0,0 +1 @@
+# The default 7u keymap for rhino

+ 124 - 0
keyboards/keyprez/rhino/keymaps/default_ergo/keymap.c

@@ -0,0 +1,124 @@
+/* Copyright 2021 Christian Sandven
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+    _BASE,
+    _FN,
+    _LOWER,
+    _RAISE
+};
+
+#define LOWER MO(_LOWER)
+#define FN MO(_FN)
+#define TAB_CTL MT(MOD_LCTL, KC_TAB)
+#define SPC_RAISE LT(_RAISE, KC_SPC)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+    /* Base Layer
+     * .-----------------------------------------------------------------------------------------------------------------------------.
+     * |                                                                                                                     KC_MUTE |
+     * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+     * | GESC   | Q      | W      | E      | R      | T      |        |        | Y      | U      | I      | O      | P      | '      |
+     * |--------+--------+--------+--------+--------+--------+   [    +    ]   +--------+--------+--------+-----------------+--------|
+     * | TAB    | A      | S      | D      | F      | G      |--------|--------| H      | J      | K      | L      | ;      | BACKSP |
+     * |--------+--------+--------+--------+--------+--------+  HOME  +  END   +--------+--------+--------------------------+--------|
+     * | LSHIFT | Z      | X      | C      | V      | B      |        |        | N      | M      | ,      | .      | /      | ENTER  |
+     * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+-----------------+--------+--------|
+     * |        | LGUI   | FN     | LALT   | LOWER  |      SPACE      |      SPACE      | LEFT   | UP     | DOWN   | RIGHT  |        |
+     * '-----------------------------------------------------------------------------------------------------------------------------'
+     */
+    [_BASE] = LAYOUT_ergo_2x2u(
+                                                                                                                             KC_MUTE,
+        KC_GESC, KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_LBRC, KC_RBRC, KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_QUOT,
+        TAB_CTL, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_HOME, KC_END,  KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_BSPC,
+        KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,                      KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT,
+                 KC_LGUI, FN,      KC_LALT, LOWER,       KC_SPC,          SPC_RAISE,     KC_LEFT, KC_UP,   KC_DOWN, KC_RGHT
+    ),
+
+    /* FN Layer
+     * .-----------------------------------------------------------------------------------------------------------------------------.
+     * |                                                                                                                     KC_APP  |
+     * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+     * | `      | F1     | F2     | F3     | F4     | F5     |        |        | F8     | F9     | F10    | F11    | F12    |        |
+     * |--------+--------+--------+--------+--------+--------+   F6   +   F7  +--------+--------+--------+-----------------+---------|
+     * |        | F7     | F8     | F9     | F10    | F11    |--------|--------|        |        |        |        |        | PRT SC |
+     * |--------+--------+--------+--------+--------+--------+  F12   +        +--------+--------+--------------------------+--------|
+     * |        |        |        |        |        |        |        |        |        |        |        |        |        | RESET  |
+     * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+-----------------+--------+--------|
+     * |        | MU TOG | MU MOD |        |        |                 |                 | MUTE   | VOL UP |VOL DOWN| PAUSE  |        |
+     * '-----------------------------------------------------------------------------------------------------------------------------'
+     */
+    [_FN] = LAYOUT_ergo_2x2u(
+                                                                                                                             KC_APP,
+        KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______,
+        _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, _______, _______, _______, _______, _______, KC_PSCR,
+        _______, _______, _______, _______, _______, _______,                   _______, _______, _______, _______, _______, RESET,
+                 MU_TOG,  MU_MOD,  _______, _______,     _______,           _______,     KC_MUTE, KC_VOLU, KC_VOLD, KC_MPLY
+    ),
+
+    /* LOWER Layer
+     * .-----------------------------------------------------------------------------------------------------------------------------.
+     * |                                                                                                                     KC_APP  |
+     * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+     * | `      | 1      | 2      | 3      | 4      | 5      |        |        | 8      | 9      | 0      | -      | =      | |      |
+     * |--------+--------+--------+--------+--------+--------+   6    +    7   +--------+--------+--------+-----------------+--------|
+     * |        | F1     | F2     | F3     | F4     | F5     |--------|--------|        |        |        |        | DEL    | INSERT |
+     * |--------+--------+--------+--------+--------+--------+  F12   +        +--------+--------+--------------------------+--------|
+     * |        | F7     | F8     | F9     | F10    | F11    |        |        |        |        |        |        | \      |        |
+     * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+-----------------+--------+--------|
+     * |        |        |        |        |        |                 |                 | HOME   | PG UP  | PG DN  | END    |        |
+     * '-----------------------------------------------------------------------------------------------------------------------------'
+     */
+    [_LOWER] = LAYOUT_ergo_2x2u(
+                                                                                                                            KC_APP,
+        KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,   KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_PIPE,
+        _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F12, _______, _______, _______, _______, _______, KC_DEL,  KC_INS,
+        _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,                   _______, _______, _______, _______, KC_BSLS, _______,
+                 _______, _______, _______, _______,     _______,           _______,    KC_HOME, KC_PGUP, KC_PGDOWN, KC_END
+    ),
+
+    /* RAISE Layer
+     * .-----------------------------------------------------------------------------------------------------------------------------.
+     * |                                                                                                                     KC_APP |
+     * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+     * | ~      | !      | @      | #      | $      | %      |        |        | *      | (      | )      | -      | =      | |      |
+     * |--------+--------+--------+--------+--------+--------+   ^    +    &   +--------+--------+--------+-----------------+--------|
+     * |        | F1     | F2     | F3     | F4     | F5     |--------|--------| =      | {      | }      |        | DEL    | INSERT |
+     * |--------+--------+--------+--------+--------+--------+  F12   +   _    +--------+--------+--------------------------+--------|
+     * |        | F7     | F8     | F9     | F10    | F11    |        |        | ISO ~  | ISO |  |        |        | \      |        |
+     * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+-----------------+--------+--------|
+     * |        |        |        |        |        |                 |                 |        |        |        |        |        |
+     * '-----------------------------------------------------------------------------------------------------------------------------'
+     */
+    [_RAISE] = LAYOUT_ergo_2x2u(
+                                                                                                                                      KC_APP,
+        KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC,  KC_AMPR,   KC_ASTR,    KC_LPRN,    KC_RPRN, KC_MINS, KC_EQL,  KC_PIPE,
+        _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F12,   KC_UNDS,   KC_PLUS,    KC_LCBR,    KC_RCBR, _______, KC_DEL,  KC_INS,
+        _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,                       S(KC_NUHS), S(KC_NUBS), _______, _______, _______, KC_BSLS,
+                 _______, _______, _______, _______,     _______,            _______,          _______, _______, _______, _______
+    ),
+};
+
+const uint8_t music_map[MATRIX_ROWS][MATRIX_COLS] = LAYOUT_ergo_2x2u(
+    0,
+    0, 0, 0, 0, 0, 0, 10, 0, 0,  0,  0,  0,  0,  0,
+    0, 1, 3, 0, 6, 8, 9, 11, 13, 15, 0,  18, 20, 0,
+    0, 0, 2, 4, 5, 7,        12, 14, 16, 17, 19, 0,
+       0, 0, 0, 0,    0,  0,     0,  0,  0,  0
+);

+ 1 - 0
keyboards/keyprez/rhino/keymaps/default_ergo/readme.md

@@ -0,0 +1 @@
+# The default keymap for rhino

+ 22 - 0
keyboards/keyprez/rhino/readme.md

@@ -0,0 +1,22 @@
+# rhino
+
+Rhino is a 50 percent keyboard taking inspiration from the Boardwalk keyboard. It supports some of the layouts the bordwalk does, but in a smaller form factor. The number row is removed and replaced with through hole components.
+
+![](https://i.imgur.com/OqCJZWah.jpg)
+
+
+* Keyboard Maintainer: [Christian Sandven](https://github.com/csandven)
+* Hardware Supported: *Pro micro compatible boards*
+* Hardware Availability: *TBA*
+
+Make example for this keyboard (after setting up your build environment):
+
+    make keyprez/rhino:default
+
+Flashing example for this keyboard:
+
+    make keyprez/rhino:default:flash
+    
+You can then press the reset button on the top right to flash the keyboard.
+
+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).

+ 32 - 0
keyboards/keyprez/rhino/rhino.c

@@ -0,0 +1,32 @@
+/* Copyright 2021 Christian Sandven
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "rhino.h"
+
+bool encoder_update_kb(uint8_t index, bool clockwise) {
+    if (!encoder_update_user(index, clockwise)) { return false; }
+    tap_code(clockwise ? KC_VOLU : KC_VOLD);
+    return true;
+}
+
+__attribute__ ((weak))
+const uint8_t music_map[MATRIX_ROWS][MATRIX_COLS] = LAYOUT_ortho_2x2u(
+    0,
+    0, 0, 0, 0, 0, 0, 0,  0, 0,  0,  0,  0,  0,  0,
+    0, 1, 3, 0, 6, 8, 10, 0, 13, 15, 0,  18, 20, 0,
+    0, 0, 2, 4, 5, 7, 9, 11, 12, 14, 16, 17, 19, 0,
+       0, 0, 0, 0,    0,     0,  0,  0,  0,  0
+);

+ 80 - 0
keyboards/keyprez/rhino/rhino.h

@@ -0,0 +1,80 @@
+/* Copyright 2021 Christian Sandven
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "quantum.h"
+
+
+/* This is a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+#define LAYOUT_ortho_2x2u( \
+                                                                   k70,   \
+    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k10, k11, k12, k13, \
+    k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k30, k31, k32, k33, \
+    k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k50, k51, k52, k53, \
+         k60, k61, k62, k63,    k64,      k65,   k66, k67, k68, k69       \
+) { \
+    { k00,   k01,   k02, k03, k04, k05,   k06 }, \
+    { k20,   k21,   k22, k23, k24, k25,   k26 },  \
+    { k40,   k41,   k42, k43, k44, k45,   k46 },  \
+    { KC_NO, k60,   k61, k62, k63, KC_NO, k64 },  \
+    { k07,   k08,   k09, k10, k11, k12,   k13 },  \
+    { k27,   k28,   k29, k30, k31, k32,   k33 },  \
+    { k47,   k48,   k49, k50, k51, k52,   k53 },  \
+    { k65,   KC_NO, k66, k67, k68, k69,   k70 }  \
+}
+
+#define LAYOUT_ergo_2x2u( \
+                                                                   k70,   \
+    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k10, k11, k12, k13, \
+    k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k30, k31, k32, k33, \
+    k40, k41, k42, k43, k44, k45,           k48, k49, k50, k51, k52, k53, \
+         k60, k61, k62, k63,   k64,       k65,   k66, k67, k68, k69           \
+) { \
+    { k00,   k01,   k02, k03, k04, k05,   k06   }, \
+    { k20,   k21,   k22, k23, k24, k25,   k26   },  \
+    { k40,   k41,   k42, k43, k44, k45,   KC_NO },  \
+    { KC_NO, k60,   k61, k62, k63, KC_NO, k64   },  \
+    { k07,   k08,   k09, k10, k11, k12,   k13   },  \
+    { k27,   k28,   k29, k30, k31, k32,   k33   },  \
+    { KC_NO, k48,   k49, k50, k51, k52,   k53   },  \
+    { k65,   KC_NO, k66, k67, k68, k69,   k70   }  \
+}
+
+#define LAYOUT_ortho_7u( \
+                                                                   k65,   \
+    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k10, k11, k12, k13, \
+    k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k30, k31, k32, k33, \
+    k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k50, k51, k52, k53, \
+         k60,    k61,                k62,                k63,   k64       \
+) { \
+    { k00,   k01,   k02,   k03,   k04,   k05,   k06 }, \
+    { k20,   k21,   k22,   k23,   k24,   k25,   k26 },  \
+    { k40,   k41,   k42,   k43,   k44,   k45,   k46 },  \
+    { KC_NO, k60,   k61,   KC_NO, KC_NO, KC_NO, k62 },  \
+    { k07,   k08,   k09,   k10,   k11,   k12,   k13 },  \
+    { k27,   k28,   k29,   k30,   k31,   k32,   k33 },  \
+    { k47,   k48,   k49,   k50,   k51,   k52,   k53 },  \
+    { KC_NO, KC_NO, KC_NO, KC_NO, k63,   k64,   k65 }  \
+}
+

+ 23 - 0
keyboards/keyprez/rhino/rules.mk

@@ -0,0 +1,23 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite     # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes       # Mouse keys
+EXTRAKEY_ENABLE = yes       # Audio control and System control
+CONSOLE_ENABLE = no         # Console for debug
+COMMAND_ENABLE = no         # Commands for debug and configuration
+# 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 = no       # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no       # Enable Bluetooth
+AUDIO_ENABLE = yes           # Audio output
+ENCODER_ENABLE = yes

+ 27 - 0
keyboards/moonlander/keymaps/jjerrell/config.h

@@ -0,0 +1,27 @@
+/* Copyright 2020 ZSA Technology Labs, Inc <@zsa>
+ * Copyright 2020 Jack Humbert <jack.humb@gmail.com>
+ * Copyright 2020 Christopher Courtney <drashna@live.com> (@drashna)
+ * Copyright 2021 Jacob Jerrell <@jjerrell>
+ *
+ * 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 ORYX_CONFIGURATOR
+
+#undef PRODUCT
+#define PRODUCT         Moonlander Mark I - Modified by <@jjerrell>
+
+#define IGNORE_MOD_TAP_INTERRUPT

+ 117 - 0
keyboards/moonlander/keymaps/jjerrell/keymap.c

@@ -0,0 +1,117 @@
+/**
+ * Copyright (C) 2021 Jerrell, Jacob <@jjerrell>
+ * 
+ * This file is part of qmk_firmware.
+ * 
+ * qmk_firmware 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 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * qmk_firmware 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 qmk_firmware.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "jjerrell.h"
+
+enum moonlander_layers {
+    _GAME_LOWER = LAYER_SAFE_RANGE,
+    // _GAME_RAISE,
+};
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [_WORKMAN] = LAYOUT_moonlander_mods(
+        __________________WORKMN_L1__________________, __________________WORKMN_R1__________________,
+        __________________WORKMN_L2__________________, __________________WORKMN_R2__________________,
+        __________________WORKMN_L3__________________, __________________WORKMN_R3__________________,
+        XXXXXXX, XXXXXXX, XXXXXXX, KC_LSFT,                       KC_RSFT, XXXXXXX, XXXXXXX, XXXXXXX
+    ),
+
+    [_LOWER] = LAYOUT_moonlander_mods(
+        __________________LOWER_L1___________________, __________________LOWER_R1___________________,
+        __________________LOWER_L2___________________, __________________LOWER_R2___________________,
+        __________________LOWER_L3___________________, __________________LOWER_R3___________________,
+          XXXXXXX, XXXXXXX, XXXXXXX, KC_LSFT,                         KC_0, KC_DOT, KC_COMM, KC_PLUS
+    ),
+
+    [_RAISE] = LAYOUT_moonlander_common(
+        __________________RAISE_L1___________________, __________________RAISE_R1___________________,
+        __________________RAISE_L2___________________, __________________RAISE_R2___________________,
+        __________________RAISE_L3___________________, __________________RAISE_R3___________________,
+        XXXXXXX, XXXXXXX, XXXXXXX, KC_LSFT,                       KC_RSFT, XXXXXXX, XXXXXXX, XXXXXXX
+    ),
+
+    [_ADJUST] = LAYOUT_moonlander_common(
+        __________________ADJUST_L1__________________, __________________ADJUST_R1__________________,
+        __________________ADJUST_L2__________________, __________________ADJUST_R2__________________,
+        __________________ADJUST_L3__________________, __________________ADJUST_R3__________________,
+        XXXXXXX, XXXXXXX, XXXXXXX, KC_LSFT,                       KC_RSFT, XXXXXXX, XXXXXXX, XXXXXXX
+    ),
+
+    [_SPECIAL] = LAYOUT_moonlander_common(
+        XXXXXXX, XXXXXXX, KC_WH_D, XXXXXXX, XXXXXXX,     XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+        XXXXXXX, KC_WH_L, KC_WH_U, KC_WH_R, XXXXXXX,     XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+        XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,     XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+        XXXXXXX, XXXXXXX, XXXXXXX, KC_LALT,                       KC_RALT, XXXXXXX, XXXXXXX, XXXXXXX
+    ),
+
+    [_GAME] = LAYOUT_moonlander_gamepad(
+        KC_ESC,  KC_1,     KC_2,      KC_3,     KC_4,     KC_5, KC_6,
+        KC_TAB,  __________________QWERTY_L1__________________, KC_SLSH,
+        KC_LALT, __________________QWERTY_L2__________________, KC_BSLS,
+        KC_LSFT, __________________QWERTY_L3__________________,
+        KC_LGUI, MACRO_1, MACRO_2, MACRO_3, MACRO_4,   KC_LOCK,
+                                    KC_SPC, KC_BTN2, MO(_LOWER)
+    ),
+    [_GAME_LOWER] = LAYOUT_moonlander_gamepad(
+        KC_GRV,  KC_7,     KC_8,      KC_9,     KC_0,  KC_MINS, KC_EQL,
+        KC_TAB,  __________________QWERTY_L1__________________, KC_SLSH,
+        KC_LALT, __________________QWERTY_L2__________________, KC_BSLS,
+        KC_LSFT, __________________QWERTY_L3__________________,
+        KC_LGUI, MACRO_5, MACRO_6, MACRO_7, MACRO_8,   KC_LOCK,
+                                    KC_SPC, KC_BTN2, MO(_LOWER)
+    )
+};
+// clang-format on
+
+layer_state_t layer_state_set_keymap(layer_state_t state) {
+    ML_LED_1(0);
+    ML_LED_2(0);
+    ML_LED_3(0);
+    ML_LED_4(0);
+    ML_LED_5(0);
+    ML_LED_6(0);
+    state = update_tri_layer_state(state, _GAME, _LOWER, _GAME_LOWER);
+    switch (get_highest_layer(state)) {
+        case 1:
+            ML_LED_1(1);
+            ML_LED_4(1);
+            break;
+        case 2:
+            ML_LED_2(1);
+            ML_LED_5(1);
+            break;
+        case 3:
+            ML_LED_3(1);
+            break;
+        case 4:
+            ML_LED_4(1);
+            break;
+        case 5:
+            ML_LED_5(1);
+            break;
+        case 6:
+            ML_LED_6(1);
+            break;
+        default:
+            break;
+    }
+
+    return state;
+}

+ 3 - 0
keyboards/moonlander/keymaps/jjerrell/readme.md

@@ -0,0 +1,3 @@
+# Jacob Jerrell's Moonlander Keymap
+
+Concrete proof and acceptance of a problem. There is some not so custom Moonlander LED control in here but everything else is implemented in [my userspace](../../../../users/jjerrell/).

+ 1 - 0
keyboards/moonlander/keymaps/jjerrell/rules.mk

@@ -0,0 +1 @@
+AUDIO_ENABLE = yes

+ 38 - 0
keyboards/peej/tripel/config.h

@@ -0,0 +1,38 @@
+/*
+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       0x706A
+#define PRODUCT_ID      0x0001
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    Peej
+#define PRODUCT         Tripel
+
+/* key matrix size */
+#define MATRIX_ROWS 9
+#define MATRIX_COLS 8
+#define MATRIX_ROW_PINS { C6, D4, D0, B4, E6, D7, D1, D2, D3 }
+#define MATRIX_COL_PINS { B5, B6, B2, B3, B1, F7, F6, F5 }
+#define UNUSED_PINS { F4 }
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5

+ 82 - 0
keyboards/peej/tripel/info.json

@@ -0,0 +1,82 @@
+{
+    "keyboard_name": "Tripel",
+    "url": "https://github.com/peej/tripel-keyboard",
+    "maintainer": "Peej",
+    "width": 15,
+    "height": 5,
+    "layouts": {
+        "LAYOUT_ortho_7u": {
+            "layout": [
+                { "x":0, "y":0 },
+                { "x":1, "y":0 },
+                { "x":2, "y":0 },
+                { "x":3, "y":0 },
+                { "x":4, "y":0 },
+                { "x":5, "y":0 },
+                { "x":6, "y":0 },
+                { "x":7, "y":0 },
+                { "x":8, "y":0 },
+                { "x":9, "y":0 },
+                { "x":10, "y":0 },
+                { "x":11, "y":0 },
+                { "x":12, "y":0 },
+                { "x":13, "y":0 },
+                { "x":14, "y":0 },
+                { "x":0, "y":1 },
+                { "x":1, "y":1 },
+                { "x":2, "y":1 },
+                { "x":3, "y":1 },
+                { "x":4, "y":1 },
+                { "x":5, "y":1 },
+                { "x":6, "y":1 },
+                { "x":7, "y":1 },
+                { "x":8, "y":1 },
+                { "x":9, "y":1 },
+                { "x":10, "y":1 },
+                { "x":11, "y":1 },
+                { "x":12, "y":1 },
+                { "x":13, "y":1 },
+                { "x":14, "y":1 },
+                { "x":0, "y":2 },
+                { "x":1, "y":2 },
+                { "x":2, "y":2 },
+                { "x":3, "y":2 },
+                { "x":4, "y":2 },
+                { "x":5, "y":2 },
+                { "x":6, "y":2 },
+                { "x":7, "y":2 },
+                { "x":8, "y":2 },
+                { "x":9, "y":2 },
+                { "x":10, "y":2 },
+                { "x":11, "y":2 },
+                { "x":12, "y":2 },
+                { "x":13, "y":2 },
+                { "x":14, "y":2 },
+                { "x":0, "y":3 },
+                { "x":1, "y":3 },
+                { "x":2, "y":3 },
+                { "x":3, "y":3 },
+                { "x":4, "y":3 },
+                { "x":5, "y":3 },
+                { "x":6, "y":3 },
+                { "x":7, "y":3 },
+                { "x":8, "y":3 },
+                { "x":9, "y":3 },
+                { "x":10, "y":3 },
+                { "x":11, "y":3 },
+                { "x":12, "y":3 },
+                { "x":13, "y":3 },
+                { "x":14, "y":3 },
+                { "x":0, "y":4 },
+                { "x":1, "y":4 },
+                { "x":2, "y":4 },
+                { "x":3, "y":4 },
+                { "x":7, "y":4, "w":7 },
+                { "x":11, "y":4 },
+                { "x":12, "y":4 },
+                { "x":13, "y":4 },
+                { "x":14, "y":4 }
+            ]
+        }
+    }
+}

+ 54 - 0
keyboards/peej/tripel/keymaps/default/keymap.c

@@ -0,0 +1,54 @@
+/*
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+// Layer shorthand
+enum layer {
+  _BASE,
+  _FN,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/*
+ * ,-----------------------------------------------------------------------------------------------------------------------.
+ * | Gesc  |   1   |   2   |   3   |   4   |   5   |   -   |  Num  |   =   |   6   |   7   |   8   |   9   |   0   | Bksp  |
+ * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
+ * |  Tab  |   Q   |   W   |   E   |   R   |   T   |   7   |   8   |   9   |   Y   |   U   |   I   |   O   |   P   |  Del  |
+ * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
+ * | Ctrl  |   A   |   S   |   D   |   F   |   G   |   4   |   5   |   6   |   H   |   J   |   K   |   L   |   ;   |   '   |
+ * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
+ * | Shift |   Z   |   X   |   C   |   V   |   B   |   1   |   2   |   3   |   N   |   M   |   ,   |   .   |   /   | Enter |
+ * |-------+-------+---------------------------------------------------------------------------------------+-------+-------|
+ * | Ctrl  |  Fn   |  Alt  |  Cmd  |                         Space                         | Left  | Down  |  Up   | Right |
+ * `-----------------------------------------------------------------------------------------------------------------------'
+ */
+ [_BASE] = LAYOUT_ortho_7u(
+  KC_GESC, KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_MINS, KC_NLCK, KC_EQL,  KC_6,   KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC,
+  KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_P7,   KC_P8,   KC_P9,   KC_Y,   KC_U,    KC_I,    KC_O,    KC_P,    KC_DEL,
+  KC_LCTL, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_P4,   KC_P5,   KC_P6,   KC_H,   KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,
+  KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_P1,   KC_P2,   KC_P3,   KC_N,   KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT,
+  KC_LCTL, MO(_FN), KC_LALT, KC_LGUI,                            KC_SPC,                            KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT
+ ),
+
+ [_FN] = LAYOUT_ortho_7u(
+  _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F11,  KC_F12,  KC_F13,  KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_DEL,
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, _______,
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+  _______, _______, _______, _______,                            _______,                            _______, _______, _______, _______
+ )
+};

+ 50 - 0
keyboards/peej/tripel/keymaps/via/keymap.c

@@ -0,0 +1,50 @@
+/* Copyright 2021 Paul James
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[0] = LAYOUT_ortho_7u(
+    KC_GESC, KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_MINS, KC_NLCK, KC_EQL,  KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC,
+    KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_P7,   KC_P8,   KC_P9,   KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_DEL,
+    KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_P4,   KC_P5,   KC_P6,   KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,
+    KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_P1,   KC_P2,   KC_P3,   KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT,
+    KC_LCTL, MO(1),   KC_LALT, KC_LGUI,                            KC_SPC,                             KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT
+),
+[1] = LAYOUT_ortho_7u(
+    _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F11,  KC_F12,  KC_F13,  KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_DEL,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______,                            _______,                            _______, _______, _______, _______
+),
+[2] = LAYOUT_ortho_7u(
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______,                            _______,                            _______, _______, _______, _______
+),
+[3] = LAYOUT_ortho_7u(
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______,                            _______,                            _______, _______, _______, _______
+)
+
+};

+ 1 - 0
keyboards/peej/tripel/keymaps/via/rules.mk

@@ -0,0 +1 @@
+VIA_ENABLE = yes

+ 38 - 0
keyboards/peej/tripel/left/left.h

@@ -0,0 +1,38 @@
+/* Copyright 2021 Paul James
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT_ortho_7u( \
+    l11, l12, l13, l14, l15, m11, m12, m13, m14, m15, r11, r12, r13, r14, r15, \
+    l21, l22, l23, l24, l25, m21, m22, m23, m24, m25, r21, r22, r23, r24, r25, \
+    l31, l32, l33, l34, l35, m31, m32, m33, m34, m35, r31, r32, r33, r34, r35, \
+    l41, l42, l43, l44, l45, m41, m42, m43, m44, m45, r41, r42, r43, r44, r45, \
+    l51, l52, l53, l54,                m53,                r52, r53, r54, r51  \
+) \
+{ \
+    { r11, r12, r13, r14, r15, r25, r35, r45 }, \
+    { r21, r22, r23, r24, r34, r44, r53, r54 }, \
+    { r31, r32, r33, r43, r42, r41, r51, r52 }, \
+    { l11, l12, l13, l14, l15, l25, l35, l45 }, \
+    { l21, l22, l23, l24, l34, l44, l53, l54 }, \
+    { l31, l32, l33, l43, l42, l41, l51, l52 }, \
+    { m11, m12, m13, m14, m15, m25, m35, m45 }, \
+    { m21, m22, m23, m24, m34, m44, m53, KC_NO }, \
+    { m31, m32, m33, m43, m42, m41, KC_NO, KC_NO } \
+}

+ 21 - 0
keyboards/peej/tripel/left/readme.md

@@ -0,0 +1,21 @@
+# Tripel
+## Sub-100x100mm modula 60% ortholinear 7u PCB
+
+![tripel](https://github.com/peej/tripel-keyboard/raw/master/images/3pcbs.jpg)
+
+15x5 ortholinear PCB for 60% tray mount cases using only prototype sized PCBs.
+
+This revision is for when the Pro-Micro is mounted on the left most PCB.
+
+* Keyboard Maintainer: [Paul James](https://github.com/peej)
+* Hardware Supported: Pro-Micro [PCB](https://github.com/peej/tripel-keyboard)
+
+Make example for this keyboard (after setting up your build environment):
+
+    make peej/tripel/left:default
+
+Flashing example for this keyboard:
+
+    make peej/tripel/left:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).

+ 1 - 0
keyboards/peej/tripel/left/rules.mk

@@ -0,0 +1 @@
+# This file intentionally left blank

+ 38 - 0
keyboards/peej/tripel/middle/middle.h

@@ -0,0 +1,38 @@
+/* Copyright 2021 Paul James
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT_ortho_7u( \
+    l11, l12, l13, l14, l15, m11, m12, m13, m14, m15, r11, r12, r13, r14, r15, \
+    l21, l22, l23, l24, l25, m21, m22, m23, m24, m25, r21, r22, r23, r24, r25, \
+    l31, l32, l33, l34, l35, m31, m32, m33, m34, m35, r31, r32, r33, r34, r35, \
+    l41, l42, l43, l44, l45, m41, m42, m43, m44, m45, r41, r42, r43, r44, r45, \
+    l51, l52, l53, l54,                m53,                r52, r53, r54, r51  \
+) \
+{ \
+    { l11, l12, l13, l14, l15, l25, l35, l45 }, \
+    { l21, l22, l23, l24, l34, l44, l53, l54 }, \
+    { l31, l32, l33, l43, l42, l41, l51, l52 }, \
+    { m11, m12, m13, m14, m15, m25, m35, m45 }, \
+    { m21, m22, m23, m24, m34, m44, m53, KC_NO }, \
+    { m31, m32, m33, m43, m42, m41, KC_NO, KC_NO }, \
+    { r11, r12, r13, r14, r15, r25, r35, r45 }, \
+    { r21, r22, r23, r24, r34, r44, r53, r54 }, \
+    { r31, r32, r33, r43, r42, r41, r51, r52 } \
+}

+ 21 - 0
keyboards/peej/tripel/middle/readme.md

@@ -0,0 +1,21 @@
+# Tripel
+## Sub-100x100mm modula 60% ortholinear 7u PCB
+
+![tripel](https://github.com/peej/tripel-keyboard/raw/master/images/3pcbs.jpg)
+
+15x5 ortholinear PCB for 60% tray mount cases using only prototype sized PCBs.
+
+This revision is for when the Pro-Micro is mounted on the middle PCB.
+
+* Keyboard Maintainer: [Paul James](https://github.com/peej)
+* Hardware Supported: Pro-Micro [PCB](https://github.com/peej/tripel-keyboard)
+
+Make example for this keyboard (after setting up your build environment):
+
+    make peej/tripel/middle:default
+
+Flashing example for this keyboard:
+
+    make peej/tripel/middle:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).

+ 1 - 0
keyboards/peej/tripel/middle/rules.mk

@@ -0,0 +1 @@
+# This file intentionally left blank

+ 21 - 0
keyboards/peej/tripel/right/readme.md

@@ -0,0 +1,21 @@
+# Tripel
+## Sub-100x100mm modula 60% ortholinear 7u PCB
+
+![tripel](https://github.com/peej/tripel-keyboard/raw/master/images/3pcbs.jpg)
+
+15x5 ortholinear PCB for 60% tray mount cases using only prototype sized PCBs.
+
+This revision is for when the Pro-Micro is mounted on the right most PCB.
+
+* Keyboard Maintainer: [Paul James](https://github.com/peej)
+* Hardware Supported: Pro-Micro [PCB](https://github.com/peej/tripel-keyboard)
+
+Make example for this keyboard (after setting up your build environment):
+
+    make peej/tripel/right:default
+
+Flashing example for this keyboard:
+
+    make peej/tripel/right:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).

+ 38 - 0
keyboards/peej/tripel/right/right.h

@@ -0,0 +1,38 @@
+/* Copyright 2021 Paul James
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT_ortho_7u( \
+    l11, l12, l13, l14, l15, m11, m12, m13, m14, m15, r11, r12, r13, r14, r15, \
+    l21, l22, l23, l24, l25, m21, m22, m23, m24, m25, r21, r22, r23, r24, r25, \
+    l31, l32, l33, l34, l35, m31, m32, m33, m34, m35, r31, r32, r33, r34, r35, \
+    l41, l42, l43, l44, l45, m41, m42, m43, m44, m45, r41, r42, r43, r44, r45, \
+    l51, l52, l53, l54,                m53,                r52, r53, r54, r51  \
+) \
+{ \
+    { m11, m12, m13, m14, m15, m25, m35, m45 }, \
+    { m21, m22, m23, m24, m34, m44, m53, KC_NO }, \
+    { m31, m32, m33, m43, m42, m41, KC_NO, KC_NO }, \
+    { r11, r12, r13, r14, r15, r25, r35, r45 }, \
+    { r21, r22, r23, r24, r34, r44, r53, r54 }, \
+    { r31, r32, r33, r43, r42, r41, r51, r52 }, \
+    { l11, l12, l13, l14, l15, l25, l35, l45 }, \
+    { l21, l22, l23, l24, l34, l44, l53, l54 }, \
+    { l31, l32, l33, l43, l42, l41, l51, l52 } \
+}

+ 1 - 0
keyboards/peej/tripel/right/rules.mk

@@ -0,0 +1 @@
+# This file intentionally left blank

+ 24 - 0
keyboards/peej/tripel/rules.mk

@@ -0,0 +1,24 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no        # Mouse keys
+EXTRAKEY_ENABLE = yes       # Audio control and System control
+CONSOLE_ENABLE = no         # Console for debug
+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 = yes           # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no       # Enable Bluetooth
+AUDIO_ENABLE = no           # Audio output
+
+DEFAULT_FOLDER = peej/tripel/left

+ 33 - 0
keyboards/planck/keymaps/kuatsure/config.h

@@ -0,0 +1,33 @@
+/* Copyright 2020 kuatsure
+  *
+  * 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
+
+#ifdef AUDIO_ENABLE
+    #define STARTUP_SONG SONG(PLANCK_SOUND)
+    // #define STARTUP_SONG SONG(NO_SOUND)
+
+    #define GAME_SOUND DVORAK_SOUND
+
+    #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
+                                  SONG(GAME_SOUND) \
+                                }
+#endif
+
+#define MIDI_BASIC
+
+// Most tactile encoders have detents every 4 stages
+#define ENCODER_RESOLUTION 4

+ 318 - 0
keyboards/planck/keymaps/kuatsure/keymap.c

@@ -0,0 +1,318 @@
+/* Copyright 2015-2017 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/>.
+ */
+
+#include QMK_KEYBOARD_H
+#include "muse.h"
+#include "kuatsure.h"
+
+#define LAYOUT_planck_grid_wrapper(...)   LAYOUT_planck_grid(__VA_ARGS__)
+
+enum planck_layers {
+  _QWERTY,
+  _GAME,
+  _GAME_LOWER,
+  _GAME_RAISE,
+  _MOUSE,
+  _LOWER,
+  _RAISE,
+  _ADJUST
+};
+
+enum planck_keycodes {
+  QWERTY = USER_SAFE_RANGE,
+  GAME,
+};
+
+#define LOWER   MO(_LOWER)
+#define RAISE   MO(_RAISE)
+#define MOUSE   TG(_MOUSE)
+#define G_LOWER MO(_GAME_LOWER)
+#define G_RAISE MO(_GAME_RAISE)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab/M|   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc/C|   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |  '   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  | Ent  |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Mute | Ldr  | Alt  | GUI  |Lower |  RSE |     SPC     | Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT_planck_grid_wrapper(
+    KT_MTAB, _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_BSPC,
+    KT_CESC, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_QUOT,
+    KT_LSFT, _________________QWERTY_L3_________________, _________________QWERTY_R3_________________, KC_ENT,
+    KC_MPLY, KC_LEAD, KC_LALT, KC_LGUI, LOWER,     RAISE, KC_SPC, KC_SPC,     KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * |      |   !  |   &  |  Up  |      |   `  |      |   {  |   }  |  _   |      |  |   |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      | Del  | Left | Down | Right|   ~  |   =  |   (  |   )  |  +   |  :   |  "   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      | VolD | Prev | Play | Next | VolU |   -  |   [  |   ]  |      |  ?   |Mouse |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      | Home | PgDn | PgUp | End  |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_planck_grid_wrapper(
+    _______, KC_EXLM, KC_AMPR, KC_UP,   _______,  KC_GRV,  _______, ____CRBRACES____, KC_UNDS, _______, KC_PIPE,
+    _______, KC_DEL,  KC_LEFT, KC_DOWN, KC_RIGHT, KC_TILD, KC_EQL,  _____PARENS_____, KC_PLUS, KC_COLN, KC_DQT ,
+    _______, KC_VOLD, KC_MPRV, KC_MPLY, KC_MNXT,  KC_VOLU, KC_MINS, ___SQBRACKETS___, _______, KC_QUES, MOUSE  ,
+    _______, _______, _______, _______, _______,  _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * |      |  F9  |  F10 |  F11 |  F12 |      |  *   |  7   |  8   |  9   |  0   |  \   |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |  F5  |  F6  |  F7  |  F8  |      |  =   |  4   |  5   |  6   |  +   |      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |  F1  |  F2  |  F3  |  F4  |      |  -   |  1   |  2   |  3   |  /   |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |  0   |  0   |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_planck_grid_wrapper(
+    _______, ____________FUNCTION_3____________, _______, KC_ASTR, KC_7,    KC_8,    KC_9,    KC_0,     KC_BSLS,
+    _______, ____________FUNCTION_2____________, _______, KC_EQL,  KC_4,    KC_5,    KC_6,    KC_PLUS,  _______,
+    _______, ____________FUNCTION_1____________, _______, KC_MINS, KC_1,    KC_2,    KC_3,    KC_SLASH, _______,
+    _______, _______, _______, _______, _______, _______, _______, KC_0,    KC_0,    _______, _______,  _______
+),
+
+/* Mouse
+ * ,-----------------------------------------------------------------------------------.
+ * |      |      | Btn1 | mUP  | Btn2 |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      | mLEFT| mDWN | mRGHT|      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      | Btn3 | Btn4 | Btn5 |      |      |      |      |      |      |Mouse |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_MOUSE] = LAYOUT_planck_grid_wrapper(
+    _______, _______, KC_BTN1, KC_MS_U, KC_BTN2, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, KC_BTN3, KC_BTN4, KC_BTN5, _______, _______, _______, _______, _______, _______, MOUSE  ,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * |      | MAKE | FLSH |      |      |      |      |      |      |      |      |  Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      | RESET| DEBUG|      |      |Aud on|AudOff| Game |Mouse |      |      |      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      | VRSN |      |      |MusMod|Mus on|MusOff|      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_planck_grid_wrapper(
+    _______, KB_MAKE, KB_FLSH, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL,
+    _______, RESET,   DEBUG,   _______, _______, AU_ON,   AU_OFF,  GAME,    MOUSE,   _______, _______, _______,
+    _______, KB_VRSN, _______, _______, MU_MOD,  MU_ON,   MU_OFF,  _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+/* Game
+ *
+ * Mostly transparent, but wanted to disable gui key.
+ * Also give a key to get back to qwerty layout.
+ *
+ * Disabling the `Controlled ESC` key is also plus.
+ * Think BDO / Monster Hunter / D2
+ *
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Ctrl |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shft |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |Qwerty| F14  | Spc  | gLWR | gRSE |     ESC     |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_GAME] = LAYOUT_planck_grid_wrapper(
+    KC_TAB,  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    KC_LCTL, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    KC_LSFT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, QWERTY,  KC_F14,  KC_SPC,  G_LOWER, G_RAISE, KC_ESC,  KC_ESC,  _______, _______, _______, _______
+),
+
+/* Game Lower
+ * ,-----------------------------------------------------------------------------------.
+ * |      |   1  |   2  |   3  |   4  |   `  |      |  F9  |  F10 |  F11 |  F12 |      |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |   5  |   6  |   7  |   8  |      |      |  F5  |  F6  |  F7  |  F8  |      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |   9  |   0  |   -  |   =  |      |      |  F1  |  F2  |  F3  |  F4  |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_GAME_LOWER] = LAYOUT_planck_grid_wrapper(
+    _______, KC_1,    KC_2,    KC_3,    KC_4,    KC_GRV,  _______, ____________FUNCTION_3____________, _______,
+    _______, KC_5,    KC_6,    KC_7,    KC_8,    _______, _______, ____________FUNCTION_2____________, _______,
+    _______, KC_9,    KC_0,    KC_MINS, KC_EQL,  _______, _______, ____________FUNCTION_1____________, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+/* Game Raise
+ * ,-----------------------------------------------------------------------------------.
+ * |      |  p7  |  p8  |  p9  |  p0  |   `  |      |  F9  |  F10 |  F11 |  F12 |      |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |  p4  |  p5  |  p6  |  p+  |      |      |  F5  |  F6  |  F7  |  F8  |      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |  p1  |  p2  |  p3  |  pE  |      |      |  F1  |  F2  |  F3  |  F4  |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_GAME_RAISE] = LAYOUT_planck_grid_wrapper(
+    _______, KC_P7,   KC_P8,   KC_P9,   KC_P0,   KC_GRV,  _______, ____________FUNCTION_3____________, _______,
+    _______, KC_P4,   KC_P5,   KC_P6,   KC_PPLS, _______, _______, ____________FUNCTION_2____________, _______,
+    _______, KC_P1,   KC_P2,   KC_P3,   KC_PENT, _______, _______, ____________FUNCTION_1____________, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+};
+
+#ifdef AUDIO_ENABLE
+  float plover_song[][2]     = SONG(PLOVER_SOUND);
+  float plover_gb_song[][2]  = SONG(PLOVER_GOODBYE_SOUND);
+#endif
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+  return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case QWERTY:
+      if (record->event.pressed) {
+        print("mode just switched to qwerty and this is a huge string\n");
+        set_single_persistent_default_layer(_QWERTY);
+      }
+      return false;
+      break;
+
+    case GAME:
+      if (record->event.pressed) {
+        set_single_persistent_default_layer(_GAME);
+      }
+      return false;
+      break;
+  }
+  return true;
+}
+
+bool muse_mode = false;
+uint8_t last_muse_note = 0;
+uint16_t muse_counter = 0;
+uint8_t muse_offset = 70;
+uint16_t muse_tempo = 50;
+
+void encoder_update(bool clockwise) {
+  if (muse_mode) {
+    if (IS_LAYER_ON(_RAISE)) {
+      if (clockwise) {
+        muse_offset++;
+      } else {
+        muse_offset--;
+      }
+    } else {
+      if (clockwise) {
+        muse_tempo+=1;
+      } else {
+        muse_tempo-=1;
+      }
+    }
+  } else {
+    if (clockwise) {
+      if (IS_LAYER_ON(_MOUSE)) {
+        tap_code(KC_MS_WH_UP);
+      } else {
+        tap_code(KC_VOLU);
+      }
+    } else {
+      if (IS_LAYER_ON(_MOUSE)) {
+        tap_code(KC_MS_WH_DOWN);
+      } else {
+        tap_code(KC_VOLD);
+      }
+    }
+  }
+}
+
+void dip_update(uint8_t index, bool active) {
+  switch (index) {
+    case 0:
+      if (active) {
+        #ifdef AUDIO_ENABLE
+          PLAY_SONG(plover_song);
+        #endif
+        layer_on(_ADJUST);
+      } else {
+        #ifdef AUDIO_ENABLE
+          PLAY_SONG(plover_gb_song);
+        #endif
+        layer_off(_ADJUST);
+      }
+      break;
+    case 1:
+      if (active) {
+        muse_mode = true;
+      } else {
+        muse_mode = false;
+        #ifdef AUDIO_ENABLE
+          stop_all_notes();
+        #endif
+      }
+   }
+}
+
+void matrix_scan_keymap(void) {
+  #ifdef AUDIO_ENABLE
+    if (muse_mode) {
+      if (muse_counter == 0) {
+        uint8_t muse_note = muse_offset + SCALE[muse_clock_pulse()];
+        if (muse_note != last_muse_note) {
+          stop_note(compute_freq_for_midi_note(last_muse_note));
+          play_note(compute_freq_for_midi_note(muse_note), 0xF);
+          last_muse_note = muse_note;
+        }
+      }
+      muse_counter = (muse_counter + 1) % muse_tempo;
+    }
+  #endif
+}
+
+bool music_mask_user(uint16_t keycode) {
+  switch (keycode) {
+    case RAISE:
+    case LOWER:
+      return false;
+    default:
+      return true;
+  }
+}

+ 1 - 0
keyboards/planck/keymaps/kuatsure/readme.md

@@ -0,0 +1 @@
+# The kuatsure Planck layout - largely based on the Preonic's & Keyboard Paradise V60's layout

+ 6 - 0
keyboards/planck/keymaps/kuatsure/rules.mk

@@ -0,0 +1,6 @@
+SRC += muse.c
+
+BACKLIGHT_ENABLE  = no
+LEADER_ENABLE = yes
+ENCODER_ENABLE = yes
+MOUSEKEY_ENABLE = yes

+ 2 - 0
keyboards/preonic/keymaps/kuatsure/keymap.c

@@ -17,6 +17,8 @@
 #include QMK_KEYBOARD_H
 #include "kuatsure.h"
 
+#define LAYOUT_preonic_grid_wrapper(...)   LAYOUT_preonic_grid(__VA_ARGS__)
+
 enum preonic_layers {
   _QWERTY,
   _GAME,

+ 110 - 0
keyboards/spacey/config.h

@@ -0,0 +1,110 @@
+/*
+Copyright 2021 vanilla
+
+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    0xFEED
+#define PRODUCT_ID   0x0000
+#define DEVICE_VER   0x0001
+#define MANUFACTURER vanilla
+#define PRODUCT      spacey
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+
+#define ENCODERS_PAD_A { D0 }
+#define ENCODERS_PAD_B { D1 }
+#define ENCODER_RESOLUTION 4
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ */
+#define MATRIX_ROW_PINS { D4, C6, F6, F5, F4 }
+#define MATRIX_COL_PINS { D5, B7, B5, B4, E6, D7, C7, B3, B2, B6, F0, F1, B1, F7 }
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+
+/*
+ * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
+ */
+#define SOFT_SERIAL_PIN D0  // or D1, D2, D3, E6
+
+//#define LED_NUM_LOCK_PIN B0
+//#define LED_CAPS_LOCK_PIN B1
+//#define LED_SCROLL_LOCK_PIN B2
+//#define LED_COMPOSE_PIN B3
+//#define LED_KANA_PIN B4
+
+//#define BACKLIGHT_PIN B7
+//#define BACKLIGHT_LEVELS 3
+//#define BACKLIGHT_BREATHING
+
+//#define RGB_DI_PIN E2
+//#ifdef RGB_DI_PIN
+//#    define RGBLED_NUM 16
+//#    define RGBLIGHT_HUE_STEP 8
+//#    define RGBLIGHT_SAT_STEP 8
+//#    define RGBLIGHT_VAL_STEP 8
+//#    define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
+//#    define RGBLIGHT_SLEEP  /* If defined, the RGB lighting will be switched off when the host goes to sleep */
+/*== all animations enable ==*/
+//#    define RGBLIGHT_ANIMATIONS
+/*== or choose animations ==*/
+//#    define RGBLIGHT_EFFECT_BREATHING
+//#    define RGBLIGHT_EFFECT_RAINBOW_MOOD
+//#    define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+//#    define RGBLIGHT_EFFECT_SNAKE
+//#    define RGBLIGHT_EFFECT_KNIGHT
+//#    define RGBLIGHT_EFFECT_CHRISTMAS
+//#    define RGBLIGHT_EFFECT_STATIC_GRADIENT
+//#    define RGBLIGHT_EFFECT_RGB_TEST
+//#    define RGBLIGHT_EFFECT_ALTERNATING
+/*== customize breathing effect ==*/
+/*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
+//#    define RGBLIGHT_BREATHE_TABLE_SIZE 256      // 256(default) or 128 or 64
+/*==== use exp() and sin() ====*/
+//#    define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85  // 1 to 2.7
+//#    define RGBLIGHT_EFFECT_BREATHE_MAX    255   // 0 to 255
+//#endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+
+/* disable these deprecated features by default */
+#define NO_ACTION_MACRO
+#define NO_ACTION_FUNCTION
+
+/* Bootmagic Lite key configuration */
+//#define BOOTMAGIC_LITE_ROW 0
+//#define BOOTMAGIC_LITE_COLUMN 0

+ 87 - 0
keyboards/spacey/info.json

@@ -0,0 +1,87 @@
+{
+    "keyboard_name": "spacey",
+    "url": "",
+    "maintainer": "vanilla",
+    "width": 14,
+    "height": 5,
+    "layouts": {
+        "LAYOUT": {
+            "layout": [
+                {"label":"k00", "x":0, "y":0},
+                {"label":"k01", "x":1, "y":0},
+                {"label":"k02", "x":2, "y":0},
+                {"label":"k03", "x":3, "y":0},
+                {"label":"k04", "x":4, "y":0},
+                {"label":"k05", "x":5, "y":0},
+                {"label":"k06", "x":6, "y":0},
+                {"label":"k07", "x":7, "y":0},
+                {"label":"k08", "x":8, "y":0},
+                {"label":"k09", "x":9, "y":0},
+                {"label":"k0A", "x":10, "y":0},
+                {"label":"k0B", "x":11, "y":0},
+                {"label":"k0C", "x":12, "y":0},
+                {"label":"k0D", "x":13, "y":0},
+
+                {"label":"k10", "x":0, "y":1},
+                {"label":"k11", "x":1, "y":1},
+                {"label":"k12", "x":2, "y":1},
+                {"label":"k13", "x":3, "y":1},
+                {"label":"k14", "x":4, "y":1},
+                {"label":"k15", "x":5, "y":1},
+                {"label":"k16", "x":6, "y":1},
+                {"label":"k17", "x":7, "y":1},
+                {"label":"k18", "x":8, "y":1},
+                {"label":"k19", "x":9, "y":1},
+                {"label":"k1A", "x":10, "y":1},
+                {"label":"k1B", "x":11, "y":1},
+                {"label":"k1C", "x":12, "y":1},
+                {"label":"k1D", "x":13, "y":1},
+
+                {"label":"k20", "x":0, "y":2},
+                {"label":"k21", "x":1, "y":2},
+                {"label":"k22", "x":2, "y":2},
+                {"label":"k23", "x":3, "y":2},
+                {"label":"k24", "x":4, "y":2},
+                {"label":"k25", "x":5, "y":2},
+                {"label":"k26", "x":6, "y":2},
+                {"label":"k27", "x":7, "y":2},
+                {"label":"k28", "x":8, "y":2},
+                {"label":"k29", "x":9, "y":2},
+                {"label":"k2A", "x":10, "y":2},
+                {"label":"k2B", "x":11, "y":2},
+                {"label":"k2C", "x":12, "y":2},
+                {"label":"k2D", "x":13, "y":2},
+
+                {"label":"k30", "x":0, "y":3},
+                {"label":"k31", "x":1, "y":3},
+                {"label":"k32", "x":2, "y":3},
+                {"label":"k33", "x":3, "y":3},
+                {"label":"k34", "x":4, "y":3},
+                {"label":"k35", "x":5, "y":3},
+                {"label":"k36", "x":6, "y":3},
+                {"label":"k37", "x":7, "y":3},
+                {"label":"k38", "x":8, "y":3},
+                {"label":"k39", "x":9, "y":3},
+                {"label":"k3A", "x":10, "y":3},
+                {"label":"k3B", "x":11, "y":3},
+                {"label":"k3C", "x":12, "y":3},
+                {"label":"k3D", "x":13, "y":3},
+
+                {"label":"k40", "x":0, "y":4},
+                {"label":"k41", "x":1, "y":4},
+                {"label":"k42", "x":2, "y":4},
+                {"label":"k43", "x":3, "y":4},
+                {"label":"k44", "x":4, "y":4},
+                {"label":"k45", "x":5, "y":4},
+               
+                {"label":"k47", "x":7, "y":4},
+                {"label":"k48", "x":8, "y":4},
+                
+                {"label":"k4A", "x":10, "y":4},
+                {"label":"k4B", "x":11, "y":4},
+                {"label":"k4C", "x":12, "y":4},
+                {"label":"k4D", "x":13, "y":4}
+            ]
+        }
+    }
+}

+ 47 - 0
keyboards/spacey/keymaps/default/keymap.c

@@ -0,0 +1,47 @@
+/* Copyright 2021 vanilla
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+#define FN MO(_FN)
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+    _BASE = 0,
+    _FN
+};
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+    QMKBEST = SAFE_RANGE,
+    QMKURL
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    /* Base */
+    [_BASE] = LAYOUT(
+        KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+        KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+        KC_CLCK,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_UP,
+        KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT,KC_SLSH,KC_RSFT, KC_LEFT, KC_DOWN,
+        KC_LCTL, KC_LGUI, FN, KC_MUTE, KC_LALT, KC_SPC,  KC_NO, KC_BSPC, KC_DEL, KC_NO,  KC_RALT, KC_RGUI, KC_RCTL, KC_RGHT
+    ),
+    [_FN] = LAYOUT(
+        KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC,
+        KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_DEL,
+        KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_ENT, KC_MS_U,
+        KC_LSFT,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_COMM,KC_DOT,KC_SLSH,KC_RSFT, KC_MS_L, KC_MS_D,
+        KC_LCTL, KC_LGUI, KC_NO, KC_ESC, KC_LALT, KC_SPC,  KC_NO,  KC_BSPC,   KC_RALT, KC_NO,     KC_APP, KC_RGUI, KC_RCTL, KC_MS_R
+    )
+};

+ 1 - 0
keyboards/spacey/keymaps/default/readme.md

@@ -0,0 +1 @@
+# The default keymap for spacey

+ 19 - 0
keyboards/spacey/readme.md

@@ -0,0 +1,19 @@
+# spacey
+
+![spacey](https://i.imgur.com/Dzon2hbh.jpeg)
+
+Spacey, designed by Vanilla Keyboards is a 45/65% keyboard with a little personality. Hosting ortholinear alphas with traditional modifiers, diamond shaped arrows, rotary encoder, and a couple optional spacebars at the top of the board, it's a balance between functional and unique.
+
+* Keyboard Maintainer: [vanilla](https://github.com/vanillakeyboards)
+* Hardware Supported: Elite C, Spacey PCB plates and acrylic drop_in case
+* Hardware Availability: https://p3dstore.com/collections/ended-group-buys/products/spacey?variant=37742593147064 and https://keeb.io/products/elite-c-low-profile-version-usb-c-pro-micro-replacement-atmega32u4
+
+Make example for this keyboard (after setting up your build environment):
+
+    make spacey:default
+
+Flashing example for this keyboard:
+
+    make spacey:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).

+ 23 - 0
keyboards/spacey/rules.mk

@@ -0,0 +1,23 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite     # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes       # Mouse keys
+EXTRAKEY_ENABLE = yes       # Audio control and System control
+CONSOLE_ENABLE = no         # Console for debug
+COMMAND_ENABLE = no         # Commands for debug and configuration
+# 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 = no       # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no       # Enable Bluetooth
+AUDIO_ENABLE = no           # Audio output
+ENCODER_ENABLE = yes

+ 29 - 0
keyboards/spacey/spacey.c

@@ -0,0 +1,29 @@
+/* Copyright 2021 vanilla
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "spacey.h"
+
+bool encoder_update_kb(uint8_t index, bool clockwise){
+    if (!encoder_update_user(index, clockwise)) { return false; }
+    if (index == 0) {
+        if(clockwise) {
+            tap_code(KC_VOLD);
+        } else {
+            tap_code(KC_VOLU);
+        }
+    }
+    return true;
+} 

+ 41 - 0
keyboards/spacey/spacey.h

@@ -0,0 +1,41 @@
+/* Copyright 2021 vanilla
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "quantum.h"
+
+/* This is a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+#define LAYOUT( \
+    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, \
+    k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, \
+    k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, \
+    k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, \
+    k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D \
+) { \
+    {     k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D }, \
+    {     k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D }, \
+    {     k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D }, \
+    {     k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D }, \
+    {     k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D } \
+}

+ 67 - 19
keyboards/ungodly/launch_pad/config.h

@@ -18,30 +18,35 @@
 #include "config_common.h"
 
 /* USB Device descriptor parameter */
-#define VENDOR_ID       0x5544 // "UD" = Ungodly Design
-#define PRODUCT_ID      0x4C50 // "LP" = Launch Pad
-#define DEVICE_VER      0x9999
-#define MANUFACTURER    Ungodly Design
-#define PRODUCT         Launch Pad
+#define VENDOR_ID 0x5544   // "UD" = Ungodly Design
+#define PRODUCT_ID 0x4C50  // "LP" = Launch Pad
+#define DEVICE_VER 0x9999
+#define MANUFACTURER Ungodly Design
+#define PRODUCT Launch Pad
 
 /* key matrix size */
 #define MATRIX_ROWS 5
 #define MATRIX_COLS 4
 
 /* Keyboard Matrix Assignments */
-#define MATRIX_ROW_PINS { D4, D6, D7, B4, B5 }
-#define MATRIX_COL_PINS { B0, B1, B2, B3 }
+#define MATRIX_ROW_PINS \
+    { D4, D6, D7, B4, B5 }
+#define MATRIX_COL_PINS \
+    { B0, B1, B2, B3 }
 
 /* COL2ROW or ROW2COL */
 #define DIODE_DIRECTION COL2ROW
 
 /* Rotary Encoder Assignment */
-#define ENCODERS_PAD_A { C6 }
-#define ENCODERS_PAD_B { B6 }
+#define ENCODERS_PAD_A \
+    { C6 }
+#define ENCODERS_PAD_B \
+    { B6 }
 #define ENCODER_RESOLUTION 2
 
 /* Midi Slider */
 #define SLIDER_PIN F6
+#define MIDI_ADVANCED
 
 /* RGB Matrix configuration */
 #ifdef RGB_MATRIX_ENABLE
@@ -61,20 +66,63 @@
 #endif
 
 #define RGB_DI_PIN F7
-#ifdef RGB_DI_PIN
+#ifdef RGB_MATRIX_ENABLE
 #    define RGBLED_NUM 22
-#    define RGBLIGHT_HUE_STEP 8
-#    define RGBLIGHT_SAT_STEP 8
-#    define RGBLIGHT_VAL_STEP 8
-#    define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
-#    define RGBLIGHT_SLEEP         /* If defined, the RGB lighting will be switched off when the host goes to sleep */
-/*== all animations enable ==*/
-#    define RGBLIGHT_ANIMATIONS
+#    define DRIVER_LED_TOTAL RGBLED_NUM
+#    define RGB_MATRIX_KEYPRESSES  // reacts to keypresses
+// #    define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses)
+// #    define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
+#    define RGB_DISABLE_WHEN_USB_SUSPENDED true  // turn off effects when suspended
+#    define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+// #    define RGB_MATRIX_LED_PROCESS_LIMIT (DRIVER_LED_TOTAL + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness)
+// #    define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness)
+#    define RGB_MATRIX_MAXIMUM_BRIGHTNESS 50  // limits maximum brightness of LEDs to 150 out of 255. Higher may cause the controller to crash.
+#    define RGB_MATRIX_HUE_STEP 8
+#    define RGB_MATRIX_SAT_STEP 8
+#    define RGB_MATRIX_VAL_STEP 8
+#    define RGB_MATRIX_SPD_STEP 10
+#    define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_CYCLE_PINWHEEL  // default mode
+
+/* Reduce the firmware size by only enabling the rgb animations you desire. */
+#    define DISABLE_RGB_MATRIX_ALPHAS_MODS
+#    define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+#    define DISABLE_RGB_MATRIX_BREATHING
+#    define DISABLE_RGB_MATRIX_BAND_SAT
+#    define DISABLE_RGB_MATRIX_BAND_VAL
+#    define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+#    define DISABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+#    define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+#    define DISABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+#    define DISABLE_RGB_MATRIX_CYCLE_ALL
+#    define DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+#    define DISABLE_RGB_MATRIX_CYCLE_UP_DOWN
+#    define DISABLE_RGB_MATRIX_CYCLE_OUT_IN
+#    define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+#    define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+#    define DISABLE_RGB_MATRIX_DUAL_BEACON
+// #    define DISABLE_RGB_MATRIX_CYCLE_PINWHEEL
+#    define DISABLE_RGB_MATRIX_CYCLE_SPIRAL
+#    define DISABLE_RGB_MATRIX_RAINBOW_BEACON
+#    define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+#    define DISABLE_RGB_MATRIX_RAINDROPS
+#    define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+#    define DISABLE_RGB_MATRIX_TYPING_HEATMAP
+#    define DISABLE_RGB_MATRIX_DIGITAL_RAIN
+#    define DISABLE_RGB_MATRIX_SOLID_REACTIVE
+#    define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+#    define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+#    define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+#    define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+#    define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+#    define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+#    define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+#    define DISABLE_RGB_MATRIX_SPLASH
+#    define DISABLE_RGB_MATRIX_MULTISPLASH
+#    define DISABLE_RGB_MATRIX_SOLID_SPLASH
+#    define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
 #endif
 
 /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
 #define DEBOUNCE 5
 
 #define LOCKING_RESYNC_ENABLE
-
-#define MIDI_ADVANCED

+ 30 - 30
keyboards/ungodly/launch_pad/info.json

@@ -1,37 +1,37 @@
 {
-    "keyboard_name": "Launch Pad",
-    "url": "",
-    "maintainer": "luis-godinez",
-    "width": 4,
-    "height": 5,
-    "layouts": {
-        "LAYOUT_ortho_5x4": {
-            "layout": [
-                {"x":0, "y":0},
-                {"x":1, "y":0},
-                {"x":2, "y":0},
-                {"x":3, "y":0},
+  "keyboard_name": "Launch Pad",
+  "url": "https://ungodly.design/products/launch-pad",
+  "maintainer": "Ungodly Design",
+  "width": 4,
+  "height": 5,
+  "layouts": {
+    "LAYOUT_ortho_5x4": {
+        "layout": [
+            {"x":0, "y":0},
+            {"x":1, "y":0},
+            {"x":2, "y":0},
+            {"x":3, "y":0},
 
-                {"x":0, "y":1},
-                {"x":1, "y":1},
-                {"x":2, "y":1},
-                {"x":3, "y":1},
+            {"x":0, "y":1},
+            {"x":1, "y":1},
+            {"x":2, "y":1},
+            {"x":3, "y":1},
 
-                {"x":0, "y":2},
-                {"x":1, "y":2},
-                {"x":2, "y":2},
-                {"x":3, "y":2},
+            {"x":0, "y":2},
+            {"x":1, "y":2},
+            {"x":2, "y":2},
+            {"x":3, "y":2},
 
-                {"x":0, "y":3},
-                {"x":1, "y":3},
-                {"x":2, "y":3},
-                {"x":3, "y":3},
+            {"x":0, "y":3},
+            {"x":1, "y":3},
+            {"x":2, "y":3},
+            {"x":3, "y":3},
 
-                {"x":0, "y":4},
-                {"x":1, "y":4},
-                {"x":2, "y":4},
-                {"x":3, "y":4}
-            ]
-        }
+            {"x":0, "y":4},
+            {"x":1, "y":4},
+            {"x":2, "y":4},
+            {"x":3, "y":4}
+        ]
     }
+  }
 }

+ 216 - 181
keyboards/ungodly/launch_pad/keymaps/default/keymap.c

@@ -17,242 +17,277 @@
 #include "analog.h"
 #include "qmk_midi.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.
-// Layer names don't all need to be of the same length, obviously, and you can also skip them
-// entirely and just use numbers.
-enum layers {
-_BL = 0,
-_NV,
-_FN
+/* Force Numlock on */
+void matrix_init_user (void) {
+  if (!host_keyboard_led_state().num_lock) {
+      tap_code(KC_NUMLOCK);
+  }
+}
+
+/* Custom Layer Up/Down Keystrokes */
+enum custom_keycodes {
+    KC_LUP = SAFE_RANGE, //cycle layers in up direction
+    KC_LDN //cycle layers in down direction
 };
+#define HIGHEST_LAYER 2 //replace X with your highest layer
+static uint8_t current_layer = 0;
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+  case KC_LUP:
+    if(record->event.pressed) {
+      if (current_layer == HIGHEST_LAYER){
+        current_layer=0;
+      } else {
+        current_layer++;
+      }
+      layer_clear();
+      layer_on(current_layer);
+    }
+    return false;
+  case KC_LDN:
+    if(record->event.pressed) {
+      if (current_layer == 0){
+        current_layer=HIGHEST_LAYER;
+      } else {
+        current_layer--;
+      }
+      layer_clear();
+      layer_on(current_layer);
+    }
+    return false;
+  default:
+    return true;
+  }
+}
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 /* Keymap _BL: (Base Layer) Default Numpad Layer
  * ,-------------------.
- * | NV | /  | *  |BK/FN|
+ * |LAYR| /  | *  |BACK |
  * |----|----|----|-----|
  * | 7  | 8  | 9  |  -  |
  * |----|----|----|-----|
  * | 4  | 5  | 6  |  +  |
  * |----|----|----|-----|
- * | 1  | 2  | 3  |     |
- * |----|----|----| En  |
- * |    0    | .  |     |
+ * | 1  | 2  | 3  | En  |
+ * |----|----|----|-----|
+ * | 0  | 0  | .  | En  |
  * `--------------------'
  */
- [_BL] = LAYOUT_ortho_5x4(
-   TG(_NV),  KC_PSLS,  KC_PAST,   LT(_FN, KC_BSPC),
-   KC_7,    KC_8,    KC_9,     KC_PMNS,
-   KC_4,    KC_5,    KC_6,     KC_PPLS,
-   KC_1,    KC_2,    KC_3,     KC_PENT,
-   KC_0,    KC_0,  KC_DOT,   KC_PENT
+ [0] = LAYOUT_ortho_5x4(
+   KC_LUP,  KC_PSLS,  KC_PAST, LT(2, KC_BSPC),
+   KC_P7,    KC_P8,    KC_P9,        KC_PMNS,
+   KC_P4,    KC_P5,    KC_P6,        KC_PPLS,
+   KC_P1,    KC_P2,    KC_P3,        KC_PENT,
+   KC_P0,    KC_P0,  KC_PDOT,        KC_PENT
  ),
 
 /* Keymap _NV: Navigation layer
- * ,-------------------.
- * |INS |HOME|PGUP|    |
- * |----|----|----|----|
- * |DEL |END |PGDN|    |
- * |----|----|----|----|
- * |    | UP |    |    |
- * |----|----|----|----|
- * |LEFT|DOWN|RIGH|    |
- * |----|----|----|    |
- * |         |    |    |
- * `-------------------'
- */
-  [_NV] = LAYOUT_ortho_5x4(
-    KC_INS,   KC_HOME,  KC_PGUP,   TG(_NV),
-    KC_DEL,   KC_END,   KC_PGDN,   XXXXXXX,
-    XXXXXXX,  KC_UP,    XXXXXXX,   XXXXXXX,
-    KC_LEFT,  KC_DOWN,  KC_RGHT,   XXXXXXX,
-    XXXXXXX,  XXXXXXX,  XXXXXXX,   XXXXXXX
-  ),
+* ,-------------------.
+* |LAYR|    |    |NUM |
+* |----|----|----|----|
+* |HOME| UP |PGUP|    |
+* |----|----|----|----|
+* |LEFT|    |RIGH|    |
+* |----|----|----|----|
+* |END |DOWN|PGDN| En |
+* |----|----|----|----|
+* |INS |INS |DEL | En |
+* `-------------------'
+*/
+[1] = LAYOUT_ortho_5x4(
+  KC_LUP, KC_NUMLOCK, XXXXXXX,    XXXXXXX,
+  KC_HOME,   KC_UP,   KC_PGUP,    XXXXXXX,
+  KC_LEFT, XXXXXXX,   KC_RGHT,    XXXXXXX,
+  KC_END,  KC_DOWN,   KC_PGDN,    KC_PENT,
+  KC_INS,   KC_INS,   KC_DEL,     KC_PENT
+),
 
 /* Keymap _FN: RGB Function Layer
  * ,-------------------.
- * |RMOD|RGBP|RTOG| FN |
+ * |LAYR|    |    |RTOG|
  * |----|----|----|----|
- * |HUD |HUI |    |    |
+ * |HUD |HUI |    |RGBP|
  * |----|----|----|----|
- * |SAD |SAI |    |    |
+ * |SAD |SAI |    |RMOD|
  * |----|----|----|----|
  * |VAD |VAS |    |    |
- * |----|----|----|    |
- * |RST |    |    |    |
+ * |----|----|----|----|
+ * |RST |RST |    |    |
  * `-------------------'
  */
-  [_FN] = LAYOUT_ortho_5x4(
-    RGB_MOD,  RGB_M_P,  RGB_TOG,   _______,
-    RGB_HUD,  RGB_HUI,  XXXXXXX,   XXXXXXX,
-    RGB_SAD,  RGB_SAI,  XXXXXXX,   XXXXXXX,
+  [2] = LAYOUT_ortho_5x4(
+    KC_LUP,  XXXXXXX,  XXXXXXX,   RGB_TOG,
+    RGB_HUD,  RGB_HUI,  XXXXXXX,   RGB_M_P,
+    RGB_SAD,  RGB_SAI,  XXXXXXX,   RGB_MOD,
     RGB_VAD,  RGB_VAI,  XXXXXXX,   XXXXXXX,
-    RESET,    XXXXXXX,  XXXXXXX,   XXXXXXX
+      RESET,    RESET,  XXXXXXX,   XXXXXXX
   ),
 };
 
+// (Optional) Rotary Encoder, Volume Control
 bool encoder_update_user(uint8_t index, bool clockwise) {
   if (clockwise) {
       tap_code(KC_VOLU);
   } else {
       tap_code(KC_VOLD);
   }
-    return true;
+  return true;
 }
 
+// Potentiometer Slider, MIDI Control
 uint8_t divisor = 0;
-
-void slider(void) {
-    if (divisor++) { // only run the slider function 1/256 times it's called
-        return;
-    }
-
-    midi_send_cc(&midi_device, 2, 0x3E, 0x7F - (analogReadPin(SLIDER_PIN) >> 3));
+void slider(void){
+  if (divisor++) { // only run the slider function 1/256 times it's called
+      return;
+  }
+  midi_send_cc(&midi_device, 2, 0x3E, 0x7F - (analogReadPin(SLIDER_PIN) >> 3));
 }
 
 void matrix_scan_user(void) {
-    slider();
+  slider();
 }
 
 // 0.91" OLED, 128x32 resolution
 #ifdef OLED_DRIVER_ENABLE
-
 oled_rotation_t oled_init_user(oled_rotation_t rotation) {
-    return OLED_ROTATION_180;  // flips the display 270 degrees
+	return OLED_ROTATION_180;
 }
 
-#define ANIM_SIZE 636 // number of bytes in array, minimize for adequate firmware size, max is 1024
-
-layer_state_t layer_state_set_user(layer_state_t state) {
-
-    static const char PROGMEM gui_layers[][ANIM_SIZE] = {
-      {
-        // Home Screen
-        // 'layer_bl', 128x32px
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
-        0x80, 0x80, 0xc0, 0x40, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x20, 0x50, 0x50, 0x90,
-        0x10, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80,
-        0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x10, 0x10, 0xf0, 0x10, 0x10, 0x08, 0x08, 0x08, 0x04, 0x04,
-        0x04, 0xfc, 0xfc, 0xfc, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0xfc, 0x7c, 0x7e, 0x7e, 0x7f,
-        0x81, 0x81, 0x81, 0x81, 0xff, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff,
-        0xff, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0x01, 0x01, 0x01, 0xf9, 0x01, 0xf9, 0x01,
-        0xf9, 0x01, 0xf9, 0x01, 0x01, 0x01, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe6,
-        0xe6, 0xe6, 0xe6, 0xe6, 0xff, 0x8c, 0x52, 0x52, 0x52, 0xde, 0x84, 0x08, 0x84, 0x08, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x04,
-        0x05, 0x05, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x01, 0x01, 0x01, 0x01, 0x02, 0x04, 0x04, 0x07, 0x04, 0x04, 0x08, 0x08, 0x08, 0x10, 0x10,
-        0x10, 0x1f, 0x1f, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1f, 0x10, 0x20, 0x20, 0x40,
-        0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7f,
-        0x7f, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x40, 0x40, 0x40, 0x4a, 0x44, 0x4a, 0x40,
-        0x4f, 0x40, 0x4f, 0x40, 0x40, 0x40, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x9c,
-        0x9c, 0x9c, 0x9c, 0x1c, 0xff, 0x31, 0x4a, 0x4a, 0x4a, 0x7b, 0x10, 0x21, 0x10, 0x21, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-      },
-      {
-        // Navigation Screen
-        // 'layer_nav', 128x32px
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x40,
-        0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x20, 0x50, 0x50, 0x90,
-        0x10, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x10, 0xc8, 0x28, 0x28, 0x28, 0xc8, 0x10,
-        0xb0, 0x10, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20,
-        0x20, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0xa1, 0x09, 0xe1,
-        0xf3, 0x29, 0x05, 0x85, 0xe5, 0xe5, 0xc5, 0x89, 0x92, 0xe4, 0x08, 0xf0, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x44,
-        0x44, 0x22, 0xe2, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x04,
-        0x05, 0x05, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x09, 0x0b, 0x0b, 0x0b, 0x09, 0x04,
-        0x06, 0x04, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x02,
-        0x02, 0x04, 0x04, 0x04, 0x08, 0x08, 0x08, 0x10, 0x10, 0x10, 0x20, 0x20, 0x20, 0x42, 0x48, 0x43,
-        0x66, 0x4e, 0x53, 0x51, 0x51, 0x53, 0x53, 0x49, 0x24, 0x13, 0x08, 0x07, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x91,
-        0x91, 0x52, 0x53, 0x34, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x02,
-        0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-      },
-      {
-        // RGB Screen
-        // 'layer_rgb', 128x32px
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x9c, 0x80, 0x80,
-        0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
-        0x80, 0x40, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x20, 0x50, 0x50, 0x90,
-        0x10, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x80, 0x80, 0x80, 0x00, 0x00, 0xe0, 0x19, 0x04, 0x62, 0x11, 0x09, 0x04, 0x04, 0x00, 0x00, 0x00,
-        0x00, 0x01, 0x01, 0x02, 0x04, 0x19, 0x10, 0x10, 0xf0, 0x00, 0x00, 0xf0, 0x00, 0xf0, 0xe0, 0xc0,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x24, 0x04,
-        0x07, 0xe4, 0x24, 0x24, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x04,
-        0x05, 0x05, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x88, 0x30, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
-        0x80, 0x80, 0x40, 0x60, 0x30, 0x98, 0x08, 0x08, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x0f, 0x07, 0x03,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0x22, 0x24,
-        0x24, 0xc4, 0x44, 0x22, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1d, 0x01, 0x01,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02,
-        0x02, 0x03, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-      }
-    };
+static void render_rocket_logo(void) {
+  static const char PROGMEM rocket_logo[]={
+    // Rocket Screen
+    // 'home', 128x32px
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+    0x80, 0x80, 0xc0, 0x40, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x20, 0x50, 0x50, 0x90,
+    0x10, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80,
+    0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x10, 0x10, 0xf0, 0x10, 0x10, 0x08, 0x08, 0x08, 0x04, 0x04,
+    0x04, 0xfc, 0xfc, 0xfc, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0xfc, 0x7c, 0x7e, 0x7e, 0x7f,
+    0x81, 0x81, 0x81, 0x81, 0xff, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff,
+    0xff, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0x01, 0x01, 0x01, 0xf9, 0x01, 0xf9, 0x01,
+    0xf9, 0x01, 0xf9, 0x01, 0x01, 0x01, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe6,
+    0xe6, 0xe6, 0xe6, 0xe6, 0xff, 0x8c, 0x52, 0x52, 0x52, 0xde, 0x84, 0x08, 0x84, 0x08, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x04,
+    0x05, 0x05, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x01, 0x01, 0x01, 0x01, 0x02, 0x04, 0x04, 0x07, 0x04, 0x04, 0x08, 0x08, 0x08, 0x10, 0x10,
+    0x10, 0x1f, 0x1f, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1f, 0x10, 0x20, 0x20, 0x40,
+    0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7f,
+    0x7f, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x40, 0x40, 0x40, 0x4a, 0x44, 0x4a, 0x40,
+    0x4f, 0x40, 0x4f, 0x40, 0x40, 0x40, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x9c,
+    0x9c, 0x9c, 0x9c, 0x1c, 0xff, 0x31, 0x4a, 0x4a, 0x4a, 0x7b, 0x10, 0x21, 0x10, 0x21, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+  };
+  oled_write_raw_P(rocket_logo, sizeof(rocket_logo));
+}
+static void render_nav_logo(void) {
+  static const char PROGMEM nav_logo[]={
+    // Navigation Screen
+    // 'navigation', 128x32px
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x40,
+    0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x20, 0x50, 0x50, 0x90,
+    0x10, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x10, 0xc8, 0x28, 0x28, 0x28, 0xc8, 0x10,
+    0xb0, 0x10, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20,
+    0x20, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0xa1, 0x09, 0xe1,
+    0xf3, 0x29, 0x05, 0x85, 0xe5, 0xe5, 0xc5, 0x89, 0x92, 0xe4, 0x08, 0xf0, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x44,
+    0x44, 0x22, 0xe2, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x04,
+    0x05, 0x05, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x09, 0x0b, 0x0b, 0x0b, 0x09, 0x04,
+    0x06, 0x04, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x02,
+    0x02, 0x04, 0x04, 0x04, 0x08, 0x08, 0x08, 0x10, 0x10, 0x10, 0x20, 0x20, 0x20, 0x42, 0x48, 0x43,
+    0x66, 0x4e, 0x53, 0x51, 0x51, 0x53, 0x53, 0x49, 0x24, 0x13, 0x08, 0x07, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x91,
+    0x91, 0x52, 0x53, 0x34, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x02,
+    0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+  };
+  oled_write_raw_P(nav_logo, sizeof(nav_logo));
+}
+static void render_light_logo(void) {
+  static const char PROGMEM light_logo[]={
+    // RGB Screen
+    // 'rgb', 128x32px
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x9c, 0x80, 0x80,
+    0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
+    0x80, 0x40, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x20, 0x50, 0x50, 0x90,
+    0x10, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x80, 0x80, 0x80, 0x00, 0x00, 0xe0, 0x19, 0x04, 0x62, 0x11, 0x09, 0x04, 0x04, 0x00, 0x00, 0x00,
+    0x00, 0x01, 0x01, 0x02, 0x04, 0x19, 0x10, 0x10, 0xf0, 0x00, 0x00, 0xf0, 0x00, 0xf0, 0xe0, 0xc0,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x24, 0x04,
+    0x07, 0xe4, 0x24, 0x24, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x04,
+    0x05, 0x05, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x88, 0x30, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
+    0x80, 0x80, 0x40, 0x60, 0x30, 0x98, 0x08, 0x08, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x0f, 0x07, 0x03,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0x22, 0x24,
+    0x24, 0xc4, 0x44, 0x22, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1d, 0x01, 0x01,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02,
+    0x02, 0x03, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+  };
+  oled_write_raw_P(light_logo, sizeof(light_logo));
+}
 
-    switch (get_highest_layer(state)) {
-    case _BL:
-      oled_write_raw_P(gui_layers[0], sizeof(gui_layers[0]) );
+void oled_task_user(void) {
+  switch (get_highest_layer(layer_state)) {
+    case 0:
+      render_rocket_logo();
       break;
-    case _NV:
-      oled_write_raw_P(gui_layers[1], sizeof(gui_layers[1]) );
+    case 1:
+      render_nav_logo();
       break;
-    case _FN:
-      oled_write_raw_P(gui_layers[2], sizeof(gui_layers[2]) );
+    case 2:
+      render_light_logo();
       break;
     default:
       // Or use the write_ln shortcut over adding '\n' to the end of your string
       oled_write_ln_P(PSTR(" UND"), false);
       break;
     }
-  return state;
 }
-
 #endif

+ 293 - 0
keyboards/ungodly/launch_pad/keymaps/via/keymap.c

@@ -0,0 +1,293 @@
+/* Copyright 2020 Ungodly Design <hello@ungodly.design>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+#include "analog.h"
+#include "qmk_midi.h"
+
+/* Force Numlock on */
+void matrix_init_user (void) {
+  if (!host_keyboard_led_state().num_lock) {
+      tap_code(KC_NUMLOCK);
+  }
+}
+
+/* Custom Layer Up/Down Keystrokes */
+enum custom_keycodes {
+    KC_LUP = SAFE_RANGE, //cycle layers in up direction
+    KC_LDN //cycle layers in down direction
+};
+#define HIGHEST_LAYER 2 //replace X with your highest layer
+static uint8_t current_layer = 0;
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+  case KC_LUP:
+    if(record->event.pressed) {
+      if (current_layer == HIGHEST_LAYER){
+        current_layer=0;
+      } else {
+        current_layer++;
+      }
+      layer_clear();
+      layer_on(current_layer);
+    }
+    return false;
+  case KC_LDN:
+    if(record->event.pressed) {
+      if (current_layer == 0){
+        current_layer=HIGHEST_LAYER;
+      } else {
+        current_layer--;
+      }
+      layer_clear();
+      layer_on(current_layer);
+    }
+    return false;
+  default:
+    return true;
+  }
+}
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap _BL: (Base Layer) Default Numpad Layer
+ * ,-------------------.
+ * |LAYR| /  | *  |BACK |
+ * |----|----|----|-----|
+ * | 7  | 8  | 9  |  -  |
+ * |----|----|----|-----|
+ * | 4  | 5  | 6  |  +  |
+ * |----|----|----|-----|
+ * | 1  | 2  | 3  | En  |
+ * |----|----|----|-----|
+ * | 0  | 0  | .  | En  |
+ * `--------------------'
+ */
+ [0] = LAYOUT_ortho_5x4(
+   KC_LUP,  KC_PSLS,  KC_PAST, LT(2, KC_BSPC),
+   KC_P7,    KC_P8,    KC_P9,        KC_PMNS,
+   KC_P4,    KC_P5,    KC_P6,        KC_PPLS,
+   KC_P1,    KC_P2,    KC_P3,        KC_PENT,
+   KC_P0,    KC_P0,  KC_PDOT,        KC_PENT
+ ),
+
+/* Keymap _NV: Navigation layer
+* ,-------------------.
+* |LAYR|    |    |NUM |
+* |----|----|----|----|
+* |HOME| UP |PGUP|    |
+* |----|----|----|----|
+* |LEFT|    |RIGH|    |
+* |----|----|----|----|
+* |END |DOWN|PGDN| En |
+* |----|----|----|----|
+* |INS |INS |DEL | En |
+* `-------------------'
+*/
+[1] = LAYOUT_ortho_5x4(
+  KC_LUP, KC_NUMLOCK, XXXXXXX,    XXXXXXX,
+  KC_HOME,   KC_UP,   KC_PGUP,    XXXXXXX,
+  KC_LEFT, XXXXXXX,   KC_RGHT,    XXXXXXX,
+  KC_END,  KC_DOWN,   KC_PGDN,    KC_PENT,
+  KC_INS,   KC_INS,   KC_DEL,     KC_PENT
+),
+
+/* Keymap _FN: RGB Function Layer
+ * ,-------------------.
+ * |LAYR|    |    |RTOG|
+ * |----|----|----|----|
+ * |HUD |HUI |    |RGBP|
+ * |----|----|----|----|
+ * |SAD |SAI |    |RMOD|
+ * |----|----|----|----|
+ * |VAD |VAS |    |    |
+ * |----|----|----|----|
+ * |RST |RST |    |    |
+ * `-------------------'
+ */
+  [2] = LAYOUT_ortho_5x4(
+    KC_LUP,  XXXXXXX,  XXXXXXX,   RGB_TOG,
+    RGB_HUD,  RGB_HUI,  XXXXXXX,   RGB_M_P,
+    RGB_SAD,  RGB_SAI,  XXXXXXX,   RGB_MOD,
+    RGB_VAD,  RGB_VAI,  XXXXXXX,   XXXXXXX,
+      RESET,    RESET,  XXXXXXX,   XXXXXXX
+  ),
+};
+
+// (Optional) Rotary Encoder, Volume Control
+bool encoder_update_user(uint8_t index, bool clockwise) {
+  if (clockwise) {
+      tap_code(KC_VOLU);
+  } else {
+      tap_code(KC_VOLD);
+  }
+  return true;
+}
+
+// Potentiometer Slider, MIDI Control
+uint8_t divisor = 0;
+void slider(void){
+  if (divisor++) { // only run the slider function 1/256 times it's called
+      return;
+  }
+  midi_send_cc(&midi_device, 2, 0x3E, 0x7F - (analogReadPin(SLIDER_PIN) >> 3));
+}
+
+void matrix_scan_user(void) {
+  slider();
+}
+
+// 0.91" OLED, 128x32 resolution
+#ifdef OLED_DRIVER_ENABLE
+oled_rotation_t oled_init_user(oled_rotation_t rotation) {
+	return OLED_ROTATION_180;
+}
+
+static void render_rocket_logo(void) {
+  static const char PROGMEM rocket_logo[]={
+    // Rocket Screen
+    // 'home', 128x32px
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+    0x80, 0x80, 0xc0, 0x40, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x20, 0x50, 0x50, 0x90,
+    0x10, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80,
+    0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x10, 0x10, 0xf0, 0x10, 0x10, 0x08, 0x08, 0x08, 0x04, 0x04,
+    0x04, 0xfc, 0xfc, 0xfc, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0xfc, 0x7c, 0x7e, 0x7e, 0x7f,
+    0x81, 0x81, 0x81, 0x81, 0xff, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff,
+    0xff, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0x01, 0x01, 0x01, 0xf9, 0x01, 0xf9, 0x01,
+    0xf9, 0x01, 0xf9, 0x01, 0x01, 0x01, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe6,
+    0xe6, 0xe6, 0xe6, 0xe6, 0xff, 0x8c, 0x52, 0x52, 0x52, 0xde, 0x84, 0x08, 0x84, 0x08, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x04,
+    0x05, 0x05, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x01, 0x01, 0x01, 0x01, 0x02, 0x04, 0x04, 0x07, 0x04, 0x04, 0x08, 0x08, 0x08, 0x10, 0x10,
+    0x10, 0x1f, 0x1f, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1f, 0x10, 0x20, 0x20, 0x40,
+    0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7f,
+    0x7f, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x40, 0x40, 0x40, 0x4a, 0x44, 0x4a, 0x40,
+    0x4f, 0x40, 0x4f, 0x40, 0x40, 0x40, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x9c,
+    0x9c, 0x9c, 0x9c, 0x1c, 0xff, 0x31, 0x4a, 0x4a, 0x4a, 0x7b, 0x10, 0x21, 0x10, 0x21, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+  };
+  oled_write_raw_P(rocket_logo, sizeof(rocket_logo));
+}
+static void render_nav_logo(void) {
+  static const char PROGMEM nav_logo[]={
+    // Navigation Screen
+    // 'navigation', 128x32px
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x40,
+    0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x20, 0x50, 0x50, 0x90,
+    0x10, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x10, 0xc8, 0x28, 0x28, 0x28, 0xc8, 0x10,
+    0xb0, 0x10, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20,
+    0x20, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0xa1, 0x09, 0xe1,
+    0xf3, 0x29, 0x05, 0x85, 0xe5, 0xe5, 0xc5, 0x89, 0x92, 0xe4, 0x08, 0xf0, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x44,
+    0x44, 0x22, 0xe2, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x04,
+    0x05, 0x05, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x09, 0x0b, 0x0b, 0x0b, 0x09, 0x04,
+    0x06, 0x04, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x02,
+    0x02, 0x04, 0x04, 0x04, 0x08, 0x08, 0x08, 0x10, 0x10, 0x10, 0x20, 0x20, 0x20, 0x42, 0x48, 0x43,
+    0x66, 0x4e, 0x53, 0x51, 0x51, 0x53, 0x53, 0x49, 0x24, 0x13, 0x08, 0x07, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x91,
+    0x91, 0x52, 0x53, 0x34, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x02,
+    0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+  };
+  oled_write_raw_P(nav_logo, sizeof(nav_logo));
+}
+static void render_light_logo(void) {
+  static const char PROGMEM light_logo[]={
+    // RGB Screen
+    // 'rgb', 128x32px
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x9c, 0x80, 0x80,
+    0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
+    0x80, 0x40, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x20, 0x50, 0x50, 0x90,
+    0x10, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x80, 0x80, 0x80, 0x00, 0x00, 0xe0, 0x19, 0x04, 0x62, 0x11, 0x09, 0x04, 0x04, 0x00, 0x00, 0x00,
+    0x00, 0x01, 0x01, 0x02, 0x04, 0x19, 0x10, 0x10, 0xf0, 0x00, 0x00, 0xf0, 0x00, 0xf0, 0xe0, 0xc0,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x24, 0x04,
+    0x07, 0xe4, 0x24, 0x24, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x04,
+    0x05, 0x05, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x88, 0x30, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
+    0x80, 0x80, 0x40, 0x60, 0x30, 0x98, 0x08, 0x08, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x0f, 0x07, 0x03,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0x22, 0x24,
+    0x24, 0xc4, 0x44, 0x22, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1d, 0x01, 0x01,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02,
+    0x02, 0x03, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+  };
+  oled_write_raw_P(light_logo, sizeof(light_logo));
+}
+
+void oled_task_user(void) {
+  switch (get_highest_layer(layer_state)) {
+    case 0:
+      render_rocket_logo();
+      break;
+    case 1:
+      render_nav_logo();
+      break;
+    case 2:
+      render_light_logo();
+      break;
+    default:
+      // Or use the write_ln shortcut over adding '\n' to the end of your string
+      oled_write_ln_P(PSTR(" UND"), false);
+      break;
+    }
+}
+#endif

+ 1 - 0
keyboards/ungodly/launch_pad/keymaps/via/rules.mk

@@ -0,0 +1 @@
+VIA_ENABLE = yes

+ 269 - 0
keyboards/ungodly/launch_pad/keymaps/warzone/keymap.c

@@ -0,0 +1,269 @@
+/* Copyright 2020 Ungodly Design <hello@ungodly.design>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+#include "analog.h"
+#include "qmk_midi.h"
+
+/* Force Numlock on */
+void matrix_init_user (void) {
+  if (!host_keyboard_led_state().num_lock) {
+      tap_code(KC_NUMLOCK);
+  }
+}
+
+// Tap Dance declarations
+enum {
+    TD_ESC_TAB,
+    TD_NUMLOCK_L1,
+    TD_3_L0
+};
+
+// Tap Dance definitions
+qk_tap_dance_action_t tap_dance_actions[] = {
+    // Tap once for Escape, twice for Number 4 (armor plates in warzone)
+    [TD_ESC_TAB] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_TAB),
+    [TD_3_L0] = ACTION_TAP_DANCE_LAYER_TOGGLE(KC_3, 1),
+    [TD_NUMLOCK_L1] = ACTION_TAP_DANCE_LAYER_TOGGLE(KC_NUMLOCK, 1),
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  /* Keymap _BL: (Base Layer) Default Numpad Layer
+  * ,-------------------.
+  * | NV | /  | *  |BK/FN|
+  * |----|----|----|-----|
+  * | 7  | 8  | 9  |  -  |
+  * |----|----|----|-----|
+  * | 4  | 5  | 6  |  +  |
+  * |----|----|----|-----|
+  * | 1  | 2  | 3  | En  |
+  * |----|----|----|-----|
+  * | 0  | 0  | .  | En  |
+  * `--------------------'
+  */
+  [0] = LAYOUT_ortho_5x4(
+   TD(TD_NUMLOCK_L1),  KC_PSLS,  KC_PAST, LT(2, KC_BSPC),
+   KC_P7,    KC_P8,    KC_P9,        KC_PMNS,
+   KC_P4,    KC_P5,    KC_P6,        KC_PPLS,
+   KC_P1,    KC_P2,    KC_P3,        KC_PENT,
+   KC_P0,    KC_P0,  KC_PDOT,        KC_PENT
+  ),
+  /* Keymap _WAR: (Warzone Layer) Default Numpad Layer for COD Warzone N00BS
+  * ,-------------------.
+  * | R  | F  | V  | Spc |
+  * |----|----|----|-----|
+  * | E  | D  | C  | Alt |
+  * |----|----|----|-----|
+  * | W  | S  | X  |  4  |
+  * |----|----|----|-----|
+  * | Q  | A  | Z  |  3  |
+  * |----|----|----|-----|
+  * | Esc|Ctrl|Shift| M |
+  * `--------------------'
+  */
+  [1] = LAYOUT_ortho_5x4(
+    KC_R,    KC_F,    KC_V,     KC_SPACE,
+    KC_E,    KC_D,    KC_C,     KC_LALT,
+    KC_W,    KC_S,    KC_X,     KC_4,
+    KC_Q,    KC_A,    KC_Z,     TD(TD_3_L0),
+    TD(TD_ESC_TAB),    KC_LCTRL,  KC_LSHIFT,   KC_M
+  ),
+  /* Keymap _FN: RGB Function Layer
+   * ,-------------------.
+   * |LAYR|    |    |RTOG|
+   * |----|----|----|----|
+   * |HUD |HUI |    |RGBP|
+   * |----|----|----|----|
+   * |SAD |SAI |    |RMOD|
+   * |----|----|----|----|
+   * |VAD |VAS |    |    |
+   * |----|----|----|----|
+   * |RST |RST |    |    |
+   * `-------------------'
+   */
+    [2] = LAYOUT_ortho_5x4(
+      KC_LUP,  XXXXXXX,  XXXXXXX,   RGB_TOG,
+      RGB_HUD,  RGB_HUI,  XXXXXXX,   RGB_M_P,
+      RGB_SAD,  RGB_SAI,  XXXXXXX,   RGB_MOD,
+      RGB_VAD,  RGB_VAI,  XXXXXXX,   XXXXXXX,
+        RESET,    RESET,  XXXXXXX,   XXXXXXX
+  ),
+};
+
+// (Optional) Rotary Encoder, Volume Control
+bool encoder_update_user(uint8_t index, bool clockwise) {
+  if (clockwise) {
+      tap_code(KC_VOLU);
+  } else {
+      tap_code(KC_VOLD);
+  }
+  return true;
+}
+
+// Potentiometer Slider, MIDI Control
+uint8_t divisor = 0;
+void slider(void){
+  if (divisor++) { // only run the slider function 1/256 times it's called
+      return;
+  }
+  midi_send_cc(&midi_device, 2, 0x3E, 0x7F - (analogReadPin(SLIDER_PIN) >> 3));
+}
+
+void matrix_scan_user(void) {
+  slider();
+}
+
+// 0.91" OLED, 128x32 resolution
+#ifdef OLED_DRIVER_ENABLE
+oled_rotation_t oled_init_user(oled_rotation_t rotation) {
+	return OLED_ROTATION_180;
+}
+
+static void render_rocket_logo(void) {
+  static const char PROGMEM rocket_logo[]={
+    // Rocket Screen
+    // 'home', 128x32px
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+    0x80, 0x80, 0xc0, 0x40, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x20, 0x50, 0x50, 0x90,
+    0x10, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80,
+    0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x10, 0x10, 0xf0, 0x10, 0x10, 0x08, 0x08, 0x08, 0x04, 0x04,
+    0x04, 0xfc, 0xfc, 0xfc, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0xfc, 0x7c, 0x7e, 0x7e, 0x7f,
+    0x81, 0x81, 0x81, 0x81, 0xff, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff,
+    0xff, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0x01, 0x01, 0x01, 0xf9, 0x01, 0xf9, 0x01,
+    0xf9, 0x01, 0xf9, 0x01, 0x01, 0x01, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe6,
+    0xe6, 0xe6, 0xe6, 0xe6, 0xff, 0x8c, 0x52, 0x52, 0x52, 0xde, 0x84, 0x08, 0x84, 0x08, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x04,
+    0x05, 0x05, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x01, 0x01, 0x01, 0x01, 0x02, 0x04, 0x04, 0x07, 0x04, 0x04, 0x08, 0x08, 0x08, 0x10, 0x10,
+    0x10, 0x1f, 0x1f, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1f, 0x10, 0x20, 0x20, 0x40,
+    0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7f,
+    0x7f, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x40, 0x40, 0x40, 0x4a, 0x44, 0x4a, 0x40,
+    0x4f, 0x40, 0x4f, 0x40, 0x40, 0x40, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x9c,
+    0x9c, 0x9c, 0x9c, 0x1c, 0xff, 0x31, 0x4a, 0x4a, 0x4a, 0x7b, 0x10, 0x21, 0x10, 0x21, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+  };
+  oled_write_raw_P(rocket_logo, sizeof(rocket_logo));
+}
+static void render_warzone_logo(void) {
+  static const char PROGMEM warzone_logo[]={
+    // Home Screen
+    // 'warzone_bit', 128x32px
+    0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xe0, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0x00, 0xe0, 0xfc, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xfe,
+    0xfc, 0xf0, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0x7f, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x80, 0x00, 0x00, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xc0, 0xc0, 0xc0,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xf8, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0xe0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, 0xf8, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x1f,
+    0x07, 0x01, 0x00, 0x00, 0x00, 0x03, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xf0, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x1f, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff,
+    0xff, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0x00, 0x80, 0xe0, 0xf8, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x07, 0x01, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x03, 0x03, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xfe, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0x03, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
+    0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x00,
+    0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x01, 0x0f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
+    0x00, 0x03, 0x1f, 0x3f, 0x3f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x3f, 0x3f,
+    0x1f, 0x07, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
+    0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x1f, 0x3f, 0x3f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f,
+    0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
+    0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x07, 0x7f, 0x7f,
+    0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x0f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x00
+  };
+  oled_write_raw_P(warzone_logo, sizeof(warzone_logo));
+}
+static void render_light_logo(void) {
+  static const char PROGMEM light_logo[]={
+    // RGB Screen
+    // 'rgb', 128x32px
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x9c, 0x80, 0x80,
+    0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
+    0x80, 0x40, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x20, 0x50, 0x50, 0x90,
+    0x10, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x80, 0x80, 0x80, 0x00, 0x00, 0xe0, 0x19, 0x04, 0x62, 0x11, 0x09, 0x04, 0x04, 0x00, 0x00, 0x00,
+    0x00, 0x01, 0x01, 0x02, 0x04, 0x19, 0x10, 0x10, 0xf0, 0x00, 0x00, 0xf0, 0x00, 0xf0, 0xe0, 0xc0,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x24, 0x04,
+    0x07, 0xe4, 0x24, 0x24, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x04,
+    0x05, 0x05, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x88, 0x30, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
+    0x80, 0x80, 0x40, 0x60, 0x30, 0x98, 0x08, 0x08, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x0f, 0x07, 0x03,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0x22, 0x24,
+    0x24, 0xc4, 0x44, 0x22, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1d, 0x01, 0x01,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02,
+    0x02, 0x03, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+  };
+  oled_write_raw_P(light_logo, sizeof(light_logo));
+}
+
+void oled_task_user(void) {
+  switch (get_highest_layer(layer_state)) {
+    case 0:
+      render_rocket_logo();
+      break;
+    case 1:
+      render_warzone_logo();
+      break;
+    case 2:
+      render_light_logo();
+      break;
+    default:
+      // Or use the write_ln shortcut over adding '\n' to the end of your string
+      oled_write_ln_P(PSTR(" UND"), false);
+      break;
+    }
+}
+#endif

+ 2 - 0
keyboards/ungodly/launch_pad/keymaps/warzone/rules.mk

@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+TAP_DANCE_ENABLE = yes

+ 0 - 17
keyboards/ungodly/launch_pad/launch_pad.c

@@ -42,20 +42,3 @@ led_config_t g_led_config = { {
     2, 2
 } };
 #endif
-
-void eeconfig_init_kb(void) {
-#ifdef RGBLIGHT_ENABLE
-    rgblight_enable();             // Enable RGB by default
-    rgblight_sethsv(0, 255, 255);  // Set default HSV - red hue, full saturation, full brightness
-#    ifdef RGBLIGHT_ANIMATIONS
-    rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL + 2);  // set to RGB_RAINBOW_SWIRL by default
-#    endif
-#endif
-
-#ifdef RGB_MATRIX_ENABLE
-    rgb_matrix_enable();  // Enable RGB by default
-#endif
-
-    eeconfig_update_kb(0);
-    eeconfig_init_user();
-}

+ 58 - 4
keyboards/ungodly/launch_pad/readme.md

@@ -22,11 +22,9 @@ Numpad Layout             |  5x4 Layout
 ![Numpad](https://i.imgur.com/4XvqCBHl.jpg)  |  ![5x4](https://i.imgur.com/mwtGnPSl.jpg)
 
 
-|Reset Bootloader|   |
-|---|---|
-|Use tweezers to short the two bottom pins of the J-Link pinout.|![Numpad](https://i.imgur.com/ArSIcK0.pngl)|
 
-* Keyboard Maintainer: [Luis Godinez](https://github.com/luis-Godinez)
+
+* Keyboard Maintainer: [Luis Godinez](https://github.com/luis-godinez)
 * Hardware Supported: Launch Pad PCB
 * Hardware Availability: [Ungodly.Design](https://ungodly.design/products/launch-pad-pcb)
 
@@ -35,3 +33,59 @@ Make example for this keyboard (after setting up your build environment):
     make ungodly/launch_pad: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).
+
+# Firmware
+- [v1.0](https://github.com/luis-godinez/qmk_firmware/releases/tag/launch_pad)
+
+# Reset Bootloader
+
+<table>
+	<tr>
+		<td>Use tweezers to short the two bottom pins of the J-Link pinout.</td>
+		<td><img src="https://i.imgur.com/ArSIcK0.pngl" width="300"/></td>
+	</tr>
+</table>
+
+# Midi Setup
+
+<table>
+    <tr>
+        <th>Windows</th>
+        <th>Mac</th>
+    </tr>
+    <tr>
+    	<td valign="top">
+    	<ul>
+    	    <li>Midi Mixer</li>
+        	<ul>
+            	<li><a href="https://github.com/jpwilliams/midi-mixer-releases/releases">Download the latest version of Midi Mixer</a></li>
+            	<li>Run the exe to install the application.</li><li>Launch the MIDI Mixer application.</li>
+            	<li>Navigate to the "Profiles" tab and select the "Ungodly Design Launch Pad" preset.</li>
+            	<li>Navigate to the "Groups" tab and select the audio source you would like to control.
+            	<br><img src="https://imgur.com/MmdDcTm.pngl" alt="Midi Mixer" width="800"></li>
+            	<li>Optionally, Navigate to the "Settings" tab and enable/disable "Logarithmic volume curve".</li>
+        	</ul>
+    	</ul>
+    	</td>
+    	<td valign="top">
+        	<ul>
+            	<li><a href="https://rsjaffe.github.io/MIDI2LR/">Midi2Lightroom</a></li>
+            	<li><a href="https://www.orderedbytes.com/controllermate/">ControllerMate</a></li>
+        	</ul>
+    	</td>
+    </tr>
+</table>
+
+# Custom OLED Displays
+
+Layer | Graphic
+:----:|:----:
+home  |  ![home](https://i.imgur.com/tK3u7ZU.png)
+nav  |  ![nav](https://i.imgur.com/J0FNZfR.png)
+rgb  |  ![rgb](https://i.imgur.com/XK6r6KL.png)
+
+* These instructions require compiling your own firmware. [Ensure that your build environenment is setup](https://beta.docs.qmk.fm/tutorial/newbs_getting_started).
+* Use [QMK Logo Editor](https://joric.github.io/qle/) to create your own LCD graphics.
+* Copy the generated output into your keymap ([sample code](https://github.com/qmk/qmk_firmware/blob/master/keyboards/ungodly/launch_pad/keymaps/default/keymap.c))
+    * Note: By default, the LCD is configured as a vertical display with a 180 degree rotation. You may need to change the `OLED_ROTATION` value in the `keymap.c` to achieve your desired effect.
+* Compile the firmware and flash it to your launch pad.

+ 0 - 4
layouts/community/ergodox/bocaj/config.h

@@ -1,4 +0,0 @@
-#pragma once
-
-#define LEADER_TIMEOUT 250
-#define LEADER_PER_KEY_TIMING

+ 0 - 175
layouts/community/ergodox/bocaj/keymap.c

@@ -1,175 +0,0 @@
-/*
-Copyright 2020 Jacob Jerrell <jacob.jerrell@gmail.com> @JacobJerrell
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "bocaj.h"
-
-/*
- * The `LAYOUT_ergodox_pretty_base` macro is a template to allow the use of
- * identical modifiers for the default layouts (eg QWERTY, Colemak, Dvorak,
- * etc), so that there is no need to set them up for each layout, and modify
- * all of them if I want to change them.  This helps to keep consistency and
- * ease of use. K## is a placeholder to pass through the individual keycodes
- */
-#define LAYOUT_ergodox_bocaj(...)       WRAPPER_ergodox_bocaj(__VA_ARGS__)
-#define LAYOUT_ergodox_bocaj_WIN(...)   WRAPPER_ergodox_bocaj_WIN(__VA_ARGS__)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
-    [_WORKMAN] = LAYOUT_ergodox_bocaj(
-        KC_ESC, ________________NUMBER_LEFT________________, KC_ARRW,     KC_MINS, ________________NUMBER_RIGHT_______________, KC_EQUAL,
-        KC_DEL, _________________WORKMAN_L1________________, KC_LPRN,     KC_RPRN, _________________WORKMAN_R1________________, KC_BSLS,
-       _______, _________________WORKMAN_L2________________,                       _________________WORKMAN_R2________________, KC_QUOT,
-       KC_LSFT, _________________WORKMAN_L3________________, KC_LBRC,     KC_RBRC, _________________WORKMAN_R3________________, _______,
-        MO_MOD, KC_PGUP, KC_HOME, KC_UP, KC_LEFT,                                          KC_RIGHT, KC_DOWN, KC_END, KC_PGDN, WORKMAN,
-                                              KC_APP,KC_HOME, /* <- LHS/RHS -> */ KC_END,KC_ESC,
-                                                     KC_PGUP, /* <- LHS/RHS -> */ KC_PGDN,
-                                  KC_SPACE,KC_BSPACE,KC_LEAD, /* <- LHS/RHS -> */ KC_LOCK,KC_TAB,KC_ENTER
-    ),
-
-    [_WWORKMAN] = LAYOUT_ergodox_bocaj_WIN(
-        KC_ESC, ________________NUMBER_LEFT________________, KC_ARRW,     KC_MINS, ________________NUMBER_RIGHT_______________, KC_EQUAL,
-        KC_DEL, _________________WORKMAN_L1________________, KC_LPRN,     KC_RPRN, _________________WORKMAN_R1________________, KC_BSLS,
-       _______, _________________WORKMAN_L2________________,                       _________________WORKMAN_R2________________, KC_QUOT,
-       KC_LSFT, _________________WORKMAN_L3________________, KC_LBRC,     KC_RBRC, _________________WORKMAN_R3________________, _______,
-        MO_MOD, KC_PGUP, KC_HOME, KC_UP, KC_LEFT,                                          KC_RIGHT, KC_DOWN, KC_END, KC_PGDN, WORKMAN,
-                                              KC_APP,KC_HOME, /* <- LHS/RHS -> */ KC_END,KC_ESC,
-                                                     KC_PGUP, /* <- LHS/RHS -> */ KC_PGDN,
-                                  KC_SPACE,KC_BSPACE,KC_LEAD, /* <- LHS/RHS -> */ KC_LOCK,KC_TAB,KC_ENTER
-    ),
-
-    [_LOWER] = LAYOUT_ergodox_bocaj(
-        KC_GRV, _______, _______, _______, _______,  _______, _______,     _______, _______, _______, _______, _______, _______, _______,
-       _______, _______, _______, KC_UP,   _______,  _______, _______,     _______, _______, KC_7,    KC_8,    KC_9,    KC_BSLS, _______,
-       _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______,                       _______, KC_4,    KC_5,    KC_6,    KC_ASTR, _______,
-       _______, _______, _______, _______, _______,  _______, _______,     _______, _______, KC_1,    KC_2,    KC_3,    KC_PLUS, _______,
-       _______, _______, _______, _______,  _______,                                         KC_0,    KC_DOT,  KC_COMM, KC_MINS, _______,
-                                               KC_APP,KC_HOME, /* <- LHS/RHS -> */ KC_END,KC_ESC,
-                                                      KC_PGUP, /* <- LHS/RHS -> */ KC_PGDN,
-                                   KC_SPACE,KC_BSPACE,KC_LEAD, /* <- LHS/RHS -> */ KC_LOCK,KC_TAB,KC_ENTER
-    ),
-
-    [_RAISE] = LAYOUT_ergodox_bocaj(
-        KC_TILD, _________________RAISE_L1__________________, _______,         _______, _________________RAISE_R1__________________, _______,
-         KC_F11, _________________RAISE_L2__________________, _______,         _______, _________________RAISE_R2__________________, KC_F12,
-        _______, _________________RAISE_L3__________________,                           _________________RAISE_R3__________________, _______,
-        _______, _______, KC_MRWD, KC_MPLY, KC_MFFD, _______, _______,         _______, ___________________BLANK___________________, _______,
-        ___________________BLANK___________________,                                             ___________________BLANK___________________,
-                                                 KC_APP,KC_HOME, /* <- LHS/RHS -> */ KC_END,KC_ESC,
-                                                        KC_PGUP, /* <- LHS/RHS -> */ KC_PGDN,
-                                     KC_SPACE,KC_BSPACE,KC_LEAD, /* <- LHS/RHS -> */ KC_LOCK,KC_TAB,KC_ENTER
-    ),
-
-    [_ADJUST] = LAYOUT_ergodox_pretty(
-        KC_MAKE, _______,  _______,     _______,   _______, _______, _______,       _______, _______, _______, _______, _______, _______, KC_RST,
-        VRSN,    _______,  _______,     _______,   _______, _______, _______,       _______, _______, _______, _______, _______, _______, EEP_RST,
-        _______, KC__MUTE, KC__VOLDOWN, KC__VOLUP, _______, KC_MNXT,                         _______, _______, _______, _______, _______, _______,
-        _______, _______,  _______,     _______,   _______, _______, _______,       _______, _______, _______, _______, _______, _______, _______,
-        _______, _______,  _______,     _______,   _______,                                           _______, _______, _______, _______, _______,
-                                              KC_APP,KC_HOME, /* <- LHS/RHS -> */ KC_END,KC_ESC,
-                                                     KC_PGUP, /* <- LHS/RHS -> */ KC_PGDN,
-                                  KC_SPACE,KC_BSPACE,KC_LEAD, /* <- LHS/RHS -> */ KC_LOCK,KC_TAB,KC_ENTER
-    ),
-
-    // Wrapping Mouse-Wheel Keys with `X_T()` style functions seems
-    // to break the mouse button. So we can't use the wrapper here.
-    [_MOD] = LAYOUT_ergodox_pretty(
-        _______, _______, _______, _______, _______, _______, _______,           _______, _______, _______, _______, _______, _______, _______,
-        _______, _______, _______, KC_WH_D, _______, _______, _______,           _______, _______, _______, KC_MS_U, _______, _______, _______,
-        _______, _______, KC_WH_L, KC_WH_U, KC_WH_R, _______,                             _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______,
-        _______, _______, _______, _______, _______, _______, _______,           _______, _______, _______, _______, _______, _______, _______,
-        _______, _______, _______, _______, KC_ACL0,                                               KC_ACL1, KC_ACL2, _______, _______, _______,
-                                                 _______,_______, /* <- LHS/RHS -> */ _______,_______,
-                                                         _______, /* <- LHS/RHS -> */ _______,
-                                         KC_BTN1,KC_BTN2,_______, /* <- LHS/RHS -> */ _______,KC_BTN3,KC_BTN4
-    )
-
-};
-// clang-format on
-
-bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
-    return true;
-}
-
-void matrix_init_keymap(void) {};
-
-// Runs whenever there is a layer state change.
-layer_state_t layer_state_set_keymap(layer_state_t state) {
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-
-    uint8_t layer = get_highest_layer(state);
-    switch (layer) {
-        case _LOWER:
-            ergodox_right_led_3_on();
-            break;
-        case _MOD:
-            ergodox_right_led_2_on();
-            break;
-        case _RAISE:
-            ergodox_right_led_1_on();
-            break;
-        case _ADJUST:
-            ergodox_right_led_1_on();
-            ergodox_right_led_2_on();
-            break;
-        default:
-            break;
-    }
-
-    ergodox_right_led_1_set(25);
-    ergodox_right_led_2_set(25);
-    ergodox_right_led_3_set(25);
-
-    return state;
-};
-
-void matrix_scan_keymap(void) {
-    uint8_t modifiers = get_mods();
-    uint8_t led_usb_state = host_keyboard_leds();
-    uint8_t one_shot = get_oneshot_mods();
-    uint8_t layer_is_workman = layer_state_is(_WORKMAN);
-
-    if ((modifiers) && (layer_is_workman)) {
-        if (modifiers & MODS_SHIFT_MASK || led_usb_state & (1<<USB_LED_CAPS_LOCK) || one_shot & MODS_SHIFT_MASK) {
-            ergodox_right_led_1_on();
-            ergodox_right_led_1_set( 25 );
-        } else {
-            ergodox_right_led_1_off();
-        }
-        if ((modifiers & MODS_CTRL_MASK || one_shot & MODS_CTRL_MASK) && (modifiers & MODS_GUI_MASK || one_shot & MODS_GUI_MASK)) {
-            ergodox_right_led_2_on();
-            ergodox_right_led_2_set( 50 );
-        } else if ((modifiers & MODS_CTRL_MASK || one_shot & MODS_CTRL_MASK) || (modifiers & MODS_GUI_MASK || one_shot & MODS_GUI_MASK)) {
-            ergodox_right_led_2_on();
-            ergodox_right_led_2_set( 10 );
-        } else {
-            ergodox_right_led_2_off();
-        }
-        if (modifiers & MODS_ALT_MASK || one_shot & MODS_ALT_MASK) {
-            ergodox_right_led_3_on();
-            ergodox_right_led_3_set( 10 );
-        } else {
-            ergodox_right_led_3_off();
-        }
-    } else if (!(modifiers) && (layer_is_workman)) {
-        ergodox_right_led_1_off();
-        ergodox_right_led_2_off();
-        ergodox_right_led_3_off();
-    }
-};

+ 0 - 28
layouts/community/ergodox/bocaj/readme.md

@@ -1,28 +0,0 @@
-# Overview
-
-This is my personal Ergodox EZ configuration, and my daily driver.
-
-Most of the code resides in my userspace and is heavily based upon [Drashna's work](https://github.com/qmk/qmk_firmware/tree/master/users/drashna)... although considerably slimmed down.
-
-## How to build
-
-Put simply:
-`make ergodox_ez:bocaj`
-
-On that note, I use a separate workspace when making changes to my layouts or userspace. In that repo, there is a tool that does this for me. See [JacobJerrell/qmk_layouts/tools/](https://github.com/JacobJerrell/qmk_layouts/tree/master/tools)
-
-## Layers
-
-* WORKMAN: No one uses this board but me and I've never had a reason to switch to QWERTY
-* LOWER:
-  * Left: Grave and navigation arrows
-  * Right: Numpad
-* RAISE:
-  * Symbols across the top, F-Keys on the second row
-* ADJUST
-  * Audio control, make/reset/version macros
-* MOD: mouse navigation
-
-## Ergodox Specifics
-
-I don't have the underglow or backlit versions so the 3 LEDs on the right board are used for layer indication if not on the base layer. If you're on the base layer, they're used for mod-key indicators.

+ 0 - 14
layouts/community/ergodox/bocaj/rules.mk

@@ -1,14 +0,0 @@
-BOOTMAGIC_ENABLE = lite     # Enable Bootmagic Lite
-TAP_DANCE_ENABLE   = no
-COMMAND_ENABLE     = no  # Commands for debug and configuration
-CONSOLE_ENABLE 	   = yes
-SPACE_CADET_ENABLE = no
-KEY_LOCK_ENABLE    = yes
-MOUSEKEY_ENABLE    = yes
-EXTRAKEY_ENABLE	   = yes
-LEADER_ENABLE	   = yes
-
-UNICODE_ENABLE     = no
-UNICODEMAP_ENABLE  = no
-RGB_MATRIX_ENABLE  = no
-RGBLIGHT_ENABLE    = no

+ 21 - 0
layouts/community/ergodox/jjerrell/config.h

@@ -0,0 +1,21 @@
+// Copyright (C) 2021 Jerrell, Jacob <@jjerrell>
+// 
+// This file is part of qmk_firmware.
+// 
+// qmk_firmware 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 3 of the License, or
+// (at your option) any later version.
+// 
+// qmk_firmware 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 qmk_firmware.  If not, see <http://www.gnu.org/licenses/>.
+
+#ifdef KEYBOARD_ergodox_ez
+#undef   PRODUCT
+#define  PRODUCT  ErgoDox EZ - Modified by <@jjerrell>
+#endif

+ 129 - 0
layouts/community/ergodox/jjerrell/keymap.c

@@ -0,0 +1,129 @@
+/**
+ * Copyright (C) 2021 Jerrell, Jacob <@jjerrell>
+ * 
+ * This file is part of qmk_firmware.
+ * 
+ * qmk_firmware 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 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * qmk_firmware 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 qmk_firmware.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "jjerrell.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    // clang-format off
+    [_WORKMAN] = LAYOUT_ergodox_mods(
+        __________________WORKMN_L1__________________, __________________WORKMN_R1__________________,
+        __________________WORKMN_L2__________________, __________________WORKMN_R2__________________,
+        __________________WORKMN_L3__________________, __________________WORKMN_R3__________________,
+        XXXXXXX, XXXXXXX, XXXXXXX, KC_LSFT,                       KC_RSFT, XXXXXXX, XXXXXXX, XXXXXXX
+    ),
+    /* Lower - Nav/Select/Nums */
+    [_LOWER] = LAYOUT_ergodox_mods(
+        __________________LOWER_L1___________________, __________________LOWER_R1___________________,
+        __________________LOWER_L2___________________, __________________LOWER_R2___________________,
+        __________________LOWER_L3___________________, __________________LOWER_R3___________________,
+          XXXXXXX, XXXXXXX, XXXXXXX, KC_LSFT,                         KC_0, KC_DOT, KC_COMM, KC_PLUS
+    ),
+    /* Raise - Symbols */
+    [_RAISE] = LAYOUT_ergodox_common(
+        __________________RAISE_L1___________________, __________________RAISE_R1___________________,
+        __________________RAISE_L2___________________, __________________RAISE_R2___________________,
+        __________________RAISE_L3___________________, __________________RAISE_R3___________________,
+        XXXXXXX, XXXXXXX, XXXXXXX, KC_LSFT,                       KC_RSFT, XXXXXXX, XXXXXXX, XXXXXXX
+    ),
+    /* Adjust (Lower + Raise) */
+    [_ADJUST] = LAYOUT_ergodox_common(
+         __________________ADJUST_L1__________________, __________________ADJUST_R1__________________,
+         __________________ADJUST_L2__________________, __________________ADJUST_R2__________________,
+         __________________ADJUST_L3__________________, __________________ADJUST_R3__________________,
+         XXXXXXX, XXXXXXX, XXXXXXX, KC_LSFT,                       KC_RSFT, XXXXXXX, XXXXXXX, XXXXXXX
+    ),
+    [_SPECIAL] = LAYOUT_ergodox_common(
+        XXXXXXX, XXXXXXX, KC_WH_D, XXXXXXX, XXXXXXX,     XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+        XXXXXXX, KC_WH_L, KC_WH_U, KC_WH_R, XXXXXXX,     XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+        XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,     XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+        XXXXXXX, XXXXXXX, XXXXXXX, KC_LALT,                       KC_RALT, XXXXXXX, XXXXXXX, XXXXXXX
+    )
+// clang-format on
+};
+
+#ifdef KEYBOARD_ergodox_ez
+// Runs whenever there is a layer state change.
+layer_state_t layer_state_set_keymap(layer_state_t state) {
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+
+    uint8_t layer = get_highest_layer(state);
+    switch (layer) {
+        case _LOWER:
+            ergodox_right_led_3_on();
+            break;
+        case _RAISE:
+            ergodox_right_led_1_on();
+            break;
+        case _ADJUST:
+            ergodox_right_led_1_on();
+            ergodox_right_led_2_on();
+            ergodox_right_led_3_on();
+            break;
+        case _SPECIAL:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            break;
+    }
+
+    ergodox_right_led_1_set(25);
+    ergodox_right_led_2_set(25);
+    ergodox_right_led_3_set(25);
+
+    return state;
+};
+
+void matrix_scan_keymap(void) {
+    uint8_t modifiers = get_mods();
+    uint8_t led_usb_state = host_keyboard_leds();
+    uint8_t one_shot = get_oneshot_mods();
+    uint8_t layer_is_workman = layer_state_is(_WORKMAN);
+
+    if ((modifiers) && (layer_is_workman)) {
+        if (modifiers & MOD_MASK_SHIFT || led_usb_state & (1<<USB_LED_CAPS_LOCK) || one_shot & MOD_MASK_SHIFT) {
+            ergodox_right_led_1_on();
+            ergodox_right_led_1_set( 25 );
+        } else {
+            ergodox_right_led_1_off();
+        }
+        if ((modifiers & MOD_MASK_CTRL || one_shot & MOD_MASK_CTRL) && (modifiers & MOD_MASK_GUI || one_shot & MOD_MASK_GUI)) {
+            ergodox_right_led_2_on();
+            ergodox_right_led_2_set( 50 );
+        } else if ((modifiers & MOD_MASK_CTRL || one_shot & MOD_MASK_CTRL) || (modifiers & MOD_MASK_GUI || one_shot & MOD_MASK_GUI)) {
+            ergodox_right_led_2_on();
+            ergodox_right_led_2_set( 10 );
+        } else {
+            ergodox_right_led_2_off();
+        }
+        if (modifiers & MOD_MASK_ALT || one_shot & MOD_MASK_ALT) {
+            ergodox_right_led_3_on();
+            ergodox_right_led_3_set( 10 );
+        } else {
+            ergodox_right_led_3_off();
+        }
+    } else if (layer_is_workman) {
+        ergodox_right_led_1_off();
+        ergodox_right_led_2_off();
+        ergodox_right_led_3_off();
+    }
+};
+#endif

+ 5 - 0
layouts/community/ergodox/jjerrell/readme.md

@@ -0,0 +1,5 @@
+# Jacob Jerrell's Ergodox Layout
+
+This is my original QMK keyboard. There isn't much to see here aside from some control over the 3 ergodox_right LEDs for layer & modifier indication.
+
+The bulk of the functionality is implemented in [my userspace](../../../../users/jjerrell) so it can be shared among my other keyboards.

+ 14 - 0
layouts/community/ergodox/jjerrell/rules.mk

@@ -0,0 +1,14 @@
+BOOTMAGIC_ENABLE = lite
+TAP_DANCE_ENABLE = no
+COMMAND_ENABLE = no
+CONSOLE_ENABLE = yes
+SPACE_CADET_ENABLE = no
+KEY_LOCK_ENABLE = no
+MOUSEKEY_ENABLE = yes
+EXTRAKEY_ENABLE = yes
+LEADER_ENABLE = yes
+
+UNICODE_ENABLE = no
+UNICODEMAP_ENABLE = no
+RGB_MATRIX_ENABLE = no
+RGBLIGHT_ENABLE = no

+ 0 - 106
layouts/community/ortho_4x12/bocaj/config.h

@@ -1,106 +0,0 @@
-#pragma once
-
-#define LEADER_TIMEOUT 250
-#define LEADER_PER_KEY_TIMING
-
-#if defined(RGBLIGHT_ENABLE) && !defined(RGBLED_NUM)
-#    if defined(KEYBOARD_planck_light)
-#        define RGB_DI_PIN A0
-#        define RGBLED_NUM 13  // Number of LEDs
-#    endif
-#    define RGBLIGHT_HUE_STEP 12
-#    define RGBLIGHT_SAT_STEP 12
-#    define RGBLIGHT_VAL_STEP 12
-#    define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2
-#    define RGBLIGHT_EFFECT_SNAKE_LENGTH 2
-#    ifdef RGB_MATRIX_ENABLE
-#        define RGBLIGHT_DISABLE_KEYCODES
-#    endif
-#endif  // RGBLIGHT_ENABLE
-
-#ifdef RGB_MATRIX_ENABLE
-#    define RGB_MATRIX_KEYPRESSES  // reacts to keypresses (will slow down matrix scan by a lot)
-// #define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (not recommened)
-#    define RGB_MATRIX_FRAMEBUFFER_EFFECTS
-// #define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
-// #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255
-#    define RGB_DISABLE_WHEN_USB_SUSPENDED  // turn off effects when suspended
-#    undef RGB_MATRIX_LED_PROCESS_LIMIT
-#    undef RGB_MATRIX_LED_FLUSH_LIMIT
-#endif
-
-#if defined(KEYBOARD_planck_ez)
-#    undef PRODUCT
-#    define PRODUCT Bocaj Hacked Planck EZ
-#endif
-
-#define EEPROM_I2C_RM24C512C
-
-#define ENCODER_DIRECTION_FLIP
-/*
- * MIDI options
- */
-
-/* enable basic MIDI features:
-   - MIDI notes can be sent when in Music mode is on
-*/
-
-// #define MIDI_BASIC
-
-/* enable advanced MIDI features:
-   - MIDI notes can be added to the keymap
-   - Octave shift and transpose
-   - Virtual sustain, portamento, and modulation wheel
-   - etc.
-*/
-//#define MIDI_ADVANCED
-
-/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
-//#define MIDI_TONE_KEYCODE_OCTAVES 2
-
-#define FB_ERM_LRA 1     /* For ERM:0 or LRA:1*/
-#define FB_BRAKEFACTOR 6 /* For 1x:0, 2x:1, 3x:2, 4x:3, 6x:4, 8x:5, 16x:6, Disable Braking:7 */
-#define FB_LOOPGAIN 1    /* For  Low:0, Medium:1, High:2, Very High:3 */
-
-/* default 3V ERM vibration motor voltage and library*/
-#if FB_ERM_LRA == 0
-#    define RATED_VOLTAGE 3
-#    define V_RMS 2.3
-#    define V_PEAK 3.30
-/* Library Selection */
-#    define LIB_SELECTION 4 /* For Empty:0' TS2200 library A to D:1-5, LRA Library: 6 */
-
-/* default 2V LRA voltage and library */
-#elif FB_ERM_LRA == 1
-#    define RATED_VOLTAGE 2
-#    define V_RMS 2.0
-#    define V_PEAK 2.85
-#    define F_LRA 200
-/* Library Selection */
-#    define LIB_SELECTION 6 /* For Empty:0' TS2200 library A to D:1-5, LRA Library: 6 */
-
-#endif
-
-/* Control 1 register settings */
-#define DRIVE_TIME 25
-#define AC_COUPLE 0
-#define STARTUP_BOOST 1
-
-/* Control 2 Settings */
-#define BIDIR_INPUT 1
-#define BRAKE_STAB 1 /* Loopgain is reduced when braking is almost complete to improve stability */
-#define SAMPLE_TIME 3
-#define BLANKING_TIME 1
-#define IDISS_TIME 1
-
-/* Control 3 settings */
-#define NG_THRESH 2
-#define ERM_OPEN_LOOP 1
-#define SUPPLY_COMP_DIS 0
-#define DATA_FORMAT_RTO 0
-#define LRA_DRIVE_MODE 0
-#define N_PWM_ANALOG 0
-#define LRA_OPEN_LOOP 0
-/* Control 4 settings */
-#define ZC_DET_TIME 0
-#define AUTO_CAL_TIME 3

+ 0 - 287
layouts/community/ortho_4x12/bocaj/keymap.c

@@ -1,287 +0,0 @@
-/*
-Copyright 2020 Jacob Jerrell <jacob.jerrell@gmail.com> @JacobJerrell
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "bocaj.h"
-
-#ifdef BACKLIGHT_ENABLE
-enum planck_keycodes {
-    BACKLIT = NEW_SAFE_RANGE,
-    TH_LVL,
-};
-
-#else
-#    define BACKLIT OSM(MOD_LSFT)
-enum planck_keycodes {
-    TH_LVL = NEW_SAFE_RANGE,
-};
-#endif
-
-/*
- * Tap/Hold Wrapper
- * ,-----------------------------------------------------------------------------------.
- * |      |      |      |      |      |      |      |      |      |      |      |      |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * |      |      |Shift | Cmd  | Alt  |      |      | Alt  | Cmd  |Shift |      |      |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * |      | Ctrl |      |      |      |      |      |      |      |      | Ctrl |      |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * |      |      |      |      |Lower |             |Raise |      |      |      |      |
- * `-----------------------------------------------------------------------------------'
- */
-#define LAYOUT_ortho_4x12_bocaj(...) WRAPPER_planck_bocaj(__VA_ARGS__)
-
-/*
- * Base Alphanumeric Wrapper + Tap/Hold Wrapper
- * ,-----------------------------------------------------------------------------------.
- * |  Esc |      |      |      |      |      |      |      |      |      |      |  -   |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * |  Tab |      |      |      |      | HYPR | MEH  |      |      |      |      |  '   |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Shift|      |      |      |      |      |      |      |      |      |      | TTMOD|
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | MOMOD| Lead |  Up  | Left |BkSpc |    Space    |Enter |Right | Down | XXX  | XXX  |
- * `-----------------------------------------------------------------------------------'
- */
-#define LAYOUT_ortho_4x12_bocaj_base(...) WRAPPER_planck_bocaj_base(__VA_ARGS__)
-#define LAYOUT_ortho_4x12_bocaj_base_WIN(...) WRAPPER_planck_bocaj_base_WIN(__VA_ARGS__)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
-  [_WORKMAN] = LAYOUT_ortho_4x12_bocaj_base(
-    _________________WORKMAN_L1________________, _________________WORKMAN_R1________________,
-    _________________WORKMAN_L2________________, _________________WORKMAN_R2________________,
-    _________________WORKMAN_L3________________, _________________WORKMAN_R3________________
-  ),
-  [_WWORKMAN] = LAYOUT_ortho_4x12_bocaj_base_WIN(
-    _________________WORKMAN_L1________________, _________________WORKMAN_R1________________,
-    _________________WORKMAN_L2________________, _________________WORKMAN_R2________________,
-    _________________WORKMAN_L3________________, _________________WORKMAN_R3________________
-  ),
-
-  [_QWERTY] = LAYOUT_ortho_4x12_bocaj_base(
-    _________________QWERTY_L1_________________, _________________QWERTY_R1_________________,
-    _________________QWERTY_L2_________________, _________________QWERTY_R2_________________,
-    _________________QWERTY_L3_________________, _________________QWERTY_R3_________________
-  ),
-  [_WQWERTY] = LAYOUT_ortho_4x12_bocaj_base_WIN(
-    _________________QWERTY_L1_________________, _________________QWERTY_R1_________________,
-    _________________QWERTY_L2_________________, _________________QWERTY_R2_________________,
-    _________________QWERTY_L3_________________, _________________QWERTY_R3_________________
-  ),
-
-  [_LOWER] = LAYOUT_ortho_4x12_bocaj(
-    ___________________LOWER_L1_EXT____________________, ___________________LOWER_R1_EXT____________________,
-    ___________________LOWER_L2_EXT____________________, ___________________LOWER_R2_EXT____________________,
-    ___________________LOWER_L3_EXT____________________, ___________________LOWER_R3_EXT____________________,
-    _______, _______, _______, _______, _______, _______,  _______, KC_0,  KC_DOT,  KC_COMM, _______, _______
-  ),
-
-  [_RAISE] = LAYOUT_ortho_4x12_bocaj(
-    KC_TILD, _________________RAISE_L1__________________, _________________RAISE_R1__________________, KC_EQUAL,
-    KC_F11,  _________________RAISE_L2__________________, _________________RAISE_R2__________________, KC_F12,
-    _______, _________________RAISE_L3__________________, _________________RAISE_R3__________________, _______,
-    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
-  ),
-
-  [_ADJUST] = WRAPPER_ortho_4x12(
-    KC_MAKE, _________________ADJUST_L1_________________, _________________ADJUST_R1_________________, KC_RST,
-    VRSN,    _________________ADJUST_L2_________________, _________________ADJUST_R2_________________, EEP_RST,
-    TH_LVL,  _________________ADJUST_L3_________________, _________________ADJUST_R3_________________, RGB_IDL,
-    HPT_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
-  )
-
-};
-// clang-format on
-
-bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
-    switch (keycode) {
-#ifdef BACKLIGHT_ENABLE
-        case BACKLIT:
-            if (record->event.pressed) {
-                register_code(KC_RSFT);
-#    ifdef BACKLIGHT_ENABLE
-                backlight_step();
-#    endif
-            } else {
-                unregister_code(KC_RSFT);
-            }
-            break;
-#endif
-#ifdef KEYBOARD_planck_ez
-        case TH_LVL:
-            if (record->event.pressed) {
-                keyboard_config.led_level++;
-                if (keyboard_config.led_level > 4) {
-                    keyboard_config.led_level = 0;
-                }
-                planck_ez_right_led_level((uint8_t)keyboard_config.led_level * 255 / 4);
-                planck_ez_left_led_level((uint8_t)keyboard_config.led_level * 255 / 4);
-                eeconfig_update_kb(keyboard_config.raw);
-                layer_state_set_kb(layer_state);
-            }
-            break;
-#endif
-    }
-    return true;
-}
-
-bool music_mask_user(uint16_t keycode) {
-    switch (keycode) {
-        default:
-            return true;
-    }
-}
-
-#ifdef RGB_MATRIX_ENABLE
-
-// clang-format off
-void suspend_power_down_keymap(void) {
-    rgb_matrix_set_suspend_state(true);
-}
-
-void suspend_wakeup_init_keymap(void) {
-    rgb_matrix_set_suspend_state(false);
-}
-// clang-format on
-
-void rgb_matrix_indicators_user(void) {
-    uint8_t this_mod = get_mods();
-    uint8_t this_led = host_keyboard_leds();
-    uint8_t this_osm = get_oneshot_mods();
-    bool    is_ez;
-#    ifdef KEYBOARD_planck_ez
-    is_ez = true;
-#    endif
-
-    if (g_suspend_state || !rgb_matrix_config.enable) return;
-
-#    if defined(RGBLIGHT_ENABLE)
-    if (!userspace_config.rgb_layer_change)
-#    else
-    if (userspace_config.rgb_layer_change)
-#    endif
-    {
-        switch (get_highest_layer(layer_state)) {
-            case _MOD:
-                rgb_matrix_layer_helper(HSV_ORANGE, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
-                break;
-            case _RAISE:
-                rgb_matrix_layer_helper(HSV_BLUE, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
-                break;
-            case _LOWER:
-                rgb_matrix_layer_helper(HSV_GREEN, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
-                break;
-            case _ADJUST:
-                rgb_matrix_layer_helper(HSV_RED, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
-                break;
-            default: {
-                bool mods_enabled = false;
-                switch (get_highest_layer(default_layer_state)) {
-                    case _QWERTY:
-                        rgb_matrix_layer_helper(HSV_CYAN, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
-                        break;
-                    case _WQWERTY:
-                        rgb_matrix_layer_helper(HSV_BLUE, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
-                        break;
-                    case _WORKMAN:
-                        rgb_matrix_layer_helper(HSV_SPRINGGREEN, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
-                        break;
-                    case _WWORKMAN:
-                        rgb_matrix_layer_helper(HSV_GREEN, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
-                        break;
-                }
-                break;
-            }
-        }
-    }
-
-    switch (get_highest_layer(default_layer_state)) {
-        case _QWERTY:
-            rgb_matrix_set_color(is_ez ? 41 : 42, 0x00, 0xFF, 0xFF);
-            break;
-        case _WORKMAN:
-            rgb_matrix_set_color(is_ez ? 41 : 42, 0xD9, 0xA5, 0x21);
-            break;
-    }
-
-    if ((this_mod | this_osm) & MODS_SHIFT_MASK || this_led & (1 << USB_LED_CAPS_LOCK)) {
-        rgb_matrix_set_color_row(0, 0x00, 0xFF, 0x00);
-    }
-    if ((this_mod | this_osm) & MODS_CTRL_MASK && (this_mod | this_osm) & MODS_GUI_MASK) {
-        rgb_matrix_set_color_row(1, 0xFF, 0xD9, 0xFF);
-    } else if ((this_mod | this_osm) & MODS_CTRL_MASK) {
-        rgb_matrix_set_color_row(1, 0xFF, 0x00, 0x00);
-    } else if ((this_mod | this_osm) & MODS_GUI_MASK) {
-        rgb_matrix_set_color_row(1, 0xFF, 0xD9, 0x00);
-    }
-    if ((this_mod | this_osm) & MODS_ALT_MASK) {
-        rgb_matrix_set_color_row(2, 0x00, 0x00, 0xFF);
-    }
-}
-#endif  // RGB_MATRIX_INIT
-
-void matrix_init_keymap(void) {}
-
-#ifdef ENCODER_ENABLE
-bool encoder_update_user(uint8_t index, bool clockwise) {
-    switch (get_highest_layer(layer_state)) {
-        case _RAISE:
-            clockwise ? tap_code(KC_VOLD) : tap_code(KC_VOLU);
-            break;
-        case _LOWER:
-#    ifdef RGB_MATRIX_ENABLE
-            clockwise ? rgb_matrix_step() : rgb_matrix_step_reverse();
-#    else
-            clockwise ? tap_code(KC_PGDN) : tap_code(KC_PGUP);
-#    endif
-            break;
-        case _ADJUST:
-#    ifdef AUDIO_CLICKY
-            clockwise ? clicky_freq_up() : clicky_freq_down();
-#    endif
-            break;
-        default:
-            clockwise ? tap_code(KC_DOWN) : tap_code(KC_UP);
-    }
-#    ifdef AUDIO_CLICKY
-    clicky_play();
-#    endif
-    return true;
-}
-#endif  // ENCODER_ENABLE
-
-#ifdef KEYBOARD_planck_ez
-layer_state_t layer_state_set_keymap(layer_state_t state) {
-    planck_ez_left_led_off();
-    planck_ez_right_led_off();
-    switch (get_highest_layer(state)) {
-        case _LOWER:
-            planck_ez_left_led_on();
-            break;
-        case _RAISE:
-            planck_ez_right_led_on();
-            break;
-        case _ADJUST:
-            planck_ez_right_led_on();
-            planck_ez_left_led_on();
-            break;
-        default:
-            break;
-    }
-    return state;
-}
-#endif

Неке датотеке нису приказане због велике количине промена