Skip to content

Instantly share code, notes, and snippets.

@zphixon
Last active December 2, 2016 01:21
Show Gist options
  • Save zphixon/7cebbca95a42da332f67094041e7102d to your computer and use it in GitHub Desktop.
Save zphixon/7cebbca95a42da332f67094041e7102d to your computer and use it in GitHub Desktop.
#include "planck.h"
#include "action_layer.h"
#include "eeconfig.h"
extern keymap_config_t keymap_config;
// zackh planck layout - too many tri-layers? nah m9
// raise + lower = roll
// spin + flap = screw
#define _______ KC_TRNS
#define XXXXXXX KC_NO
// normal layers
#define __COLEMAK 0
#define __QWERTY 1
#define __LOWER 2
#define __RAISE 3
#define __GAME 4
#define __SPIN 5
#define __FLAP 6
// tri-layers
#define __SCREW 15
#define __ROLL 16
// macros
enum planck_macros {
CAPREG = 2,
CAPWIN = 3,
CAPREC = 4,
CAPSCR = 5,
};
#define _CAPREG M(CAPREG)
#define _CAPWIN M(CAPWIN)
#define _CAPREC M(CAPREC)
#define _CAPSCR M(CAPSCR)
// normal layers
enum planck_keycodes {
COLEMAK = SAFE_RANGE,
QWERTY,
LOWER,
RAISE,
GAME,
SPIN,
FLAP
};
// layer maps
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// colemak layer: default
[__COLEMAK] = {
{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_ESC, 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 },
{KC_LCTL, SPIN, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, COLEMAK, QWERTY, GAME, FLAP }
},
// also support qwerty layer
[__QWERTY] = {
{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_ESC, 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 },
{KC_LCTL, SPIN, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, COLEMAK, QWERTY, GAME, FLAP }
},
// gaming layer with numbers and stuff
[__GAME] = {
{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_BSPC},
{KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
{KC_LCTL, KC_Z, KC_X, KC_C, LOWER, KC_SPC, KC_SPC, RAISE, COLEMAK, QWERTY, GAME, KC_ENT },
},
// lower: symbols, movement, mouse movement, F keys
[__LOWER] = {
{KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_MINS, KC_EQL, KC_DEL },
{_______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, KC_BSLS},
{_______, _______, _______, _______, _______, _______, _______, _______, KC_BTN1, KC_MS_U, KC_BTN2, KC_WH_U},
{_______, _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D}
},
// raise: {} () [], keypad, macros
[__RAISE] = {
{_______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL },
{_______, _______, _______, KC_LPRN, KC_RPRN, _______, _______, KC_HOME, KC_END, _______, _______, _______},
{_______, _______, _______, KC_LBRC, KC_RBRC, _______, _______, _______, _______, _______, _______, _______},
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
},
// switch base layers
[__ROLL] = {
{RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
{_______, _CAPREC, _CAPWIN, _CAPSCR, _CAPREG, _______, _______, COLEMAK, QWERTY, GAME, _______, _______},
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
},
// spin: numbers, maybe other stuff later?
[__SPIN] = {
{_______, _______, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, _______, _______},
{_______, _______, _______, _______, _______, _______, _______, KC_4, KC_5, KC_6, _______, _______},
{_______, _______, _______, _______, _______, _______, _______, KC_1, KC_2, KC_3, _______, _______},
{_______, _______, _______, _______, _______, _______, _______, KC_0, KC_0, KC_DOT, _______, _______}
},
// okay this is taking it a bit too far...
[__FLAP] = {
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
{_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_6, _______, _______, _______, _______, _______},
{_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______},
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
},
// why
[__SCREW] = {
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
},
};
// macros
const macro_t* action_get_macro(keyrecord_t* record, uint8_t id, uint8_t opt) {
switch (id) {
case CAPWIN:
// capture window with puu.sh
if (record->event.pressed) {
return MACRO( I(50), D(LALT), T(END), U(LALT), END );
}
break;
case CAPREC:
// record screen with puu.sh
if (record->event.pressed) {
return MACRO( I(50), D(LALT), T(HOME), U(LALT), END );
}
break;
case CAPSCR:
// screenie with puu.sh
if (record->event.pressed) {
return MACRO( I(50), D(LCTL), T(HOME), U(LCTL), END );
}
break;
case CAPREG:
// capture region with puu.sh
if (record->event.pressed) {
return MACRO( I(50), D(LCTL), T(END), U(LCTL), END );
}
break;
}
return MACRO_NONE;
}
// set default layer
void persistant_default_layer_set(uint16_t default_layer) {
eeconfig_update_default_layer(default_layer);
default_layer_set(default_layer);
}
// called every time a user-defined key code is pressed
bool process_record_user(uint16_t keycode, keyrecord_t* record) {
switch (keycode) {
case QWERTY:
if (record->event.pressed)
persistant_default_layer_set(1UL<<__QWERTY);
return false;
break;
case COLEMAK:
if (record->event.pressed)
persistant_default_layer_set(1UL<<__COLEMAK);
return false;
break;
case GAME:
if (record->event.pressed)
persistant_default_layer_set(1UL<<__GAME);
return false;
break;
case FLAP:
if (record->event.pressed) {
layer_on(__FLAP);
update_tri_layer(__SPIN, __FLAP, __SCREW);
} else {
layer_off(__FLAP);
update_tri_layer(__SPIN, __FLAP, __SCREW);
}
return false;
break;
case SPIN:
if (record->event.pressed) {
layer_on(__SPIN);
update_tri_layer(__SPIN, __FLAP, __SCREW);
} else {
layer_off(__SPIN);
update_tri_layer(__SPIN, __FLAP, __SCREW);
}
return false;
break;
case LOWER:
if (record->event.pressed) {
layer_on(__LOWER);
update_tri_layer(__LOWER, __RAISE, __ROLL);
} else {
layer_off(__LOWER);
update_tri_layer(__LOWER, __RAISE, __ROLL);
}
return false;
break;
case RAISE:
if (record->event.pressed) {
layer_on(__RAISE);
update_tri_layer(__LOWER, __RAISE, __ROLL);
} else {
layer_off(__RAISE);
update_tri_layer(__LOWER, __RAISE, __ROLL);
}
return false;
break;
}
return true;
}
void matrix_init_user(void) {}
const uint16_t PROGMEM fn_actions[] = {};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment