diff options
Diffstat (limited to 'layouts/community')
-rw-r--r-- | layouts/community/ergodox/bocaj/config.h | 2 | ||||
-rw-r--r-- | layouts/community/ergodox/bocaj/keymap.c | 307 | ||||
-rw-r--r-- | layouts/community/ergodox/bocaj/readme.md | 47 | ||||
-rw-r--r-- | layouts/community/ergodox/bocaj/rules.mk | 23 | ||||
-rw-r--r-- | layouts/community/ortho_4x12/bocaj/config.h | 109 | ||||
-rw-r--r-- | layouts/community/ortho_4x12/bocaj/keymap.c | 286 | ||||
-rw-r--r-- | layouts/community/ortho_4x12/bocaj/readme.md | 23 | ||||
-rw-r--r-- | layouts/community/ortho_4x12/bocaj/rules.mk | 44 |
8 files changed, 637 insertions, 204 deletions
diff --git a/layouts/community/ergodox/bocaj/config.h b/layouts/community/ergodox/bocaj/config.h index bc1d20a626..621ae784cf 100644 --- a/layouts/community/ergodox/bocaj/config.h +++ b/layouts/community/ergodox/bocaj/config.h @@ -1,6 +1,4 @@ #pragma once -#include QMK_KEYBOARD_CONFIG_H - #define LEADER_TIMEOUT 250 #define LEADER_PER_KEY_TIMING diff --git a/layouts/community/ergodox/bocaj/keymap.c b/layouts/community/ergodox/bocaj/keymap.c index cb78e7aae7..ba105a8f1d 100644 --- a/layouts/community/ergodox/bocaj/keymap.c +++ b/layouts/community/ergodox/bocaj/keymap.c @@ -1,5 +1,5 @@ /* -Copyright 2018 Jacob Jerrell <jacob.jerrell@gmail.com> @JacobJerrell +Copyright 2020 Jacob Jerrell <jacob.jerrell@gmail.com> @JacobJerrell 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 @@ -15,182 +15,161 @@ 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 "bocaj.h" -#define LAYOUT_ergodox_pretty_base( \ - K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \ - K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \ - K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A \ - ) \ - LAYOUT_ergodox_pretty_wrapper( \ - KC_ESC, __________________NUMBER_LEFT_______________, JJ_ARRW, KC_MINS, __________________NUMBER_RIGHT______________, KC_EQUAL, \ - KC_DEL, K01, K02, K03, K04, K05, KC_LPRN, KC_RPRN, K06, K07, K08, K09, K0A, KC_BSLASH, \ - KC_NUMS, K11, SFT_T(K12), K13, ALT_T(K14), K15, K16, ALT_T(K17), K18, SFT_T(K19), K1A, KC_QUOT, \ - OS_LSFT, CTL_T(K21), K22, K23, K24, K25, HYP_LBK, MEH_RBK, K26, K27, K28, K29, CTL_T(K2A), KC_RSFT, \ - KC_GAME,KC_NUMS, TT(_LOWER), KC_UP, KC_LEFT, KC_RIGHT, KC_DOWN, UC_DISA,KC_GAME, KC_ADJS, \ - KC_APP,KC_HOME, KC_END,KC_ESC, \ - UC_FLIP, UC_TABL, \ - KC_SPACE,KC_BSPACE,KC_LEAD, UC_SHRG,KC_TAB,KC_LWEN \ -) - -#define LAYOUT_ergodox_pretty_base_wrapper(...) LAYOUT_ergodox_pretty_base(__VA_ARGS__) +/* + * The `LAYOUT_ergodox_pretty_base` macro is a template to allow the use of + * identical modifiers for the default layouts (eg QWERTY, Colemak, Dvorak, + * etc), so that there is no need to set them up for each layout, and modify + * all of them if I want to change them. This helps to keep consistency and + * ease of use. K## is a placeholder to pass through the individual keycodes + */ +#define LAYOUT_ergodox_bocaj(...) WRAPPER_ergodox_bocaj(__VA_ARGS__) +#define LAYOUT_ergodox_bocaj_WIN(...) WRAPPER_ergodox_bocaj_WIN(__VA_ARGS__) const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* Workman - http://www.keyboard-layout-editor.com/#/gists/7a07cb982ec3597ba3e3d947554225f1 - .---------------------------------------------. .---------------------------------------------. - | ESC | 1 | 2 | 3 | 4 | 5 | -> | ! - | 6 | 7 | 8 | 9 | 0 | = | - !-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------! - | DEL | Q | D | R | W | B | ( | ! ) | J | F | U | P | ; | \ | - !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------! - | NUMS | A | S | H | T | G |-------! !-------! Y | N | E | O | I | ' | - !-------+-----+-----+-----x-----x-----! HYP ! ! MEH !-----x-----x-----+-----+-----+-------! - | SHIFT | Z | X | M | C | V | [ | ! ] | K | L | , | . | / | SHIFT | - '-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------' - | | NUM | LWR | UP | LFT | .---------------. .---------------. ! RGT | DWN | |GAME | ADJ | - '------------------------------' | APP | HOME | ! PGUP | ESC | '------------------------------' - .-------+-------+-------! !-------+-------+-------. - ! ! | END | ! PGDN | ! ENTER ! - ! SPACE ! BSPCE !-------! !-------! TAB ! / ! - | | | COPY | ! PASTE | | LOWER | - '-----------------------' '-----------------------' -*/ - [_WORKMAN] = LAYOUT_ergodox_pretty_base_wrapper( - _________________WORKMAN_L1_________________, _________________WORKMAN_R1_________________, - _________________WORKMAN_L2_________________, _________________WORKMAN_R2_________________, - _________________WORKMAN_L3_________________, _________________WORKMAN_R3_________________ - ), - [_WINWORKMAN] = LAYOUT_ergodox_pretty_base_wrapper( - _________________WORKMAN_L1_________________, _________________WORKMAN_R1_________________, - ________________WWORKMAN_L2_________________, ________________WWORKMAN_R2_________________, - _________________WORKMAN_L3_________________, _________________WORKMAN_R3_________________ - ), -/* QWERTY - http://www.keyboard-layout-editor.com/#/gists/b6c016a22a9d31381a276a603a42fe5f - .---------------------------------------------. .---------------------------------------------. - | ESC | 1 | 2 | 3 | 4 | 5 | -> | ! - | 6 | 7 | 8 | 9 | 0 | = | - !-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------! - | DEL | Q | W | E | R | T | ( | ! ) | Y | U | I | O | P | \ | - !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------! - | NUMS | A | S | D | F | G |-------! !-------! H | J | K | L | ; | ' | - !-------+-----+-----+-----x-----x-----! HYP ! ! MEH !-----x-----x-----+-----+-----+-------! - | SHIFT | Z | X | C | V | B | [ | ! ] | N | M | , | . | / | SHIFT | - '-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------' - | GAME | NUM | LWR | UP | LFT | .---------------. .---------------. ! RGT | DWN | | | ADJ | - '------------------------------' | APP | HOME | ! PGUP | ESC | '------------------------------' - .-------+-------+-------! !-------+-------+-------. - ! ! | END | ! PGDN | ! ENTER ! - ! SPACE ! BSPCE !-------! !-------! TAB ! / ! - | | | COPY | ! PASTE | | LOWER | - '-----------------------' '-----------------------' -*/ - [_QWERTY] = LAYOUT_ergodox_pretty_base_wrapper( - _________________QWERTY_L1__________________, _________________QWERTY_R1__________________, - _________________QWERTY_L2__________________, _________________QWERTY_R2__________________, - _________________QWERTY_L3__________________, _________________QWERTY_R3__________________ - ), - [_LOWER] = LAYOUT_ergodox_pretty_wrapper( - KC_F11 ,__________________FUNCTION_LEFT_____________, _______, _______, __________________FUNCTION_RIGHT____________, KC_F12, - _______, _______, _______, KC_UP, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, KC_PAST, _______, - LM_GRAVE, _______, KC_LEFT, KC_DOWN,KC_RIGHT, _______, _______, KC_4, KC_5, KC_6, KC_PPLS, _______, - OS_LSFT,____________________BLANK___________________, _______, _______, _______, KC_1, KC_2, KC_3, KC_PMNS, _______, - ____________________BLANK___________________, KC_0, KC_PDOT, KC_COMM,KC_PEQL, _______, - _______, _______, _______, _______, - _______, _______, - _______, _______, _______, _______, _______, _______ - ), -/* Adjust - http://www.keyboard-layout-editor.com/#/gists/dedeae17b35a5d5f745a42aaea78f007 - .---------------------------------------------. .---------------------------------------------. - | MAKE | | | | | | RESET | ! EPRM | | | | | | | - !-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------! - | | | | | | | | ! | | | | | | | - !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------! - | | 🔇 | 🔉 | 🔊 | LCK | |-------! !-------! | | | | | QWRTY | - !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------! - | | | | | | | | ! | | | | | WIN | WRKMN | - '-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------' - | | | | | | .---------------. .---------------. ! | | | | | - '------------------------------' | | | ! | | '------------------------------' - .-------+-------+-------! !-------+-------+-------. - ! ! | | ! | ! ! - ! ! !-------! !-------! ! ! - | | | | ! | | | - '-----------------------' '-----------------------' -*/ - [_ADJUST] = LAYOUT_ergodox_pretty_wrapper( - KC_MAKE, ____________________BLANK___________________, KC_RST, KC_EPRM, ____________________BLANK___________________, XXXXXXX, - _______, ____________________BLANK___________________, _______, _______, ____________________BLANK___________________, XXXXXXX, - _______,KC__MUTE,KC__VOLDOWN,KC__VOLUP,MC_LOCK,_______, ____________________BLANK___________________, KC_MQWR, - _______, ____________________BLANK___________________, _______, _______, _______, _______, _______, _______, KC_WWRK, KC_MWRK, - ____________________BLANK___________________, ____________________BLANK___________________, - _______, _______, _______, _______, - _______, _______, - _______, _______, _______, _______, _______, _______ - ), - [_DIABLO] = LAYOUT_ergodox_pretty_wrapper( - KC_ESC, KC_V, KC_D, KC_LALT, KC_NO, KC_NO, KC_NO, KC_NO, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO, - KC_TAB, KC_S, KC_F, KC_I, KC_M, KC_T, KC_ENTER, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_Q, KC_1, KC_2, KC_3, KC_4, KC_P, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, - KC_LCTL, KC_D3_1, KC_D3_2, KC_D3_3, KC_D3_4, KC_Z, KC_LOCK, KC_NO, KC_N, KC_M, KC_NO, KC_NO, KC_NO, KC_NO, - _______, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, - KC_L, KC_J, KC_NO, KC_NO, - KC_F, KC_NO, - SFT_T(KC_SPACE), ALT_T(KC_Q), KC_DCLR, KC_PGDN, KC_DEL, KC_ENT - ) + + [_WORKMAN] = LAYOUT_ergodox_bocaj( + KC_ESC, ________________NUMBER_LEFT________________, KC_ARRW, KC_MINS, ________________NUMBER_RIGHT_______________, KC_EQUAL, + KC_DEL, _________________WORKMAN_L1________________, KC_LPRN, KC_RPRN, _________________WORKMAN_R1________________, KC_BSLS, + _______, _________________WORKMAN_L2________________, _________________WORKMAN_R2________________, KC_QUOT, + KC_LSFT, _________________WORKMAN_L3________________, KC_LBRC, KC_RBRC, _________________WORKMAN_R3________________, _______, + MO_MOD, KC_PGUP, KC_HOME, KC_UP, KC_LEFT, KC_RIGHT, KC_DOWN, KC_END, KC_PGDN, WORKMAN, + KC_APP,KC_HOME, /* <- LHS/RHS -> */ KC_END,KC_ESC, + KC_PGUP, /* <- LHS/RHS -> */ KC_PGDN, + KC_SPACE,KC_BSPACE,KC_LEAD, /* <- LHS/RHS -> */ KC_LOCK,KC_TAB,KC_ENTER + ), + + [_WWORKMAN] = LAYOUT_ergodox_bocaj_WIN( + KC_ESC, ________________NUMBER_LEFT________________, KC_ARRW, KC_MINS, ________________NUMBER_RIGHT_______________, KC_EQUAL, + KC_DEL, _________________WORKMAN_L1________________, KC_LPRN, KC_RPRN, _________________WORKMAN_R1________________, KC_BSLS, + _______, _________________WORKMAN_L2________________, _________________WORKMAN_R2________________, KC_QUOT, + KC_LSFT, _________________WORKMAN_L3________________, KC_LBRC, KC_RBRC, _________________WORKMAN_R3________________, _______, + MO_MOD, KC_PGUP, KC_HOME, KC_UP, KC_LEFT, KC_RIGHT, KC_DOWN, KC_END, KC_PGDN, WORKMAN, + KC_APP,KC_HOME, /* <- LHS/RHS -> */ KC_END,KC_ESC, + KC_PGUP, /* <- LHS/RHS -> */ KC_PGDN, + KC_SPACE,KC_BSPACE,KC_LEAD, /* <- LHS/RHS -> */ KC_LOCK,KC_TAB,KC_ENTER + ), + + [_LOWER] = LAYOUT_ergodox_bocaj( + KC_GRV, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, KC_UP, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, KC_BSLS, _______, + _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, KC_4, KC_5, KC_6, KC_ASTR, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_1, KC_2, KC_3, KC_PLUS, _______, + _______, _______, _______, _______, _______, KC_0, KC_DOT, KC_COMM, KC_MINS, _______, + KC_APP,KC_HOME, /* <- LHS/RHS -> */ KC_END,KC_ESC, + KC_PGUP, /* <- LHS/RHS -> */ KC_PGDN, + KC_SPACE,KC_BSPACE,KC_LEAD, /* <- LHS/RHS -> */ KC_LOCK,KC_TAB,KC_ENTER + ), + + [_RAISE] = LAYOUT_ergodox_bocaj( + KC_TILD, _________________RAISE_L1__________________, _______, _______, _________________RAISE_R1__________________, _______, + KC_F11, _________________RAISE_L2__________________, _______, _______, _________________RAISE_R2__________________, KC_F12, + _______, _________________RAISE_L3__________________, _________________RAISE_R3__________________, _______, + _______, _______, KC_MRWD, KC_MPLY, KC_MFFD, _______, _______, _______, ___________________BLANK___________________, _______, + ___________________BLANK___________________, ___________________BLANK___________________, + KC_APP,KC_HOME, /* <- LHS/RHS -> */ KC_END,KC_ESC, + KC_PGUP, /* <- LHS/RHS -> */ KC_PGDN, + KC_SPACE,KC_BSPACE,KC_LEAD, /* <- LHS/RHS -> */ KC_LOCK,KC_TAB,KC_ENTER + ), + + [_ADJUST] = LAYOUT_ergodox_pretty( + KC_MAKE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RST, + VRSN, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, EEP_RST, + _______, KC__MUTE, KC__VOLDOWN, KC__VOLUP, _______, KC_MNXT, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_APP,KC_HOME, /* <- LHS/RHS -> */ KC_END,KC_ESC, + KC_PGUP, /* <- LHS/RHS -> */ KC_PGDN, + KC_SPACE,KC_BSPACE,KC_LEAD, /* <- LHS/RHS -> */ KC_LOCK,KC_TAB,KC_ENTER + ), + + // Wrapping Mouse-Wheel Keys with `X_T()` style functions seems + // to break the mouse button. So we can't use the wrapper here. + [_MOD] = LAYOUT_ergodox_pretty( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, KC_WH_D, _______, _______, _______, _______, _______, _______, KC_MS_U, _______, _______, _______, + _______, _______, KC_WH_L, KC_WH_U, KC_WH_R, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, KC_ACL0, KC_ACL1, KC_ACL2, _______, _______, _______, + _______,_______, /* <- LHS/RHS -> */ _______,_______, + _______, /* <- LHS/RHS -> */ _______, + KC_BTN1,KC_BTN2,_______, /* <- LHS/RHS -> */ _______,KC_BTN3,KC_BTN4 + ) + }; +// clang-format on bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { - return true; + return true; } void matrix_init_keymap(void) {}; +// Runs whenever there is a layer state change. +layer_state_t layer_state_set_keymap(layer_state_t state) { + ergodox_board_led_off(); + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + ergodox_right_led_3_off(); + + uint8_t layer = get_highest_layer(state); + switch (layer) { + case _LOWER: + ergodox_right_led_3_on(); + break; + case _MOD: + ergodox_right_led_2_on(); + break; + case _RAISE: + ergodox_right_led_1_on(); + break; + case _ADJUST: + ergodox_right_led_1_on(); + ergodox_right_led_2_on(); + break; + default: + break; + } + + ergodox_right_led_1_set(25); + ergodox_right_led_2_set(25); + ergodox_right_led_3_set(25); + + return state; +}; + void matrix_scan_keymap(void) { - uint8_t modifiers = get_mods(); - uint8_t led_usb_state = host_keyboard_leds(); - uint8_t one_shot = get_oneshot_mods(); - uint8_t layer = biton32(layer_state); - - ergodox_board_led_off(); - ergodox_right_led_1_off(); - ergodox_right_led_2_off(); - ergodox_right_led_3_off(); - - switch (layer) { - case _WORKMAN: - case _QWERTY: - case _WINWORKMAN: - if (modifiers & MODS_SHIFT_MASK || led_usb_state & (1<<USB_LED_CAPS_LOCK) || one_shot & MODS_SHIFT_MASK) { - ergodox_right_led_1_on(); - ergodox_right_led_1_set( 25 ); - } - if (modifiers & MODS_CTRL_MASK || one_shot & MODS_CTRL_MASK || modifiers & MODS_GUI_MASK || one_shot & MODS_GUI_MASK) { + uint8_t modifiers = get_mods(); + uint8_t led_usb_state = host_keyboard_leds(); + uint8_t one_shot = get_oneshot_mods(); + uint8_t layer_is_workman = layer_state_is(_WORKMAN); + + if ((modifiers) && (layer_is_workman)) { + if (modifiers & MODS_SHIFT_MASK || led_usb_state & (1<<USB_LED_CAPS_LOCK) || one_shot & MODS_SHIFT_MASK) { + ergodox_right_led_1_on(); + ergodox_right_led_1_set( 25 ); + } else { + ergodox_right_led_1_off(); + } if ((modifiers & MODS_CTRL_MASK || one_shot & MODS_CTRL_MASK) && (modifiers & MODS_GUI_MASK || one_shot & MODS_GUI_MASK)) { - ergodox_right_led_2_on(); - ergodox_right_led_2_set( 50 ); + ergodox_right_led_2_on(); + ergodox_right_led_2_set( 50 ); + } else if ((modifiers & MODS_CTRL_MASK || one_shot & MODS_CTRL_MASK) || (modifiers & MODS_GUI_MASK || one_shot & MODS_GUI_MASK)) { + ergodox_right_led_2_on(); + ergodox_right_led_2_set( 10 ); + } else { + ergodox_right_led_2_off(); + } + if (modifiers & MODS_ALT_MASK || one_shot & MODS_ALT_MASK) { + ergodox_right_led_3_on(); + ergodox_right_led_3_set( 10 ); } else { - ergodox_right_led_2_on(); - ergodox_right_led_2_set( 10 ); + ergodox_right_led_3_off(); } - } - if (modifiers & MODS_ALT_MASK || one_shot & MODS_ALT_MASK) { - ergodox_right_led_3_on(); - ergodox_right_led_3_set( 10 ); - } - break; - case _LOWER: - ergodox_right_led_3_on(); - ergodox_right_led_3_set(10); // Default brightness is deadly in a dark room - break; - case _ADJUST: - ergodox_right_led_2_on(); - ergodox_right_led_2_set(10); - break; - case _DIABLO: - ergodox_right_led_1_on(); - ergodox_right_led_1_set(10); - break; - default: - // none - break; - } + } else if (!(modifiers) && (layer_is_workman)) { + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + ergodox_right_led_3_off(); + } }; diff --git a/layouts/community/ergodox/bocaj/readme.md b/layouts/community/ergodox/bocaj/readme.md index 901822722e..f8bce4e577 100644 --- a/layouts/community/ergodox/bocaj/readme.md +++ b/layouts/community/ergodox/bocaj/readme.md @@ -1,37 +1,28 @@ -# Bocaj Layout +# Overview -While I've put my own spin on most things, much of the credit for these ideas belongs to Drashna and/or the people he derived things from. Please see his [layout](../drashna/) and [userspace](../../../../users/drashna/) for lots of ideas and inspiration. +This is my personal Ergodox EZ configuration, and my daily driver. -## Layers Overview +Most of the code resides in my userspace and is heavily based upon [Drashna's work](https://github.com/qmk/qmk_firmware/tree/master/users/drashna)... although considerably slimmed down. -* Default - * Workman - * Qwerty - * Windows Workman (swaps GUI and CTRL buttons) -* Lower - * F1-12 Top Row - * Grave / Layer Switch macro at Caps Lock position - * Navigation at QWERTY 'ESDF' position - * Numpad under right hand -* Adjust - * Volume Control - * Mac Lock Macro - * Make / Reset/ EEPROM keys - * Default Layer changing keys - * Diablo Layer - * Moved shortcuts within left hands reach - * Macros to spam 1-4 every ~1 second - * Shift in thumb cluster to prevent pinky fatique +## How to build -## LEDs Overview +Put simply: +`make ergodox_ez:bocaj` -* Used for _LOWER, _ADJUST, and _DIABLO layer indication -* Used for Ctrl/GUI, Shift, and Alt indication when on a default layer +On that note, I use a separate workspace when making changes to my layouts or userspace. In that repo, there is a tool that does this for me. See [JacobJerrell/qmk_layouts/tools/](https://github.com/JacobJerrell/qmk_layouts/tree/master/tools) -## Wrappers Overview +## Layers -While it isn't a novel idea, I feel the need to mention it because it really appeals to me as a person that doesn't like repetitive code. +* WORKMAN: No one uses this board but me and I've never had a reason to switch to QWERTY +* LOWER: + * Left: Grave and navigation arrows + * Right: Numpad +* RAISE: + * Symbols across the top, F-Keys on the second row +* ADJUST + * Audio control, make/reset/version macros +* MOD: mouse navigation -We've all come to know and love the pretty wrapper for Ergodox because it makes for such a beautiful, self-documenting keymap. In this keymap, we are building ontop of the pretty wrapper to wrap our default layers with our keys that aren't unique to the layer. +## Ergodox Specifics -Now you can wrap your keymap with `LAYOUT_ergodox_pretty_base_wrapper()` and only feed it the alpha keys, having the top, side, bottom, and thumb clusters automatically filled in. If you make a key to any of the top, side, bottom, or thumb cluster keys, it will propegate to all layers that have this wrapper, or have KC_TRNS keycodes in the same location +I don't have the underglow or backlit versions so the 3 LEDs on the right board are used for layer indication if not on the base layer. If you're on the base layer, they're used for mod-key indicators. diff --git a/layouts/community/ergodox/bocaj/rules.mk b/layouts/community/ergodox/bocaj/rules.mk index aa67ad9e21..88eaf39f8e 100644 --- a/layouts/community/ergodox/bocaj/rules.mk +++ b/layouts/community/ergodox/bocaj/rules.mk @@ -1,11 +1,14 @@ -AUTO_SHIFT_ENABLE = no -COMMAND_ENABLE = no -SWAP_HANDS_ENABLE = no -TAP_DANCE_ENABLE = yes -EXTRAKEY_ENABLE = no -KEY_LOCK_ENABLE = yes -LEADER_ENABLE = yes +BOOTMAGIC_ENABLE = yes +TAP_DANCE_ENABLE = no +COMMAND_ENABLE = no # Commands for debug and configuration +CONSOLE_ENABLE = yes +SPACE_CADET_ENABLE = no +KEY_LOCK_ENABLE = yes +MOUSEKEY_ENABLE = yes +EXTRAKEY_ENABLE = yes +LEADER_ENABLE = yes -UNICODE_ENABLE = yes -UNICODEMAP_ENABLE = no -UCIS_ENABLE = no +UNICODE_ENABLE = no +UNICODEMAP_ENABLE = no +RGB_MATRIX_ENABLE = no +RGBLIGHT_ENABLE = no diff --git a/layouts/community/ortho_4x12/bocaj/config.h b/layouts/community/ortho_4x12/bocaj/config.h new file mode 100644 index 0000000000..2f5b731984 --- /dev/null +++ b/layouts/community/ortho_4x12/bocaj/config.h @@ -0,0 +1,109 @@ +#pragma once + +#define LEADER_TIMEOUT 250 +#define LEADER_PER_KEY_TIMING + +#if defined(RGBLIGHT_ENABLE) && !defined(RGBLED_NUM) +# if defined(KEYBOARD_planck_light) +# define RGB_DI_PIN A0 +# define RGBLED_NUM 13 // Number of LEDs +# endif +# define RGBLIGHT_HUE_STEP 12 +# define RGBLIGHT_SAT_STEP 12 +# define RGBLIGHT_VAL_STEP 12 +# define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2 +# define RGBLIGHT_EFFECT_SNAKE_LENGTH 2 +# ifdef RGB_MATRIX_ENABLE +# define RGBLIGHT_DISABLE_KEYCODES +# endif +#endif // RGBLIGHT_ENABLE + +#ifdef RGB_MATRIX_ENABLE +# define RGB_MATRIX_KEYPRESSES // reacts to keypresses (will slow down matrix scan by a lot) +// #define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (not recommened) +# define RGB_MATRIX_FRAMEBUFFER_EFFECTS +// #define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects +// #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255 +# define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended +# undef RGB_MATRIX_LED_PROCESS_LIMIT +# undef RGB_MATRIX_LED_FLUSH_LIMIT +#endif + +#if defined(KEYBOARD_planck_ez) +# undef PRODUCT +# define PRODUCT Bocaj Hacked Planck EZ +#endif + +#define EEPROM_I2C_RM24C512C + +#define ENCODER_DIRECTION_FLIP +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ + +// #define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 2 + +#define FB_ERM_LRA 1 /* For ERM:0 or LRA:1*/ +#define FB_BRAKEFACTOR 6 /* For 1x:0, 2x:1, 3x:2, 4x:3, 6x:4, 8x:5, 16x:6, Disable Braking:7 */ +#define FB_LOOPGAIN 1 /* For Low:0, Medium:1, High:2, Very High:3 */ + +/* default 3V ERM vibration motor voltage and library*/ +#if FB_ERM_LRA == 0 +# define RATED_VOLTAGE 3 +# define V_RMS 2.3 +# define V_PEAK 3.30 +/* Library Selection */ +# define LIB_SELECTION 4 /* For Empty:0' TS2200 library A to D:1-5, LRA Library: 6 */ + +/* default 2V LRA voltage and library */ +#elif FB_ERM_LRA == 1 +# define RATED_VOLTAGE 2 +# define V_RMS 2.0 +# define V_PEAK 2.85 +# define F_LRA 200 +/* Library Selection */ +# define LIB_SELECTION 6 /* For Empty:0' TS2200 library A to D:1-5, LRA Library: 6 */ + +#endif + +/* Control 1 register settings */ +#define DRIVE_TIME 25 +#define AC_COUPLE 0 +#define STARTUP_BOOST 1 + +/* Control 2 Settings */ +#define BIDIR_INPUT 1 +#define BRAKE_STAB 1 /* Loopgain is reduced when braking is almost complete to improve stability */ +#define SAMPLE_TIME 3 +#define BLANKING_TIME 1 +#define IDISS_TIME 1 + +/* Control 3 settings */ +#define NG_THRESH 2 +#define ERM_OPEN_LOOP 1 +#define SUPPLY_COMP_DIS 0 +#define DATA_FORMAT_RTO 0 +#define LRA_DRIVE_MODE 0 +#define N_PWM_ANALOG 0 +#define LRA_OPEN_LOOP 0 +/* Control 4 settings */ +#define ZC_DET_TIME 0 +#define AUTO_CAL_TIME 3 diff --git a/layouts/community/ortho_4x12/bocaj/keymap.c b/layouts/community/ortho_4x12/bocaj/keymap.c new file mode 100644 index 0000000000..0ac22b4ccf --- /dev/null +++ b/layouts/community/ortho_4x12/bocaj/keymap.c @@ -0,0 +1,286 @@ +/* +Copyright 2020 Jacob Jerrell <jacob.jerrell@gmail.com> @JacobJerrell + +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 "bocaj.h" + +#ifdef BACKLIGHT_ENABLE +enum planck_keycodes { + BACKLIT = NEW_SAFE_RANGE, + TH_LVL, +}; + +#else +# define BACKLIT OSM(MOD_LSFT) +enum planck_keycodes { + TH_LVL = NEW_SAFE_RANGE, +}; +#endif + +/* + * Tap/Hold Wrapper + * ,-----------------------------------------------------------------------------------. + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | |Shift | Cmd | Alt | | | Alt | Cmd |Shift | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | Ctrl | | | | | | | | | Ctrl | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | |Lower | |Raise | | | | | + * `-----------------------------------------------------------------------------------' + */ +#define LAYOUT_ortho_4x12_bocaj(...) WRAPPER_planck_bocaj(__VA_ARGS__) + +/* + * Base Alphanumeric Wrapper + Tap/Hold Wrapper + * ,-----------------------------------------------------------------------------------. + * | Esc | | | | | | | | | | | - | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | | | | | HYPR | MEH | | | | | ' | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Shift| | | | | | | | | | | TTMOD| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | MOMOD| Lead | Up | Left |BkSpc | Space |Enter |Right | Down | XXX | XXX | + * `-----------------------------------------------------------------------------------' + */ +#define LAYOUT_ortho_4x12_bocaj_base(...) WRAPPER_planck_bocaj_base(__VA_ARGS__) +#define LAYOUT_ortho_4x12_bocaj_base_WIN(...) WRAPPER_planck_bocaj_base_WIN(__VA_ARGS__) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_WORKMAN] = LAYOUT_ortho_4x12_bocaj_base( + _________________WORKMAN_L1________________, _________________WORKMAN_R1________________, + _________________WORKMAN_L2________________, _________________WORKMAN_R2________________, + _________________WORKMAN_L3________________, _________________WORKMAN_R3________________ + ), + [_WWORKMAN] = LAYOUT_ortho_4x12_bocaj_base_WIN( + _________________WORKMAN_L1________________, _________________WORKMAN_R1________________, + _________________WORKMAN_L2________________, _________________WORKMAN_R2________________, + _________________WORKMAN_L3________________, _________________WORKMAN_R3________________ + ), + + [_QWERTY] = LAYOUT_ortho_4x12_bocaj_base( + _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, + _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, + _________________QWERTY_L3_________________, _________________QWERTY_R3_________________ + ), + [_WQWERTY] = LAYOUT_ortho_4x12_bocaj_base_WIN( + _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, + _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, + _________________QWERTY_L3_________________, _________________QWERTY_R3_________________ + ), + + [_LOWER] = LAYOUT_ortho_4x12_bocaj( + ___________________LOWER_L1_EXT____________________, ___________________LOWER_R1_EXT____________________, + ___________________LOWER_L2_EXT____________________, ___________________LOWER_R2_EXT____________________, + ___________________LOWER_L3_EXT____________________, ___________________LOWER_R3_EXT____________________, + _______, _______, _______, _______, _______, _______, KC_0, KC_DOT, KC_COMM, _______, _______ + ), + + [_RAISE] = LAYOUT_ortho_4x12_bocaj( + KC_TILD, _________________RAISE_L1__________________, _________________RAISE_R1__________________, KC_EQUAL, + KC_F11, _________________RAISE_L2__________________, _________________RAISE_R2__________________, KC_F12, + _______, _________________RAISE_L3__________________, _________________RAISE_R3__________________, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + + [_ADJUST] = WRAPPER_ortho_4x12( + KC_MAKE, _________________ADJUST_L1_________________, _________________ADJUST_R1_________________, KC_RST, + VRSN, _________________ADJUST_L2_________________, _________________ADJUST_R2_________________, EEP_RST, + TH_LVL, _________________ADJUST_L3_________________, _________________ADJUST_R3_________________, RGB_IDL, + HPT_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ) + +}; +// clang-format on + +bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { +#ifdef BACKLIGHT_ENABLE + case BACKLIT: + if (record->event.pressed) { + register_code(KC_RSFT); +# ifdef BACKLIGHT_ENABLE + backlight_step(); +# endif + } else { + unregister_code(KC_RSFT); + } + break; +#endif +#ifdef KEYBOARD_planck_ez + case TH_LVL: + if (record->event.pressed) { + keyboard_config.led_level++; + if (keyboard_config.led_level > 4) { + keyboard_config.led_level = 0; + } + planck_ez_right_led_level((uint8_t)keyboard_config.led_level * 255 / 4); + planck_ez_left_led_level((uint8_t)keyboard_config.led_level * 255 / 4); + eeconfig_update_kb(keyboard_config.raw); + layer_state_set_kb(layer_state); + } + break; +#endif + } + return true; +} + +bool music_mask_user(uint16_t keycode) { + switch (keycode) { + default: + return true; + } +} + +#ifdef RGB_MATRIX_ENABLE + +// clang-format off +void suspend_power_down_keymap(void) { + rgb_matrix_set_suspend_state(true); +} + +void suspend_wakeup_init_keymap(void) { + rgb_matrix_set_suspend_state(false); +} +// clang-format on + +void rgb_matrix_indicators_user(void) { + uint8_t this_mod = get_mods(); + uint8_t this_led = host_keyboard_leds(); + uint8_t this_osm = get_oneshot_mods(); + bool is_ez; +# ifdef KEYBOARD_planck_ez + is_ez = true; +# endif + + if (g_suspend_state || !rgb_matrix_config.enable) return; + +# if defined(RGBLIGHT_ENABLE) + if (!userspace_config.rgb_layer_change) +# else + if (userspace_config.rgb_layer_change) +# endif + { + switch (get_highest_layer(layer_state)) { + case _MOD: + rgb_matrix_layer_helper(HSV_ORANGE, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER); + break; + case _RAISE: + rgb_matrix_layer_helper(HSV_BLUE, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER); + break; + case _LOWER: + rgb_matrix_layer_helper(HSV_GREEN, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER); + break; + case _ADJUST: + rgb_matrix_layer_helper(HSV_RED, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER); + break; + default: { + bool mods_enabled = false; + switch (get_highest_layer(default_layer_state)) { + case _QWERTY: + rgb_matrix_layer_helper(HSV_CYAN, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER); + break; + case _WQWERTY: + rgb_matrix_layer_helper(HSV_BLUE, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER); + break; + case _WORKMAN: + rgb_matrix_layer_helper(HSV_SPRINGGREEN, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER); + break; + case _WWORKMAN: + rgb_matrix_layer_helper(HSV_GREEN, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER); + break; + } + break; + } + } + } + + switch (get_highest_layer(default_layer_state)) { + case _QWERTY: + rgb_matrix_set_color(is_ez ? 41 : 42, 0x00, 0xFF, 0xFF); + break; + case _WORKMAN: + rgb_matrix_set_color(is_ez ? 41 : 42, 0xD9, 0xA5, 0x21); + break; + } + + if ((this_mod | this_osm) & MODS_SHIFT_MASK || this_led & (1 << USB_LED_CAPS_LOCK)) { + rgb_matrix_set_color_row(0, 0x00, 0xFF, 0x00); + } + if ((this_mod | this_osm) & MODS_CTRL_MASK && (this_mod | this_osm) & MODS_GUI_MASK) { + rgb_matrix_set_color_row(1, 0xFF, 0xD9, 0xFF); + } else if ((this_mod | this_osm) & MODS_CTRL_MASK) { + rgb_matrix_set_color_row(1, 0xFF, 0x00, 0x00); + } else if ((this_mod | this_osm) & MODS_GUI_MASK) { + rgb_matrix_set_color_row(1, 0xFF, 0xD9, 0x00); + } + if ((this_mod | this_osm) & MODS_ALT_MASK) { + rgb_matrix_set_color_row(2, 0x00, 0x00, 0xFF); + } +} +#endif // RGB_MATRIX_INIT + +void matrix_init_keymap(void) {} + +#ifdef ENCODER_ENABLE +void encoder_update(bool clockwise) { + switch (get_highest_layer(layer_state)) { + case _RAISE: + clockwise ? tap_code(KC_VOLD) : tap_code(KC_VOLU); + break; + case _LOWER: +# ifdef RGB_MATRIX_ENABLE + clockwise ? rgb_matrix_step() : rgb_matrix_step_reverse(); +# else + clockwise ? tap_code(KC_PGDN) : tap_code(KC_PGUP); +# endif + break; + case _ADJUST: +# ifdef AUDIO_CLICKY + clockwise ? clicky_freq_up() : clicky_freq_down(); +# endif + break; + default: + clockwise ? tap_code(KC_DOWN) : tap_code(KC_UP); + } +# ifdef AUDIO_CLICKY + clicky_play(); +# endif +} +#endif // ENCODER_ENABLE + +#ifdef KEYBOARD_planck_ez +layer_state_t layer_state_set_keymap(layer_state_t state) { + planck_ez_left_led_off(); + planck_ez_right_led_off(); + switch (get_highest_layer(state)) { + case _LOWER: + planck_ez_left_led_on(); + break; + case _RAISE: + planck_ez_right_led_on(); + break; + case _ADJUST: + planck_ez_right_led_on(); + planck_ez_left_led_on(); + break; + default: + break; + } + return state; +} +#endif diff --git a/layouts/community/ortho_4x12/bocaj/readme.md b/layouts/community/ortho_4x12/bocaj/readme.md new file mode 100644 index 0000000000..a3716b8dc0 --- /dev/null +++ b/layouts/community/ortho_4x12/bocaj/readme.md @@ -0,0 +1,23 @@ +# Overview + +This is my Planck EZ layout, heavily based upon [my ergodox layout](../../ergodox/bocaj/). + +I got this keyboard for two reasons: + +1. QMK spoiled me and the Ergodox isn't incredibly portable (ok 3 reasons) +2. This can sit ontop of my janky Macbook Pro keyboard (disabled with Karabiner if the planck is connected) when I want to work from the couch. + +## How to Build + +Put simply: +`make planck/ez:bocaj` + +On that note, I use a separate workspace when making changes to my layouts or userspace. In that repo, there is a tool that does this for me. See [JacobJerrell/qmk_layouts/tools/](https://github.com/JacobJerrell/qmk_layouts/tree/master/tools) until I get documentation finished (Write code first, define requirements second... right?). + +## Layers + +* WORKMAN/QWERTY: Default is workman, can be switched via the ADJUST layer. Idk why you would though. +* LOWER: Nums across the top, switches enter key to tab and tab key to delete. Symbols in the middle, remenascent of the ergodox +* RAISE: Symbols across the top, F-Keys on the 2nd row. Switches backspace to delete +* ADJUST: Computer Audio controls, RGB controls, Sound controls, macros, etc. +* MOD: Mouse controls under the left hand. Numpad under the right hand
\ No newline at end of file diff --git a/layouts/community/ortho_4x12/bocaj/rules.mk b/layouts/community/ortho_4x12/bocaj/rules.mk new file mode 100644 index 0000000000..3383cfd35f --- /dev/null +++ b/layouts/community/ortho_4x12/bocaj/rules.mk @@ -0,0 +1,44 @@ +BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +TAP_DANCE_ENABLE = no +SPACE_CADET_ENABLE = no +NKRO_ENABLE = yes + +ifneq ($(strip $(KEYBOARD)), planck/rev6) + CONSOLE_ENABLE = no + COMMAND_ENABLE = no + ifeq ($(strip $(LAYOUT_HAS_RGB)), yes) + RGBLIGHT_ENABLE = yes + INDICATOR_LIGHTS = yes + RGBLIGHT_TWINKLE = yes + RGBLIGHT_STARTUP_ANIMATION = yes + endif +else + CONSOLE_ENABLE = yes + COMMAND_ENABLE = yes + RGBLIGHT_ENABLE = yes + RGBLIGHT_STARTUP_ANIMATION = yes + RGB_MATRIX_ENABLE = no + AUDIO_ENABLE = yes + EEPROM_DRIVER = i2c +endif +ifeq ($(strip $(KEYBOARD)), planck/light) + RGB_MATRIX_ENABLE = yes + RGBLIGHT_ENABLE = yes + RGBLIGHT_STARTUP_ANIMATION = yes + AUDIO_ENABLE = yes + # HAPTIC_ENABLE += SOLENOID +endif +ifeq ($(strip $(KEYBOARD)), planck/ez) + RGBLIGHT_ENABLE = no + # SERIAL_LINK_ENABLE = yes + ENCODER_ENABLE = yes + RGB_MATRIX_ENABLE = IS31FL3737 + INDICATOR_LIGHTS = yes + RGBLIGHT_TWINKLE = yes + RGBLIGHT_STARTUP_ANIMATION = yes + CONSOLE_ENABLE = yes + COMMAND_ENABLE = yes + AUDIO_ENABLE = yes +endif |