Last active
January 11, 2021 21:42
-
-
Save permil/08f13c3f07f9a1cb6b1fc7ed05887992 to your computer and use it in GitHub Desktop.
My Helix keymap
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
This is the c configuration file for the keymap | |
Copyright 2012 Jun Wako <wakojun@gmail.com> | |
Copyright 2015 Jack Humbert | |
This program is free software: you can redistribute it and/or modify | |
it under the terms of the GNU General Public License as published by | |
the Free Software Foundation, either version 2 of the License, or | |
(at your option) any later version. | |
This program is distributed in the hope that it will be useful, | |
but WITHOUT ANY WARRANTY; without even the implied warranty of | |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
GNU General Public License for more details. | |
You should have received a copy of the GNU General Public License | |
along with this program. If not, see <http://www.gnu.org/licenses/>. | |
*/ | |
#ifndef CONFIG_USER_H | |
#define CONFIG_USER_H | |
#include "../../config.h" | |
// place overrides here | |
#endif /* CONFIG_USER_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include QMK_KEYBOARD_H | |
#include "bootloader.h" | |
#ifdef PROTOCOL_LUFA | |
#include "lufa.h" | |
#include "split_util.h" | |
#endif | |
#ifdef AUDIO_ENABLE | |
#include "audio.h" | |
#endif | |
#ifdef SSD1306OLED | |
#include "ssd1306.h" | |
#endif | |
extern keymap_config_t keymap_config; | |
#ifdef RGBLIGHT_ENABLE | |
//Following line allows macro to read current RGB settings | |
extern rgblight_config_t rgblight_config; | |
#endif | |
extern uint8_t is_master; | |
// Each layer gets a name for readability, which is then used in the keymap matrix below. | |
// The underscores don't mean anything - you can have a layer called STUFF or any other name. | |
// Layer names don't all need to be of the same length, obviously, and you can also skip them | |
// entirely and just use numbers. | |
enum layer_number { | |
_QWERTY = 0, | |
_COLEMAK, | |
_DVORAK, | |
_LOWER, | |
_RAISE, | |
_ADJUST | |
}; | |
enum custom_keycodes { | |
QWERTY = SAFE_RANGE, | |
COLEMAK, | |
DVORAK, | |
LOWER, | |
RAISE, | |
ADJUST, | |
BACKLIT, | |
EISU, | |
KANA, | |
RGBRST | |
}; | |
enum macro_keycodes { | |
KC_SAMPLEMACRO, | |
}; | |
// Fillers to make layering more clear | |
#define _______ KC_TRNS | |
#define XXXXXXX KC_NO | |
#define JA_CLON KC_QUOT // : and + | |
#define JA_AT KC_LBRC // @ and ` | |
#define JA_HAT KC_EQL // ^ and ~ | |
#define JA_ENUN KC_RO // \ and _ (EN mark and UNder score) | |
#define JA_ENVL KC_JYEN // \ and | (EN mark and Vertical Line) | |
#define JA_LBRC KC_RBRC // [ and { | |
#define JA_RBRC KC_BSLS // ] and } | |
//Macros | |
#define M_SAMPLE M(KC_SAMPLEMACRO) | |
#if HELIX_ROWS == 5 | |
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |
/* Qwerty | |
* ,-----------------------------------------. ,-----------------------------------------. | |
* | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------| | |
* | Tab | Q | W | E | R | T | | Y | U | I | O | P | Del | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------| | |
* | Caps | A | S | D | F | G | | H | J | K | L | ; | : | | |
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------| | |
* | Shift| Z | X | C | V | B | [ | ] | N | M | , | . | / |Enter | | |
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------| | |
* | Ctrl | GUI | Alt |Adjust|Lower |Space | EISU | KANA |Space |Raise | Left | Down | Up |Right | | |
* `-------------------------------------------------------------------------------------------------' | |
*/ | |
[_QWERTY] = LAYOUT( \ | |
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ | |
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, \ | |
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, JA_CLON, \ | |
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, JA_LBRC, JA_RBRC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ | |
KC_LCTL, KC_LGUI, KC_LALT, ADJUST, LOWER, KC_SPC, EISU, KANA, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ | |
), | |
/* Colemak | |
* ,-----------------------------------------. ,-----------------------------------------. | |
* | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------| | |
* | Tab | Q | W | F | P | G | | J | L | U | Y | ; | Bksp | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------| | |
* | Ctrl | A | R | S | T | D | | H | N | E | I | O | ' | | |
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------| | |
* | Shift| Z | X | C | V | B | [ | ] | K | M | , | . | / |Enter | | |
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------| | |
* |Adjust| Esc | Alt | GUI | EISU |Lower |Space |Space |Raise | KANA | Left | Down | Up |Right | | |
* `-------------------------------------------------------------------------------------------------' | |
*/ | |
[_COLEMAK] = LAYOUT( \ | |
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \ | |
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \ | |
KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \ | |
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC, KC_RBRC, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ | |
ADJUST, KC_ESC, KC_LALT, KC_LGUI, EISU, LOWER, KC_SPC, KC_SPC, RAISE, KANA, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ | |
), | |
/* Dvorak | |
* ,-----------------------------------------. ,-----------------------------------------. | |
* | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------| | |
* | Tab | ' | , | . | P | Y | | F | G | C | R | L | Del | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------| | |
* | Ctrl | A | O | E | U | I | | D | H | T | N | S | / | | |
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------| | |
* | Shift| ; | Q | J | K | X | [ | ] | B | M | W | V | Z |Enter | | |
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------| | |
* |Adjust| Esc | Alt | GUI | EISU |Lower |Space |Space |Raise | KANA | Left | Down | Up |Right | | |
* `-------------------------------------------------------------------------------------------------' | |
*/ | |
[_DVORAK] = LAYOUT( \ | |
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ | |
KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DEL, \ | |
KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \ | |
KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_LBRC, KC_RBRC, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \ | |
ADJUST, KC_ESC, KC_LALT, KC_LGUI, EISU, LOWER, KC_SPC, KC_SPC, RAISE, KANA, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ | |
), | |
/* Lower | |
* ,-----------------------------------------. ,-----------------------------------------. | |
* | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------| | |
* | | | | | | | | | | | | | | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------| | |
* | | | | | | | | | = | ` | { | } | | | | |
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------| | |
* | | | | | | | | | | ~ | _ |PageDn|PageUp| | | |
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------| | |
* | | | | | | | | | | | Next | Vol- | Vol+ | Play | | |
* `-------------------------------------------------------------------------------------------------' | |
*/ | |
[_LOWER] = LAYOUT( \ | |
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, \ | |
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ | |
_______, _______, _______, _______, _______, _______, KC_F6, KC_UNDS, S(JA_AT),S(JA_LBRC),S(JA_RBRC),S(JA_ENVL), \ | |
_______, _______, _______, _______, _______, _______, _______, _______, KC_F12, S(JA_HAT),S(JA_ENUN), _______, _______, _______, \ | |
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ | |
), | |
/* Raise | |
* ,-----------------------------------------. ,-----------------------------------------. | |
* | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------| | |
* | | | | | | | | | | | | | | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------| | |
* | | | | | | | | | - | @ | [ | ] | 짜 | | |
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------| | |
* | | | | | | | | | | ^ | 짜 |PageDn|PageUp| | | |
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------| | |
* | | | | | | | | | | | Next | Vol- | Vol+ | Play | | |
* `-------------------------------------------------------------------------------------------------' | |
*/ | |
[_RAISE] = LAYOUT( \ | |
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, \ | |
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ | |
_______, _______, _______, _______, _______, _______, KC_F6, KC_MINS, JA_AT, JA_LBRC, JA_RBRC, JA_ENVL, \ | |
_______, _______, _______, _______, _______, _______, _______, _______, KC_F12, JA_HAT, JA_ENUN, _______, _______, _______, \ | |
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ | |
), | |
/* Adjust (Lower + Raise) | |
* ,-----------------------------------------. ,-----------------------------------------. | |
* | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | Bksp | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------| | |
* | | Reset|RGBRST| | | | | | | | | | Del | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------| | |
* | | | |Aud on|Audoff| Mac | | Win |Qwerty|Colemk|Dvorak| | | | |
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------| | |
* | | | | | | | | | | |RGB ON| HUE+ | SAT+ | VAL+ | | |
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------| | |
* | | | | | | | | | | | MODE | HUE- | SAT- | VAL- | | |
* `-------------------------------------------------------------------------------------------------' | |
*/ | |
[_ADJUST] = LAYOUT( \ | |
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, RGBRST, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ | |
_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \ | |
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, \ | |
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SMOD,RGB_HUD, RGB_SAD, RGB_VAD \ | |
) | |
}; | |
#elif HELIX_ROWS == 4 | |
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |
/* Qwerty | |
* ,-----------------------------------------. ,-----------------------------------------. | |
* | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------| | |
* | Ctrl | A | S | D | F | G | | H | J | K | L | ; | ' | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------| | |
* | Shift| Z | X | C | V | B | | N | M | , | . | / |Enter | | |
* |------+------+------+------+------+------+-------------+------+------+------+------+------+------| | |
* |Adjust| Esc | Alt | GUI | EISU |Lower |Space |Space |Raise | KANA | Left | Down | Up |Right | | |
* `-------------------------------------------------------------------------------------------------' | |
*/ | |
[_QWERTY] = LAYOUT( \ | |
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ | |
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ | |
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ | |
ADJUST, KC_ESC, KC_LALT, KC_LGUI, EISU, LOWER, KC_SPC, KC_SPC, RAISE, KANA, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ | |
), | |
/* Colemak | |
* ,-----------------------------------------. ,-----------------------------------------. | |
* | Tab | Q | W | F | P | G | | J | L | U | Y | ; | Bksp | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------| | |
* | Ctrl | A | R | S | T | D | | H | N | E | I | O | ' | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------| | |
* | Shift| Z | X | C | V | B | | K | M | , | . | / |Enter | | |
* |------+------+------+------+------+------+-------------+------+------+------+------+------+------| | |
* |Adjust| Esc | Alt | GUI | EISU |Lower |Space |Space |Raise | KANA | Left | Down | Up |Right | | |
* `-------------------------------------------------------------------------------------------------' | |
*/ | |
[_COLEMAK] = LAYOUT( \ | |
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \ | |
KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \ | |
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ | |
ADJUST, KC_ESC, KC_LALT, KC_LGUI, EISU, LOWER, KC_SPC, KC_SPC, RAISE, KANA, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ | |
), | |
/* Dvorak | |
* ,-----------------------------------------. ,-----------------------------------------. | |
* | Tab | ' | , | . | P | Y | | F | G | C | R | L | Del | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------| | |
* | Ctrl | A | O | E | U | I | | D | H | T | N | S | / | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------| | |
* | Shift| ; | Q | J | K | X | | B | M | W | V | Z |Enter | | |
* |------+------+------+------+------+------+-------------+------+------+------+------+------+------| | |
* |Adjust| Esc | Alt | GUI | EISU |Lower |Space |Space |Raise | KANA | Left | Down | Up |Right | | |
* `-------------------------------------------------------------------------------------------------' | |
*/ | |
[_DVORAK] = LAYOUT( \ | |
KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DEL, \ | |
KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \ | |
KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \ | |
ADJUST, KC_ESC, KC_LALT, KC_LGUI, EISU, LOWER, KC_SPC, KC_SPC, RAISE, KANA, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ | |
), | |
/* Lower | |
* ,-----------------------------------------. ,-----------------------------------------. | |
* | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------| | |
* | | F1 | F2 | F3 | F4 | F5 | | F6 | _ | + | { | } | | | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------| | |
* | | F7 | F8 | F9 | F10 | F11 | | F12 | | | Home | End | | | |
* |------+------+------+------+------+------+-------------+------+------+------+------+------+------| | |
* | | | | | | | | | | | Next | Vol- | Vol+ | Play | | |
* `-------------------------------------------------------------------------------------------------' | |
*/ | |
[_LOWER] = LAYOUT( \ | |
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, \ | |
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ | |
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, KC_HOME, KC_END, _______, \ | |
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ | |
), | |
/* Raise | |
* ,-----------------------------------------. ,-----------------------------------------. | |
* | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------| | |
* | | F1 | F2 | F3 | F4 | F5 | | F6 | - | = | [ | ] | \ | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------| | |
* | | F7 | F8 | F9 | F10 | F11 | | F12 | | |PageDn|PageUp| | | |
* |------+------+------+------+------+------+-------------+------+------+------+------+------+------| | |
* | | | | | | | | | | | Next | Vol- | Vol+ | Play | | |
* `-------------------------------------------------------------------------------------------------' | |
*/ | |
[_RAISE] = LAYOUT( \ | |
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \ | |
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ | |
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, KC_PGDN, KC_PGUP, _______, \ | |
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ | |
), | |
/* Adjust (Lower + Raise) | |
* ,-----------------------------------------. ,-----------------------------------------. | |
* | | Reset| | | | | | | | | | | Del | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------| | |
* | | | |Aud on|Audoff| Mac | | Win |Qwerty|Colemk|Dvorak| | | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------| | |
* | | | | | | | | | |RGB ON| HUE+ | SAT+ | VAL+ | | |
* |------+------+------+------+------+------+-------------+------+------+------+------+------+------| | |
* | | | | | | | | | | | MODE | HUE- | SAT- | VAL- | | |
* `-------------------------------------------------------------------------------------------------' | |
*/ | |
[_ADJUST] = LAYOUT( \ | |
_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ | |
_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \ | |
_______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, \ | |
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SMOD,RGB_HUD, RGB_SAD, RGB_VAD \ | |
) | |
}; | |
#else | |
#error "undefined keymaps" | |
#endif | |
#ifdef AUDIO_ENABLE | |
float tone_qwerty[][2] = SONG(QWERTY_SOUND); | |
float tone_dvorak[][2] = SONG(DVORAK_SOUND); | |
float tone_colemak[][2] = SONG(COLEMAK_SOUND); | |
float tone_plover[][2] = SONG(PLOVER_SOUND); | |
float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); | |
float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); | |
#endif | |
// define variables for reactive RGB | |
bool TOG_STATUS = false; | |
int RGB_current_mode; | |
void persistent_default_layer_set(uint16_t default_layer) { | |
eeconfig_update_default_layer(default_layer); | |
default_layer_set(default_layer); | |
} | |
// Setting ADJUST layer RGB back to default | |
void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) { | |
if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) { | |
#ifdef RGBLIGHT_ENABLE | |
//rgblight_mode(RGB_current_mode); | |
#endif | |
layer_on(layer3); | |
} else { | |
layer_off(layer3); | |
} | |
} | |
struct keybuf { | |
char col, row; | |
char frame; | |
}; | |
struct keybuf keybufs[256]; | |
unsigned char keybuf_begin, keybuf_end; | |
int col, row; | |
bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |
col = record->event.key.col; | |
row = record->event.key.row; | |
if (record->event.pressed && ((row < 5 && is_master) || (row >= 5 && !is_master))) { | |
int end = keybuf_end; | |
keybufs[end].col = col; | |
keybufs[end].row = row % 5; | |
keybufs[end].frame = 0; | |
keybuf_end ++; | |
} | |
switch (keycode) { | |
case QWERTY: | |
if (record->event.pressed) { | |
#ifdef AUDIO_ENABLE | |
PLAY_SONG(tone_qwerty); | |
#endif | |
persistent_default_layer_set(1UL<<_QWERTY); | |
} | |
return false; | |
break; | |
case COLEMAK: | |
if (record->event.pressed) { | |
#ifdef AUDIO_ENABLE | |
PLAY_SONG(tone_colemak); | |
#endif | |
persistent_default_layer_set(1UL<<_COLEMAK); | |
} | |
return false; | |
break; | |
case DVORAK: | |
if (record->event.pressed) { | |
#ifdef AUDIO_ENABLE | |
PLAY_SONG(tone_dvorak); | |
#endif | |
persistent_default_layer_set(1UL<<_DVORAK); | |
} | |
return false; | |
break; | |
case LOWER: | |
if (record->event.pressed) { | |
//not sure how to have keyboard check mode and set it to a variable, so my work around | |
//uses another variable that would be set to true after the first time a reactive key is pressed. | |
if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false | |
} else { | |
TOG_STATUS = !TOG_STATUS; | |
#ifdef RGBLIGHT_ENABLE | |
//rgblight_mode(16); | |
#endif | |
} | |
layer_on(_LOWER); | |
update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); | |
} else { | |
#ifdef RGBLIGHT_ENABLE | |
//rgblight_mode(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change | |
#endif | |
TOG_STATUS = false; | |
layer_off(_LOWER); | |
update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); | |
} | |
return false; | |
break; | |
case RAISE: | |
if (record->event.pressed) { | |
//not sure how to have keyboard check mode and set it to a variable, so my work around | |
//uses another variable that would be set to true after the first time a reactive key is pressed. | |
if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false | |
} else { | |
TOG_STATUS = !TOG_STATUS; | |
#ifdef RGBLIGHT_ENABLE | |
//rgblight_mode(15); | |
#endif | |
} | |
layer_on(_RAISE); | |
update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); | |
} else { | |
#ifdef RGBLIGHT_ENABLE | |
//rgblight_mode(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change | |
#endif | |
layer_off(_RAISE); | |
TOG_STATUS = false; | |
update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); | |
} | |
return false; | |
break; | |
case ADJUST: | |
if (record->event.pressed) { | |
layer_on(_ADJUST); | |
} else { | |
layer_off(_ADJUST); | |
} | |
return false; | |
break; | |
//led operations - RGB mode change now updates the RGB_current_mode to allow the right RGB mode to be set after reactive keys are released | |
case RGB_MOD: | |
#ifdef RGBLIGHT_ENABLE | |
if (record->event.pressed) { | |
rgblight_mode(RGB_current_mode); | |
rgblight_step(); | |
RGB_current_mode = rgblight_config.mode; | |
} | |
#endif | |
return false; | |
break; | |
case EISU: | |
if (record->event.pressed) { | |
if(keymap_config.swap_lalt_lgui==false){ | |
register_code(KC_LANG2); | |
}else{ | |
SEND_STRING(SS_LALT("`")); | |
} | |
} else { | |
unregister_code(KC_LANG2); | |
} | |
return false; | |
break; | |
case KANA: | |
if (record->event.pressed) { | |
if(keymap_config.swap_lalt_lgui==false){ | |
register_code(KC_LANG1); | |
}else{ | |
SEND_STRING(SS_LALT("`")); | |
} | |
} else { | |
unregister_code(KC_LANG1); | |
} | |
return false; | |
break; | |
case RGBRST: | |
#ifdef RGBLIGHT_ENABLE | |
if (record->event.pressed) { | |
eeconfig_update_rgblight_default(); | |
rgblight_enable(); | |
RGB_current_mode = rgblight_config.mode; | |
} | |
#endif | |
break; | |
} | |
return true; | |
} | |
void matrix_init_user(void) { | |
#ifdef AUDIO_ENABLE | |
startup_user(); | |
#endif | |
#ifdef RGBLIGHT_ENABLE | |
RGB_current_mode = rgblight_config.mode; | |
#endif | |
//SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h | |
#ifdef SSD1306OLED | |
iota_gfx_init(!has_usb()); // turns on the display | |
#endif | |
} | |
#ifdef AUDIO_ENABLE | |
void startup_user() | |
{ | |
_delay_ms(20); // gets rid of tick | |
} | |
void shutdown_user() | |
{ | |
_delay_ms(150); | |
stop_all_notes(); | |
} | |
void music_on_user(void) | |
{ | |
music_scale_user(); | |
} | |
void music_scale_user(void) | |
{ | |
PLAY_SONG(music_scale); | |
} | |
#endif | |
//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h | |
#ifdef SSD1306OLED | |
unsigned char rgb[7][5][3]; | |
void led_custom_init(void) { | |
static int scan_count = -10; | |
static int keys[] = { 6, 6, 6, 7, 7 }; | |
static int keys_sum[] = { 0, 6, 12, 18, 25 }; | |
if (scan_count == -1) { | |
rgblight_enable_noeeprom(); | |
rgblight_mode(0); | |
} else if (scan_count >= 0 && scan_count < 5) { | |
for (unsigned char c=keybuf_begin; c!=keybuf_end; c++) { | |
int i = c; | |
// FIXME: | |
int color = (keybufs[i].row*3 + keybufs[i].col) % 7 + 1; | |
char r = (color & 0x4) >> 2; | |
char g = (color & 0x2) >> 1; | |
char b = (color & 0x1); | |
int y = scan_count; | |
int dist_y = abs(y - keybufs[i].row); | |
for (int x=0; x<keys[y]; x++) { | |
int dist = abs(x - keybufs[i].col) + dist_y; | |
if (dist <= keybufs[i].frame) { | |
int elevation = MAX(0, (8 + dist - keybufs[i].frame)) << 2; | |
if (elevation) { | |
if ((rgb[x][y][0] != 255) && r) { rgb[x][y][0] = MIN(255, elevation + rgb[x][y][0]); } | |
if ((rgb[x][y][1] != 255) && g) { rgb[x][y][1] = MIN(255, elevation + rgb[x][y][1]); } | |
if ((rgb[x][y][2] != 255) && b) { rgb[x][y][2] = MIN(255, elevation + rgb[x][y][2]); } | |
} | |
} | |
} | |
} | |
} else if (scan_count == 5) { | |
for (unsigned char c=keybuf_begin; c!=keybuf_end; c++) { | |
int i = c; | |
if (keybufs[i].frame < 18) { | |
keybufs[i].frame ++; | |
} else { | |
keybuf_begin ++; | |
} | |
} | |
} else if (scan_count >= 6 && scan_count <= 10) { | |
int y = scan_count - 6; | |
for (int x=0; x<keys[y]; x++) { | |
int at = keys_sum[y] + ((y & 1) ? x : (keys[y] - x - 1)); | |
led[at].r = rgb[x][y][0]; | |
led[at].g = rgb[x][y][1]; | |
led[at].b = rgb[x][y][2]; | |
} | |
rgblight_set(); | |
} else if (scan_count == 11) { | |
memset(rgb, 0, sizeof(rgb)); | |
} | |
scan_count++; | |
if (scan_count >= 12) { scan_count = 0; } | |
} | |
void matrix_scan_user(void) { | |
led_custom_init(); | |
iota_gfx_task(); // this is what updates the display continuously | |
} | |
void matrix_update(struct CharacterMatrix *dest, | |
const struct CharacterMatrix *source) { | |
if (memcmp(dest->display, source->display, sizeof(dest->display))) { | |
memcpy(dest->display, source->display, sizeof(dest->display)); | |
dest->dirty = true; | |
} | |
} | |
//assign the right code to your layers for OLED display | |
#define L_BASE 0 | |
#define L_LOWER (1<<_LOWER) | |
#define L_RAISE (1<<_RAISE) | |
#define L_ADJUST (1<<_ADJUST) | |
#define L_ADJUST_TRI (L_ADJUST|L_RAISE|L_LOWER) | |
static void render_logo(struct CharacterMatrix *matrix) { | |
static char 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}; | |
matrix_write(matrix, logo); | |
//matrix_write_P(&matrix, PSTR(" Split keyboard kit")); | |
} | |
void render_status(struct CharacterMatrix *matrix) { | |
// Render to mode icon | |
static char logo[][2][3]={{{0x95,0x96,0},{0xb5,0xb6,0}},{{0x97,0x98,0},{0xb7,0xb8,0}}}; | |
if(keymap_config.swap_lalt_lgui==false){ | |
matrix_write(matrix, logo[0][0]); | |
matrix_write_P(matrix, PSTR("\n")); | |
matrix_write(matrix, logo[0][1]); | |
}else{ | |
matrix_write(matrix, logo[1][0]); | |
matrix_write_P(matrix, PSTR("\n")); | |
matrix_write(matrix, logo[1][1]); | |
} | |
// Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below | |
char buf[40]; | |
snprintf(buf,sizeof(buf), "Undef-%ld", layer_state); | |
matrix_write_P(matrix, PSTR("\nLayer: ")); | |
switch (layer_state) { | |
case L_BASE: | |
matrix_write_P(matrix, PSTR("Default")); | |
break; | |
case L_RAISE: | |
matrix_write_P(matrix, PSTR("Raise")); | |
break; | |
case L_LOWER: | |
matrix_write_P(matrix, PSTR("Lower")); | |
break; | |
case L_ADJUST: | |
case L_ADJUST_TRI: | |
matrix_write_P(matrix, PSTR("Adjust")); | |
break; | |
default: | |
matrix_write(matrix, buf); | |
} | |
// Host Keyboard LED Status | |
// char led[40]; | |
// snprintf(led, sizeof(led), "\n%s %s %s", | |
// (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? "NUMLOCK" : " ", | |
// (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? "CAPS" : " ", | |
// (host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? "SCLK" : " "); | |
// matrix_write(matrix, led); | |
char key[40]; | |
snprintf(key, sizeof(key), "\n%d, %d", col, row); | |
matrix_write(matrix, key); | |
} | |
void iota_gfx_task_user(void) { | |
struct CharacterMatrix matrix; | |
#if DEBUG_TO_SCREEN | |
if (debug_enable) { | |
return; | |
} | |
#endif | |
matrix_clear(&matrix); | |
if(is_master){ | |
render_status(&matrix); | |
}else{ | |
render_logo(&matrix); | |
} | |
matrix_update(&display, &matrix); | |
} | |
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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 = no # Virtual DIP switch configuration(+1000) | |
MOUSEKEY_ENABLE = no # Mouse keys(+4700) | |
EXTRAKEY_ENABLE = no # Audio control and System control(+450) | |
CONSOLE_ENABLE = no # Console for debug(+400) | |
COMMAND_ENABLE = no # Commands for debug and configuration | |
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work | |
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality | |
MIDI_ENABLE = no # MIDI controls | |
AUDIO_ENABLE = no # Audio output on port C6 | |
UNICODE_ENABLE = no # Unicode | |
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID | |
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. | |
SWAP_HANDS_ENABLE = no # Enable one-hand typing | |
define HELIX_CUSTOMISE_MSG | |
$(info Helix customize) | |
$(info - OLED_ENABLE=$(OLED_ENABLE)) | |
$(info - LED_BACK_ENABLE=$(LED_BACK_ENABLE)) | |
$(info - LED_UNDERGLOW_ENABLE=$(LED_UNDERGLOW_ENABLE)) | |
$(info - LED_ANIMATION=$(LED_ANIMATIONS)) | |
$(info - IOS_DEVICE_ENABLE=$(IOS_DEVICE_ENABLE)) | |
endef | |
# Helix keyboard customize | |
# you can edit follows 7 Variables | |
# jp: 以下の7つの変数を必要に応じて編集します。 | |
HELIX_ROWS = 5 # Helix Rows is 4 or 5 | |
OLED_ENABLE = yes # OLED_ENABLE | |
LOCAL_GLCDFONT = no # use each keymaps "helixfont.h" insted of "common/glcdfont.c" | |
LED_BACK_ENABLE = yes # LED backlight (Enable WS2812 RGB underlight.) | |
LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.) | |
LED_ANIMATIONS = yes # LED animations | |
IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone) | |
#### LED_BACK_ENABLE and LED_UNDERGLOW_ENABLE. | |
#### Do not enable these with audio at the same time. | |
### Helix keyboard 'default' keymap: convenient command line option | |
## make HELIX=<options> helix:defualt | |
## option= oled | back | under | na | ios | |
## ex. | |
## make HELIX=oled helix:defualt | |
## make HELIX=oled,back helix:defualt | |
## make HELIX=oled,under helix:defualt | |
## make HELIX=oled,back,na helix:defualt | |
## make HELIX=oled,back,ios helix:defualt | |
## | |
ifneq ($(strip $(HELIX)),) | |
ifeq ($(findstring oled,$(HELIX)), oled) | |
OLED_ENABLE = yes | |
endif | |
ifeq ($(findstring back,$(HELIX)), back) | |
LED_BACK_ENABLE = yes | |
else ifeq ($(findstring under,$(HELIX)), under) | |
LED_UNDERGLOW_ENABLE = yes | |
endif | |
ifeq ($(findstring na,$(HELIX)), na) | |
LED_ANIMATIONS = no | |
endif | |
ifeq ($(findstring ios,$(HELIX)), ios) | |
IOS_DEVICE_ENABLE = yes | |
endif | |
$(eval $(call HELIX_CUSTOMISE_MSG)) | |
$(info ) | |
endif | |
# Uncomment these for checking | |
# jp: コンパイル時にカスタマイズの状態を表示したい時はコメントをはずします。 | |
# $(eval $(call HELIX_CUSTOMISE_MSG)) | |
# $(info ) | |
ifneq ($(strip $(HELIX_ROWS)), 4) | |
ifneq ($(strip $(HELIX_ROWS)), 5) | |
$(error HELIX_ROWS = $(strip $(HELIX_ROWS)) is unexpected value) | |
endif | |
endif | |
OPT_DEFS += -DHELIX_ROWS=$(strip $(HELIX_ROWS)) | |
ifeq ($(strip $(LED_BACK_ENABLE)), yes) | |
RGBLIGHT_ENABLE = yes | |
OPT_DEFS += -DRGBLED_BACK | |
ifeq ($(strip $(LED_UNDERGLOW_ENABLE)), yes) | |
$(eval $(call HELIX_CUSTOMISE_MSG)) | |
$(error LED_BACK_ENABLE and LED_UNDERGLOW_ENABLE both 'yes') | |
endif | |
else ifeq ($(strip $(LED_UNDERGLOW_ENABLE)), yes) | |
RGBLIGHT_ENABLE = yes | |
else | |
RGBLIGHT_ENABLE = no | |
endif | |
ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes) | |
OPT_DEFS += -DIOS_DEVICE_ENABLE | |
endif | |
ifeq ($(strip $(LED_ANIMATIONS)), yes) | |
OPT_DEFS += -DRGBLIGHT_ANIMATIONS | |
endif | |
ifeq ($(strip $(OLED_ENABLE)), yes) | |
OPT_DEFS += -DOLED_ENABLE | |
endif | |
ifeq ($(strip $(LOCAL_GLCDFONT)), yes) | |
OPT_DEFS += -DLOCAL_GLCDFONT | |
endif | |
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE | |
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend | |
ifndef QUANTUM_DIR | |
include ../../../../Makefile | |
endif | |
# Uncomment these for debugging | |
# $(info -- RGBLIGHT_ENABLE=$(RGBLIGHT_ENABLE)) | |
# $(info -- OPT_DEFS=$(OPT_DEFS)) | |
# $(info ) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment