summaryrefslogtreecommitdiff
path: root/keyboards/40percentclub/gherkin
diff options
context:
space:
mode:
authorAlex Ong <the.onga@gmail.com>2019-01-04 19:43:45 +1100
committerAlex Ong <the.onga@gmail.com>2019-01-04 19:43:45 +1100
commit2bb2977c133646c4e056960e72029270d77cc1eb (patch)
tree235d491f992121ac1716c5bf2fafb80983748576 /keyboards/40percentclub/gherkin
parenta55c838961c89097ab849ed6cb1f261791e6b9b4 (diff)
parent47c91fc7f75ae0a477e55b687aa0fc30da0a283c (diff)
Merge branch 'master' into debounce_refactor
# Conflicts: # tmk_core/common/keyboard.c
Diffstat (limited to 'keyboards/40percentclub/gherkin')
-rw-r--r--keyboards/40percentclub/gherkin/config.h51
-rw-r--r--keyboards/40percentclub/gherkin/gherkin.c1
-rw-r--r--keyboards/40percentclub/gherkin/gherkin.h15
-rw-r--r--keyboards/40percentclub/gherkin/info.json13
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/bbaserdem/README.md11
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/bbaserdem/config.h9
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/bbaserdem/keymap.c36
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/bbaserdem/rules.mk13
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/default/keymap.c63
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/itsaferbie/config.h10
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/itsaferbie/keymap.c145
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/itsaferbie/rules.mk3
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/mjt/config.h7
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/mjt/keymap.c250
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/mjt/rules.mk2
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/steno/config.h7
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/steno/keymap.c13
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/steno/readme.md9
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/steno/rules.mk12
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/config.h3
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/keymap.c56
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/rules.mk2
-rw-r--r--keyboards/40percentclub/gherkin/readme.md21
-rw-r--r--keyboards/40percentclub/gherkin/rules.mk74
24 files changed, 826 insertions, 0 deletions
diff --git a/keyboards/40percentclub/gherkin/config.h b/keyboards/40percentclub/gherkin/config.h
new file mode 100644
index 0000000000..3ed638b66f
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/config.h
@@ -0,0 +1,51 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER 40 Percent Club
+#define PRODUCT Gherkin
+#define DESCRIPTION A 30 key ortholinear keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 6
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { F7, B1, B3, B2, B6 }
+#define MATRIX_COL_PINS { B4, E6, D7, C6, D4, D0 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* number of backlight levels */
+#define BACKLIGHT_PIN B5
+#ifdef BACKLIGHT_PIN
+#define BACKLIGHT_LEVELS 3
+#endif
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 0
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#endif
diff --git a/keyboards/40percentclub/gherkin/gherkin.c b/keyboards/40percentclub/gherkin/gherkin.c
new file mode 100644
index 0000000000..2952d842cf
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/gherkin.c
@@ -0,0 +1 @@
+#include "gherkin.h"
diff --git a/keyboards/40percentclub/gherkin/gherkin.h b/keyboards/40percentclub/gherkin/gherkin.h
new file mode 100644
index 0000000000..70bffee302
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/gherkin.h
@@ -0,0 +1,15 @@
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT_ortho_3x10( \
+ K00, K01, K02, K03, K04, K05, K10, K11, K12, K13 , \
+ K14, K15, K20, K21, K22, K23, K24, K25, K30, K31 , \
+ K32, K33, K34, K35, K40, K41, K42, K43, K44, K45 \
+) { \
+ { K00, K01, K02, K03, K04, K05 }, \
+ { K10, K11, K12, K13, K14, K15 }, \
+ { K20, K21, K22, K23, K24, K25 }, \
+ { K30, K31, K32, K33, K34, K35 }, \
+ { K40, K41, K42, K43, K44, K45 } \
+}
diff --git a/keyboards/40percentclub/gherkin/info.json b/keyboards/40percentclub/gherkin/info.json
new file mode 100644
index 0000000000..7ebbfb04be
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/info.json
@@ -0,0 +1,13 @@
+{
+ "keyboard_name": "Gherkin",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 10,
+ "height": 3,
+ "layouts": {
+ "LAYOUT_ortho_3x10": {
+ "key_count": 30,
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":6, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}]
+ }
+ }
+}
diff --git a/keyboards/40percentclub/gherkin/keymaps/bbaserdem/README.md b/keyboards/40percentclub/gherkin/keymaps/bbaserdem/README.md
new file mode 100644
index 0000000000..3c9a5e98b3
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/bbaserdem/README.md
@@ -0,0 +1,11 @@
+# Gherkin Layout
+This is my gherkin layout.
+It is used as a game pad, and key layout is inspired by spare keys I had lying around.
+The firmware is very simple, and only includes one layer keymap, and RGB effects.
+
+# Flashing
+The following command should be used from the main qmk directory.
+```
+make gherkin:bbaserdem
+sudo avrdude -p atmgea34u4 -P `ls /dev/ttyACM*` -c avr109 -U flash:.build/gherkin_bbaserdem.hex
+```
diff --git a/keyboards/40percentclub/gherkin/keymaps/bbaserdem/config.h b/keyboards/40percentclub/gherkin/keymaps/bbaserdem/config.h
new file mode 100644
index 0000000000..5c9ca52d75
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/bbaserdem/config.h
@@ -0,0 +1,9 @@
+#pragma once
+
+#define RGB_DI_PIN F6
+#define RGBLED_NUM 10
+#define RGBLIGHT_ANIMATIONS
+#ifdef BACKLIGHT_LEVELS
+#undef BACKLIGHT_LEVELS
+#endif
+#define BACKLIGHT_LEVELS 3
diff --git a/keyboards/40percentclub/gherkin/keymaps/bbaserdem/keymap.c b/keyboards/40percentclub/gherkin/keymaps/bbaserdem/keymap.c
new file mode 100644
index 0000000000..0d3c8557c5
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/bbaserdem/keymap.c
@@ -0,0 +1,36 @@
+// This is a game-pad gherkin layout with RGB and LED lights
+
+#include QMK_KEYBOARD_H
+
+backlight_config_t backlight_config;
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Game pad
+ * ,-----------------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | Ctl | Alt | ~ |
+ * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
+ * | Tab | Q | W | E | R | T | |^| | ; | ' | / |
+ * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
+ * | Shf | A | S | D | F | <-- | |v| | --> | , | . |
+ * `-----------------------------------------------------------'
+ */
+ LAYOUT_ortho_3x10(
+ KC_ESCAPE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_LCTRL, KC_LALT, KC_GRAVE,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_UP, KC_SCLN, KC_QUOTE, KC_SLASH,
+ KC_LSHIFT, KC_A, KC_S, KC_D, KC_F, KC_LEFT, KC_DOWN, KC_RIGHT, KC_COMMA, KC_DOT
+ )
+};
+
+void matrix_init_user(void) {
+ // Set LED's to max
+ _delay_us(300);
+ backlight_config.level = 2;
+ backlight_config.enable = 1;
+ eeconfig_update_backlight(backlight_config.raw);
+ backlight_set(backlight_config.level);
+ // Set RGB to rainbow mood light
+ rgblight_enable();
+ rgblight_mode(1);
+ rgblight_sethsv(120,255,255);
+ rgblight_mode(6);
+}
diff --git a/keyboards/40percentclub/gherkin/keymaps/bbaserdem/rules.mk b/keyboards/40percentclub/gherkin/keymaps/bbaserdem/rules.mk
new file mode 100644
index 0000000000..07a20a4217
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/bbaserdem/rules.mk
@@ -0,0 +1,13 @@
+USER_NAME := bbaserdem-nouserspace
+
+STENO_ENABLE = no # Additional protocols for Stenography(+1700), requires VIRTSER
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+AUDIO_ENABLE = no # Enable audio output from keyboard
+
+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 = yes # Enable RBG light strips
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
diff --git a/keyboards/40percentclub/gherkin/keymaps/default/keymap.c b/keyboards/40percentclub/gherkin/keymaps/default/keymap.c
new file mode 100644
index 0000000000..ae6f158627
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/default/keymap.c
@@ -0,0 +1,63 @@
+#include QMK_KEYBOARD_H
+
+#define FN1_Q LT(1, KC_Q)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_ortho_3x10(
+ FN1_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ESC,
+ KC_Z, KC_X, KC_C, KC_V, KC_BSPC, KC_SPC, KC_B, KC_N, KC_M, KC_ENT
+ ),
+
+ [1] = LAYOUT_ortho_3x10(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_INC,
+ _______, _______, _______, _______, _______, _______, RESET, _______, _______, BL_DEC
+ ),
+
+};
+
+void matrix_init_user(void) {
+}
+
+void matrix_scan_user(void) {
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+ if (usb_led & (1 << USB_LED_NUM_LOCK)) {
+ DDRD |= (1 << 5); PORTD &= ~(1 << 5);
+ } else {
+ DDRD &= ~(1 << 5); PORTD &= ~(1 << 5);
+ }
+
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+ DDRB |= (1 << 0); PORTB &= ~(1 << 0);
+ } else {
+ DDRB &= ~(1 << 0); PORTB &= ~(1 << 0);
+ }
+
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_COMPOSE)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_KANA)) {
+
+ } else {
+
+ }
+
+}
diff --git a/keyboards/40percentclub/gherkin/keymaps/itsaferbie/config.h b/keyboards/40percentclub/gherkin/keymaps/itsaferbie/config.h
new file mode 100644
index 0000000000..6849bbdd2c
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/itsaferbie/config.h
@@ -0,0 +1,10 @@
+#pragma once
+
+#undef RGB_DI_PIN
+#undef RGBLED_NUM
+#define RGB_DI_PIN D2
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 8
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
diff --git a/keyboards/40percentclub/gherkin/keymaps/itsaferbie/keymap.c b/keyboards/40percentclub/gherkin/keymaps/itsaferbie/keymap.c
new file mode 100644
index 0000000000..950b6e86b9
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/itsaferbie/keymap.c
@@ -0,0 +1,145 @@
+#include QMK_KEYBOARD_H
+
+extern rgblight_config_t rgblight_config;
+extern keymap_config_t keymap_config;
+
+#define _PS 0 // This is the Photoshop Layer
+#define _AI 1 // This is the Illustrator Layer
+#define _PR 2 // This is the Premier Layer
+#define _XD 3 // This is the Experience Design Layer
+
+enum custom_keycodes {
+ PS = SAFE_RANGE,
+ AI,
+ PR,
+ MACRO_0,
+};
+
+#define PS TO(0)
+#define AI TO(1)
+#define PR TO(2)
+#define XD TO(3)
+
+// Mix of Photoshop, Illustrator, Premiere, and Experience Design shortcuts.
+#define SAVE LCTL(KC_S)
+#define OPEN LCTL(KC_O)
+#define COPY LCTL(KC_C)
+#define PAST LCTL(KC_V)
+#define CUNDO LCTL(LALT(KC_Z))
+#define INVERT LCTL(LSFT(KC_I))
+#define NLAYER LSFT(LCTL(KC_N))
+#define UNDO LCTL(KC_Z)
+#define TRANS LCTL(KC_T)
+#define ALIGNL LCTL(LSFT(KC_L))
+#define ALIGNC LCTL(LSFT(KC_C))
+#define ALIGNR LCTL(LSFT(KC_R))
+#define BRINGF LCTL(KC_RBRC)
+#define BRINGB LCTL(KC_LBRC)
+
+// Illustrator layer shortcuts.
+#define SHAPE LSFT(KC_M)
+#define RULER LCTL(LALT(KC_R))
+
+// Premiere layer shortcuts.
+#define REDO LCTL(LSFT(KC_Z))
+#define EXPORT LCTL(KC_M)
+#define IMPORT LCTL(KC_I)
+#define PCOPY LCTL(KC_V)
+#define PPASTE LCTL(LSFT(KC_V))
+
+// Experience Design layer shortcuts. (can be used with others too.)
+#define NEW LCTL(KC_N)
+#define LOCK LCTL(KC_L)
+#define SYMB LCTL(KC_K)
+#define HIDE LCTL(KC_SCLN)
+#define REPEAT LCTL(KC_R)
+#define MASK LCTL(LSFT(KC_M))
+#define GROUP LCTL(KC_G)
+#define UNGRP LCTL(LSFT(KC_G))
+#define VIEW LCTL(KC_TAB)
+#define HORZ LSFT(KC_C)
+#define VERT LSFT(KC_M)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ // Photoshop layer
+ [_PS] = LAYOUT_ortho_3x10(
+ SAVE, KC_W, KC_E, KC_T, KC_U, KC_I, KC_P, INVERT, CUNDO, NLAYER,
+ UNDO, KC_H, KC_L, TRANS, ALIGNL, ALIGNC, ALIGNR, BRINGB, BRINGF, OPEN,
+ KC_LSFT, COPY, PAST, KC_Z, KC_C, KC_V, KC_B, KC_LBRC, KC_RBRC, AI
+ ),
+
+ // Illustrator layer
+ [_AI] = LAYOUT_ortho_3x10(
+ _______, MACRO_0, RULER, _______, KC_G, _______, _______, KC_Q, KC_MINS, KC_PLUS,
+ _______, _______, _______, KC_E, _______, _______, _______, SHAPE, KC_O, OPEN,
+ _______, _______, _______, _______, _______, _______, _______, KC_M, KC_SLSH, PR
+ ),
+
+ // Premiere layer
+ [_PR] = LAYOUT_ortho_3x10(
+ _______, KC_Q, KC_W, KC_I, KC_O, KC_P, IMPORT, EXPORT, KC_MINS, KC_EQL,
+ _______, REDO, KC_D, KC_F, KC_H, KC_M, KC_ENT, KC_LBRC, KC_RBRC, OPEN,
+ _______, PCOPY, PPASTE, KC_SPC, KC_Z, KC_C, KC_V, KC_LEFT, KC_RIGHT, XD
+ ),
+
+ // Experience Design layer
+ [_XD] = LAYOUT_ortho_3x10(
+ _______, KC_E, KC_R, KC_T, KC_P, KC_A, KC_L, KC_V, KC_DEL, NEW,
+ _______, REDO, GROUP, UNGRP, VIEW, HORZ, VERT, KC_Z, KC_ENT, OPEN,
+ _______, KC_LCTL, COPY, PAST, SYMB, LOCK, MASK, HIDE, REPEAT, PS
+ ),
+
+};
+
+void persistent_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+void matrix_init_user(void) {
+ rgblight_enable();
+}
+
+void matrix_scan_user(void) {
+ #ifdef RGBLIGHT_ENABLE
+
+ static uint8_t old_layer = 255;
+ uint8_t new_layer = biton32(layer_state);
+
+ // Color of the Icons.
+ if (old_layer != new_layer) {
+ switch (new_layer) {
+ case _PS:
+ // #31C5F0
+ rgblight_setrgb(49, 197, 240);
+ break;
+ case _AI:
+ // #FF8011
+ rgblight_setrgb(255, 128, 17);
+ break;
+ case _PR:
+ // #E788FF
+ rgblight_setrgb(231, 136, 255);
+ break;
+ case _XD:
+ // #FF2BC2
+ rgblight_setrgb(255, 43, 194);
+ break;
+ }
+ old_layer = new_layer;
+ }
+ #endif
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ switch(keycode) {
+ case MACRO_0:
+ // Save for Web Macro.
+ SEND_STRING(SS_LSFT(SS_LALT(SS_LCTRL("s"))));
+ return false;
+ }
+ }
+ return true;
+};
diff --git a/keyboards/40percentclub/gherkin/keymaps/itsaferbie/rules.mk b/keyboards/40percentclub/gherkin/keymaps/itsaferbie/rules.mk
new file mode 100644
index 0000000000..b359ca2874
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/itsaferbie/rules.mk
@@ -0,0 +1,3 @@
+BACKLIGHT_ENABLE = yes
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = yes
diff --git a/keyboards/40percentclub/gherkin/keymaps/mjt/config.h b/keyboards/40percentclub/gherkin/keymaps/mjt/config.h
new file mode 100644
index 0000000000..9fe94bcd21
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/mjt/config.h
@@ -0,0 +1,7 @@
+#pragma once
+
+/* USB Device descriptor parameter */
+#undef MANUFACTURER
+#undef DESCRIPTION
+#define MANUFACTURER Some Guy
+#define DESCRIPTION 30 percent disaster
diff --git a/keyboards/40percentclub/gherkin/keymaps/mjt/keymap.c b/keyboards/40percentclub/gherkin/keymaps/mjt/keymap.c
new file mode 100644
index 0000000000..2fd4c2a461
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/mjt/keymap.c
@@ -0,0 +1,250 @@
+#include QMK_KEYBOARD_H
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+#endif
+
+extern keymap_config_t keymap_config;
+
+//Tap Dance Declarations
+enum {
+ TD_Z_LCTL = 0,
+ TD_X_LGUI = 1,
+ TD_C_LALT = 2,
+ TD_A_TAB = 3,
+ TD_Q_ESC = 4,
+};
+
+//Friendly Layer Names
+enum gherkin_layers {
+ _QWERTY,
+ _SONGS,
+ _NUMBERS,
+ _SYMBOLS,
+ _PLOVER,
+ _ADJUST
+};
+
+// custom keycodes
+enum gherkin_keycodes {
+ QWERTY = SAFE_RANGE,
+ NUMBERS,
+ SYMBOLS,
+ SONGS,
+ PLOVER,
+ BACKLIT,
+ MACSLEEP,
+ EXT_PLV
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT_ortho_3x10(
+ TD(TD_Q_ESC), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ TD(TD_A_TAB), LT(_SYMBOLS,KC_S), KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(_ADJUST,KC_SPC),
+ TD(TD_Z_LCTL), TD(TD_X_LGUI), TD(TD_C_LALT), KC_V, KC_B, LT(_NUMBERS, KC_N), KC_M, KC_COMM, KC_DOT, SFT_T(KC_ENT)
+ ),
+ [_NUMBERS] = LAYOUT_ortho_3x10(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_HOME, KC_PGDN, KC_PGUP, KC_END ,
+ KC_F7, KC_F8, KC_F9, KC_F10, LT(_ADJUST,KC_F11), _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT
+ ),
+ [_SYMBOLS] = LAYOUT_ortho_3x10(
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN,
+ KC_GRV, _______, XXXXXXX, KC_LBRC, KC_RBRC, KC_BSLS, KC_MINS, KC_EQL , KC_SCLN, KC_QUOT,
+ KC_TILD, MO(_ADJUST), XXXXXXX, KC_LCBR, KC_RCBR, KC_PIPE, KC_UNDS, KC_PLUS, S(KC_SCLN), S(KC_QUOT)
+ ),
+ [_PLOVER] = LAYOUT_ortho_3x10(
+ KC_Q, KC_W, KC_E, KC_R, KC_1, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ EXT_PLV, XXXXXXX, KC_C, KC_V, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX
+ ),
+ [_ADJUST] = LAYOUT_ortho_3x10(
+ RESET, _______, _______, _______, _______, QWERTY, NUMBERS, SYMBOLS, PLOVER, SONGS,
+ MUV_DE, MUV_IN, MU_ON, MU_OFF, _______, _______, _______, _______, MACSLEEP, _______,
+ BACKLIT, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_startup[][2] = SONG(STARTUP_SOUND);
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_dvorak[][2] = SONG(DVORAK_SOUND);
+float tone_colemak[][2] = SONG(COLEMAK_SOUND);
+float tone_plover[][2] = SONG(PLOVER_SOUND);
+float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
+float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
+
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_qwerty);
+ #endif
+ persistant_default_layer_set(1UL<<_QWERTY);
+ }
+ return false;
+ break;
+ case NUMBERS:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_dvorak);
+ #endif
+ persistant_default_layer_set(1UL<<_NUMBERS);
+ }
+ return false;
+ break;
+ case SYMBOLS:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_colemak);
+ #endif
+ persistant_default_layer_set(1UL<<_SYMBOLS);
+ }
+ return false;
+ break;
+ case PLOVER:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ stop_all_notes();
+ PLAY_SONG(tone_plover);
+ #endif
+ layer_off(_NUMBERS);
+ layer_off(_SYMBOLS);
+ layer_off(_ADJUST);
+ layer_on(_PLOVER);
+ if (!eeconfig_is_enabled()) {
+ eeconfig_init();
+ }
+ keymap_config.raw = eeconfig_read_keymap();
+ keymap_config.nkro = 1;
+ eeconfig_update_keymap(keymap_config.raw);
+ }
+ return false;
+ break;
+ case EXT_PLV:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_plover_gb);
+ #endif
+ layer_off(_PLOVER);
+ }
+ return false;
+ break;
+ case MACSLEEP:
+ if (record->event.pressed) {
+ // ACTION_MODS_KEY(MOD_LCTL | MOD_LSFT, KC_POWER);
+ register_code(KC_RSFT);
+ register_code(KC_RCTL);
+ register_code(KC_POWER);
+ unregister_code(KC_POWER);
+ unregister_code(KC_RCTL);
+ unregister_code(KC_RSFT);
+ }
+ return false;
+ break;
+ case BACKLIT:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+ #ifdef AUDIO_ENABLE
+ startup_user();
+ #endif
+}
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+ _delay_ms(20); // gets rid of tick
+ PLAY_SONG(tone_startup);
+}
+
+void shutdown_user()
+{
+ PLAY_SONG(tone_goodbye);
+ _delay_ms(150);
+ stop_all_notes();
+}
+
+void music_on_user(void)
+{
+ music_scale_user();
+}
+
+void music_scale_user(void)
+{
+ PLAY_SONG(music_scale);
+}
+
+#endif
+
+void matrix_scan_user(void) {
+}
+
+//Tap Dance Definitions
+qk_tap_dance_action_t tap_dance_actions[] = {
+ //Tap once for Esc, twice for Caps Lock
+ [TD_Z_LCTL] = ACTION_TAP_DANCE_DOUBLE(KC_Z, KC_LCTL),
+ [TD_X_LGUI] = ACTION_TAP_DANCE_DOUBLE(KC_X, KC_LGUI),
+ [TD_C_LALT] = ACTION_TAP_DANCE_DOUBLE(KC_C, KC_LALT),
+ [TD_A_TAB] = ACTION_TAP_DANCE_DOUBLE(KC_A, KC_TAB),
+ [TD_Q_ESC] = ACTION_TAP_DANCE_DOUBLE(KC_Q, KC_ESC)
+};
+
+// don't know what this is doing...
+/*
+void led_set_user(uint8_t usb_led) {
+
+ if (usb_led & (1 << USB_LED_NUM_LOCK)) {
+ DDRD |= (1 << 5); PORTD &= ~(1 << 5);
+ } else {
+ DDRD &= ~(1 << 5); PORTD &= ~(1 << 5);
+ }
+
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+ DDRB |= (1 << 0); PORTB &= ~(1 << 0);
+ } else {
+ DDRB &= ~(1 << 0); PORTB &= ~(1 << 0);
+ }
+
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_COMPOSE)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_KANA)) {
+
+ } else {
+
+ }
+
+}
+*/
diff --git a/keyboards/40percentclub/gherkin/keymaps/mjt/rules.mk b/keyboards/40percentclub/gherkin/keymaps/mjt/rules.mk
new file mode 100644
index 0000000000..3a35ae3b30
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/mjt/rules.mk
@@ -0,0 +1,2 @@
+AUDIO_ENABLE = yes # Audio output on port C6
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/40percentclub/gherkin/keymaps/steno/config.h b/keyboards/40percentclub/gherkin/keymaps/steno/config.h
new file mode 100644
index 0000000000..20a8f7844a
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/steno/config.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#define NO_ACTION_LAYER
+#define NO_ACTION_TAPPING
+#define NO_ACTION_ONESHOT
+#define NO_ACTION_MACRO
+#define NO_ACTION_FUNCTION
diff --git a/keyboards/40percentclub/gherkin/keymaps/steno/keymap.c b/keyboards/40percentclub/gherkin/keymaps/steno/keymap.c
new file mode 100644
index 0000000000..c7ee63d126
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/steno/keymap.c
@@ -0,0 +1,13 @@
+#include QMK_KEYBOARD_H
+#include "keymap_steno.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ LAYOUT_ortho_3x10(
+ STN_S1, STN_TL, STN_PL, STN_HL, STN_ST1, STN_FR, STN_PR, STN_LR, STN_TR, STN_DR ,
+ STN_S2, STN_KL, STN_WL, STN_RL, STN_ST2, STN_RR, STN_BR, STN_GR, STN_SR, STN_ZR ,
+ STN_NUM, STN_NUM, STN_A, STN_O, STN_NUM, STN_E, STN_U, STN_NUM, STN_NUM, STN_NUM),
+};
+
+void matrix_init_user() {
+ steno_set_mode(STENO_MODE_GEMINI); // or STENO_MODE_BOLT
+} \ No newline at end of file
diff --git a/keyboards/40percentclub/gherkin/keymaps/steno/readme.md b/keyboards/40percentclub/gherkin/keymaps/steno/readme.md
new file mode 100644
index 0000000000..6536ed7aba
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/steno/readme.md
@@ -0,0 +1,9 @@
+# Gherkin Steno
+
+This is a stenography-only keymap. It boots by default into GeminiPR mode. All the excess stuff is stripped away (I'd remove normal keyboard support if I could).
+
+> Note: The number bar has been moved to the bottom row in all the left-over spaces.
+
+ | S | T | P | H | * | F | P | L | T | D |
+ | S | K | W | R | * | R | B | G | S | Z |
+ | # | # | A | O | # | E | U | # | # | # |
diff --git a/keyboards/40percentclub/gherkin/keymaps/steno/rules.mk b/keyboards/40percentclub/gherkin/keymaps/steno/rules.mk
new file mode 100644
index 0000000000..a6e76f7cf9
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/steno/rules.mk
@@ -0,0 +1,12 @@
+STENO_ENABLE = yes # Additional protocols for Stenography(+1700), requires VIRTSER
+
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+NKRO_ENABLE = no # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = no
diff --git a/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/config.h b/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/config.h
new file mode 100644
index 0000000000..271f48d001
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/config.h
@@ -0,0 +1,3 @@
+#pragma once
+
+// place overrides here
diff --git a/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/keymap.c b/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/keymap.c
new file mode 100644
index 0000000000..ca3da579a1
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/keymap.c
@@ -0,0 +1,56 @@
+#include QMK_KEYBOARD_H
+#include "keymap_steno.h"
+
+#define ST_BOLT QK_STENO_BOLT
+#define ST_GEM QK_STENO_GEMINI
+
+enum keyboard_layers {
+ _QWERTY,
+ _RAISE,
+ _LOWER,
+ _PLOVER,
+ _ADJUST
+};
+
+#define ADJ_Z LT(_ADJUST, KC_Z)
+#define RS_BSPC LT(_RAISE, KC_BSPC)
+#define LW_SPC LT(_LOWER, KC_SPC)
+#define MO_ADJ MO(_ADJUST)
+#define TG_PLV TG(_PLOVER)
+#define OS_LCTL OSM(MOD_LCTL)
+#define OS_LALT OSM(MOD_LALT)
+#define OS_LGUI OSM(MOD_LGUI)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT_ortho_3x10(
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_RSFT,
+ ADJ_Z, KC_X, KC_C, KC_V, RS_BSPC, LW_SPC, KC_B, KC_N, KC_M, KC_ENT
+ ),
+
+ [_RAISE] = LAYOUT_ortho_3x10(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_7, KC_9, KC_0,
+ KC_ESC, KC_MINS, KC_EQL, _______, KC_LBRC, KC_RBRC, _______, KC_QUOT, KC_SCLN, _______,
+ OS_LCTL, OS_LGUI, OS_LALT, KC_GRV, _______, KC_TAB, KC_BSLS, KC_COMM, KC_DOT, KC_SLSH
+ ),
+
+ [_LOWER] = LAYOUT_ortho_3x10(
+ KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, KC_PGUP, KC_HOME, KC_UP, KC_END, XXXXXXX,
+ KC_F5, KC_F6, KC_F7, KC_F8, XXXXXXX, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, _______,
+ KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, _______, OS_LALT, OS_LGUI, OS_LCTL, KC_CAPS
+ ),
+
+ [_PLOVER] = LAYOUT_ortho_3x10(
+ STN_S1, STN_TL, STN_PL, STN_HL, STN_ST1, STN_FR, STN_PR, STN_LR, STN_TR, STN_DR,
+ STN_S2, STN_KL, STN_WL, STN_RL, STN_ST2, STN_RR, STN_BR, STN_GR, STN_SR, STN_ZR,
+ MO_ADJ, STN_NUM, STN_A, STN_O, STN_NUM, STN_E, STN_U, STN_NUM, STN_NUM, XXXXXXX
+ ),
+
+ [_ADJUST] = LAYOUT_ortho_3x10(
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, ST_BOLT, ST_GEM, TG_PLV,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET
+ ),
+
+};
diff --git a/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/rules.mk b/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/rules.mk
new file mode 100644
index 0000000000..a64c606ae7
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/rules.mk
@@ -0,0 +1,2 @@
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+STENO_ENABLE = yes # Additional protocols for Stenography(+1700), requires VIRTSER
diff --git a/keyboards/40percentclub/gherkin/readme.md b/keyboards/40percentclub/gherkin/readme.md
new file mode 100644
index 0000000000..a6680d7205
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/readme.md
@@ -0,0 +1,21 @@
+# Gherkin
+
+![Gherkin](https://4.bp.blogspot.com/-sQ18-lNZXOc/WCzlTde-4PI/AAAAAAAB_JQ/qQrehAMG6DMKf3i4oj4mkmLGOfTUvb3KgCLcB/s640/IMG_20161116_122926.jpg)
+===
+
+A 30 key keyboard.
+
+* [The original TMK firmware](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/gherkin)
+
+Keyboard Maintainer: QMK Community
+Hardware Supported: Gherkin PCB
+Hardware Availability: [Gherkin project on 40% Keyboards](http://www.40percent.club/2016/11/gherkin.html)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make 40percentclub/gherkin:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+First pass at adding support for the gherkin keyboard. Compiles but completely
+untested. Intended to kick-start development.
diff --git a/keyboards/40percentclub/gherkin/rules.mk b/keyboards/40percentclub/gherkin/rules.mk
new file mode 100644
index 0000000000..1e0b346417
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/rules.mk
@@ -0,0 +1,74 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# atmega32a bootloadHID
+BOOTLOADER = caterina
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = no
+
+LAYOUTS = ortho_3x10