Bocaj - Third Annual Refactor (Redux) (#10295)
* Reset everything to upstream, reapply Bocaj changes * Bocaj - address PR comments * Just in time changes * Bocaj - Several adjustments after using the layout for a while
This commit is contained in:
		
							parent
							
								
									6b1f96dca8
								
							
						
					
					
						commit
						3076f86dc1
					
				
					 24 changed files with 1418 additions and 1007 deletions
				
			
		| 
						 | 
				
			
			@ -1,6 +1,4 @@
 | 
			
		|||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include QMK_KEYBOARD_CONFIG_H
 | 
			
		||||
 | 
			
		||||
#define LEADER_TIMEOUT 250
 | 
			
		||||
#define LEADER_PER_KEY_TIMING
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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) {};
 | 
			
		||||
 | 
			
		||||
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);
 | 
			
		||||
// 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();
 | 
			
		||||
 | 
			
		||||
  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;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  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) {
 | 
			
		||||
        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 );
 | 
			
		||||
        } else {
 | 
			
		||||
          ergodox_right_led_2_on();
 | 
			
		||||
          ergodox_right_led_2_set( 10 );
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      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;
 | 
			
		||||
  }
 | 
			
		||||
    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_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 );
 | 
			
		||||
        } 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_3_off();
 | 
			
		||||
        }
 | 
			
		||||
    } else if (!(modifiers) && (layer_is_workman)) {
 | 
			
		||||
        ergodox_right_led_1_off();
 | 
			
		||||
        ergodox_right_led_2_off();
 | 
			
		||||
        ergodox_right_led_3_off();
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										109
									
								
								layouts/community/ortho_4x12/bocaj/config.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										109
									
								
								layouts/community/ortho_4x12/bocaj/config.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -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
 | 
			
		||||
							
								
								
									
										286
									
								
								layouts/community/ortho_4x12/bocaj/keymap.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										286
									
								
								layouts/community/ortho_4x12/bocaj/keymap.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -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
 | 
			
		||||
							
								
								
									
										23
									
								
								layouts/community/ortho_4x12/bocaj/readme.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								layouts/community/ortho_4x12/bocaj/readme.md
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -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
 | 
			
		||||
							
								
								
									
										44
									
								
								layouts/community/ortho_4x12/bocaj/rules.mk
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								layouts/community/ortho_4x12/bocaj/rules.mk
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -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
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue