diff options
4 files changed, 330 insertions, 0 deletions
diff --git a/keyboards/40percentclub/gherkin/keymaps/stevexyz/config.h b/keyboards/40percentclub/gherkin/keymaps/stevexyz/config.h new file mode 100644 index 0000000000..c708babf16 --- /dev/null +++ b/keyboards/40percentclub/gherkin/keymaps/stevexyz/config.h @@ -0,0 +1,52 @@ +#pragma once + +// bootloader (first top leftmost key) +#define BOOTMAGIC_LITE_ROW 0 +#define BOOTMAGIC_LITE_COLUMN 1 + + +// Behaviors That Can Be Configured + + +#define TAPPING_TERM 250 + // how long before a tap becomes a hold, if set above 500, a key tapped during the tapping term will turn it into a hold too + +#define PERMISSIVE_HOLD + // makes tap and hold keys trigger the hold if another key is pressed before releasing, even if it hasn't hit the TAPPING_TERM +#define IGNORE_MOD_TAP_INTERRUPT + // makes it possible to do rolling combos (zx) with keys that convert to other keys on hold, by enforcing the TAPPING_TERM for both keys. + +#define TAPPING_FORCE_HOLD + // makes it possible to use a dual role key as modifier shortly after having been tapped (see Hold after tap) + // Breaks any Tap Toggle functionality (TT or the One Shot Tap Toggle) + + +/* + #define TAPPING_TERM_PER_KEY + // enables handling for per key TAPPING_TERM settings + #define RETRO_TAPPING + // tap anyway, even after TAPPING_TERM, if there was no other key interruption between press and release + #define TAPPING_TOGGLE 2 + // how many taps before triggering the toggle + #define LEADER_TIMEOUT 300 + // how long before the leader key times out + // If you're having issues finishing the sequence before it times out, you may need to increase the timeout setting. Or you may want to enable the LEADER_PER_KEY_TIMING option, which resets the timeout after each key is tapped. + #define LEADER_PER_KEY_TIMING + // sets the timer for leader key chords to run on each key press rather than overall + #define LEADER_KEY_STRICT_KEY_PROCESSING + // Disables keycode filtering for Mod-Tap and Layer-Tap keycodes. Eg, if you enable this, you would need to specify MT(MOD_CTL, KC_A) if you want to use KC_A. + #define ONESHOT_TIMEOUT 300 + // how long before oneshot times out + #define ONESHOT_TAP_TOGGLE 2 + // how many taps before oneshot toggle is triggered + #define QMK_KEYS_PER_SCAN 4 + // Allows sending more than one key per scan. By default, only one key event gets sent via process_record() per scan. This has little impact on most typing, but if you're doing a lot of chords, or your scan rate is slow to begin with, you can have some delay in processing key events. Each press and release is a separate event. For a keyboard with 1ms or so scan times, even a very fast typist isn't going to produce the 500 keystrokes a second needed to actually get more than a few ms of delay from this. But if you're doing chording on something with 3-4ms scan times? You probably want this. + #define COMBO_COUNT 2 + // Set this to the number of combos that you're using in the Combo feature. + #define COMBO_TERM 200 + // how long for the Combo keys to be detected. Defaults to TAPPING_TERM if not defined. + #define TAP_CODE_DELAY 100 + // Sets the delay between register_code and unregister_code, if you're having issues with it registering properly (common on VUSB boards). The value is in milliseconds. + #define TAP_HOLD_CAPS_DELAY 80 + // Sets the delay for Tap Hold keys (LT, MT) when using KC_CAPSLOCK keycode, as this has some special handling on MacOS. The value is in milliseconds, and defaults to 80 ms if not defined. For macOS, you may want to set this to 200 or higher. +*/ diff --git a/keyboards/40percentclub/gherkin/keymaps/stevexyz/keymap.c b/keyboards/40percentclub/gherkin/keymaps/stevexyz/keymap.c new file mode 100644 index 0000000000..188c1cd5d8 --- /dev/null +++ b/keyboards/40percentclub/gherkin/keymaps/stevexyz/keymap.c @@ -0,0 +1,246 @@ +/* Copyright 2019 Stefano Marago' + * + * 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/>. + */ + + +/* + * see jj40/stevexyz for more information + */ + + +#include QMK_KEYBOARD_H + +enum layers { + LAYER_HOME, // home base layer + LAYER_FUNC, // function keys and cursors + LAYER_NUMSYM, // numbers and other characters + LAYER_SYST, // media, mouse and other system keys + LAYER_ARROWPAD, + LAYER_NUMPAD, + LAYER_MEDIAPAD, +}; + +enum custom_keycodes { + CK_TRIPLEZERO = SAFE_RANGE, +}; + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* + * LEGEND: + * + * ,--------------------------------. + * | Top row: shifted character | + * | Central row: standard char | + * | Bottom row: hold modifier | + * `--------------------------------' + * + * "____" means free to be assigned + * + */ + +/* Qwerty Home Layer + * ,---------------------------------------------------------------------. + * | | | | | | | | | | | + * | Q | W | E | R | T | Y | U | I | O | P | + * | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | + * |------+------+------+------+-------------+------+------+------+------| + * | | | | | | | | | | | + * | A | S | D | F | G | H | J | K | L | Enter| + * | Shift| FnNav|NumSym| AltGr| OSkey| OSkey| AltGr| FnNav|NumSym| Shift| + * '------+------+------+------+------+------|------+------+------+------' + * | | | | | | | | | + * | Z | X | C | V | B | N | M | Space| + * | Ctrl | Alt | FnNav|NumSym| Shift| Alt | Ctrl | Shift| + * '-------------------------------------------------------' + */ + [LAYER_HOME] = LAYOUT_ortho_3x10( + LT(LAYER_ARROWPAD, KC_Q), LT(LAYER_NUMPAD, KC_W), LT(LAYER_MEDIAPAD, KC_E), KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, + MT(MOD_LSFT, KC_A), LT(LAYER_FUNC, KC_S), LT(LAYER_NUMSYM, KC_D), MT(MOD_RALT, KC_F), MT(MOD_LGUI, KC_G), MT(MOD_RGUI, KC_H), MT(MOD_RALT, KC_J), LT(LAYER_FUNC, KC_K), LT(LAYER_NUMSYM, KC_L), MT(MOD_RSFT, KC_ENT), + XXXXXXX, MT(MOD_LCTL, KC_Z), MT(MOD_LALT, KC_X), LT(LAYER_FUNC, KC_C), LT(LAYER_NUMSYM, KC_V), MT(MOD_LSFT, KC_B), MT(MOD_LALT, KC_N), MT(MOD_RCTL, KC_M), MT(MOD_RSFT, KC_SPC), XXXXXXX ), + +/* Function and Navigation Layer + * ,---------------------------------------------------------------------. + * | | | | | | | | | | | + * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | + * | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | + * |------+------+------+------+-------------+------+------+------+------| + * | | | | | | | | | | | + * | ESC | Home | PgDn | PgUp | End | Left | Down | Up | Right| Baksp| + * | Shift| ____ |SysLay| AltGr| OSkey| OSkey| AltGr| ____ |SysLay| Shift| + * '------+------+------+------+------+------|------+------+------+------' + * | | | | | | | | | + * | ____ | ____ | | ____ | ____ | ____ | ____ | ____ | + * | Ctrl | Alt | ____ |SysLay| Shift| Alt | Ctrl | Shift| + * '-------------------------------------------------------' + */ + [LAYER_FUNC] = LAYOUT_ortho_3x10( + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, + MT(MOD_LSFT, KC_ESC), KC_HOME, LT(LAYER_SYST, KC_PGDN), MT(MOD_RALT, KC_PGUP), MT(MOD_LGUI, KC_END), MT(MOD_RGUI, KC_LEFT), MT(MOD_RALT, KC_DOWN), KC_UP, LT(LAYER_SYST, KC_RGHT), MT(MOD_RSFT, KC_BSPC), + XXXXXXX, KC_LCTL, KC_LALT, KC_NO, MO(LAYER_SYST), KC_LSFT, KC_LALT, KC_RCTL, MT(MOD_RSFT, KC_SPC), XXXXXXX ), + +/* Number and Symbols Layer + * ,---------------------------------------------------------------------. + * | ! | @ | # | $ | % | ^ | & | * | ( | ) | + * | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | + * | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | + * |------+------+------+------+-------------+------+------+------+------| + * | | ~ | _ | + | { | } | | | : | " | | + * | TAB | ` | - | = | [ | ] | \ | ; | ' | Del | + * | Shift|SysLay| ____ | AltGr| OSkey| OSkey| AltGr|SysLay| ____ | Shift| + * ' -----+------+------+------+------+------|------+------+------+------' + * | | | | | < | > | ? | | + * | ____ | ____ | ____ | | , | . | / | ____ | + * | Ctrl | Alt |SysLay| ____ | Shift| Alt | Ctrl | Shift| + * '-------------------------------------------------------' + */ + [LAYER_NUMSYM] = LAYOUT_ortho_3x10( + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, + MT(MOD_LSFT, KC_TAB), LT(LAYER_SYST, KC_GRV), KC_MINS, MT(MOD_RALT, KC_EQL), MT(MOD_LGUI, KC_LBRC), MT(MOD_RGUI, KC_RBRC), MT(MOD_RALT, KC_BSLS), LT(LAYER_SYST, KC_SCLN), KC_QUOT, MT(MOD_RSFT, KC_DEL), + XXXXXXX, KC_LCTL, KC_LALT, MO(LAYER_SYST), KC_NO, MT(MOD_LSFT, KC_COMM), MT(MOD_LALT, KC_DOT), MT(MOD_RCTL, KC_SLSH), MT(MOD_RSFT, KC_SPC), XXXXXXX ), + +/* System Layer + * ,---------------------------------------------------------------------. + * | | | | | | | | | | | + * | F11 | F12 | Play | Next |MsWhlU|MsBtn1|OSMenu|SysReq|MsBtn2|Backsp| + * | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | + * |------+------+------+------+-------------+------+------+------+------| + * | | | | | | | | | | | + * | Caps | Mute | Vol- | Vol+ |MsWhlD|MsLeft|MSDown| MsUp |MsRigh| Ins | + * | Shift| ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | Shift| + * '------+------+------+------+------+------|------+------+------+------' + * | | | | | | | | | + * | ____ | ____ | | |PrnScr|ScrLck|Pause | ____ | + * | Ctrl | Alt | ____ | ____ | ____ | ____ | ____ | Shift| + * '-------------------------------------------------------' + * simplified view (for media and mouse there are dedicated layers) + * ,---------------------------------------------------------------------. + * | | | | | | | | | | | + * | F11 | F12 | | | | |OSMenu|SysReq| |Backsp| + * | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | + * |------+------+------+------+-------------+------+------+------+------| + * | | | | | | | | | | | + * | Caps | | | | | | | | | Ins | + * | Shift| ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | Shift| + * '------+------+------+------+------+------|------+------+------+------+ + * | | | | | | | | | + * | | | | |PrnScr|ScrLck|Pause | | + * | Ctrl | Alt | ____ | ____ | ____ | ____ | ____ | Shift| + * '-------------------------------------------------------' + */ + [LAYER_SYST] = LAYOUT_ortho_3x10( + KC_F11, KC_F12, KC_MPLY, KC_MNXT, KC_MS_WH_UP, KC_MS_BTN1, KC_APP, KC_SYSREQ, KC_MS_BTN2, KC_BSPC, + MT(MOD_LSFT, KC_CAPS), KC_MUTE, KC_VOLD, KC_VOLU, KC_MS_WH_DOWN, KC_MS_LEFT, KC_MS_DOWN, KC_MS_UP, KC_MS_RIGHT, MT(MOD_RSFT, KC_INS), + XXXXXXX, KC_LCTL, KC_LALT, KC_NO, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, MT(MOD_RSFT, KC_SPC), XXXXXXX ), + + /* ArrowPad (mod su Q) /------mouse-------\ /-----cursor-------\ + * ,---------------------------------------------------------------------. + * | | | | | | | | | | | + * | | | |MsBtn1| MsUp |MsBtn2| Home | Up | PgUp |Backsp| + * | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | + * |------+------+------+------+-------------+------+------+------+------| + * | | | | | | | | | | | + * | | | |MsLeft|MsDown|MsRigh| Left | Down | Right| Enter| + * | Shift| ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | + * '------+------+------+------+------+------|------+------+------+------' + * | | | | | | | | | + * | | |MsWhlU|MsDown|MsWhlD| End | Down | PdDn | + * | Ctrl | Alt | ____ | ____ | ____ | ____ | ____ | ____ | + * '-------------------------------------------------------' + */ + [LAYER_ARROWPAD] = LAYOUT_ortho_3x10( + KC_NO, KC_NO, KC_NO, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, KC_HOME, KC_UP, KC_PGUP, KC_BSPC, + KC_LSFT, KC_NO, KC_NO, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_ENT, + XXXXXXX, KC_LCTL, KC_LALT, KC_MS_WH_UP, KC_MS_DOWN, KC_MS_WH_DOWN, KC_END, KC_DOWN, KC_PGDN, XXXXXXX ), + +/* NumPad (mod su W) + * ,---------------------------------------------------------------------. + * | | | | | | | | | | | + * | | | / | * | - |Backsp| 7 | 8 | 9 | 0 | + * | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | + * |------+------+------+------+-------------+------+------+------+------| + * | | | | | | | | | | | + * | | | | = | + | . | 4 | 5 | 6 | Enter| + * | Shift| ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | + * '------+------+------+------+------+------|------+------+------+------' + * | | | | | | | | | + * | | | | Tab | , | 1 | 2 | 3 | + * | Ctrl | Alt | ____ | ____ | ____ | ____ | ____ | ____ | + * '-------------------------------------------------------' + */ + [LAYER_NUMPAD] = LAYOUT_ortho_3x10( + KC_NO, KC_NO, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, KC_BSPC, KC_7, KC_8, KC_9, KC_0, + KC_LSFT, KC_NO, KC_NO, KC_KP_EQUAL, KC_KP_PLUS, KC_DOT, KC_4, KC_5, KC_6, KC_ENT, + XXXXXXX, KC_LCTL, KC_LALT, KC_NO, KC_TAB, KC_COMM, KC_1, KC_2, KC_3, XXXXXXX ), + + /* MediaPad (mod su E) + * ,---------------------------------------------------------------------. + * | | | | | | | | | | | + * | | | | | | | | Vol+ | | | + * | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | + * |------+------+------+------+-------------+------+------+------+------| + * | | | | | | | | | | | + * | | | | | | | Prev | Play | Next | | + * | Shift| ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | + * '------+------+------+------+------+------|------+------+------+------' + * | | | | | | | | | + * | | | | | | Mute | Vol- | | + * | Ctrl | Alt | ____ | ____ | ____ | ____ | ____ | ____ | + * '-------------------------------------------------------' + */ + [LAYER_MEDIAPAD] = LAYOUT_ortho_3x10( + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_VOLU, KC_NO, KC_NO, + KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, + XXXXXXX, KC_LCTL, KC_LALT, KC_NO, KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_NO, XXXXXXX ), + +}; + + +void matrix_init_user(void) { + // eeconfig_init(); // reset keyboard to a standard default state; useful when new releases messup with eeprom values + // set num lock on at start (for numonly layer to work) + if (!host_keyboard_led_state().num_lock) { + tap_code(KC_NUMLOCK); + } +} + +void matrix_scan_user(void) { +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case CK_TRIPLEZERO: + if (record->event.pressed) { + SEND_STRING("000"); + } // else { when released... } + break; + } + return true; +}; + +void keyboard_pre_init_user(void) { + // Call the keyboard pre init code. + + // Set our LED pins as output + setPinOutput(D5); + setPinOutput(B0); +} + +bool led_update_user(led_t led_state) { + writePin(D5, !led_state.num_lock); + writePin(B0, !led_state.caps_lock); + return false; // prevent keyboard from processing state +} diff --git a/keyboards/40percentclub/gherkin/keymaps/stevexyz/readme.md b/keyboards/40percentclub/gherkin/keymaps/stevexyz/readme.md new file mode 100644 index 0000000000..40d2bc22d5 --- /dev/null +++ b/keyboards/40percentclub/gherkin/keymaps/stevexyz/readme.md @@ -0,0 +1,13 @@ +# gherkin super micro edition + +With this configuration the "28" layout first experimented on the plank-like jj40 is being ported to a more proper board, leaving just two keys not used. + +For more information please have a look at https://github.com/stevexyz/qmk_firmware/blob/master/keyboards/jj40/keymaps/stevexyz/readme.md + +The image below explain the main layers. In addition to them with q, w and e there are three specific dedicated layers for cursors/mouse, numpad and media. +![layers](https://raw.githubusercontent.com/stevexyz/qmk_firmware/master/keyboards/40percentclub/gherkin/keymaps/stevexyz/layers.jpeg) + +![prototype](https://github.com/stevexyz/qmk_firmware/blob/master/keyboards/40percentclub/gherkin/keymaps/stevexyz/gherkin28.jpeg) + +Happy hacking! +_Stefano diff --git a/keyboards/40percentclub/gherkin/keymaps/stevexyz/rules.mk b/keyboards/40percentclub/gherkin/keymaps/stevexyz/rules.mk new file mode 100644 index 0000000000..2c5a23df3d --- /dev/null +++ b/keyboards/40percentclub/gherkin/keymaps/stevexyz/rules.mk @@ -0,0 +1,19 @@ +# Build Options (yes/no) +# +BOOTMAGIC_ENABLE = lite # Just bootloader enabled with keys +MOUSEKEY_ENABLE = yes # Mouse keys +EXTRAKEY_ENABLE = yes # Audio control and System control +CONSOLE_ENABLE = no # Console for debug +COMMAND_ENABLE = no # Commands for debug and configuration +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI support +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches +HD44780_ENABLE = no # Enable support for HD44780 based LCDs +TAP_DANCE_ENABLE = no +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend (it uses the same timer as BACKLIGHT_ENABLE) + +NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +RGBLIGHT_ENABLE = no |