Compare commits

...

10 Commits

Author SHA1 Message Date
fauxpark
74e3cad728 Remove entries for Minidox eep files from gitignore (#8077) 2020-02-04 18:30:57 -08:00
Drashna Jaelre
0010d0c45e Add Midi Endpoint task to ChibiOS main (#8071) 2020-02-04 18:28:47 -08:00
Jesse Leventhal
8a749a7a8e Encoder brush size (#8087)
* Added brush size to encoder knob as new keymap

* Encoder keymap added
2020-02-05 12:56:50 +11:00
ridingqwerty
964ed17716 ridingqwerty: userspace update (#8076)
* Userspace overhaul

* Remove testing directory

* Minorca keymap tweaks
2020-02-04 20:17:10 +01:00
Jonas Avellana
50554ca270 Ninjonas userspace (#8070)
* [keymap(kyria)] moved OLED & encoder implementation to separate classes

* [feat] created logic to cycle through hue wheel when starting keyboard

* [feat] created logic to cycle through hue wheel and return to user's default color

* [refactor] updating OLED layout for crkbd & lily58

* [refactor] updating OLED layout for crkbd & lily58

* [fix(8070)] updating encoder.c logic based off drashna's code review

* [refactor(8070)] added key to send  + Shift + M
2020-02-04 12:50:50 +11:00
MechMerlin
c6f389b527 Merlin's userspace updates (#8074) 2020-02-03 22:37:01 +01:00
skullydazed
5780c94423 Improve the functionality of qmk.questions (#8020)
* wip

* tested and working

* remove unused import

* Update lib/python/qmk/questions.py

Co-Authored-By: Erovia <Erovia@users.noreply.github.com>

* fix flake8 errors

Co-authored-by: Erovia <Erovia@users.noreply.github.com>
2020-02-03 09:04:58 -08:00
Mike Rix Wolfe
acef512730 [Keymap] Add User Keymap for FC660C (#8062)
* add my keymaps

* tri layer keymap

* update tri layer

* update tri layer

* cleaning up

* formatting

* move to correct location

* lily58: move caps off mod key in sublayer

* Update keyboards/lily58/keymaps/mikefightsbears/rules.mk

* Update keyboards/lily58/keymaps/mikefightsbears/rules.mk

* Update keyboards/lily58/keymaps/mikefightsbears/rules.mk

* Update keyboards/lily58/keymaps/mikefightsbears/rules.mk

* remove unnecessary trailing whacks

* remove unneeded file

* swap spacebar

* update code for comments in PR

* add fc660c keymap

* rm readme

* move layer key

* remove inconvenient alternate keys

* swap format

* add them media keys

* add rules mk

* swap caps and ctrl

* remove unneeded config

* use gesc instead of esc
2020-02-02 13:11:17 -08:00
QMK Bot
fa9c74c6a2 format code according to conventions [skip ci] 2020-02-02 20:47:40 +00:00
fauxpark
b2ce2f8a34 Dedupe extrakey report struct, and send functions in V-USB & LUFA (#7993)
* Dedupe extrakey report struct, and send functions in V-USB & LUFA

* Doc comment for consistency

* Wrap it in ifdef to prevent unused function error

* Do the same for ATSAM
2020-02-02 12:17:05 -08:00
62 changed files with 3065 additions and 472 deletions

3
.gitignore vendored
View File

@@ -63,9 +63,6 @@ util/Win_Check_Output.txt
*.gif
*.jpg
# Do not ignore MiniDox left/right hand eeprom files
!keyboards/minidox/*.eep
# things travis sees
secrets.tar
id_rsa_*

View File

@@ -30,9 +30,7 @@
MODS // LAYERS // MODS //
*/
#ifdef LAYOUT
#undef LAYOUT
#define LAYOUT( \
#define LAYOUT_atreus( \
K00, K01, K02, K03, K04, K40, K41, K42, K43, K44, \
K10, K11, K12, K13, K14, K50, K51, K52, K53, K54, \
K20, K21, K22, K23, K24, K60, K61, K62, K63, K64, \
@@ -47,70 +45,109 @@
{ K64, K63, K62, K61, K60, KC_NO }, \
{ K75, K74, K73, K72, K71, K70 } \
}
#endif
//#define ALPHA XP(UCM_LDEL, UCM_UDEL)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT( /* Qwerty */
KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
ED_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, NM_SCLN,
LS_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, FK_DOT, RS_SLSH,
LC_ESC, LG_TAB, LA_LBRC, LS_RBRC, NM_BSPC, ED_ESC, SC_TAB, SM_SPC, RS_MINS, RA_EQL, RG_QUOT, RC_ENT
[_QWERTY] = LAYOUT_atreus_wrapper( /* Qwerty */
________________ATREUS_L1__________________, ________________ATREUS_R1__________________,
________________ATREUS_L2__________________, ________________ATREUS_R2__________________,
________________ATREUS_L3__________________, ________________ATREUS_R3__________________,
________________BOTTOM_L4__________________, ____THUMBS_R4___, ________________BOTTOM_R4__________________
),
[_EDITOR] = LAYOUT( /* ED_A, ED_ESC */
KC_GRV, _______, KC_END, _______, KC_TAB, _______, _______, KC_INS, _______, KC_PGUP,
KC_HOME, _______, KC_DELT, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_ENT,
_______, _______, _______, _______, _______, KC_PGDN, _______, _______, _______, KC_BSLS,
_______, _______, _______, _______, _______, _______, KC_ENT, _______, _______, _______, _______, _______
[_DVORAK] = LAYOUT_atreus_wrapper( /* Qwerty */
________________DVORAK_L1__________________, ________________DVORAK_R1__________________,
________________DVORAK_L2__________________, ________________DVORAK_R2__________________,
________________DVORAK_L3__________________, ________________DVORAK_R3__________________,
________________BOTTOM_L4__________________, ____THUMBS_R4___, ________________BOTTOM_R4__________________
),
[_NUMBER] = LAYOUT( /* NM_SCLN, NM_BSPC */
KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
KC_6, KC_7, KC_8, KC_9, KC_0, _______, KC_4, KC_5, KC_6, _______,
_______, _______, _______, _______, _______, _______, KC_1, KC_2, KC_3, KC_BSLS,
_______, _______, _______, _______, _______, KC_MINS, KC_EQL, KC_0, KC_0, KC_DOT, _______, _______
[_COLEMAK] = LAYOUT_atreus_wrapper( /* Qwerty */
________________COLEMAK_L1_________________, ________________COLEMAK_R1_________________,
________________COLEMAK_L2_________________, ________________COLEMAK_R2_________________,
________________COLEMAK_L3_________________, ________________COLEMAK_R3_________________,
________________BOTTOM_L4__________________, ____THUMBS_R4___, ________________BOTTOM_R4__________________
),
[_SYMBOL] = LAYOUT( /* SM_SPC */
KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN,
KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, _______, _______, _______, KC_COLN,
//#if defined(UNICODEMAP_ENABLE)
//#ifdef UNICODE_H
#ifdef UNICODEMAP_ENABLE
[_GREEK] = LAYOUT_atreus_wrapper(
________________GREEK_L1___________________, ________________GREEK_R1___________________,
________________GREEK_L2___________________, ________________GREEK_R2___________________,
________________GREEK_L3___________________, ________________GREEK_R3___________________,
________________BOTTOM_L4__________________, ____THUMBS_R4___, ________________BOTTOM_R4__________________
),
[_RUSSIAN] = LAYOUT_atreus_wrapper(
________________CYRLC_L1___________________, ________________CYRLC_R1___________________,
________________CYRLC_L2___________________, ________________CYRLC_R2___________________,
________________CYRLC_L3___________________, ________________CYRLC_R3___________________,
________________BOTTOM_L4__________________, ____THUMBS_R4___, ________________CYRLC_R4___________________
),
[_RUNES] = LAYOUT_atreus_wrapper(
________________FTHRK_L1___________________, ________________FTHRK_R1___________________,
________________FTHRK_L2___________________, ________________FTHRK_R2___________________,
________________FTHRK_L3___________________, ________________FTHRK_R3___________________,
________________BOTTOM_L4__________________, ____THUMBS_R4___, ________________BOTTOM_R4__________________
),
[_HIRA1] = LAYOUT_atreus_wrapper(
________________JIS1_L1____________________, ________________JIS1_R1____________________,
________________JIS1_L2____________________, ________________JIS1_R2____________________,
________________JIS1_L3____________________, ________________JIS1_R3____________________,
________________BOTTOM_L4__________________, ____THUMBS_R4___, ________________BOTTOM_R4__________________
),
[_HIRA2] = LAYOUT_atreus_wrapper(
________________JIS2_L1____________________, ________________JIS2_R1____________________,
________________JIS2_L2____________________, ________________JIS2_R2____________________,
________________JIS2_L3____________________, ________________JIS2_R3____________________,
________________BOTTOM_L4__________________, ____THUMBS_R4___, ________________BOTTOM_R4__________________
),
#endif
[_EDITOR] = LAYOUT_atreus_wrapper( /* ED_A, ED_ESC */
________________EDITOR_L1__________________, ________________EDITOR_R1__________________,
________________EDITOR_L2__________________, ________________EDITOR_R2__________________,
________________EDITOR_L3__________________, ________________EDITOR_R3__________________,
_______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______
),
[_NUMBER] = LAYOUT_atreus_wrapper( /* NM_SCLN, NM_BSPC */
________________NUMROW_L1__________________, ________________NUMROW_R1__________________,
________________NUMROW_R1__________________, ________________NUMPAD_R2__________________,
___________________________________________, ________________NUMPAD_R3__________________,
___________________________________________, ________________, ________________NUMPAD_R4__________________
),
[_SYMBOL] = LAYOUT_atreus_wrapper( /* SM_SPC */
________________SYMROW_L1__________________, ________________SYMROW_R1__________________,
________________SYMROW_R1__________________, ________________SYMROW_R1__________________,
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BSLS,
_______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, _______, _______, _______, _______, _______
KC_LBRC, _______, _______, _______, _______, ________________, _______, _______, _______, _______, KC_RBRC
),
[_F_KEYS] = LAYOUT( /* FK_DOT */
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, _______, _______, _______, KC_F11,
KC_F11, KC_F12, _______, _______, _______, _______, _______, _______, _______, KC_F12,
[_F_KEYS] = LAYOUT_atreus_wrapper( /* FK_DOT */
________________FKEYROW_L1_________________, ________________FKEYROW_R1_________________,
________________FKEYROW_R1_________________, ________________FKEYROW_L1_________________,
KC_F11, KC_F12, _______, _______, _______, KC_F11, KC_F12, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
[_SECRET] = LAYOUT( /* shhhh... */
RESET, _______, _______, RUSTY, FUEL, KC_F13, _______, _______, _______, _______,
[_DEBUG] = LAYOUT_atreus_wrapper( /* shhhh... */
________________DEBUG_L1___________________, ________________DEBUG_R1___________________,
________________DEBUG_L2___________________, ________________DEBUG_R2___________________,
________________DEBUG_L3___________________, ________________DEBUG_R3___________________,
_______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______
),
[_SECRET] = LAYOUT_atreus_wrapper( /* shhhh... */
/*
_______, _______, _______, RUSTY, FUEL, _______, _______, _______, _______, _______,
AR1ST, SYSNOC, _______, _______, _______, _______, _______, _______, OS_LAB, _______,
CDLOCAL, _______, C0RE, VAXIS, _______, _______, MUNKY, _______, _______, _______,
CDLOCAL, _______, C0RE, VAXIS, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
*/
________________SECRET_L1__________________, ________________SECRET_R1__________________,
________________SECRET_L2__________________, ________________SECRET_R2__________________,
________________SECRET_L3__________________, ________________SECRET_R3__________________,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
[_FINAL] = LAYOUT( /* . */
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
[_FINAL] = LAYOUT_atreus( /* . */
_______, _______, _______, _______, TESTING, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
};
// custom tap/hold keys
uint16_t key_timer;
bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
switch(keycode) {
case RG_QUOT:
if (record->event.pressed) {
key_timer = timer_read();
layer_on(_NUMBER);
register_mods(MOD_BIT(KC_RGUI));
} else {
unregister_mods(MOD_BIT(KC_RGUI));
layer_off(_NUMBER);
if (timer_elapsed(key_timer) < TAPPING_TERM) {
tap_code(KC_QUOT);
}
}
return false; break;
}
return true;
};

View File

@@ -5,13 +5,14 @@ MCU = STM32F303
#
BACKLIGHT_ENABLE = no
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
#MOUSEKEY_ENABLE = yes # Mouse keys
MOUSEKEY_ENABLE = no # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = yes # Console for debug
COMMAND_ENABLE = yes # Commands for debug and configuration
#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = yes # USB Nkey Rollover
AUDIO_ENABLE = yes
AUDIO_ENABLE = yes # Doot
RGBLIGHT_ENABLE = no
# SERIAL_LINK_ENABLE = yes
#TAP_DANCE_ENABLE = yes
TAP_DANCE_ENABLE = no
UNICODE_ENABLE = no
UNICODEMAP_ENABLE = yes

View File

@@ -20,13 +20,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#pragma once
//#define USE_MATRIX_I2C
/* Select hand configuration */
#define TAPPING_TERM 200
#define MASTER_LEFT
// #define MASTER_RIGHT
// #define EE_HANDS
#define USE_SERIAL_PD2

View File

@@ -0,0 +1,34 @@
/*
Copyright 2017 Balz Guenat
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(
KC_GESC,KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_INS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSLS, KC_DEL,
KC_LCTL,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_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT, KC_UP,
KC_CAPS,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RCTL,MO(1), KC_LEFT,KC_DOWN,KC_RGHT
),
[1] = 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_PSCR,KC_SLCK,KC_PAUS,_______, _______,
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,
_______,_______,_______,_______,_______,_______,_______,KC_MUTE,KC_MPRV,KC_MNXT,KC_MPLY,_______, KC_PGUP,
_______,_______,_______, _______, _______,_______,_______, KC_HOME,KC_PGDN,KC_END
)
};

View File

@@ -0,0 +1,6 @@
# Build Options
# # change to "no" to disable the options, or define them in the Makefile in
# # the appropriate keymap folder that will get included automatically
# #
EXTRAKEY_ENABLE = yes # Audio control and System control
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work

View File

@@ -0,0 +1,7 @@
#pragma once
#undef MATRIX_COL_PINS
#define MATRIX_COL_PINS { B3, B7, D0, D1, D2, D3, C6, C7, B5, B6, F7, F6 }
#undef MATRIX_ROW_PINS
#define MATRIX_ROW_PINS { F0, F1, F4, F5 }

View File

@@ -0,0 +1,123 @@
/* Copyright 2019 George Koenig
*
* 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 "ridingqwerty.h"
/* MinOrca
┏━━━━━━━━┯━━━━━━━━┯━━━━━━━━┯━━━━━━━━┯━━━━━━━━┯━━━━━━━━┯━━━━━━━━┯━━━━━━━━┯━━━━━━━━┯━━━━━━━━┯━━━━━━━━┯━━━━━━━━┓
┃ ⎋ │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ ❦ ⌫ ┃
┠────────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴────────┨
┃ ¶ ⇥ │ A │ S │ D │ F │ G │ H │ J │ K │ L │ 🔢 ↵ ┃
┠──────────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬───────────┨
┃ " ⇧ │ Z │ X │ C │ V │ B │ N │ M │ , │ 𝔽 . │ ⇧ / ┃
┠──────────┬───┴──────┬─┴────────┼────────┴────────┴──┬─────┴────────┴─────┬──┴───────┬┴───────┬┴───────────┨
┃ { ⎈ │ [ ⌘ │ ( ⌥ │ 🔢 ␣ │ ★ ␣ │ ) ⌥ │ ] ⌘ │ } ⎈ ┃
┗━━━━━━━━━━┷━━━━━━━━━━┷━━━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━┷━━━━━━━━━━┷━━━━━━━━┷━━━━━━━━━━━━┛
*/
#define LAYOUT_minorca( \
KA00, KA01, KA02, KA03, KA04, KA05, KA06, KA07, KA08, KA09, KA10, KA11, \
KB00, KB01, KB02, KB03, KB04, KB05, KB06, KB07, KB08, KB09, KB11, \
KC00, KC02, KC03, KC04, KC05, KC06, KC07, KC08, KC09, KC10, KC11, \
KD00, KD02, KD03, KD04, KD07, KD09, KD10, KD11 \
) { \
{ KA00, KA01, KA02, KA03, KA04, KA05, KA06, KA07, KA08, KA09, KA10, KA11 }, \
{ KB00, KB01, KB02, KB03, KB04, KB05, KB06, KB07, KB08, KB09, KC_NO, KB11 }, \
{ KC00, KC_NO, KC02, KC03, KC04, KC05, KC06, KC07, KC08, KC09, KC10, KC11 }, \
{ KD00, KC_NO, KD02, KD03, KD04, KC_NO, KC_NO, KD07, KC_NO, KD09, KD10, KD11 } \
}
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = {
{KC_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, SC(BSPC) },
{ED(TAB), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, XXXXXXX, NM(SCLN) },
{LS(QUOT), XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, FK(DOT), RS(SLSH) },
{LC(ESC), XXXXXXX, LG(LBRC), LA(RBRC), NM(BSPC), XXXXXXX, XXXXXXX, SM(SPC), XXXXXXX, RA(MINS), RG(EQL), RC(ENT) }
/*
//┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┴────────┤
//├────────┴────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┬────────┤
//├─────────────────┼────────┼────────┼────────┴────────┼────────┴────────┼────────┴────────┼────────┼────────┤
//└─────────────────┴────────┴────────┴─────────────────┴─────────────────┴─────────────────┴────────┴────────┘
*/
},
#ifdef UNICODE_H
[_RUNE] = {
{KC_ESC, X(INGWZ), X(WUNJO), X(EHWAZ), X(RAIDO), X(TIWAZ), X(IWAZ), X(UR), X(ISAZ), X(ETHEL), X(PERTH), SC(BSPC) },
{ED(TAB), X(ANSUZ), X(SOWIL), X(DAGAZ), X(FE), X(GEBO), X(HAGLZ), X(JERAN), X(KAUNA), X(LAUKZ), XXXXXXX, NM(SCLN) },
{MT_QUOT, XXXXXXX, X(ALGIZ), X(THURS), X(KAUNA), X(WUNJO), X(BEORC), X(NAUDZ), X(MANNZ), KC_COMM, FK(DOT), RS(SLSH) },
{LC(ESC), XXXXXXX, LG(LBRC), LA(RBRC), NM(BSPC), XXXXXXX, XXXXXXX, SM(SPC), XXXXXXX, RA(MINS), RG(EQL), RC(ENT) }
},
#endif
[_EDITOR] = {
//┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐
{KC_GRV, _______, _______, KC_END, _______, KC_F5, _______, _______, KC_INS, _______, KC_PGUP, KC_DELT },
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┴────────┤
{_______, KC_HOME, _______, KC_DELT, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, KC_SCLN },
//├────────┴────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┬────────┤
{_______, XXXXXXX, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, KC_PGDN, _______, KC_SCLN, KC_QUOT, KC_BSLS },
//├─────────────────┼────────┼────────┼────────┴────────┼────────┴────────┼────────┴────────┼────────┼────────┤
{_______, XXXXXXX, _______, _______, KC_EQL, XXXXXXX, XXXXXXX, KC_MINS, XXXXXXX, KC_COLN, KC_DQUO, KC_PIPE }
//└─────────────────┴────────┴────────┴─────────────────┴─────────────────┴─────────────────┴────────┴────────┘
},
[_NUMBER] = {
//┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐
{KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC },
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┴────────┤
{_______, KC_4, KC_5, KC_6, KC_PAST, _______, KC_PPLS, KC_4, KC_5, KC_6, XXXXXXX, _______ },
//├────────┴────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┬────────┤
{_______, KC_7, KC_8, KC_9, KC_SLSH, _______, _______, KC_MINS, KC_1, KC_2, KC_3, _______ },
//├─────────────────┼────────┼────────┼────────┴────────┼────────┴────────┼────────┴────────┼────────┼────────┤
{_______, XXXXXXX, KC_0, _______, _______, XXXXXXX, XXXXXXX, KC_0, XXXXXXX, KC_DOT, _______, _______ }
//└─────────────────┴────────┴────────┴─────────────────┴─────────────────┴─────────────────┴────────┴────────┘
},
[_SYMBOL] = {
//┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐
{KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DELT },
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┴────────┤
{_______, _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, XXXXXXX, _______ },
//├────────┴────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┬────────┤
{_______, XXXXXXX, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, _______, _______, KC_SCLN, KC_QUOT, KC_BSLS },
//├─────────────────┼────────┼────────┼────────┴────────┼────────┴────────┼────────┴────────┼────────┼────────┤
{_______, XXXXXXX, _______, _______, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, KC_COLN, KC_DQUO, KC_PIPE }
//└─────────────────┴────────┴────────┴─────────────────┴─────────────────┴─────────────────┴────────┴────────┘
},
[_SECRET] = {
//┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐
{RESET, _______, _______, _______, SECRET0, SECRET1, _______, _______, _______, _______, VERSION, _______ },
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┴────────┤
{_______, SECRET4, SECRET8, DEBUG, _______, _______, _______, _______, _______, SECRET7, XXXXXXX, MAKE },
//├────────┴────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┬────────┤
{_______, XXXXXXX, SECRET6, _______, SECRET2, SECRET5, _______, _______, SECRET3, _______, _______, _______ },
//├─────────────────┼────────┼────────┼────────┴────────┼────────┴────────┼────────┴────────┼────────┼────────┤
{_______, XXXXXXX, _______, _______, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, _______, _______, _______ }
//└─────────────────┴────────┴────────┴─────────────────┴─────────────────┴─────────────────┴────────┴────────┘
},
[_F_KEYS] = {
//┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐
{KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11 },
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┴────────┤
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, _______ },
//├────────┴────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┬────────┤
{_______, XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
//├─────────────────┼────────┼────────┼────────┴────────┼────────┴────────┼────────┴────────┼────────┼────────┤
{_______, XXXXXXX, _______, _______, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, _______, _______, _______ }
//└─────────────────┴────────┴────────┴─────────────────┴─────────────────┴─────────────────┴────────┴────────┘
},
};

View File

@@ -0,0 +1 @@
# Handwire of Minorca using teensy 2.0

View File

@@ -0,0 +1,10 @@
MCU = atmega32u4
BOOTLOADER = halfkay
# Build Options
# change to "no" to disable the options, or define them in the Makefile in
# the appropriate keymap folder that will get included automatically
#
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
UNICODE_ENABLE = no # Unicode
UNICODEMAP_ENABLE = yes # Unicode Map

View File

@@ -10,10 +10,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
[1] = LAYOUT_65_ansi_blocker(
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_DEL, KC_DEL,
KC_TRNS, KC_TRNS, RGB_VAI, KC_TRNS, KC_TRNS, RGB_SAI, RGB_HUI, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_END,
KC_TRNS, RGB_SPD, RGB_VAD, RGB_SPI, KC_TRNS, RGB_SAD, RGB_HUD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU,
KC_TRNS, RGB_RMOD, RGB_TOG, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_MPRV, KC_MNXT, KC_MPLY, KC_TRNS, KC_PGUP, KC_VOLD,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END
_______, _______, RGB_VAI, _______, _______, RGB_SAI, RGB_HUI, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______, KC_END,
_______, RGB_SPD, RGB_VAD, RGB_SPI, _______, RGB_SAD, RGB_HUD, _______, _______, _______, _______, _______, _______, KC_VOLU,
_______, RGB_RMOD, RGB_TOG, RGB_MOD, _______, _______, _______, KC_MUTE, KC_MPRV, KC_MNXT, KC_MPLY, _______, KC_PGUP, KC_VOLD,
_______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
)
};

View File

@@ -20,7 +20,7 @@
#ifdef OLED_DRIVER_ENABLE
#define OLED_DISPLAY_128X64
#define OLED_TIMEOUT 30000
#define OLED_TIMEOUT 15000
#endif
#ifdef RGBLIGHT_ENABLE
@@ -32,10 +32,6 @@
# define RGBLIGHT_SPLIT
#endif
// Allows to use either side as the master. Look at the documentation for info:
// https://docs.qmk.fm/#/config_options?id=setting-handedness
#define EE_HANDS
// If you are using an Elite C rev3 on the slave side, uncomment the lines below:
#define SPLIT_USB_DETECT
#define SPLIT_USB_TIMEOUT 1000

View File

@@ -0,0 +1,84 @@
/* Copyright 2020 ninjonas
*
* 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 "ninjonas.h"
#ifdef ENCODER_ENABLE
void encoder_update_user(uint8_t index, bool clockwise) {
if (index == 0) {
switch (get_highest_layer(layer_state)) {
case _LOWER:
if (clockwise) {
tap_code16(SGUI(KC_TAB));
} else {
tap_code16(LGUI(KC_TAB));
}
break;
case _RAISE:
if (clockwise) {
tap_code(KC_PGUP);
} else {
tap_code(KC_PGDN);
}
break;
case _ADJUST:
if (clockwise) {
rgblight_increase_hue();
} else {
rgblight_decrease_hue();
}
break;
default:
if (clockwise) {
tap_code(KC_BRIU);
} else {
tap_code(KC_BRID);
}
break;
}
} else if (index == 1) {
switch (get_highest_layer(layer_state)) {
case _LOWER:
if (clockwise) {
tap_code(KC_UP);
} else {
tap_code(KC_DOWN);
}
break;
case _RAISE:
if (clockwise) {
tap_code16(LCTL(KC_TAB));
} else {
tap_code16(LCTL(LSFT(KC_TAB)));
}
break;
case _ADJUST:
if (clockwise) {
rgblight_increase_val();
} else {
rgblight_decrease_val();
}
break;
default:
if (clockwise) {
tap_code(KC_VOLU);
} else {
tap_code(KC_VOLD);
}
break;
}
}
}
#endif

View File

@@ -60,9 +60,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// |--------+-----——-+——------+-——-----+——------+——-----| |------—+——------+——------+——------+——------+--------|
_____________________LOWER_L2_______________________, _____________________LOWER_R2_______________________,
// |--------+-----——-+——------+-——-----+——------+——-----+———-----------. ,——————————————+------—+——------+——------+——------+——------+--------|
_____________________LOWER_L3_______________________,_______,_______, _______,_______,_____________________LOWER_R3_______________________,
_____________________LOWER_L3_______________________,_______,_______, _______,_______,_____________________LOWER_R3_______________________,
// `--------------------------+--------+--------+-------+-------+------| |------+-------+-------+--------+--------+--------+--------+--------'
_______,_______,_______,_______,_______, _______,_______,_______,_______,_______
_______,_______,_______,_______,_______, _______,_______,_______,_______,_______
// `----------------------------------------' `----------------------------------------'
),
@@ -72,9 +72,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// |--------+-----——-+——------+-——-----+——------+——-----| |------—+——------+——------+——------+——------+--------|
_____________________SYM_LEFT_______________________, _____________________SYM_RIGHT______________________,
// |--------+-----——-+——------+-——-----+——------+——-----+———-----------. ,——————————————+------—+——------+——------+——------+——------+--------|
_____________________FUNC_LEFT______________________,_______,_______, _______,_______,_____________________FUNC_RIGHT_____________________,
_____________________FUNC_LEFT______________________,_______,_______, K_CPRF,_______,_____________________FUNC_RIGHT_____________________,
// `--------------------------+--------+--------+-------+-------+------| |------+-------+-------+--------+--------+--------+--------+--------'
_______,_______,_______,_______,_______, _______,_______,_______,_______,_______
_______,_______,_______,_______,_______, _______,_______,_______,_______,_______
// `----------------------------------------' `----------------------------------------'
),
@@ -84,9 +84,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// |--------+-----——-+——------+-——-----+——------+——-----| |------—+——------+——------+——------+——------+--------|
_____________________ADJUST_L2______________________, _____________________ADJUST_R2______________________,
// |--------+-----——-+——------+-——-----+——------+——-----+———-----------. ,——————————————+------—+——------+——------+——------+——------+--------|
_____________________ADJUST_L3______________________,_______,_______, _______,_______,_____________________ADJUST_R3______________________,
_____________________ADJUST_L3______________________,_______,_______, _______,_______,_____________________ADJUST_R3______________________,
// `--------------------------+--------+--------+-------+-------+------| |------+-------+-------+--------+--------+--------+--------+--------'
_______,_______,_______,_______,_______, _______,_______,_______,_______,_______
_______,_______,_______,_______,_______, _______,_______,_______,_______,_______
// `----------------------------------------' `----------------------------------------'
),
/*
@@ -102,214 +102,4 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// `----------------------------------------' `----------------------------------------'
),
*/
};
#ifdef OLED_DRIVER_ENABLE
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
return OLED_ROTATION_180;
}
static void render_logo(void) {
static const char PROGMEM logo[] = {
// Converter: https://javl.github.io/image2cpp/
// Image Dimensions: 128x64
// Code Output Format: Plain Bytes
// Draw Mode: Vertical, 1 bit per pixel
0x00, 0x00, 0x80, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0xc0, 0x00, 0x00, 0xe0,
0xe0, 0xe0, 0xe0, 0x00, 0x00, 0x80, 0xe0, 0xe0, 0xe0, 0xe0, 0x80, 0x00, 0x00, 0xe0, 0xe0, 0xe0,
0xe0, 0x00, 0x60, 0xe0, 0xe0, 0xe0, 0x00, 0x00, 0x00, 0xe0, 0xe0, 0xe0, 0xe0, 0x80, 0x00, 0x00,
0xc0, 0xe0, 0xe0, 0xe0, 0x20, 0x60, 0xe0, 0xe0, 0xe0, 0xe0, 0x00, 0x00, 0x00, 0xe0, 0xe0, 0xe0,
0xe0, 0x00, 0x00, 0xc0, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0xc0, 0x00, 0x00, 0x00,
0x80, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0x80, 0x00, 0xe0, 0xe0, 0xfc, 0xfe,
0xfe, 0xfe, 0xee, 0xee, 0x0e, 0x80, 0xc0, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0x80,
0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0x80, 0x00, 0x00,
0x00, 0x00, 0x79, 0xfd, 0xfd, 0xfd, 0xec, 0xee, 0x76, 0x7f, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00,
0x07, 0x3f, 0xff, 0xfc, 0xf8, 0xff, 0x7f, 0x07, 0x0f, 0x7f, 0xff, 0xf8, 0xfc, 0xff, 0x3f, 0x07,
0x00, 0x00, 0x00, 0x03, 0x1f, 0xff, 0xfe, 0xf0, 0xff, 0x7f, 0x0f, 0x07, 0x3f, 0xff, 0xfc, 0xf8,
0xff, 0x7f, 0x0f, 0x01, 0x00, 0x00, 0x01, 0x0f, 0x3f, 0xff, 0xfe, 0xf8, 0xff, 0xff, 0x1f, 0x03,
0x00, 0x00, 0x1f, 0x7f, 0x7f, 0xff, 0xf6, 0xe6, 0xe6, 0xf7, 0xf7, 0x77, 0x37, 0x17, 0x00, 0x30,
0x79, 0xfd, 0xfd, 0xfd, 0xee, 0xee, 0x76, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff,
0xff, 0xff, 0x00, 0x00, 0x00, 0x3f, 0x7f, 0x7f, 0xff, 0xf1, 0xe0, 0xe0, 0xff, 0xff, 0x7f, 0x3f,
0x0e, 0x00, 0x0e, 0x3f, 0x7f, 0xff, 0xff, 0xe0, 0xe0, 0xe1, 0xff, 0x7f, 0x7f, 0x3f, 0x04, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 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, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x0e, 0x0e, 0x0f, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x0c, 0x3c, 0xfc, 0xfc, 0xfc, 0xc0, 0x00, 0xe0, 0xfc, 0xfc, 0x7c, 0x1c, 0x00, 0xf0, 0xf8,
0xf8, 0xfc, 0xdc, 0xdc, 0xdc, 0xfc, 0xfc, 0xf8, 0xf0, 0xe0, 0x00, 0x00, 0x30, 0xb8, 0xbc, 0xbc,
0xdc, 0xdc, 0xdc, 0xfc, 0xfc, 0xf8, 0xf0, 0x00, 0x1c, 0x1c, 0xff, 0xff, 0xff, 0xff, 0x1d, 0x1d,
0x00, 0xf0, 0xf8, 0xf8, 0xfc, 0x3c, 0x1c, 0x1c, 0xfc, 0xfc, 0xf8, 0xf0, 0xc0, 0x00, 0xe0, 0xf0,
0xf8, 0xfc, 0x3c, 0x1c, 0x1c, 0x3c, 0xfc, 0xf8, 0xf8, 0xe0, 0x00, 0x00, 0x20, 0xb8, 0xbc, 0xbc,
0xbc, 0xdc, 0xdc, 0xfc, 0xfc, 0xfc, 0xf8, 0xe0, 0x00, 0x0c, 0x7c, 0xfc, 0xfc, 0xc0, 0x00, 0xe0,
0xfc, 0xfc, 0xfc, 0xfc, 0xf0, 0x80, 0x00, 0xf8, 0xfc, 0xfc, 0x3c, 0x04, 0x0c, 0x7c, 0xfc, 0xfc,
0xf0, 0x00, 0xc0, 0xfc, 0xfc, 0x7c, 0xfc, 0xf8, 0xc0, 0x00, 0xf0, 0xfc, 0xfc, 0x7c, 0x0c, 0x00,
0x00, 0x00, 0xc0, 0xc1, 0xc7, 0xff, 0xff, 0xff, 0x7f, 0x1f, 0x03, 0x00, 0x00, 0x00, 0x07, 0x0f,
0x1f, 0x1f, 0x1e, 0x1c, 0x1c, 0x1e, 0x1e, 0x0e, 0x06, 0x00, 0x00, 0x06, 0x0f, 0x1f, 0x1f, 0x1f,
0x1d, 0x1d, 0x0e, 0x1f, 0x1f, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x1f, 0x1f, 0x00, 0x00,
0x00, 0x07, 0x0f, 0x0f, 0x1f, 0x1e, 0x1c, 0x1c, 0x1f, 0x1f, 0x0f, 0x07, 0x01, 0x00, 0x03, 0x07,
0x0f, 0x1f, 0x1e, 0x1c, 0x1c, 0x1e, 0x1f, 0x0f, 0x0f, 0x03, 0x00, 0x00, 0x0f, 0x1f, 0x1f, 0x1f,
0x1d, 0x1d, 0x0c, 0x0f, 0x1f, 0x1f, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x03, 0x1f, 0x1f, 0x1e, 0x1f,
0x0f, 0x01, 0x00, 0x07, 0x1f, 0x1f, 0x1f, 0x1f, 0x0f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0f,
0x1f, 0x1e, 0x1f, 0x1f, 0x03, 0x00, 0x03, 0x1f, 0x1f, 0x1e, 0x1f, 0x0f, 0x01, 0x00, 0x00, 0x00,
0x00, 0x80, 0xc1, 0xf1, 0xf9, 0xf9, 0xf9, 0xb8, 0xb8, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00,
0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80,
0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00,
0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x03, 0x7c, 0xfe, 0xff, 0xff, 0xc7, 0x83, 0x83,
0xc7, 0xff, 0xff, 0xff, 0x7c, 0x00, 0x00, 0x7c, 0xff, 0xff, 0xff, 0xc7, 0x83, 0x83, 0xc7, 0xff,
0xff, 0xfe, 0x7c, 0x00, 0xc0, 0xe6, 0xf7, 0xf7, 0xf7, 0xbb, 0xbb, 0xdb, 0xff, 0xff, 0xff, 0xfe,
0x00, 0x00, 0x03, 0x1f, 0xff, 0xff, 0xf0, 0xe0, 0xfe, 0xff, 0x1f, 0x3f, 0xff, 0xfe, 0xe0, 0xf0,
0xff, 0xff, 0x1f, 0x03, 0x00, 0x01, 0x0f, 0x7f, 0xff, 0xf8, 0xc0, 0xfc, 0xff, 0x3f, 0x1f, 0xff,
0xfe, 0xf0, 0xe0, 0xff, 0xff, 0x3f, 0x07, 0x00, 0x01, 0x07, 0x3f, 0xff, 0xff, 0xf8, 0xe0, 0xfc,
0xff, 0x7f, 0x0f, 0x03, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xdb, 0x9b, 0x9b, 0xdf, 0xdf, 0xdf, 0xde,
0x1c, 0x00, 0xc0, 0xe6, 0xf7, 0xf7, 0xf7, 0xbb, 0xbb, 0xdb, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00,
0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03,
0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x03, 0x03, 0x03, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03,
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00,
0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x38, 0x3f, 0x3f, 0x1f, 0x0f,
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00,
0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00
};
oled_write_raw_P(logo, sizeof(logo));
}
static void render_qmk_logo(void) {
static const char PROGMEM qmk_logo[] = {
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0};
oled_write_P(qmk_logo, false);
}
void oled_white_space(void){
oled_write_P(PSTR(" "), false);
}
static void render_status(void) {
oled_write_P(PSTR("\nLayer: "), false);
oled_write_P(PSTR("LOW"), (layer_state_is(_LOWER) & !layer_state_is(_ADJUST)));
oled_white_space();
oled_write_P(PSTR("RAI"), (layer_state_is(_RAISE) & !layer_state_is(_ADJUST)));
oled_white_space();
oled_write_P(PSTR("ADJ"), layer_state_is(_ADJUST));
}
void render_default_layer_state(void) {
oled_write_P(PSTR("\nLayout: "), false);
switch (biton32(default_layer_state)) {
case _COLEMAK:
oled_write_P(PSTR("Colemak"), false);
break;
case _DVORAK:
oled_write_P(PSTR("Dvorak"), false);
break;
case _QWERTY:
oled_write_P(PSTR("Qwerty"), false);
break;
default:
oled_write_ln_P(PSTR("Undefined"), false);
}
}
void render_mod_status(uint8_t modifiers) {
oled_write_P(PSTR("\nMods: "), false);
oled_write_P(PSTR("SHF"), (modifiers & MOD_MASK_SHIFT));
oled_white_space();
oled_write_P(PSTR("CTL"), (modifiers & MOD_MASK_CTRL));
oled_white_space();
oled_write_P(PSTR("ALT"), (modifiers & MOD_MASK_ALT));
oled_white_space();
oled_write_P(PSTR("GUI"), (modifiers & MOD_MASK_GUI));
}
void oled_task_user(void) {
if (is_keyboard_master()) {
render_qmk_logo();
render_default_layer_state();
render_status();
render_mod_status(get_mods()|get_oneshot_mods());
} else {
render_logo();
oled_scroll_left();
}
}
#endif
#ifdef ENCODER_ENABLE
void encoder_update_user(uint8_t index, bool clockwise) {
if (index == 0) {
switch (biton32(layer_state)) {
case _LOWER:
if (clockwise) {
tap_code16(SGUI(KC_TAB));
} else {
tap_code16(LGUI(KC_TAB));
}
break;
case _RAISE:
if (clockwise) {
tap_code(KC_PGUP);
} else {
tap_code(KC_PGDN);
}
break;
case _ADJUST:
if (clockwise) {
rgblight_increase_hue();
} else {
rgblight_decrease_hue();
}
break;
default:
if (clockwise) {
tap_code(KC_BRIU);
} else {
tap_code(KC_BRID);
}
break;
}
} else if (index == 1) {
switch (biton32(layer_state)) {
case _LOWER:
if (!clockwise) {
tap_code(KC_UP);
} else {
tap_code(KC_DOWN);
}
break;
case _RAISE:
if (!clockwise) {
tap_code16(LCTL(KC_TAB));
} else {
tap_code16(LCTL(LSFT(KC_TAB)));
}
break;
case _ADJUST:
if (!clockwise) {
rgblight_increase_val();
} else {
rgblight_decrease_val();
}
break;
default:
if (!clockwise) {
tap_code(KC_VOLU);
} else {
tap_code(KC_VOLD);
}
break;
}
}
}
#endif
};

View File

@@ -0,0 +1,168 @@
/* Copyright 2020 ninjonas
*
* 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 "ninjonas.h"
#ifdef OLED_DRIVER_ENABLE
oled_rotation_t oled_init_user(oled_rotation_t rotation) { return OLED_ROTATION_180; }
static void render_logo(void) {
static const char PROGMEM logo[] = {
// Converter: https://javl.github.io/image2cpp/
// Image Dimensions: 128x64
// Code Output Format: Plain Bytes
// Draw Mode: Vertical, 1 bit per pixel
0x00, 0x00, 0x80, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0xc0, 0x00, 0x00, 0xe0,
0xe0, 0xe0, 0xe0, 0x00, 0x00, 0x80, 0xe0, 0xe0, 0xe0, 0xe0, 0x80, 0x00, 0x00, 0xe0, 0xe0, 0xe0,
0xe0, 0x00, 0x60, 0xe0, 0xe0, 0xe0, 0x00, 0x00, 0x00, 0xe0, 0xe0, 0xe0, 0xe0, 0x80, 0x00, 0x00,
0xc0, 0xe0, 0xe0, 0xe0, 0x20, 0x60, 0xe0, 0xe0, 0xe0, 0xe0, 0x00, 0x00, 0x00, 0xe0, 0xe0, 0xe0,
0xe0, 0x00, 0x00, 0xc0, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0xc0, 0x00, 0x00, 0x00,
0x80, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0x80, 0x00, 0xe0, 0xe0, 0xfc, 0xfe,
0xfe, 0xfe, 0xee, 0xee, 0x0e, 0x80, 0xc0, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0x80,
0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0x80, 0x00, 0x00,
0x00, 0x00, 0x79, 0xfd, 0xfd, 0xfd, 0xec, 0xee, 0x76, 0x7f, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00,
0x07, 0x3f, 0xff, 0xfc, 0xf8, 0xff, 0x7f, 0x07, 0x0f, 0x7f, 0xff, 0xf8, 0xfc, 0xff, 0x3f, 0x07,
0x00, 0x00, 0x00, 0x03, 0x1f, 0xff, 0xfe, 0xf0, 0xff, 0x7f, 0x0f, 0x07, 0x3f, 0xff, 0xfc, 0xf8,
0xff, 0x7f, 0x0f, 0x01, 0x00, 0x00, 0x01, 0x0f, 0x3f, 0xff, 0xfe, 0xf8, 0xff, 0xff, 0x1f, 0x03,
0x00, 0x00, 0x1f, 0x7f, 0x7f, 0xff, 0xf6, 0xe6, 0xe6, 0xf7, 0xf7, 0x77, 0x37, 0x17, 0x00, 0x30,
0x79, 0xfd, 0xfd, 0xfd, 0xee, 0xee, 0x76, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff,
0xff, 0xff, 0x00, 0x00, 0x00, 0x3f, 0x7f, 0x7f, 0xff, 0xf1, 0xe0, 0xe0, 0xff, 0xff, 0x7f, 0x3f,
0x0e, 0x00, 0x0e, 0x3f, 0x7f, 0xff, 0xff, 0xe0, 0xe0, 0xe1, 0xff, 0x7f, 0x7f, 0x3f, 0x04, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 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, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x0e, 0x0e, 0x0f, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x0c, 0x3c, 0xfc, 0xfc, 0xfc, 0xc0, 0x00, 0xe0, 0xfc, 0xfc, 0x7c, 0x1c, 0x00, 0xf0, 0xf8,
0xf8, 0xfc, 0xdc, 0xdc, 0xdc, 0xfc, 0xfc, 0xf8, 0xf0, 0xe0, 0x00, 0x00, 0x30, 0xb8, 0xbc, 0xbc,
0xdc, 0xdc, 0xdc, 0xfc, 0xfc, 0xf8, 0xf0, 0x00, 0x1c, 0x1c, 0xff, 0xff, 0xff, 0xff, 0x1d, 0x1d,
0x00, 0xf0, 0xf8, 0xf8, 0xfc, 0x3c, 0x1c, 0x1c, 0xfc, 0xfc, 0xf8, 0xf0, 0xc0, 0x00, 0xe0, 0xf0,
0xf8, 0xfc, 0x3c, 0x1c, 0x1c, 0x3c, 0xfc, 0xf8, 0xf8, 0xe0, 0x00, 0x00, 0x20, 0xb8, 0xbc, 0xbc,
0xbc, 0xdc, 0xdc, 0xfc, 0xfc, 0xfc, 0xf8, 0xe0, 0x00, 0x0c, 0x7c, 0xfc, 0xfc, 0xc0, 0x00, 0xe0,
0xfc, 0xfc, 0xfc, 0xfc, 0xf0, 0x80, 0x00, 0xf8, 0xfc, 0xfc, 0x3c, 0x04, 0x0c, 0x7c, 0xfc, 0xfc,
0xf0, 0x00, 0xc0, 0xfc, 0xfc, 0x7c, 0xfc, 0xf8, 0xc0, 0x00, 0xf0, 0xfc, 0xfc, 0x7c, 0x0c, 0x00,
0x00, 0x00, 0xc0, 0xc1, 0xc7, 0xff, 0xff, 0xff, 0x7f, 0x1f, 0x03, 0x00, 0x00, 0x00, 0x07, 0x0f,
0x1f, 0x1f, 0x1e, 0x1c, 0x1c, 0x1e, 0x1e, 0x0e, 0x06, 0x00, 0x00, 0x06, 0x0f, 0x1f, 0x1f, 0x1f,
0x1d, 0x1d, 0x0e, 0x1f, 0x1f, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x1f, 0x1f, 0x00, 0x00,
0x00, 0x07, 0x0f, 0x0f, 0x1f, 0x1e, 0x1c, 0x1c, 0x1f, 0x1f, 0x0f, 0x07, 0x01, 0x00, 0x03, 0x07,
0x0f, 0x1f, 0x1e, 0x1c, 0x1c, 0x1e, 0x1f, 0x0f, 0x0f, 0x03, 0x00, 0x00, 0x0f, 0x1f, 0x1f, 0x1f,
0x1d, 0x1d, 0x0c, 0x0f, 0x1f, 0x1f, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x03, 0x1f, 0x1f, 0x1e, 0x1f,
0x0f, 0x01, 0x00, 0x07, 0x1f, 0x1f, 0x1f, 0x1f, 0x0f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0f,
0x1f, 0x1e, 0x1f, 0x1f, 0x03, 0x00, 0x03, 0x1f, 0x1f, 0x1e, 0x1f, 0x0f, 0x01, 0x00, 0x00, 0x00,
0x00, 0x80, 0xc1, 0xf1, 0xf9, 0xf9, 0xf9, 0xb8, 0xb8, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00,
0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80,
0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00,
0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x03, 0x7c, 0xfe, 0xff, 0xff, 0xc7, 0x83, 0x83,
0xc7, 0xff, 0xff, 0xff, 0x7c, 0x00, 0x00, 0x7c, 0xff, 0xff, 0xff, 0xc7, 0x83, 0x83, 0xc7, 0xff,
0xff, 0xfe, 0x7c, 0x00, 0xc0, 0xe6, 0xf7, 0xf7, 0xf7, 0xbb, 0xbb, 0xdb, 0xff, 0xff, 0xff, 0xfe,
0x00, 0x00, 0x03, 0x1f, 0xff, 0xff, 0xf0, 0xe0, 0xfe, 0xff, 0x1f, 0x3f, 0xff, 0xfe, 0xe0, 0xf0,
0xff, 0xff, 0x1f, 0x03, 0x00, 0x01, 0x0f, 0x7f, 0xff, 0xf8, 0xc0, 0xfc, 0xff, 0x3f, 0x1f, 0xff,
0xfe, 0xf0, 0xe0, 0xff, 0xff, 0x3f, 0x07, 0x00, 0x01, 0x07, 0x3f, 0xff, 0xff, 0xf8, 0xe0, 0xfc,
0xff, 0x7f, 0x0f, 0x03, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xdb, 0x9b, 0x9b, 0xdf, 0xdf, 0xdf, 0xde,
0x1c, 0x00, 0xc0, 0xe6, 0xf7, 0xf7, 0xf7, 0xbb, 0xbb, 0xdb, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00,
0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03,
0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x03, 0x03, 0x03, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03,
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00,
0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x38, 0x3f, 0x3f, 0x1f, 0x0f,
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00,
0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00
};
oled_write_raw_P(logo, sizeof(logo));
}
static void render_qmk_logo(void) {
static const char PROGMEM qmk_logo[] = {
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0};
oled_write_P(qmk_logo, false);
}
void oled_white_space(void){
oled_write_P(PSTR(" "), false);
}
void render_layout_state(void) {
oled_write_P(PSTR("\nLayout: "), false);
switch (biton32(default_layer_state)) {
case _COLEMAK:
oled_write_P(PSTR("Colemak"), false);
break;
case _DVORAK:
oled_write_P(PSTR("Dvorak"), false);
break;
case _QWERTY:
oled_write_P(PSTR("Qwerty"), false);
break;
default:
oled_write_ln_P(PSTR("Undefined"), false);
}
}
static void render_layer_state(void) {
oled_write_P(PSTR("\nLayer:"), false);
bool lower = layer_state_is(_LOWER) & !layer_state_is(_ADJUST);
bool raise = layer_state_is(_RAISE) & !layer_state_is(_ADJUST);
bool adjust = layer_state_is(_ADJUST);
if(lower){
oled_write_P(PSTR(" Lower "), true);
} else if(raise){
oled_write_P(PSTR(" Raise "), true);
} else if(adjust){
oled_write_P(PSTR(" Adjust "), true);
} else {
oled_write_P(PSTR(" Default"), false);
}
}
void render_mod_state(uint8_t modifiers) {
oled_write_P(PSTR("\nMods: "), false);
oled_write_P(PSTR("SHF"), (modifiers & MOD_MASK_SHIFT));
oled_white_space();
oled_write_P(PSTR("CTL"), (modifiers & MOD_MASK_CTRL));
oled_white_space();
oled_write_P(PSTR("ALT"), (modifiers & MOD_MASK_ALT));
oled_white_space();
oled_write_P(PSTR("GUI"), (modifiers & MOD_MASK_GUI));
}
static void render_status(void) {
render_qmk_logo();
render_layout_state();
render_layer_state();
render_mod_state(get_mods()|get_oneshot_mods());
}
void oled_task_user(void) {
if (is_keyboard_master()) {
render_status();
} else {
render_logo();
oled_scroll_left();
}
}
#endif

View File

@@ -1,4 +1,7 @@
OLED_DRIVER_ENABLE = yes # Enables the use of OLED displays
ENCODER_ENABLE = yes # Enables the use of one or more encoders
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
LINK_TIME_OPTIMIZATION_ENABLE = yes
LINK_TIME_OPTIMIZATION_ENABLE = yes
SRC += encoder.c \
oled.c

View File

@@ -6,7 +6,17 @@
"height": 3,
"layouts": {
"LAYOUT": {
"layout": [{"x":0, "y":0}, {"label":"Encoder", "x":1, "y":0}, {"x":2, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}]
"layout": [
{"x":0, "y":0},
{"label":"Encoder", "x":1, "y":0},
{"x":2, "y":0},
{"x":0, "y":1},
{"x":1, "y":1},
{"x":2, "y":1},
{"x":0, "y":2},
{"x":1, "y":2},
{"x":2, "y":2}
]
}
}
}

View File

@@ -0,0 +1,51 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* LAYER 0
* ,-----------------------.
* | << | MUTE | >> | ENCODER - PRESS (MUTE) / KNOB (Brush size)
* |-------+-------+-------|
* | STOP | PLAY | MEDIA |
* |-------+-------+-------|
* | CALC | MAIL | PC/FN |
* `-----------------------'
*/
[0] = LAYOUT(
KC_MPRV, KC_MUTE, KC_MNXT,
KC_MSTP, KC_MPLY, KC_MSEL,
KC_CALC, KC_MAIL, LT(1, KC_MYCM)
),
/* LAYER 1
* ,-----------------------.
* |BL TOG | | BREATH|
* |-------+-------+-------|
* | BL + | BL - |BL CYCL|
* |-------+-------+-------|
* | BL ON | BL OFF| |
* `-----------------------'
*/
[1] = LAYOUT(
BL_TOGG, KC_TRNS, BL_BRTG,
BL_INC, BL_DEC, BL_STEP,
BL_ON, BL_OFF, KC_TRNS
)
};
void encoder_update_user(uint8_t index, bool clockwise) {
if (index == 0) { /* First encoder */
if (clockwise) {
tap_code(KC_RBRC);
} else {
tap_code(KC_LBRC);
}
} else if (index == 1) { /* Second encoder */
if (clockwise) {
tap_code(KC_RBRC);
} else {
tap_code(KC_LBRC);
}
}
}

View File

@@ -4,23 +4,30 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BL] = LAYOUT_60_ansi(
KC_GESC, 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_BSLASH, \
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_BSLASH, \
KC_CTCP, 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_FNX, KC_RALT, KC_RGUI, KC_RCTL),
[_FL] = LAYOUT_60_ansi(
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_DEL, \
BL_TOGG, BL_INC, BL_DEC, BL_STEP, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
BL_TOGG, BL_INC, BL_DEC, BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
VLK_TOG, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
KC_TRNS, KC_TRNS, KC_TRNS, MO(_CL), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
[_AL] = LAYOUT_60_ansi(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RSFT_T(KC_UP), \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT)
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT),
[_CL] = LAYOUT_60_ansi(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, EEP_RST, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
};

View File

@@ -1,12 +1,12 @@
# MechMerlin's Standard ANSI 60% Layout
This is the 60% layout used by u/merlin36, host of the [MechMerlin](www.youtube.com/mechmerlin)
This is the standard 60% layout used by u/merlin36, host of the [MechMerlin](www.youtube.com/mechmerlin)
YouTube channel.
It is used on his
[1up60HSE](https://github.com/qmk/qmk_firmware/tree/master/keyboards/1upkeyboards/1up60hse)
[dz60rgb-ansi](https://github.com/qmk/qmk_firmware/tree/master/keyboards/dztech/dz60rgb)
[HS60 V2](https://github.com/qmk/qmk_firmware/tree/master/keyboards/hs60/v2)
* [1up60HSE](https://github.com/qmk/qmk_firmware/tree/master/keyboards/1upkeyboards/1up60hse)
* [dz60rgb-ansi](https://github.com/qmk/qmk_firmware/tree/master/keyboards/dztech/dz60rgb)
* [HS60 V2](https://github.com/qmk/qmk_firmware/tree/master/keyboards/hs60/v2)
## Keymap Notes
- Arrow toggle switch is tapping the `FN` key once.

View File

@@ -4,23 +4,30 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BL] = LAYOUT_60_ansi_split_bs_rshift(
KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, \
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_BSLASH, \
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_BSLASH, \
KC_CTCP, 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, TG(2), \
KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, MO(1), KC_RALT, KC_RGUI, KC_RCTL),
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, TG(_AL), \
KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, MO(_FL), KC_RALT, KC_RGUI, KC_RCTL),
[_FL] = LAYOUT_60_ansi_split_bs_rshift(
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_DEL, KC_DEL, \
BL_TOGG, BL_INC, BL_DEC, BL_STEP, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
VLK_TOG, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
KC_TRNS, KC_TRNS, KC_TRNS, MO(_CL), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
[_AL] = LAYOUT_60_ansi_split_bs_rshift(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RSFT_T(KC_UP), KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT)
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT),
[_CL] = LAYOUT_60_ansi_split_bs_rshift(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, EEP_RST, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
};

View File

@@ -5,11 +5,11 @@ host of the [MechMerlin](www.youtube.com/mechmerlin) YouTube channel.
It is used on his
[DO60](https://github.com/qmk/qmk_firmware/tree/master/keyboards/do60)
[DP60](https://github.com/qmk/qmk_firmware/tree/master/keyboards/dp60)
[Sentraq S60-X RGB](https://github.com/qmk/qmk_firmware/tree/master/keyboards/s60_x)
[Waldo](https://github.com/qmk/qmk_firmware/tree/master/keyboards/waldo)
[Zeal60 Rev4](https://github.com/qmk/qmk_firmware/tree/master/keyboards/zeal60)
* [DO60](https://github.com/qmk/qmk_firmware/tree/master/keyboards/do60)
* [DP60](https://github.com/qmk/qmk_firmware/tree/master/keyboards/dp60)
* [Sentraq S60-X RGB](https://github.com/qmk/qmk_firmware/tree/master/keyboards/s60_x)
* [Waldo](https://github.com/qmk/qmk_firmware/tree/master/keyboards/waldo)
* [Zeal60 Rev4](https://github.com/qmk/qmk_firmware/tree/master/keyboards/zeal60)
## Keymap Notes
- Highly influenced by the KBP V60 and WKL B.Face standard layouts

View File

@@ -40,10 +40,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_FL] = LAYOUT_65_ansi(
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, _______, _______,
_______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_RMOD,RGB_HUD, RGB_SAD, RGB_VAD, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, KC_PGUP, _______,
_______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
_______, _______, _______, MO(_CL), _______, _______, _______, KC_HOME, KC_PGDN, KC_END
),
[_CL] = LAYOUT_65_ansi(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, EEP_RST, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
),
};

View File

@@ -4,7 +4,7 @@ This is the 65% layout used by u/merlin36, host of the [MechMerlin](www.youtube.
YouTube channel.
It is used on his
* [Novelkeys NK65](https://github.com/qmk/qmk_firmware/tree/master/keyboards/nk65)
* [Novelkeys NK65](https://github.com/qmk/qmk_firmware/tree/master/keyboards/nk65)
### Build
To build the firmware file associated with this keymap, simply run `make your_keyboard:mechmerlin`.

View File

@@ -22,15 +22,23 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
KC_CTCP, 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_PGUP,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT
),
[_FL] = LAYOUT_65_ansi_blocker(
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, _______, _______,
_______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_RMOD,RGB_HUD, RGB_SAD, RGB_VAD, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, KC_PGUP, _______,
_______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
_______, _______, _______, MO(_CL), _______, _______, KC_HOME, KC_PGDN, KC_END
),
[_CL] = LAYOUT_65_ansi_blocker(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, EEP_RST, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______,
),
};

View File

@@ -4,8 +4,8 @@ This is the 65% layout used by u/merlin36, host of the [MechMerlin](www.youtube.
YouTube channel.
It is used on his
[RGB Doro67](https://github.com/qmk/qmk_firmware/tree/master/keyboards/doro67/rgb)
[KBD67 mkii](https://github.com/qmk/qmk_firmware/tree/master/keyboards/kbdfans/kbd67/mkiirgb)
* [RGB Doro67](https://github.com/qmk/qmk_firmware/tree/master/keyboards/doro67/rgb)
* [KBD67 mkii](https://github.com/qmk/qmk_firmware/tree/master/keyboards/kbdfans/kbd67/mkiirgb/v1)
### Build
To build the firmware file associated with this keymap, simply run `make your_keyboard:mechmerlin`.

View File

@@ -1,8 +1,6 @@
#include QMK_KEYBOARD_H
#include "mechmerlin.h"
#define _CL 2
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BL] = LAYOUT_66_ansi(
KC_GESC,KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_PGUP, \
@@ -13,15 +11,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_FL] = LAYOUT_66_ansi(
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_DEL, KC_VOLU, \
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, KC_VOLD, \
_______,_______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
BL_TOGG,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, KC_VOLD, \
RGB_TOG,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
_______, _______,_______,_______,_______,_______,_______,KC_MUTE,KC_VOLD,KC_VOLU,_______, _______, KC_PGUP, \
_______,_______,_______, _______, _______,_______,_______,KC_HOME,KC_PGDN,KC_END),
_______,_______,_______, MO(_CL), _______,_______,_______,KC_HOME,KC_PGDN,KC_END),
[_CL] = LAYOUT_66_ansi(
BL_STEP,RGB_M_P,RGB_M_B,RGB_M_R,RGB_M_SW,RGB_M_SN,RGB_M_K,RGB_M_X,RGB_M_G,_______,_______,_______,_______, _______, RGB_VAI, \
BL_TOGG,_______,_______,_______,RESET, _______,_______,_______,_______,_______,_______,_______,_______,_______, RGB_VAD, \
RGB_TOG,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
_______,_______,_______,EEP_RST,RESET, _______,_______,_______,_______,_______,_______,_______,_______,_______, RGB_VAD, \
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
VLK_TOG, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, RGB_SAI, \
CK_TOGG,_______,_______, RGB_MOD, _______,_______,_______,RGB_HUD,RGB_SAD,RGB_HUI),
CK_TOGG,_______,_______, _______, _______,_______,_______,RGB_HUD,RGB_SAD,RGB_HUI),
};

View File

@@ -0,0 +1,13 @@
# MechMerlin's 66_ansi layout
This is the 66 key layout used by u/merlin36, host of the [MechMerlin](www.youtube.com/mechmerlin)
YouTube channel.
It is used on his
* [Clueboard 66 rev4](https://github.com/qmk/qmk_firmware/tree/master/keyboards/clueboard/66/rev4)
* [Clueboard 66 hotswap gen1](https://github.com/qmk/qmk_firmware/tree/master/keyboards/clueboard/66_hotswap/gen1)
* [Clueboard 66 hotswap prototype](https://github.com/qmk/qmk_firmware/tree/master/keyboards/clueboard/66_hotswap/prototype)
* [Clueboard 66 rev1](https://github.com/qmk/qmk_firmware/tree/master/keyboards/clueboard/66/rev1)
### Build
To build the firmware file associated with this keymap, simply run `make your_keyboard:mechmerlin`.

View File

@@ -14,5 +14,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, MO(_CL), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
[_CL] = LAYOUT_68_ansi(\
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, EEP_RST, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
};

View File

@@ -9,7 +9,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
KC_CTCP, 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_PGDN,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[_FL] = LAYOUT_75_ansi(\
RESET, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
@@ -17,5 +17,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
BL_TOGG, BL_INC, BL_DEC, BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
VLK_TOG, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END)
KC_TRNS, KC_TRNS, KC_TRNS, MO(_CL), KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END),
[_CL] = LAYOUT_75_ansi(\
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, EEP_RST, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
};

View File

@@ -4,8 +4,8 @@ This is the 75% layout used by u/merlin36, host of the [MechMerlin](www.youtube.
YouTube channel.
It is used on his
[Duck Octagon V2](https://github.com/qmk/qmk_firmware/tree/master/keyboards/duck/octagon/v2)
[XD84](https://github.com/qmk/qmk_firmware/tree/master/keyboards/xd84)
* [Duck Octagon V2](https://github.com/qmk/qmk_firmware/tree/master/keyboards/duck/octagon/v2)
* [XD84](https://github.com/qmk/qmk_firmware/tree/master/keyboards/xd84)
### Build
To build the firmware file associated with this keymap, simply run `make your_keyboard:mechmerlin-ansi`.

View File

@@ -16,7 +16,7 @@ def yesno(prompt, *args, default=None, **kwargs):
Arguments:
prompt
The prompt to present to the user. Can include ANSI and format strings like milc's `cli.print()`.
The prompt to present to the user. Can include ANSI and format strings like milc's `cli.echo()`.
default
Whether to default to a Yes or No when the user presses enter.
@@ -43,9 +43,9 @@ def yesno(prompt, *args, default=None, **kwargs):
prompt = prompt + ' [y/N] '
while True:
print()
cli.echo('')
answer = input(format_ansi(prompt % args))
print()
cli.echo('')
if not answer and prompt is not None:
return default
@@ -57,17 +57,26 @@ def yesno(prompt, *args, default=None, **kwargs):
return False
def question(prompt, *args, default=None, confirm=False, answer_type=str, **kwargs):
def question(prompt, *args, default=None, confirm=False, answer_type=str, validate=None, **kwargs):
"""Prompt the user to answer a question with a free-form input.
Arguments:
prompt
The prompt to present to the user. Can include ANSI and format strings like milc's `cli.print()`.
The prompt to present to the user. Can include ANSI and format strings like milc's `cli.echo()`.
default
The value to return when the user doesn't enter any value. Use None to prompt until they enter a value.
confirm
Present the user with a confirmation dialog before accepting their answer.
answer_type
Specify a type function for the answer. Will re-prompt the user if the function raises any errors. Common choices here include int, float, and decimal.Decimal.
validate
This is an optional function that can be used to validate the answer. It should return True or False and have the following signature:
def function_name(answer, *args, **kwargs):
"""
if not args and kwargs:
args = kwargs
@@ -76,17 +85,21 @@ def question(prompt, *args, default=None, confirm=False, answer_type=str, **kwar
prompt = '%s [%s] ' % (prompt, default)
while True:
print()
cli.echo('')
answer = input(format_ansi(prompt % args))
print()
cli.echo('')
if answer:
if confirm:
if validate is not None and not validate(answer, *args, **kwargs):
continue
elif confirm:
if yesno('Is the answer "%s" correct?', answer, default=True):
try:
return answer_type(answer)
except Exception as e:
cli.log.error('Could not convert answer (%s) to type %s: %s', answer, answer_type.__name__, str(e))
else:
try:
return answer_type(answer)
@@ -95,3 +108,71 @@ def question(prompt, *args, default=None, confirm=False, answer_type=str, **kwar
elif default is not None:
return default
def choice(heading, options, *args, default=None, confirm=False, prompt='Please enter your choice: ', **kwargs):
"""Present the user with a list of options and let them pick one.
Users can enter either the number or the text of their choice.
This will return the value of the item they choose, not the numerical index.
Arguments:
heading
The text to place above the list of options.
options
A sequence of items to choose from.
default
The index of the item to return when the user doesn't enter any value. Use None to prompt until they enter a value.
confirm
Present the user with a confirmation dialog before accepting their answer.
prompt
The prompt to present to the user. Can include ANSI and format strings like milc's `cli.echo()`.
"""
if not args and kwargs:
args = kwargs
if prompt and default:
prompt = prompt + ' [%s] ' % (default + 1,)
while True:
# Prompt for an answer.
cli.echo('')
cli.echo(heading % args)
cli.echo('')
for i, option in enumerate(options, 1):
cli.echo('\t{fg_cyan}%d.{fg_reset} %s', i, option)
cli.echo('')
answer = input(format_ansi(prompt))
cli.echo('')
# If the user types in one of the options exactly use that
if answer in options:
return answer
# Massage the answer into a valid integer
if answer == '' and default:
answer = default
else:
try:
answer = int(answer) - 1
except Exception:
# Normally we would log the exception here, but in the interest of clean UI we do not.
cli.log.error('Invalid choice: %s', answer + 1)
continue
# Validate the answer
if answer >= len(options) or answer < 0:
cli.log.error('Invalid choice: %s', answer + 1)
continue
if confirm and not yesno('Is the answer "%s" correct?', answer + 1, default=True):
continue
# Return the answer they chose.
return options[answer]

View File

@@ -150,6 +150,11 @@ typedef union {
#endif
} __attribute__((packed)) report_keyboard_t;
typedef struct {
uint8_t report_id;
uint16_t usage;
} __attribute__((packed)) report_extra_t;
typedef struct {
#ifdef MOUSE_SHARED_EP
uint8_t report_id;

View File

@@ -110,40 +110,34 @@ void send_mouse(report_mouse_t *report) {
#endif // MOUSEKEY_ENABLE
}
void send_system(uint16_t data) {
#ifdef EXTRAKEY_ENABLE
void send_extra(uint8_t report_id, uint16_t data) {
uint32_t irqflags;
irqflags = __get_PRIMASK();
__disable_irq();
__DMB();
udi_hid_exk_report.desc.report_id = REPORT_ID_SYSTEM;
if (data != 0) data = data - SYSTEM_POWER_DOWN + 1;
udi_hid_exk_report.desc.report_id = report_id;
udi_hid_exk_report.desc.report_data = data;
udi_hid_exk_b_report_valid = 1;
udi_hid_exk_send_report();
__DMB();
__set_PRIMASK(irqflags);
}
#endif // EXTRAKEY_ENABLE
void send_system(uint16_t data) {
#ifdef EXTRAKEY_ENABLE
if (data != 0) data = data - SYSTEM_POWER_DOWN + 1;
send_extra(REPORT_ID_SYSTEM, data);
#endif // EXTRAKEY_ENABLE
}
void send_consumer(uint16_t data) {
#ifdef EXTRAKEY_ENABLE
uint32_t irqflags;
irqflags = __get_PRIMASK();
__disable_irq();
__DMB();
udi_hid_exk_report.desc.report_id = REPORT_ID_CONSUMER;
udi_hid_exk_report.desc.report_data = data;
udi_hid_exk_b_report_valid = 1;
udi_hid_exk_send_report();
__DMB();
__set_PRIMASK(irqflags);
send_extra(REPORT_ID_CONSUMER, data);
#endif // EXTRAKEY_ENABLE
}

View File

@@ -81,6 +81,9 @@ void raw_hid_task(void);
#ifdef CONSOLE_ENABLE
void console_task(void);
#endif
#ifdef MIDI_ENABLE
void midi_ep_task(void);
#endif
/* TESTING
* Amber LED blinker thread, times are in milliseconds.
@@ -214,6 +217,9 @@ int main(void) {
#ifdef CONSOLE_ENABLE
console_task();
#endif
#ifdef MIDI_ENABLE
midi_ep_task();
#endif
#ifdef VIRTSER_ENABLE
virtser_task();
#endif

View File

@@ -833,7 +833,17 @@ bool recv_midi_packet(MIDI_EventPacket_t *const event) {
size_t size = chnReadTimeout(&drivers.midi_driver.driver, (uint8_t *)event, sizeof(MIDI_EventPacket_t), TIME_IMMEDIATE);
return size == sizeof(MIDI_EventPacket_t);
}
void midi_ep_task(void) {
uint8_t buffer[MIDI_STREAM_EPSIZE];
size_t size = 0;
do {
size_t size = chnReadTimeout(&drivers.midi_driver.driver, buffer, sizeof(buffer), TIME_IMMEDIATE);
if (size > 0) {
MIDI_EventPacket_t event;
recv_midi_packet(&event);
}
} while (size > 0);
}
#endif
#ifdef VIRTSER_ENABLE

View File

@@ -72,20 +72,6 @@ void mouse_in_cb(USBDriver *usbp, usbep_t ep);
/* shared IN request callback handler */
void shared_in_cb(USBDriver *usbp, usbep_t ep);
/* ---------------
* Extrakey header
* ---------------
*/
#ifdef EXTRAKEY_ENABLE
/* extra report structure */
typedef struct {
uint8_t report_id;
uint16_t usage;
} __attribute__((packed)) report_extra_t;
#endif /* EXTRAKEY_ENABLE */
/* --------------
* Console header
* --------------

View File

@@ -662,17 +662,17 @@ static void send_mouse(report_mouse_t *report) {
#endif
}
/** \brief Send System
/** \brief Send Extra
*
* FIXME: Needs doc
*/
static void send_system(uint16_t data) {
#ifdef EXTRAKEY_ENABLE
static void send_extra(uint8_t report_id, uint16_t data) {
uint8_t timeout = 255;
if (USB_DeviceState != DEVICE_STATE_Configured) return;
report_extra_t r = {.report_id = REPORT_ID_SYSTEM, .usage = data - SYSTEM_POWER_DOWN + 1};
report_extra_t r = {.report_id = report_id, .usage = data};
Endpoint_SelectEndpoint(SHARED_IN_EPNUM);
/* Check if write ready for a polling interval around 10ms */
@@ -681,6 +681,16 @@ static void send_system(uint16_t data) {
Endpoint_Write_Stream_LE(&r, sizeof(report_extra_t), NULL);
Endpoint_ClearIN();
}
#endif
/** \brief Send System
*
* FIXME: Needs doc
*/
static void send_system(uint16_t data) {
#ifdef EXTRAKEY_ENABLE
send_extra(REPORT_ID_SYSTEM, data - SYSTEM_POWER_DOWN + 1);
#endif
}
@@ -690,8 +700,7 @@ static void send_system(uint16_t data) {
*/
static void send_consumer(uint16_t data) {
#ifdef EXTRAKEY_ENABLE
uint8_t timeout = 255;
uint8_t where = where_to_send();
uint8_t where = where_to_send();
# ifdef BLUETOOTH_ENABLE
if (where == OUTPUT_BLUETOOTH || where == OUTPUT_USB_AND_BT) {
@@ -729,15 +738,7 @@ static void send_consumer(uint16_t data) {
return;
}
report_extra_t r = {.report_id = REPORT_ID_CONSUMER, .usage = data};
Endpoint_SelectEndpoint(SHARED_IN_EPNUM);
/* Check if write ready for a polling interval around 10ms */
while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(40);
if (!Endpoint_IsReadWriteAllowed()) return;
Endpoint_Write_Stream_LE(&r, sizeof(report_extra_t), NULL);
Endpoint_ClearIN();
send_extra(REPORT_ID_CONSUMER, data);
#endif
}

View File

@@ -58,12 +58,6 @@ extern host_driver_t lufa_driver;
}
#endif
/* extra report structure */
typedef struct {
uint8_t report_id;
uint16_t usage;
} __attribute__((packed)) report_extra_t;
#ifdef API_ENABLE
# include "api.h"
#endif

View File

@@ -112,32 +112,22 @@ static void send_mouse(report_mouse_t *report) {
}
}
typedef struct {
uint8_t report_id;
uint16_t usage;
} __attribute__((packed)) report_extra_t;
static void send_system(uint16_t data) {
static void send_extra(uint8_t report_id, uint16_t data) {
static uint8_t last_id = 0;
static uint16_t last_data = 0;
if (data == last_data) return;
if ((report_id == last_id) && (data == last_data)) return;
last_id = report_id;
last_data = data;
report_extra_t report = {.report_id = REPORT_ID_SYSTEM, .usage = data};
report_extra_t report = {.report_id = report_id, .usage = data};
if (usbInterruptIsReady3()) {
usbSetInterrupt3((void *)&report, sizeof(report));
}
}
static void send_consumer(uint16_t data) {
static uint16_t last_data = 0;
if (data == last_data) return;
last_data = data;
static void send_system(uint16_t data) { send_extra(REPORT_ID_SYSTEM, data); }
report_extra_t report = {.report_id = REPORT_ID_CONSUMER, .usage = data};
if (usbInterruptIsReady3()) {
usbSetInterrupt3((void *)&report, sizeof(report));
}
}
static void send_consumer(uint16_t data) { send_extra(REPORT_ID_CONSUMER, data); }
/*------------------------------------------------------------------*
* Request from host *

View File

@@ -1,6 +1,11 @@
# Changelog
All notable changes to my userspace will be documented in this file.
## [0.3.0] - 2020-02-02
### Changed
- Added the `_CL` layer to all the boards for access to `EEP_RST` and `RESET` keycodes. This was done primarily to avoid triggering `RESET` accidentally.
- Added a placeholder text macro under the custom keycode `KC_MAC`. Currently set to "meow", but will change as needed in the future.
## [0.2.2] - 2019-04-22
### Fixed
- `config.h` usage of turning on `RGBLIGHT_ENABLE` when it is not enabled on boards other than my two clueboards were causing issues with boards that didn't have RGB underglow on it.

View File

@@ -10,8 +10,6 @@
#define AUDIO_CLICKY_FREQ_DEFAULT 261.63f
#define AUDIO_CLICKY_FREQ_MIN 65.41f
#define AUDIO_CLICKY_FREQ_MAX 1046.5f
//#define AUDIO_CLICKY_FREQ_FACTOR 1.18921f
//#define AUDIO_CLICKY_FREQ_FACTOR 2.71828f // e
#define AUDIO_CLICKY_FREQ_FACTOR 1.61803f // golden ratio
#define AUDIO_CLICKY_FREQ_RANDOMNESS 17.0f
#endif
@@ -24,7 +22,7 @@
#ifndef AUDIO_CLICKY
#define AUDIO_CLICKY
#endif
#elif defined(KEYBOARD_clueboard_66_hotswap_gen1)
#elif defined(KEYBOARD_clueboard_66_hotswap_gen1) || defined(KEYBOARD_clueboard_66_rev4)
#ifndef AUDIO_CLICKY
#define AUDIO_CLICKY
#endif

View File

@@ -14,7 +14,13 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
layer_invert(_AL);
}
}
return false;
break;
case KC_MAC:
if (record->event.pressed) {
SEND_STRING("meow");
} else {
}
break;
}
return true;
}

View File

@@ -5,12 +5,14 @@
enum userspace_layers {
_BL = 0, // Base Layer
_FL, // Function Layer
_AL // Arrow Layer
_AL, // Arrow Layer
_CL // Control Layer
};
// Enum of custom keycodes defined in process_record_user
enum keycodes {
KC_FNX, // Hold for FN layer, tap to toggle ARROWS layer.
KC_MAC, // Text macro.
};
// Custom #defined keycodes

View File

@@ -17,7 +17,7 @@ This layer is commonly accessed via `MO(_FL)` on the base layer. It consists of
This layer is only present on my 60% boards. I habitually use the bottom right modifiers as arrows.
### _CL (Control Layer)
This is not defined in here as it's present only on `LAYOUT_66` boards, or to be specific, my clueboard. It currently uses the default clueboard controls.
This layer is used for the `RESET` and `EEP_RST` keycodes.
## Custom Keycodes
----
@@ -46,3 +46,8 @@ If a board has a speaker, enable beeps and boops per switch actuation. This is c
### Velocikey
[Velocikey](https://github.com/qmk/qmk_firmware/blob/master/docs/feature_velocikey.md) is an RGBLIGHT feature in which the faster you type, the faster the ARE GEE BEES.
### Macros
Basic text macro implemented for future use

View File

@@ -1 +1,2 @@
SRC += mechmerlin.c
LTO_ENABLE = yes

View File

@@ -25,6 +25,7 @@ See: https://docs.qmk.fm/#/feature_userspace
|K_MDSH | MacOS shortcut to get em-dash `` |
|K_RAPP | MacOS shortcut to switch apps to the right |
|K_LAPP | MacOS shortcut to switch apps to the left |
|K_CPRF |  + Shift + M. Used for switching Google Chrome profiles |
### [Layers](ninjonas.h#L44)
|Code | Description |

View File

@@ -17,4 +17,23 @@
layer_state_t layer_state_set_user (layer_state_t state) {
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}
#ifdef RGBLIGHT_ENABLE
extern rgblight_config_t rgblight_config;
#endif
void keyboard_post_init_user() {
#ifdef RGBLIGHT_ENABLE
// Cycles through the entire hue wheel and resetting to default color
uint16_t default_hue = rgblight_config.hue;
rgblight_enable_noeeprom();
layer_state_set_user(layer_state);
rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
for (uint16_t i = 255; i > 0; i--) {
rgblight_sethsv_noeeprom((i + default_hue) % 255, rgblight_config.sat, rgblight_config.val);
matrix_scan();
wait_ms(10);
}
#endif
layer_state_set_user(layer_state);
}

View File

@@ -37,6 +37,7 @@
// Shortcut Keys
#define K_LOCK LGUI(LCTL(KC_Q)) // Locks screen on MacOS
#define K_CSCN LGUI(LCTL(LSFT(KC_4))) // Copy a portion of the screen to the clipboard
#define K_CPRF LGUI(LSFT(KC_M)) //  + Shift + M. Used for switching Google Chrome profiles
#define K_MDSH LSFT(LALT(KC_MINS))
#define K_LAPP SGUI(KC_TAB) //  + Shift + Tab
#define K_RAPP LGUI(KC_TAB) //  + Tab

View File

@@ -21,7 +21,7 @@ bool process_record_oled(uint16_t keycode, keyrecord_t *record) {
return true;
}
void render_default_layer_state(void) {
void render_layout_state(void) {
oled_write_P(PSTR("Layout: "), false);
switch (biton32(default_layer_state)) {
case _COLEMAK:
@@ -43,15 +43,23 @@ void oled_white_space(void){
}
void render_layer_state(void) {
oled_write_P(PSTR("\nLayer: "), false);
oled_write_P(PSTR("LOW"), (layer_state_is(_LOWER) & !layer_state_is(_ADJUST)));
oled_white_space();
oled_write_P(PSTR("RAI"), (layer_state_is(_RAISE) & !layer_state_is(_ADJUST)));
oled_white_space();
oled_write_P(PSTR("ADJ"), layer_state_is(_ADJUST));
oled_write_P(PSTR("\nLayer:"), false);
bool lower = layer_state_is(_LOWER) & !layer_state_is(_ADJUST);
bool raise = layer_state_is(_RAISE) & !layer_state_is(_ADJUST);
bool adjust = layer_state_is(_ADJUST);
if(lower){
oled_write_P(PSTR(" Lower "), true);
} else if(raise){
oled_write_P(PSTR(" Raise "), true);
} else if(adjust){
oled_write_P(PSTR(" Adjust "), true);
} else {
oled_write_P(PSTR(" Default"), false);
}
}
void render_mod_status(uint8_t modifiers) {
void render_mod_state(uint8_t modifiers) {
oled_write_P(PSTR("\nMods: "), false);
oled_write_P(PSTR("SHF"), (modifiers & MOD_MASK_SHIFT));
oled_white_space();
@@ -63,10 +71,10 @@ void render_mod_status(uint8_t modifiers) {
}
void render_status(void){
render_default_layer_state();
render_layout_state();
oled_write_P(PSTR("\n"), false);
render_layer_state();
render_mod_status(get_mods()|get_oneshot_mods());
render_mod_state(get_mods()|get_oneshot_mods());
}
static void render_logo(void) {
@@ -80,7 +88,7 @@ static void render_logo(void) {
}
void oled_task_user(void) {
if (timer_elapsed32(oled_timer) > 30000) {
if (timer_elapsed32(oled_timer) > 15000) {
oled_off();
return;
}

View File

@@ -1,3 +1,11 @@
#pragma once
#define BOOTMAGIC_LITE_ROW 0
#define BOOTMAGIC_LITE_COL 0
#define TAPPING_TERM 175
#define MACRO_TIMER 5
#define TAPPING_FORCE_HOLD_PER_KEY
// testing
#define TAPPING_TERM_PER_KEY
//#define IGNORE_MOD_TAP_INTERRUPT // rolling R3 "zxcv", etc...

1012
users/ridingqwerty/dict.h Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,7 @@
#include <stdio.h>
#include <time.h>
#include "ridingqwerty.h"
#include "dict.h"
__attribute__ ((weak))
bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
@@ -10,23 +13,475 @@ bool process_record_secrets(uint16_t keycode, keyrecord_t *record) {
return true;
}
uint16_t user_key_timer;
/*
typedef union {
struct {
uint8_t aesthetic : 1,
spongebob : 1,
uppercase : 1,
australia : 1,
unusued : 4;
};
uint8_t all;
} mode_config_t;
*/
mode_config_t mode = {.all = 0U};
bool randword_seed = false;
uint8_t user_mod_state;
uint16_t rand_key;
uint16_t temp_keycode;
uint32_t user_key_timer;
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
#ifdef CONSOLE_ENABLE
uprintf("KL: kc: %u, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed);
#endif
temp_keycode = keycode;
if ((mode.all != 0U) && ((keycode != DB(TAB) || keycode != ED(ESC)) && ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)))) {
temp_keycode &= 0xFF;
}
if (mode.spongebob) {
switch(temp_keycode) {
case KC_A ... KC_Z:
if (record->event.pressed) {
(mode.uppercase ^= 1) == 0 ? tap_code16(S(temp_keycode)) : tap_code(temp_keycode);
}
return false;
}
}
if (mode.aesthetic) {
switch(temp_keycode) {
#if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE)
case KC_A:
if (record->event.pressed) {
send_unicode_hex_string("039B");
tap_code(KC_SPC);
}
return false;
case KC_E:
if (record->event.pressed) {
send_unicode_hex_string("039E");
tap_code(KC_SPC);
}
return false;
#else
case A:
case E:
if (record->event.pressed) {
tap_code16(S(temp_keycode));
tap_code(KC_SPC);
}
return false;
#endif
case KC_B ... KC_D:
case KC_F ... KC_Z:
if (record->event.pressed) {
tap_code16(S(temp_keycode));
tap_code(KC_SPC);
}
return false;
case KC_1 ... KC_0:
if (record->event.pressed) {
tap_code(temp_keycode);
tap_code(KC_SPC);
}
return false;
case KC_BSPC:
if (record->event.pressed) {
tap_code(KC_BSPC);
tap_code(KC_BSPC);
}
return false;
case KC_SPC:
if (record->event.pressed) {
tap_code(KC_SPC);
tap_code(KC_SPC);
tap_code(KC_SPC);
}
return false;
}
}
if (mode.australia) {
switch(temp_keycode) {
// IDEMPOTENT
case KC_L:
case KC_O:
case KC_S:
case KC_Z:
case KC_8:
case KC_0:
if (record->event.pressed) {
tap_code(temp_keycode);
tap_code(KC_LEFT);
}
return false;
// INVERSE
case KC_B:
if (record->event.pressed) {
tap_code(KC_Q);
tap_code(KC_LEFT);
}
return false;
case KC_Q:
if (record->event.pressed) {
tap_code(KC_B);
tap_code(KC_LEFT);
}
return false;
case KC_D:
if (record->event.pressed) {
tap_code(KC_P);
tap_code(KC_LEFT);
}
return false;
case KC_P:
if (record->event.pressed) {
tap_code(KC_D);
tap_code(KC_LEFT);
}
return false;
case KC_N:
if (record->event.pressed) {
tap_code(KC_U);
tap_code(KC_LEFT);
}
return false;
case KC_U:
if (record->event.pressed) {
tap_code(KC_N);
tap_code(KC_LEFT);
}
return false;
case KC_6:
if (record->event.pressed) {
tap_code(KC_9);
tap_code(KC_LEFT);
}
return false;
case KC_9:
if (record->event.pressed) {
tap_code(KC_6);
tap_code(KC_LEFT);
}
return false;
// TRANSLATE
case KC_A:
if (record->event.pressed) {
send_unicode_hex_string("0250");
tap_code(KC_LEFT);
return false;
}
break;
case KC_C:
if (record->event.pressed) {
send_unicode_hex_string("0254");
tap_code(KC_LEFT);
return false;
}
break;
case KC_E:
if (record->event.pressed) {
send_unicode_hex_string("01DD");
tap_code(KC_LEFT);
return false;
}
break;
case KC_F:
if (record->event.pressed) {
send_unicode_hex_string("025F");
tap_code(KC_LEFT);
return false;
}
break;
case KC_G:
if (record->event.pressed) {
send_unicode_hex_string("0183");
tap_code(KC_LEFT);
return false;
}
break;
case KC_H:
if (record->event.pressed) {
send_unicode_hex_string("0265");
tap_code(KC_LEFT);
return false;
}
break;
case KC_I:
if (record->event.pressed) {
send_unicode_hex_string("1D09");
tap_code(KC_LEFT);
return false;
}
break;
case KC_J:
if (record->event.pressed) {
send_unicode_hex_string("027E");
tap_code(KC_LEFT);
return false;
}
break;
case KC_K:
if (record->event.pressed) {
send_unicode_hex_string("029E");
tap_code(KC_LEFT);
return false;
}
break;
case KC_M:
if (record->event.pressed) {
send_unicode_hex_string("026F");
tap_code(KC_LEFT);
return false;
}
break;
case KC_R:
if (record->event.pressed) {
send_unicode_hex_string("0279");
tap_code(KC_LEFT);
return false;
}
break;
case KC_T:
if (record->event.pressed) {
send_unicode_hex_string("0287");
tap_code(KC_LEFT);
return false;
}
break;
case KC_V:
if (record->event.pressed) {
send_unicode_hex_string("028C");
tap_code(KC_LEFT);
return false;
}
break;
case KC_W:
if (record->event.pressed) {
send_unicode_hex_string("028D");
tap_code(KC_LEFT);
return false;
}
break;
case KC_X:
if (record->event.pressed) {
send_unicode_hex_string("2717");
tap_code(KC_LEFT);
return false;
}
break;
case KC_Y:
if (record->event.pressed) {
send_unicode_hex_string("028E");
tap_code(KC_LEFT);
return false;
}
break;
case KC_1:
if (record->event.pressed) {
send_unicode_hex_string("0269");
tap_code(KC_LEFT);
return false;
}
break;
case KC_2:
if (record->event.pressed) {
send_unicode_hex_string("3139");
tap_code(KC_LEFT);
return false;
}
break;
case KC_3:
if (record->event.pressed) {
send_unicode_hex_string("0190");
tap_code(KC_LEFT);
return false;
}
break;
case KC_4:
if (record->event.pressed) {
send_unicode_hex_string("3123");
tap_code(KC_LEFT);
return false;
}
break;
case KC_5:
if (record->event.pressed) {
send_unicode_hex_string("03DB");
tap_code(KC_LEFT);
return false;
}
break;
case KC_7:
if (record->event.pressed) {
send_unicode_hex_string("3125");
tap_code(KC_LEFT);
}
return false;
// CONTROLS
case KC_ENT:
if (record->event.pressed) {
tap_code(KC_END);
tap_code(KC_ENTER);
}
return false;
case KC_BSPC:
if (record->event.pressed) {
tap_code(KC_DELT);
}
return false;
case KC_SPC:
if (record->event.pressed) {
tap_code(KC_SPC);
tap_code(KC_LEFT);
}
return false;
}
}
switch(keycode) {
case VERSION:
if (!record->event.pressed) {
send_string_with_delay_P(PSTR(QMK_KEYBOARD ":" QMK_KEYMAP "\nVersion:" QMK_VERSION ", built: " QMK_BUILDDATE "\n"), MACRO_TIMER);
}
break;
case QWERTY ... COLEMAK:
#if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE)
case GREEK ... HIRAGAN:
#endif
if (record->event.pressed) {
//set_single_persistent_default_layer(keycode - QWERTY);
default_layer_set(1U << (keycode - QWERTY));
}
break;
case MAKE:
if (record->event.pressed) {
user_mod_state = get_mods() & MOD_MASK_CTRL;
if (user_mod_state) {
clear_mods();
send_string_with_delay_P(PSTR("sleep 1 && "), MACRO_TIMER);
}
send_string_with_delay_P(PSTR("make " QMK_KEYBOARD ":" QMK_KEYMAP), MACRO_TIMER);
if (user_mod_state) {
send_string_with_delay_P(PSTR(":flash\n"), MACRO_TIMER);
reset_keyboard();
} else {
send_string_with_delay_P(PSTR("\n"), MACRO_TIMER);
}
}
break;
case RNGWORD:
if (randword_seed == false) {
randword_seed = true;
srand(timer_read32());
}
rand_key = rand() % NUMBER_OF_WORDS;
if (record->event.pressed) {
send_string(dict[rand_key]);
tap_code(KC_SPC);
}
break;
case RG_QUOT:
if (record->event.pressed) {
user_key_timer = timer_read();
#if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE)
user_mod_state = get_mods() & MOD_MASK_ALT;
if (user_mod_state) {
unregister_mods(MOD_BIT(KC_RALT));
send_unicode_hex_string("00B0");
set_mods(user_mod_state);
return false;
}
#endif
user_key_timer = timer_read32();
layer_on(_NUMBER);
register_mods(MOD_BIT(KC_RGUI));
} else {
unregister_mods(MOD_BIT(KC_RGUI));
layer_off(_NUMBER);
if (timer_elapsed(user_key_timer) < TAPPING_TERM) {
register_code(KC_QUOT);
unregister_code(KC_QUOT);
}
if (timer_elapsed32(user_key_timer) < TAPPING_TERM) {
tap_code(KC_QUOT);
}
}
return false; break;
case TESTING:
/*
if (record->event.pressed) {
int length = snprintf( NULL, 0, "%lu", test_number );
char* str = malloc( length + 1 );
snprintf( str, length + 1, "%lu", test_number );
send_string(str);
free(str);
// make CFLAGS+="-lc -specs=nosys.specs" board:keymap
}
*/
break;
case CCCV: // One key copy/paste
if (record->event.pressed) {
user_key_timer = timer_read32();
} else {
if (timer_elapsed32(user_key_timer) > TAPPING_TERM) { // Hold, copy
register_code(KC_LCTL);
tap_code(KC_C);
unregister_code(KC_LCTL);
} else { // Tap, paste
register_code(KC_LCTL);
tap_code(KC_V);
unregister_code(KC_LCTL);
}
}
break;
case SEED:
if (record->event.pressed) {
srand(timer_read32());
}
break;
case SARCASM:
if (record->event.pressed) {
if (!(mode.spongebob ^= 1)) { mode.all = 0U; };
}
break;
case VPRWAVE:
if (record->event.pressed) {
if (!(mode.aesthetic ^= 1)) { mode.all = 0U; };
}
break;
case STRAYA:
if (record->event.pressed) {
if (!(mode.australia ^= 1)) { mode.all = 0U; };
}
break;
default:
if (record->event.pressed && record->event.key.col == 4 && record->event.key.row == 1) {
if (get_mods() & MOD_BIT(KC_RALT)) {
unregister_mods(MOD_BIT(KC_RALT));
//send_unicode_hex_string("262D");
tap_code(KC_BSPC);
set_mods(MOD_BIT(KC_RALT));
return false;
}
}
break;
}
return process_record_keymap(keycode, record) &&
process_record_secrets(keycode, record);

View File

@@ -11,19 +11,48 @@ bool process_record_secrets(uint16_t keycode, keyrecord_t *record);
bool process_record_keymap(uint16_t keycode, keyrecord_t *record);
enum userspace_custom_keycodes {
FIRST = PLACEHOLDER_SAFE_RANGE,
RUSTY,
FUEL,
C0RE,
MUNKY,
AR1ST,
VAXIS,
OS_LAB,
CDLOCAL,
SYSNOC,
VERSION = PLACEHOLDER_SAFE_RANGE,
QWERTY,
DVORAK,
COLEMAK,
#if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE)
GREEK,
RUSSIAN,
RUNES,
HIRAGAN,
#endif
MAKE,
RG_QUOT,
LAST
TESTING,
RNGWORD,
CCCV,
SEED,
SARCASM,
VPRWAVE,
STRAYA,
SECRET0,
SECRET1,
SECRET2,
SECRET3,
SECRET4,
SECRET5,
SECRET6,
SECRET7,
SECRET8,
NEW_SAFE_RANGE // start new keyboard-level declarations with NEW_SAFE_RANGE
};
bool process_record_secrets(uint16_t keycode, keyrecord_t *record);
bool process_record_keymap(uint16_t keycode, keyrecord_t *record);
// clang-format off
typedef union {
struct {
uint8_t aesthetic : 1,
spongebob : 1,
uppercase : 1,
australia : 1,
unusued : 4;
};
uint8_t all;
} mode_config_t;
// clang-format on
extern mode_config_t mode;

View File

@@ -1 +1,65 @@
#include "ridingqwerty.h"
__attribute__((weak))
void matrix_init_keymap(void) {}
void matrix_init_user(void) {
matrix_init_keymap();
#if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE)
set_unicode_input_mode(UC_LNX);
#endif
//set_single_persistent_default_layer(_QWERTY);
default_layer_set(1U << _QWERTY);
}
__attribute__((weak))
void matrix_scan_keymap(void) {
}
void matrix_scan_user(void) {
// use for global event timers
}
__attribute__((weak))
void keyboard_post_init_keymap(void) {}
void keyboard_post_init_user(void) {
#if defined(CONSOLE_ENABLE)
debug_enable = true;
debug_matrix = true;
//debug_keyboard=true;
//debug_mouse=true;
#endif
}
__attribute__((weak))
layer_state_t layer_state_set_keymap(layer_state_t state) { return state; }
layer_state_t layer_state_set_user(layer_state_t state) {
state = update_tri_layer_state(state, _EDITOR, _DEBUG, _SECRET);
#ifdef CONSOLE_ENABLE
uprintf("LAYER: %u\n", state);
#endif
return state;
}
uint16_t get_tapping_term(uint16_t keycode) {
switch (keycode) {
case RC(ENT):
case ED(ESC):
return 225;
default:
return TAPPING_TERM;
}
};
bool get_tapping_force_hold(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case NM(SCLN):
return true;
default:
return false;
}
}

View File

@@ -1,37 +1,61 @@
#pragma once
#include "quantum.h"
#include "version.h"
#include "process_records.h"
#include "wrappers.h"
#ifdef TAP_DANCE_ENABLE
# include "tapdances.h"
#endif
#if defined(UNICODEMAP_ENABLE) || defined(UNICODE_ENABLE)
# include "unicode.h"
#endif
enum userspace_layers
{
_QWERTY = 0,
_QWERTY,
_DVORAK,
_COLEMAK,
/*
_WORKMAN et al. go here
*/
#if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE)
_GREEK,
_RUSSIAN,
_RUNES,
_HIRA1,
_HIRA2,
#endif
_EDITOR,
_NUMBER,
_SYMBOL,
_F_KEYS,
_DEBUG,
_SECRET,
#if defined(MOUSEKEY_ENABLED)
_MOUSE,
#endif
_MEDIA,
_FINAL
};
// modtaps
#define LS_Z MT(MOD_LSFT, KC_Z)
#define LC_ESC MT(MOD_LCTL, KC_ESC)
#define LG_TAB MT(MOD_LGUI, KC_TAB)
#define LA_LBRC MT(MOD_LALT, KC_LBRC)
#define LS_RBRC MT(MOD_LSFT, KC_RBRC)
#define RS_MINS MT(MOD_RSFT, KC_MINS)
#define RA_EQL MT(MOD_RALT, KC_EQL)
//RG_LMOT defined in process_records.h
#define RC_ENT MT(MOD_RCTL, KC_ENT)
#define RS_SLSH MT(MOD_RSFT, KC_SLSH)
// layertaps
#define ED_A LT(_EDITOR, KC_A)
#define ED_ESC LT(_EDITOR, KC_ESC)
#define NM_SCLN LT(_NUMBER, KC_SCLN)
#define NM_BSPC LT(_NUMBER, KC_BSPC)
#define SM_SPC LT(_SYMBOL, KC_SPC)
#define SC_TAB LT(_SECRET, KC_TAB)
#define FK_DOT LT(_F_KEYS, KC_DOT)
#define LS(kc) MT(MOD_LSFT, KC_##kc)
#define LC(kc) MT(MOD_LCTL, KC_##kc)
#define LG(kc) MT(MOD_LGUI, KC_##kc)
#define LA(kc) MT(MOD_LALT, KC_##kc)
#define RS(kc) MT(MOD_RSFT, KC_##kc)
#define RC(kc) MT(MOD_RCTL, KC_##kc)
#define RG(kc) MT(MOD_RGUI, KC_##kc)
#define RA(kc) MT(MOD_RALT, KC_##kc)
#define ED(kc) LT(_EDITOR, KC_##kc)
#define NM(kc) LT(_NUMBER, KC_##kc)
#define SM(kc) LT(_SYMBOL, KC_##kc)
#define SC(kc) LT(_SECRET, KC_##kc)
#define FK(kc) LT(_F_KEYS, KC_##kc)
#define DB(kc) LT(_DEBUG, KC_##kc)
void matrix_init_keymap(void);
void matrix_scan_keymap(void);
void keyboard_post_init_keymap(void);
layer_state_t layer_state_set_keymap(layer_state_t state);

View File

@@ -1,8 +1,24 @@
#LEADER_ENABLE = yes
SRC += ridingqwerty.c \
process_records.c
BOOTMAGIC_ENABLE = lite
CONSOLE_ENABLE = no
COMMAND_ENABLE = no
UNICODE_ENABLE = no # "yes" in Atreus default keymap, blocking UNICODEMAP_ENABLE
UNICODEMAP_ENABLE = yes
MOUSEKEY_ENABLE = no
TAP_DANCE_ENABLE = yes
AUTO_SHIFT_ENABLE = no
ifneq ("$(wildcard $(USER_PATH)/secrets.c)","")
SRC += secrets.c
endif
ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
SRC += tapdances.c
endif
ifeq ($(strip $(UNICODEMAP_ENABLE)), yes)
SRC += unicode.c
endif

View File

@@ -0,0 +1,33 @@
#include "ridingqwerty.h"
#include "tapdances.h"
void braces_finished (qk_tap_dance_state_t *state, void *user_data) {
if ((state->count == 1) || (state->count == 3)) {
register_code(KC_LSFT);
}
}
void braces_reset (qk_tap_dance_state_t *state, void *user_data) {
// two or three taps for "[]"/"{}"
if ((state->count == 2) || (state->count == 3)) {
tap_code(KC_LBRC);
tap_code(KC_RBRC);
}
// one tap for "()"
else if (state->count == 1) {
tap_code(KC_9);
tap_code(KC_0);
}
// unregister the shift unconditionally
unregister_code(KC_LSFT);
// move back one space, inside the braces
if (state->count <= 3) {
tap_code(KC_LEFT);
}
}
qk_tap_dance_action_t tap_dance_actions[] = {
[TD_BRACES] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, braces_finished, braces_reset)
};

View File

@@ -0,0 +1,9 @@
#pragma once
#include "quantum.h"
#define TD_BRC TD(TD_BRACES)
enum tapdance_id {
TD_BRACES = 0
};

View File

@@ -0,0 +1,7 @@
#include "unicode.h"
#ifdef UNICODEMAP_ENABLE
const uint32_t PROGMEM unicode_map[] = {
FOREACH_UNICODE(UCM_ENTRY)
};
#endif

View File

@@ -0,0 +1,295 @@
#pragma once
#include "quantum.h"
// clang-format off
#define FOREACH_UNICODE(M) \
M(UALP, 0x0391) /* Α */ \
M(UBET, 0x0392) /* Β */ \
M(UGAM, 0x0393) /* Γ */ \
M(UDEL, 0x0394) /* Δ */ \
M(UEPS, 0x0395) /* Ε */ \
M(UZET, 0x0396) /* Ζ */ \
M(UETA, 0x0397) /* Η */ \
M(UTHE, 0x0398) /* Θ */ \
M(UIOT, 0x0399) /* Ι */ \
M(UKAP, 0x039A) /* Κ */ \
M(ULAM, 0x039B) /* Λ */ \
M(UMU, 0x039C) /* M */ \
M(UNU, 0x039D) /* Ν */ \
M(UXI, 0x039E) /* Ξ */ \
M(UOMI, 0x039F) /* Ο */ \
M(UPI, 0x03A0) /* Π */ \
M(URHO, 0x03A1) /* Ρ */ \
M(USIG, 0x03A3) /* Σ */ \
M(UTAU, 0x03A4) /* Τ */ \
M(UUPS, 0x03A5) /* Υ */ \
M(UPHI, 0x03A6) /* Φ */ \
M(UCHI, 0x03A7) /* Χ */ \
M(UPSI, 0x03A8) /* Ψ */ \
M(UOME, 0x03A9) /* Ω */ \
M(LALP, 0x03B1) /* α */ \
M(LBET, 0x03B2) /* β */ \
M(LGAM, 0x03B3) /* γ */ \
M(LDEL, 0x03B4) /* δ */ \
M(LEPS, 0x03B5) /* ε */ \
M(LZET, 0x03B6) /* ζ */ \
M(LETA, 0x03B7) /* η */ \
M(LTHE, 0x03B8) /* θ */ \
M(LIOT, 0x03B9) /* ι */ \
M(LKAP, 0x03BA) /* κ */ \
M(LLAM, 0x03BB) /* λ */ \
M(LMU, 0x03BC) /* μ */ \
M(LNU, 0x03BD) /* ν */ \
M(LXI, 0x03BE) /* ξ */ \
M(LOMI, 0x03BF) /* ο */ \
M(LPI, 0x03C0) /* π */ \
M(LRHO, 0x03C1) /* ρ */ \
M(LSIG, 0x03C3) /* σ */ \
M(LTAU, 0x03C4) /* τ */ \
M(LUPS, 0x03C5) /* υ */ \
M(LPHI, 0x03C6) /* φ */ \
M(LCHI, 0x03C7) /* χ */ \
M(LPSI, 0x03C8) /* ψ */ \
M(LOME, 0x03C9) /* ω */ \
M(UAH, 0x0410) /* А */ \
M(UBE, 0x0411) /* Б */ \
M(UVE, 0x0412) /* В */ \
M(UGHE, 0x0413) /* Г */ \
M(UDE, 0x0414) /* Д */ \
M(UIE, 0x0415) /* Е */ \
M(UIO, 0x0401) /* Ё */ \
M(UZHE, 0x0416) /* Ж */ \
M(UZE, 0x0417) /* З */ \
M(UIH, 0x0418) /* И */ \
M(USIH, 0x0419) /* Й */ \
M(UKA, 0x041A) /* К */ \
M(UEL, 0x041B) /* Л */ \
M(UEM, 0x041C) /* М */ \
M(UEN, 0x041D) /* Н */ \
M(UOH, 0x041E) /* О */ \
M(UPE, 0x041F) /* П */ \
M(UER, 0x0420) /* Р */ \
M(UES, 0x0421) /* С */ \
M(UTE, 0x0422) /* Т */ \
M(UUU, 0x0423) /* У */ \
M(UEF, 0x0424) /* Ф */ \
M(UHA, 0x0425) /* Х */ \
M(UTSE, 0x0426) /* Ц */ \
M(UCHE, 0x0427) /* Ч */ \
M(USHA, 0x0428) /* Ш */ \
M(USCHA, 0x0429) /* Щ */ \
M(UHARD, 0x042A) /* Ъ */ \
M(UYERU, 0x042B) /* Ы */ \
M(USOFT, 0x042C) /* Ь */ \
M(UEH, 0x042D) /* Э */ \
M(UYU, 0x042E) /* Ю */ \
M(UYA, 0x042F) /* Я */ \
M(LAH, 0x0430) /* а */ \
M(LBE, 0x0431) /* б */ \
M(LVE, 0x0432) /* в */ \
M(LGHE, 0x0433) /* г */ \
M(LDE, 0x0434) /* д */ \
M(LIE, 0x0435) /* е */ \
M(LIO, 0x0451) /* ё */ \
M(LZHE, 0x0436) /* ж */ \
M(LZE, 0x0437) /* з */ \
M(LIH, 0x0438) /* и */ \
M(LSIH, 0x0439) /* й */ \
M(LKA, 0x043A) /* к */ \
M(LEL, 0x043B) /* л */ \
M(LEM, 0x043C) /* м */ \
M(LEN, 0x043D) /* н */ \
M(LOH, 0x043E) /* о */ \
M(LPE, 0x043F) /* п */ \
M(LER, 0x0440) /* р */ \
M(LES, 0x0441) /* с */ \
M(LTE, 0x0442) /* т */ \
M(LUU, 0x0443) /* у */ \
M(LEF, 0x0444) /* ф */ \
M(LHA, 0x0445) /* х */ \
M(LTSE, 0x0446) /* ц */ \
M(LCHE, 0x0447) /* ч */ \
M(LSHA, 0x0448) /* ш */ \
M(LSCHA, 0x0449) /* щ */ \
M(LHARD, 0x044A) /* ъ */ \
M(LYERU, 0x044B) /* ы */ \
M(LSOFT, 0x044C) /* ь */ \
M(LEH, 0x044D) /* э */ \
M(LYU, 0x044E) /* ю */ \
M(LYA, 0x044F) /* я */ \
M(FE, 0x16A0) /* ᚠ */ \
M(UR, 0x16A2) /* ᚢ */ \
M(THURS, 0x16A6) /* ᚦ */ \
M(ANSUZ, 0x16A8) /* ᚨ */ \
M(RAIDO, 0x16B1) /* ᚱ */ \
M(KAUNA, 0x16B2) /* */ \
M(GEBO, 0x16B7) /* */ \
M(WUNJO, 0x16B9) /* ᚹ */ \
M(HAGLZ, 0x16BA) /* ᚺ */ \
M(NAUDZ, 0x16BE) /* ᚾ */ \
M(ISAZ, 0x16C1) /* */ \
M(JERAN, 0x16C3) /* ᛃ */ \
M(IWAZ, 0x16C7) /* ᛇ */ \
M(PERTH, 0x16C8) /* ᛈ */ \
M(ALGIZ, 0x16C9) /* ᛉ */ \
M(SOWIL, 0x16CA) /* ᛊ */ \
M(TIWAZ, 0x16CF) /* ᛏ */ \
M(BEORC, 0x16D2) /* ᛒ */ \
M(EHWAZ, 0x16D6) /* */ \
M(MANNZ, 0x16D7) /* ᛗ */ \
M(LAUKZ, 0x16DA) /* ᛚ */ \
M(INGWZ, 0x16DC) /* ᛜ */ \
M(DAGAZ, 0x16DE) /* ᛞ */ \
M(ETHEL, 0x16DF) /* ᛟ */ \
M(JRO, 0x308D) /* ろ */ \
M(JWA, 0x308F) /* わ */ \
M(JNU, 0x306C) /* ぬ */ \
M(JHU, 0x3075) /* ふ */ \
M(JA, 0x3042) /* あ */ \
M(JU, 0x3046) /* う */ \
M(JE, 0x3048) /* え */ \
M(JO, 0x304A) /* お */ \
M(JYA, 0x3084) /* や */ \
M(JYU, 0x3086) /* ゆ */ \
M(JYO, 0x3088) /* よ */ \
M(JHO, 0x307B) /* ほ */ \
M(JHE, 0x3078) /* へ */ \
M(JMU, 0x3080) /* む */ \
M(JTA, 0x305F) /* た */ \
M(JTE, 0x3066) /* て */ \
M(JI, 0x3044) /* い */ \
M(JSU, 0x3059) /* す */ \
M(JKA, 0x3095) /* ゕ */ \
M(JN, 0x3093) /* ん */ \
M(JNA, 0x306A) /* な */ \
M(JNI, 0x306B) /* に */ \
M(JRA, 0x3089) /* ら */ \
M(JSE, 0x305B) /* せ */ \
M(JVV, 0x309B) /* ゛*/ \
M(JSV, 0x309C) /* ゜*/ \
M(JTI, 0x3061) /* ち */ \
M(JTO, 0x3068) /* と */ \
M(JSI, 0x3057) /* し */ \
M(JHA, 0x306F) /* は */ \
M(JKI, 0x304D) /* き */ \
M(JKU, 0x304F) /* く */ \
M(JMA, 0x307E) /* ま */ \
M(JNO, 0x306E) /* の */ \
M(JRI, 0x308A) /* り */ \
M(JRE, 0x308C) /* れ */ \
M(JKE, 0x3051) /* け */ \
M(JTU, 0x3064) /* つ */ \
M(JSA, 0x3055) /* さ */ \
M(JSO, 0x305D) /* そ */ \
M(JHI, 0x3072) /* ひ */ \
M(JKO, 0x3053) /* こ */ \
M(JMI, 0x307F) /* み */ \
M(JMO, 0x3082) /* も */ \
M(JNE, 0x306D) /* ね */ \
M(JRU, 0x308B) /* る */ \
M(JME, 0x3081) /* め */ \
M(ALEF, 0x05D0) /* א */ \
M(BET, 0x05D1) /* ב */ \
M(GIMEL, 0x05D2) /* ג */ \
M(DALET, 0x05D3) /* ד */ \
M(HE, 0x05D4) /* ה */ \
M(VAV, 0x05D5) /* ו */ \
M(ZAYIN, 0x05D6) /* ז */ \
M(CHET, 0x05D7) /* ח */ \
M(TET, 0x05D8) /* ט */ \
M(YOD, 0x05D9) /* י */ \
M(KAF, 0x05DB) /* כ */ \
M(LAMED, 0x05DC) /* ל */ \
M(MEM, 0x05DE) /* מ */ \
M(NUN, 0x05E0) /* נ */ \
M(SAMCH, 0x05E1) /* ס */ \
M(AYIN, 0x05E2) /* ע */ \
M(PE, 0x05E4) /* פ */ \
M(TZADI, 0x05E6) /* צ */ \
M(KOF, 0x05E7) /* ק */ \
M(RESH, 0x05E8) /* ר */ \
M(SHIN, 0x05E9) /* ש */ \
M(TAV, 0x05EA) /* ת */
// clang-format on
#define UC_KEYCODE(name, code) name = UC(code), // LALP = UC(0x03B1),
#define UCM_NAME(name, code) UCM_ ## name, // UCM_LALP,
#define UCM_ENTRY(name, code) [UCM_ ## name] = code, // [UCM_LALP] = 0x03B1,
#define UCM_KEYCODE(name, code) name = X(UCM_ ## name), // LALP = X(UCM_LALP)
#if defined(UNICODE_ENABLE)
enum unicode_keycodes {
FOREACH_UNICODE(UC_KEYCODE)
};
#elif defined(UNICODEMAP_ENABLE)
enum unicode_names {
FOREACH_UNICODE(UCM_NAME)
};
extern const uint32_t PROGMEM unicode_map[];
enum unicode_keycodes {
FOREACH_UNICODE(UCM_KEYCODE)
};
#endif
#define ALPHA XP(LALP, UALP)
#define BETA XP(LBET, UBET)
#define GAMMA XP(LGAM, UGAM)
#define DELTA XP(LDEL, UDEL)
#define EPSLN XP(LEPS, UEPS)
#define ZETA XP(LZET, UZET)
#define ETA XP(LETA, UETA)
#define THETA XP(LTHE, UTHE)
#define IOTA XP(LIOT, UIOT)
#define KAPPA XP(LKAP, UKAP)
#define LAMBD XP(LLAM, ULAM)
#define GMU XP(LMU, UMU)
#define NU XP(LNU, UNU)
#define XI XP(LXI, UXI)
#define OMCRN XP(LOMI, UOMI)
#define PI XP(LPI, UPI)
#define RHO XP(LRHO, URHO)
#define SIGMA XP(LSIG, USIG)
#define TAU XP(LTAU, UTAU)
#define UPSLN XP(LUPS, UUPS)
#define PHI XP(LPHI, UPHI)
#define CHI XP(LCHI, UCHI)
#define PSI XP(LPSI, UPSI)
#define OMEGA XP(LOME, UOME)
#define AH XP(LAH, UAH)
#define BE XP(LBE, UBE)
#define VE XP(LVE, UVE)
#define GHE XP(LGHE, UGHE)
#define DE XP(LDE, UDE)
#define IE XP(LIE, UIE)
#define IO XP(LIO, UIO)
#define ZHE XP(LZHE, UZHE)
#define ZE XP(LZE, UZE)
#define IH XP(LIH, UIH)
#define SIH XP(LSIH, USIH)
#define KA XP(LKA, UKA)
#define EL XP(LEL, UEL)
#define EM XP(LEM, UEM)
#define EN XP(LEN, UEN)
#define OH XP(LOH, UOH)
#define PE XP(LPE, UPE)
#define ER XP(LER, UER)
#define ES XP(LES, UES)
#define TE XP(LTE, UTE)
#define UU XP(LUU, UUU)
#define EF XP(LEF, UEF)
#define HA XP(LHA, UHA)
#define TSE XP(LTSE, UTSE)
#define CHE XP(LCHE, UCHE)
#define SHA XP(LSHA, USHA)
#define SCHA XP(LSCHA, USCHA)
#define HARD XP(LHARD, UHARD)
#define YERU XP(LYERU, UYERU)
#define SOFT XP(LSOFT, USOFT)
#define EH XP(LEH, UEH)
#define YU XP(LYU, UYU)
#define YA XP(LYA, UYA)

View File

@@ -0,0 +1,156 @@
#pragma once
#include "ridingqwerty.h"
// clang-format off
#define LAYOUT_atreus_wrapper(...) LAYOUT_atreus(__VA_ARGS__)
#define LAYOUT_minorca_wrapper(...) LAYOUT_minorca(__VA_ARGS__)
#define ___________VI_ARROWS______________ KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
// 1......__2......__3......__4......__5...... 1......__2......__3......__4......__5......
#define ________________QWERTY_L1__________________ KC_Q, KC_W, KC_E, KC_R, KC_T
#define ________________QWERTY_L2__________________ KC_A, KC_S, KC_D, KC_F, KC_G
#define ________________QWERTY_L3__________________ KC_Z, KC_X, KC_C, KC_V, KC_B
#define ________________QWERTY_R1__________________ KC_Y, KC_U, KC_I, KC_O, KC_P
#define ________________QWERTY_R2__________________ KC_H, KC_J, KC_K, KC_L, KC_SCLN
#define ________________QWERTY_R3__________________ KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH
#define ________________ATREUS_L1__________________ ________________QWERTY_L1__________________
#define ________________ATREUS_L2__________________ ED(A), KC_S, KC_D, KC_F, KC_G
#define ________________ATREUS_L3__________________ LS(Z), KC_X, KC_C, KC_V, KC_B
#define ________________ATREUS_R1__________________ ________________QWERTY_R1__________________
#define ________________ATREUS_R2__________________ KC_H, KC_J, KC_K, KC_L, NM(SCLN)
#define ________________ATREUS_R3__________________ KC_N, KC_M, KC_COMM, FK(DOT), RS(SLSH)
#define ________________FNHOMEROW_L2_______________ C(KC_A), G(KC_S), A(KC_D), S(KC_F), KC_G
#define ________________FNHOMEROW_R2_______________ KC_H, S(KC_J), A(KC_K), G(KC_L), C(SCLN)
#define ____THUMBS_R4___ ED(ESC), DB(TAB)
#define _____BLANK_R4___ _______, _______
#define ________________ _______, _______
#define ________________COLEMAK_L1_________________ KC_Q, KC_W, KC_F, KC_P, KC_G
#define ________________COLEMAK_L2_________________ ED(A), KC_R, KC_S, KC_T, KC_D
#define ________________COLEMAK_L3_________________ LS(Z), KC_X, KC_C, KC_V, KC_B
#define ________________COLEMAK_R1_________________ KC_J, KC_L, KC_U, KC_Y, KC_SCLN
#define ________________COLEMAK_R2_________________ KC_H, KC_N, KC_E, KC_I, NM(O)
#define ________________COLEMAK_R3_________________ KC_K, KC_M, KC_COMM, FK(DOT), RS(SLSH)
#define ________________DVORAK_L1__________________ KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y
#define ________________DVORAK_L2__________________ ED(A), KC_O, KC_E, KC_U, KC_I
#define ________________DVORAK_L3__________________ LS(SCLN),KC_Q, KC_J, KC_K, KC_X
#define ________________DVORAK_R1__________________ KC_F, KC_G, KC_C, KC_R, KC_L
#define ________________DVORAK_R2__________________ KC_D, KC_H, KC_T, KC_N, NM(S)
#define ________________DVORAK_R3__________________ KC_B, KC_M, KC_W, FK(V), RS(Z)
#define ________________BOTTOM_L4__________________ LC(ESC), LG(TAB), LA(LBRC), LS(RBRC), NM(BSPC)
#define ________________BOTTOM_R4__________________ SM(SPC), RS(MINS), RA(EQL), RG_QUOT, RC(ENT)
#define ________________NUMROW_L1__________________ KC_1, KC_2, KC_3, KC_4, KC_5
#define ________________NUMROW_R1__________________ KC_6, KC_7, KC_8, KC_9, KC_0
#define ________________NUMPAD_R1__________________ _______, KC_7, KC_8, KC_9, KC_0
#define ________________NUMPAD_R2__________________ _______, KC_4, KC_5, KC_6, _______
#define ________________NUMPAD_R3__________________ _______, KC_1, KC_2, KC_3, KC_BSLS
#define ________________NUMPAD_R4__________________ KC_0, KC_0, KC_DOT, KC_3, _______
#define ________________SYMROW_L1__________________ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC
#define ________________SYMROW_R1__________________ KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN
#define ________________ _______, _______
#define _________________________ _______, _______, _______
#define __________________________________ _______, _______, _______, _______
#define ___________________________________________ _______, _______, _______, _______, _______
#define ___________________________________________ _______, _______, _______, _______, _______
#define ___________________________________________ _______, _______, _______, _______, _______
#define ________________BLANK______________________ ___________________________________________
#define ________________BLOCK______________________ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
#define XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ________________BLOCK______________________
#define ________________FKEYROW_L1_________________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5
#define ________________FKEYROW_R1_________________ KC_F6, KC_F7, KC_F8, KC_F9, KC_F10
#define ________________EDITOR_L1__________________ KC_GRV, _______, KC_END, _______, KC_F5
#define ________________EDITOR_L2__________________ KC_HOME, _______, KC_DELT, _______, _______
#if defined(TAP_DANCE_ENABLE)
#define ________________EDITOR_L3__________________ _______, KC_VOLD, KC_VOLU, CCCV, TD_BRC
#else
#define ________________EDITOR_L3__________________ _______, KC_VOLD, KC_VOLU, CCCV, _______
#endif
#define ________________EDITOR_R1__________________ _______, _______, KC_INS, _______, KC_PGUP
#define ________________EDITOR_R2__________________ ___________VI_ARROWS______________, _______
#define ________________EDITOR_R3__________________ KC_PGDN, _______, _______, _______, KC_BSLS
#define ________________DEBUG_L1___________________ DEBUG, _______, _______, RNGWORD, SARCASM
#define ________________DEBUG_L2___________________ GREEK, RUSSIAN, HIRAGAN, RUNES, _______
#define ________________DEBUG_L3___________________ _______, _______, _______, VERSION, _______
#define ________________DEBUG_R1___________________ VPRWAVE, STRAYA, _______, TESTING, _______
#define ________________DEBUG_R2___________________ _______, _______, EEP_RST, RESET, MAKE
#define ________________DEBUG_R3___________________ QWERTY, DVORAK, COLEMAK, _______, _______
#define ________________SECRET_L1__________________ _______, _______, _______, SECRET0, SECRET1
#define ________________SECRET_L2__________________ SECRET4, SECRET8, _______, _______, _______
#define ________________SECRET_L3__________________ SECRET7, _______, SECRET2, SECRET5, _______
#define ________________SECRET_R1__________________ _______, _______, _______, _______, _______
#define ________________SECRET_R2__________________ _______, _______, _______, SECRET6, _______
#define ________________SECRET_R3__________________ _______, SECRET3, _______, _______, _______
#if defined(UNICODEMAP_ENABLE)
// Greek
#define ________________GREEK_L1___________________ THETA, OMEGA, EPSLN, RHO, TAU
#define ________________GREEK_L2___________________ ALPHA, SIGMA, DELTA, PHI, GAMMA
#define ________________GREEK_L3___________________ ZETA, XI, CHI, PHI, BETA
#define ________________GREEK_R1___________________ UPSLN, UPSLN, IOTA, OMCRN, PI
#define ________________GREEK_R2___________________ ETA, PSI, KAPPA, LAMBD, NM(SCLN)
#define ________________GREEK_R3___________________ NU, GMU, KC_COMM, FK(DOT), RS(SLSH)
// Elder Futhark
#define ________________FTHRK_L1___________________ INGWZ, WUNJO, EHWAZ, RAIDO, TIWAZ
#define ________________FTHRK_L2___________________ ANSUZ, SOWIL, DAGAZ, FE, GEBO
#define ________________FTHRK_L3___________________ ALGIZ, THURS, KAUNA, WUNJO, BEORC
#define ________________FTHRK_R1___________________ IWAZ, UR, ISAZ, ETHEL, PERTH
#define ________________FTHRK_R2___________________ HAGLZ, JERAN, KAUNA, LAUKZ, KC_SCLN
#define ________________FTHRK_R3___________________ NAUDZ, MANNZ, KC_COMM, KC_DOT, KC_SLSH
// Russian Cyrillic
#define ________________CYRLC_L1___________________ YA, SCHA, IE, ER, TE
#define ________________CYRLC_L2___________________ AH, ES, DE, EF, GHE
#define ________________CYRLC_L3___________________ ZE, HA, TSE, VE, BE
#define ________________CYRLC_R1___________________ YERU, UU, IH, OH, PE
#define ________________CYRLC_R2___________________ CHE, SIH, KA, EL, SOFT
#define ________________CYRLC_R3___________________ EN, EM, YU, SCHA, EH
#define ________________CYRLC_R4___________________ SM(SPC), IO, HARD, ZHE, RC(ENT)
// Hiragana
#define ________________JIS1_R1____________________ JTA, JTE, JI, JSU, JKA
#define ________________JIS1_R2____________________ JTI, JTO, JSI, JHA, JKI
#define ________________JIS1_R3____________________ JMI, JMO, KC_COMM, KC_DOT, MO(_HIRA2)
#define ________________JIS1_L1____________________ JN, JNA, JNI, JRA, JSE
#define ________________JIS1_L2____________________ JKU, JMA, JNO, JRI, JRE
#define ________________JIS1_L3____________________ JTU, JSA, JSO, JHI, JKO
#define ________________JIS2_R1____________________ JRO, JWA, JNU, JHU, JA
#define ________________JIS2_R2____________________ JYO, JHO, JHE, JMU, JVV
#define ________________JIS2_R3____________________ JRU, JME, KC_COMM, KC_DOT, _______
#define ________________JIS2_L1____________________ JU, JE, JO, JYA, JYU
#define ________________JIS2_L2____________________ JSV, JKE, JMI, JMO, JNE
#define ________________JIS2_L3____________________ JTU, JSA, JSO, JHI, JKO
#endif
// clang-format on