Last active
October 26, 2020 00:51
-
-
Save treeherder/e4cbd19427f0d0b3a67f08cd0801eeef to your computer and use it in GitHub Desktop.
QMK keymap configuration
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
#ifndef CONFIG_H | |
#define CONFIG_H | |
#include "config_common.h" | |
/* USB Device descriptor parameter */ | |
#define VENDOR_ID 0xABCD | |
#define PRODUCT_ID 0x0001 | |
#define DEVICE_VER 0x0001 | |
#define MANUFACTURER treeherder | |
#define PRODUCT keyboard prototype | |
#define DESCRIPTION split ortholinear handwired keyboard | |
/* key matrix size */ | |
#define MATRIX_ROWS 10 | |
#define MATRIX_COLS 6 | |
/* key matrix pins */ | |
#define MATRIX_ROW_PINS { D3, D2, D4, C6, D7 } | |
#define MATRIX_COL_PINS { E6, B4, B5, B6, B2, B3} | |
#define UNUSED_PINS | |
/* COL2ROW or ROW2COL */ | |
#define DIODE_DIRECTION COL2ROW | |
/* Set 0 if debouncing isn't needed */ | |
#define DEBOUNCING_DELAY 5 | |
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ | |
#define LOCKING_SUPPORT_ENABLE | |
/* Locking resynchronize hack */ | |
#define LOCKING_RESYNC_ENABLE | |
/* key combination for command */ | |
#define IS_COMMAND() ( \ | |
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ | |
) | |
/* prevent stuck modifiers */ | |
#define PREVENT_STUCK_MODIFIERS | |
#define SOFT_SERIAL_PIN D1 | |
//#define | |
#define EE_HANDS | |
//#define MASTER_LEFT | |
#define SPLIT_USB_DETECT | |
#define SPLIT_USB_TIMEOUT 2000 | |
#define SPLIT_USB_TIMEOUT_POLL 10 | |
#define TAP_CODE_DELAY 10 | |
#define UNICODE_SELECTED_MODES UC_LNX, UC_WINC | |
#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
#include "diylily.h" | |
#define _QWERTY 0 | |
#define _LOWER 1 | |
#define _RAISE 2 | |
#define _ADJUST 3 | |
enum custom_keycodes { | |
QWERTY = SAFE_RANGE, | |
LOWER, | |
RAISE, | |
ADJUST, | |
WOBBLE, | |
STRAFE, | |
MSUP, | |
MSDN, | |
CLEAR, | |
}; | |
enum unicode_names { | |
runic_q, | |
runic_w, | |
runic_e, | |
runic_r, | |
runic_t, | |
runic_y, | |
runic_u, | |
runic_i, | |
runic_o, | |
runic_p, | |
runic_a, | |
runic_s, | |
runic_d, | |
runic_f, | |
runic_g, | |
runic_h, | |
runic_j, | |
runic_k, | |
runic_l, | |
runic_z, | |
runic_x, | |
runic_c, | |
runic_v, | |
runic_b, | |
runic_n, | |
runic_m, | |
}; | |
const uint32_t PROGMEM unicode_map[] = { | |
[runic_q] = 0x16E9, | |
[runic_w] = 0x16A5, | |
[runic_e] = 0x16C2, | |
[runic_r] = 0x16B1, | |
[runic_t] = 0x16A6, | |
[runic_y] = 0x16A4, | |
[runic_u] = 0x16A2, | |
[runic_i] = 0x16C1, | |
[runic_o] = 0x16AE, | |
[runic_p] = 0x16C8, | |
[runic_a] = 0x16AA, | |
[runic_s] = 0x16CA, | |
[runic_d] = 0x16D1, | |
[runic_f] = 0x16A0, | |
[runic_g] = 0x16B5, | |
[runic_h] = 0x16BA, | |
//[runic_j] = | |
}; | |
bool mouse_on; | |
bool spam_strafe; | |
bool do_wobble; | |
uint16_t spam_timer = false; | |
uint16_t spam_interval = 1000; // (1000ms == 1s) | |
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |
[_QWERTY] = LAYOUT( | |
KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, | |
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, 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_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, | |
KC_LCTL, KC_LALT, KC_SPC, KC_SPC, LM(_LOWER, MOD_LSFT), KC_SPC, KC_RCTL, TT(_LOWER)), | |
[_LOWER] = LAYOUT( | |
KC_HOME, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, KC_CLCK, KC_NLCK, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_BSLS, | |
KC_END, KC_PGDN, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_EQL, KC_P4, KC_P5, KC_P6, KC_LBRC, KC_RBRC, | |
KC_INS, KC_LEFT, KC_DOWN, KC_RGHT, MSDN, MSUP, KC_P0, KC_P1, KC_P2, KC_P3, KC_QUOT, KC_TRNS, | |
KC_PSCR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F8, KC_F10, KC_F11, | |
KC_TRNS, KC_TRNS, KC_DEL, KC_LGUI, KC_F12, TO(_ADJUST), TT(_RAISE), KC_TRNS), | |
[_RAISE] = LAYOUT( | |
KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, | |
KC_VOLD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | |
KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | |
KC_MSTP, KC_MPLY, CLEAR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS, KC_TRNS, | |
KC_LOCK, STRAFE, WOBBLE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, TT(_ADJUST)), | |
[_ADJUST] = LAYOUT( | |
KC_ESC, X(runic_q), X(runic_w), X(runic_e), X(runic_r), X(runic_t), X(runic_y), X(runic_u), X(runic_i), X(runic_o), X(runic_p), KC_BSPC, | |
KC_TRNS, X(runic_a), X(runic_s), X(runic_d), X(runic_f), X(runic_f), X(runic_g), X(runic_h), X(runic_j), X(runic_k), X(runic_l), KC_TRNS, | |
KC_TRNS, X(runic_z), X(runic_x), X(runic_c), X(runic_v), X(runic_b), X(runic_n), X(runic_m), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | |
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | |
KC_TRNS, KC_TRNS, KC_TRNS, UC_WIN, UC_LNX, KC_TRNS, TO(_QWERTY), KC_TRNS)}; | |
void keyboard_post_init_user(void) { | |
// Customise these values to desired behaviour | |
debug_enable=true; | |
debug_matrix=true; | |
//debug_keyboard=true; | |
//debug_mouse=true; | |
}; | |
bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |
switch(keycode) { | |
case WOBBLE: | |
if (record->event.pressed) { | |
do_wobble ^= 1; | |
spam_timer = timer_read(); | |
} | |
case STRAFE: | |
if (record->event.pressed) { | |
spam_strafe ^= 1; | |
spam_timer = timer_read(); | |
} | |
case MSDN: | |
if (record->event.pressed) { | |
mouse_on ^= 1; | |
case MSUP: | |
if (record->event.pressed) { | |
unregister_code(KC_MS_BTN1); | |
mouse_on ^=0; | |
} | |
case CLEAR: | |
if (record->event.pressed) { | |
clear_keyboard(); | |
} | |
break; | |
// more cases here | |
} | |
} | |
return true; | |
} | |
void matrix_scan_user(void) { | |
if (spam_strafe && timer_elapsed(spam_timer) >= spam_interval) { | |
spam_timer = timer_read(); | |
SEND_STRING(SS_DOWN(X_A)); | |
_delay_ms(1000); | |
SEND_STRING(SS_UP(X_A)); | |
SEND_STRING(SS_DOWN(X_D)); | |
_delay_ms(1000); | |
SEND_STRING(SS_UP(X_D)); | |
} | |
if (do_wobble && timer_elapsed(spam_timer) >= spam_interval) { | |
spam_timer = timer_read(); | |
SEND_STRING(SS_DOWN(X_Q)); | |
_delay_ms(1000); | |
SEND_STRING(SS_UP(X_Q)); | |
SEND_STRING(SS_DOWN(X_E)); | |
_delay_ms(1000); | |
SEND_STRING(SS_UP(X_E)); | |
} | |
if (mouse_on){ | |
register_code(KC_MS_BTN1); | |
} | |
}; | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment