Skip to content

Instantly share code, notes, and snippets.

@leavesofgrass
Last active December 20, 2017 22:16
Show Gist options
  • Save leavesofgrass/ed583e7e89f61446fd3dc2fd64e3dd42 to your computer and use it in GitHub Desktop.
Save leavesofgrass/ed583e7e89f61446fd3dc2fd64e3dd42 to your computer and use it in GitHub Desktop.
My kaleidoscope sketch
// -*- mode: c++ -*-
// Copyright 2016 Keyboardio, inc. <jesse@keyboard.io>
// See "LICENSE" for license details
#ifndef BUILD_INFORMATION
#define BUILD_INFORMATION "custom built firmware"
#endif
#include "Kaleidoscope-MouseKeys.h"
#include "Kaleidoscope-Macros.h"
#include "Kaleidoscope-LEDControl.h"
#include "Kaleidoscope-Numlock.h"
#include "Kaleidoscope.h"
#include "LED-Off.h"
#include "Kaleidoscope-LEDEffect-SolidColor.h"
#include "Kaleidoscope-LEDEffect-Rainbow.h"
#include "Kaleidoscope-LED-Stalker.h"
#include <Kaleidoscope-EEPROM-Keymap.h>
#include <Kaleidoscope-EEPROM-Settings.h>
#include "Kaleidoscope-SpaceCadet.h"
#include "Kaleidoscope-Ranges.h"
#include "Kaleidoscope-Focus.h"
#include <Kaleidoscope-OneShot.h>
#include <Kaleidoscope-Escape-OneShot.h>
// Macros
enum {
MACRO_ACT,
MACRO_ADDR1,
MACRO_ADDR2,
MACRO_AMZ,
MACRO_ATDOT,
MACRO_BBCWS,
MACRO_CE,
MACRO_EEDIT,
MACRO_EMAICON,
MACRO_EMAIL,
MACRO_EMDQ,
MACRO_EMDTK,
MACRO_EMPLAY,
MACRO_EMRATE,
MACRO_EMSCAP,
MACRO_EMSTOP,
MACRO_FB,
MACRO_GDRIVE,
MACRO_GITHUB,
MACRO_GMAIL,
MACRO_GOOG,
MACRO_KALE,
MACRO_KMAKE,
MACRO_LP,
MACRO_MXHBL,
MACRO_MXSMEX,
MACRO_NAME,
MACRO_NFLIX,
MACRO_PAN,
MACRO_PHONE,
MACRO_PLEX,
MACRO_PRN,
MACRO_YT,
};
enum { QWERTY, FUNCTION, NUMPAD, FLY, SPEAK }; // layers
// *INDENT-OFF*
const Key keymaps[][ROWS][COLS] PROGMEM = {
[QWERTY] = KEYMAP_STACKED
(ShiftToLayer(SPEAK), Key_1, Key_2, Key_3, Key_4, Key_5, Key_LEDEffectNext,
Key_Backtick, Key_Q, Key_W, Key_E, Key_R, Key_T, Key_Tab,
Key_PageUp, Key_A, Key_S, Key_D, Key_F, Key_G,
Key_PageDown, Key_Z, Key_X, Key_C, Key_V, Key_B, Key_Escape,
Key_LeftControl, Key_Backspace, Key_LeftGui, Key_LeftShift,
ShiftToLayer(FUNCTION),
___, Key_6, Key_7, Key_8, Key_9, Key_0, Key_KeypadNumLock,
Key_Enter, Key_Y, Key_U, Key_I, Key_O, Key_P, Key_Equals,
Key_H, Key_J, Key_K, Key_L, Key_Semicolon, Key_Quote,
ShiftToLayer(FLY), Key_N, Key_M, Key_Comma, Key_Period, Key_Slash, Key_Minus,
Key_RightShift, Key_RightAlt, Key_Spacebar, Key_RightControl,
ShiftToLayer(FUNCTION)),
[FUNCTION] = KEYMAP_STACKED
(Key_Escape, Key_F1, Key_F2, Key_F3, Key_F4, Key_F5, XXX,
Key_Tab, ___, Key_mouseUp, M(MACRO_CE), Key_mouseBtnR, Key_mouseWarpEnd, Key_mouseWarpNE,
Key_Home, Key_mouseL, Key_mouseDn, Key_mouseR, Key_mouseBtnL, Key_mouseWarpNW,
Key_End, Key_PrintScreen, Key_Insert, ___, Key_mouseBtnM, Key_mouseWarpSW, Key_mouseWarpSE,
___, Key_Delete, ___, ___,
___,
___, Key_F6, Key_F7, Key_F8, Key_F9, Key_F10, Key_F11,
Key_Enter, ___, Key_LeftCurlyBracket, Key_RightCurlyBracket, Key_LeftBracket, Key_RightBracket, Key_F12,
Key_LeftArrow, Key_DownArrow, Key_UpArrow, Key_RightArrow, ___, ___,
Key_PcApplication, Key_Mute, Consumer_VolumeDecrement, Consumer_VolumeIncrement, ___, Key_Backslash, Key_Pipe,
___, ___, Key_Enter, ___,
___),
[NUMPAD] = KEYMAP_STACKED
(___, M(MACRO_NAME), M(MACRO_EMAIL), M(MACRO_PHONE), M(MACRO_ADDR1), M(MACRO_ADDR2), ___,
___, ___, ___, ___, ___, ___, ___,
___, ___, ___, ___, ___, ___,
___, ___, ___, ___, ___, ___, ___,
___, ___, ___, ___,
___,
___, ___, Key_Keypad7, Key_Keypad8, Key_Keypad9, Key_KeypadSubtract, ___,
___, ___, Key_Keypad4, Key_Keypad5, Key_Keypad6, Key_KeypadAdd, ___,
___, Key_Keypad1, Key_Keypad2, Key_Keypad3, Key_Equals, Key_Quote,
___, ___, Key_Keypad0, Key_KeypadDot, Key_KeypadMultiply, Key_KeypadDivide, Key_Enter,
___, ___, ___, ___,
___),
[FLY] = KEYMAP_STACKED
(___, ___, ___, ___, ___, ___, ___,
___, ___, M(MACRO_BBCWS), M(MACRO_EEDIT), ___, ___, ___,
___, M(MACRO_AMZ), ___, M(MACRO_GDRIVE), M(MACRO_FB), M(MACRO_GMAIL),
___, M(MACRO_PRN), ___, ___, ___, M(MACRO_MXHBL), M(MACRO_GOOG),
Key_LeftControl, Key_Backspace, Key_LeftGui, Key_LeftShift,
ShiftToLayer(FUNCTION),
___, ___, ___, ___, ___, ___, Key_KeypadNumLock,
Key_Enter, M(MACRO_YT), ___, ___, ___, M(MACRO_PAN), ___,
M(MACRO_GITHUB), ___, M(MACRO_KALE), M(MACRO_LP), ___, ___,
___, M(MACRO_NFLIX), M(MACRO_PLEX), ___, ___, ___, ___,
Key_RightShift, Key_RightAlt, Key_Spacebar, Key_RightControl,
ShiftToLayer(FUNCTION)),
[SPEAK] = KEYMAP_STACKED
(___, Key_1, Key_2, Key_3, Key_4, Key_5, Key_LEDEffectNext,
Key_Backtick, M(MACRO_EMDQ), Key_W, Key_E, M(MACRO_EMRATE), Key_T, Key_Tab,
Key_PageUp, M(MACRO_EMAICON), M(MACRO_EMSTOP), M(MACRO_EMDTK), ___, Key_G,
Key_PageDown, Key_Z, Key_X, M(MACRO_EMSCAP), Key_V, Key_B, Key_Escape,
Key_LeftControl, Key_Backspace, Key_LeftGui, Key_LeftShift,
ShiftToLayer(FUNCTION),
___, Key_6, Key_7, Key_8, Key_9, Key_0, Key_KeypadNumLock,
Key_Enter, Key_Y, Key_U, Key_I, Key_O, Key_P, Key_Equals,
Key_H, Key_J, Key_K, Key_L, M(MACRO_EMPLAY), Key_Quote,
ShiftToLayer(FLY), Key_N, Key_M, Key_Comma, Key_Period, Key_Slash, Key_Minus,
Key_RightShift, Key_RightAlt, Key_Spacebar, Key_RightControl,
ShiftToLayer(FUNCTION))};
static kaleidoscope::LEDSolidColor solidRed(160, 0, 0);
static kaleidoscope::LEDSolidColor solidOrange(230, 130, 0);
static kaleidoscope::LEDSolidColor solidYellow(225, 200, 65);
static kaleidoscope::LEDSolidColor solidGreen(0, 160, 0);
static kaleidoscope::LEDSolidColor solidBlue(0, 0, 160);
static kaleidoscope::LEDSolidColor solidIndigo(65, 200, 245);
static kaleidoscope::LEDSolidColor solidViolet(113, 11, 191);
// *INDENT-ON*
// Macros
const macro_t *macroAction(uint8_t macroIndex, uint8_t keyState) {
switch (macroIndex) {
case MACRO_ACT:
if (keyToggledOn(keyState)) {
return MACRODOWN(I(25),
D(LeftAlt), T(F1), U(LeftAlt));
}
break;
case MACRO_ADDR1:
if (keyToggledOn(keyState)) {
return Macros.type(PSTR(""));
}
break;
case MACRO_ADDR2:
if (keyToggledOn(keyState)) {
return Macros.type(PSTR(""));
}
break;
case MACRO_AMZ:
if (keyToggledOn(keyState)) {
return MACRODOWN(I(25),
D(LeftAlt), T(D), U(LeftAlt), T(H), T(T), T(T), T(P), T(S), D(LeftShift), T(Semicolon), U(LeftShift), T(Slash), T(Slash), T(W), T(W), T(W), T(Period), T(A), T(M), T(A), T(Z), T(O), T(N), T(Period), T(C), T(O), T(M), T(Enter));
}
break;
case MACRO_ATDOT:
if (keyToggledOn(keyState)) {
return Macros.type(PSTR(""));
}
break;
case MACRO_BBCWS:
if (keyToggledOn(keyState)) {
return MACRODOWN(I(25),
D(LeftAlt), T(D), U(LeftAlt), T(H), T(T), T(T), T(P), T(S), D(LeftShift), T(Semicolon), U(LeftShift), T(Slash), T(Slash), T(W), T(W), T(W), T(Period), T(B), T(B), T(C), T(Period), T(C), T(O), T(Period), T(U), T(K), T(Slash), T(P), T(R), T(O), T(G), T(R), T(A), T(M), T(M), T(E), T(S), T(Slash), T(P), T(0), T(0), T(2), T(V), T(S), T(M), T(Z), T(Slash), T(E), T(P), T(I), T(S), T(O), T(D), T(E), T(S), T(Slash), T(P), T(L), T(A), T(Y), T(E), T(R), T(Enter));
}
break;
case MACRO_CE:
if (keyToggledOn(keyState)) {
return MACRODOWN(I(25),
D(LeftControl), T(U), T(E), U(LeftControl));
}
break;
case MACRO_EEDIT:
if (keyToggledOn(keyState)) {
return MACRODOWN(I(25),
D(LeftGui), D(LeftControl), T(D), U(LeftGui), U(LeftControl), I(100), D(LeftAlt), T(F2), U(LeftAlt), I(25), T(G), T(N), T(O), T(M), T(E), T(Minus), T(T), T(E), T(R), T(M), T(I), T(N), T(A), T(L), I(250), T(Enter), I(250), T(T), T(M), T(U), T(X), T(Spacebar), T(N), T(E), T(W), T(Enter), I(100), T(E), T(M), T(A), T(C), T(S), T(Enter));
}
break;
case MACRO_EMAICON:
if (keyToggledOn(keyState)) {
return MACRODOWN(I(25),
D(LeftControl), T(U), T(E), T(A), U(LeftControl));
}
break;
case MACRO_EMAIL:
if (keyToggledOn(keyState)) {
return Macros.type(PSTR("jon@pielaet.net"));
}
break;
case MACRO_EMDQ:
if (keyToggledOn(keyState)) {
return MACRODOWN(I(25),
D(LeftControl), T(U), U(LeftControl), D(LeftControl), T(E), U(LeftControl), T(D), T(Q));
}
break;
case MACRO_EMDTK:
if (keyToggledOn(keyState)) {
return MACRODOWN(I(25),
D(LeftControl), T(U), T(E), U(LeftControl), T(D), T(D));
}
break;
case MACRO_EMRATE:
if (keyToggledOn(keyState)) {
return MACRODOWN(I(25),
D(LeftControl), T(U), T(E), U(LeftControl), T(D), T(R));
}
break;
case MACRO_EMSCAP:
if (keyToggledOn(keyState)) {
return MACRODOWN(I(25),
D(LeftControl), T(U), T(E), U(LeftControl), T(D), T(S));
}
break;
case MACRO_EMSTOP:
if (keyToggledOn(keyState)) {
return MACRODOWN(I(25),
D(LeftControl), T(U), T(E), U(LeftControl), T(S));
}
break;
case MACRO_FB:
if (keyToggledOn(keyState)) {
return MACRODOWN(I(25),
D(LeftAlt), T(D), U(LeftAlt), T(H), T(T), T(T), T(P), T(S), D(LeftShift), T(Semicolon), U(LeftShift), T(Slash), T(Slash), T(W), T(W), T(W), T(Period), T(F), T(A), T(C), T(E), T(B), T(O), T(O), T(K), T(Period), T(C), T(O), T(M), T(Enter));
}
break;
case MACRO_GDRIVE:
if (keyToggledOn(keyState)) {
return MACRODOWN(I(25),
D(LeftAlt), T(D), U(LeftAlt), T(H), T(T), T(T), T(P), T(S), D(LeftShift), T(Semicolon), U(LeftShift), T(Slash), T(Slash), T(W), T(W), T(W), T(Period), T(G), T(O), T(O), T(G), T(L), T(E), T(Period), T(C), T(O), T(M), T(Slash), T(D), T(R), T(I), T(V), T(E), T(Enter));
}
break;
case MACRO_GITHUB:
if (keyToggledOn(keyState)) {
return MACRODOWN(I(25),
D(LeftAlt), T(D), U(LeftAlt), T(H), T(T), T(T), T(P), T(S), D(LeftShift), T(Semicolon), U(LeftShift), T(Slash), T(Slash), T(W), T(W), T(W), T(Period), T(G), T(I), T(T), T(H), T(U), T(B), T(Period), T(C), T(O), T(M), T(Enter));
}
break;
case MACRO_GMAIL:
if (keyToggledOn(keyState)) {
return MACRODOWN(I(25),
D(LeftAlt), T(D), U(LeftAlt), T(H), T(T), T(T), T(P), T(S), D(LeftShift), T(Semicolon), U(LeftShift), T(Slash), T(Slash), T(W), T(W), T(W), T(Period), T(G), T(M), T(A), T(I), T(L), T(Period), T(C), T(O), T(M), T(Enter));
}
break;
case MACRO_GOOG:
if (keyToggledOn(keyState)) {
return MACRODOWN(I(25),
D(LeftAlt), T(D), U(LeftAlt), T(H), T(T), T(T), T(P), T(S), D(LeftShift), T(Semicolon), U(LeftShift), T(Slash), T(Slash), T(W), T(W), T(W), T(Period), T(G), T(O), T(O), T(G), T(L), T(E), T(Period), T(C), T(O), T(M), T(Enter));
}
break;
case MACRO_KALE:
if (keyToggledOn(keyState)) {
return MACRODOWN(I(25),
T(C), T(D), T(Spacebar), D(LeftShift), T(Backtick), U(LeftShift), T(Slash), T(K), T(A), T(L), T(E), T(I), T(D), T(O), T(S), T(C), T(O), T(P), T(E), T(Slash), D(LeftShift), T(K), U(LeftShift), T(A), T(L), T(E), T(I), T(D), T(O), T(S), T(C), T(O), T(P), T(E), T(Enter));
}
break;
case MACRO_KMAKE:
if (keyToggledOn(keyState)) {
return Macros.type(PSTR("sudo make flash"));
}
break;
case MACRO_LP:
if (keyToggledOn(keyState)) {
return MACRODOWN(I(25),
D(LeftAlt), T(D), U(LeftAlt), T(H), T(T), T(T), T(P), T(S), D(LeftShift), T(Semicolon), U(LeftShift), T(Slash), T(Slash), T(W), T(W), T(W), T(Period), T(L), T(A), T(S), T(T), T(P), T(A), T(S), T(S), T(Period), T(C), T(O), T(M), T(Enter));
}
break;
case MACRO_MXHBL:
if (keyToggledOn(keyState)) {
return MACRODOWN(I(25),
D(RightAlt), T(X), U(RightAlt), T(H), T(E), T(L), T(M), T(Minus), T(B), T(U), T(F), T(F), T(E), T(R), T(S), T(Minus), T(L), T(I), T(S), T(T), T(Enter));
}
break;
case MACRO_MXSMEX:
if (keyToggledOn(keyState)) {
return MACRODOWN(I(25),
D(RightAlt), T(X), U(RightAlt));
}
break;
case MACRO_NAME:
if (keyToggledOn(keyState)) {
return Macros.type(PSTR("Jon Pielaet"));
}
break;
case MACRO_NFLIX:
if (keyToggledOn(keyState)) {
return MACRODOWN(I(25),
D(LeftAlt), T(D), U(LeftAlt), T(H), T(T), T(T), T(P), D(LeftShift), T(Semicolon), U(LeftShift), T(Slash), T(Slash), T(W), T(W), T(W), T(Period), T(N), T(E), T(T), T(F), T(L), T(I), T(X), T(Period), T(C), T(O), T(M), T(Enter));
}
break;
case MACRO_PAN:
if (keyToggledOn(keyState)) {
return MACRODOWN(I(25),
D(LeftAlt), T(D), U(LeftAlt), T(H), T(T), T(T), T(P), T(S), D(LeftShift), T(Semicolon), U(LeftShift), T(Slash), T(Slash), T(W), T(W), T(W), T(Period), T(P), T(A), T(N), T(D), T(O), T(R), T(A), T(Period), T(C), T(O), T(M), T(Enter));
}
break;
case MACRO_PHONE:
if (keyToggledOn(keyState)) {
return Macros.type(PSTR(""));
}
break;
case MACRO_PLEX:
if (keyToggledOn(keyState)) {
return MACRODOWN(I(25),
D(LeftAlt), T(D), U(LeftAlt), T(H), T(T), T(T), T(P), D(LeftShift), T(Semicolon), U(LeftShift), T(Slash), T(Slash), T(A), T(P), T(P), T(Period), T(P), T(L), T(E), T(X), T(Period), T(T), T(V), T(Enter));
}
break;
case MACRO_PRN:
if (keyToggledOn(keyState)) {
return MACRODOWN(I(25),
D(LeftAlt), T(D), U(LeftAlt), T(H), T(T), T(T), T(P), T(S), D(LeftShift), T(Semicolon), U(LeftShift), T(Slash), T(Slash), T(P), T(R), T(I), T(M), T(E), T(N), T(O), T(W), T(Period), T(A), T(M), T(A), T(Z), T(O), T(N), T(Period), T(C), T(O), T(M), T(Enter));
}
break;
case MACRO_YT:
if (keyToggledOn(keyState)) {
return MACRODOWN(I(25),
D(LeftAlt), T(D), U(LeftAlt), T(H), T(T), T(T), T(P), D(LeftShift), T(Semicolon), U(LeftShift), T(Slash), T(Slash), T(W), T(W), T(W), T(Period), T(Y), T(O), T(U), T(T), T(U), T(B), T(E), T(Period), T(C), T(O), T(M), T(Enter));
}
}
return MACRO_NONE;
}
void setup() {
Kaleidoscope.setup();
Kaleidoscope.use(
&EEPROMKeymap,
&LEDControl,
&LEDOff,
&LEDRainbowEffect,
&LEDRainbowWaveEffect,
&solidRed, &solidOrange, &solidYellow, &solidGreen, &solidBlue, &solidIndigo, &solidViolet,
&StalkerEffect,
&NumLock,
&Macros,
&SpaceCadet,
&Focus,
&OneShot,
&EscapeOneShot,
&MouseKeys
);
// SpaceCadet
static kaleidoscope::SpaceCadet::KeyBinding spacecadetmap[] = {
{Key_LeftShift, Key_LeftParen, 250}
, {Key_RightShift, Key_RightParen, 250}
, {Key_LeftGui, Key_LeftCurlyBracket, 250}
, {Key_RightAlt, Key_RightCurlyBracket, 250}
, {Key_LeftAlt, Key_RightCurlyBracket, 250}
, {Key_LeftControl, Key_LeftBracket, 250}
, {Key_RightControl, Key_RightBracket, 250}
, {ShiftToLayer(FLY), M(MACRO_MXSMEX), 250}
, {ShiftToLayer(SPEAK), M(MACRO_CE), 250}
, {OSL(4), M(MACRO_CE), 250}
, {OSL(5), M(MACRO_MXSMEX), 250}
, SPACECADET_MAP_END
};
// Set the map.
SpaceCadet.map = spacecadetmap;
// Focus
Focus.addHook (FOCUS_HOOK_HELP);
Focus.addHook (FOCUS_HOOK_VERSION);
Focus.addHook(FOCUS_HOOK_KEYMAP);
Focus.addHook(FOCUS_HOOK_KEYMAP_LAYER);
Focus.addHook(FOCUS_HOOK_KEYMAP_TRANSFER);
Layer.getKey = EEPROMKeymap.getKeyOverride;
EEPROMKeymap.max_layers(8);
EEPROMSettings.seal();
NumLock.numPadLayer = NUMPAD;
LEDRainbowEffect.brightness(255);
LEDRainbowWaveEffect.brightness(255);
StalkerEffect.variant = STALKER(BlazingTrail);
LEDOff.activate();
}
void loop() {
Kaleidoscope.loop();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment