diff options
| author | mmccoyd <mmccoyd@users.noreply.github.com> | 2022-01-08 17:29:51 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-01-08 17:29:51 -0800 |
| commit | 4c1fd0897cfec6d1b09b651b372b2d5bbc03de25 (patch) | |
| tree | 3734f8c9052e9be96042f340f59b68e4cc98e35f | |
| parent | fc8346e0b3d601aadf37fd7a1e708910cee22f75 (diff) | |
| download | qmk_firmware-4c1fd0897cfec6d1b09b651b372b2d5bbc03de25.tar.gz qmk_firmware-4c1fd0897cfec6d1b09b651b372b2d5bbc03de25.zip | |
[Keyboard] Add Hillside support (#15399)
* [Keyboard] Add Hillside
* Remove no longer used define, rename README
* Rename to readme.md
* Readme: Improve clarity, fix grammar and typos
* Readme: Remove extra line pointing to QMK docs
* Readme: Join consecutive source lines in .md
* Readme: split lines, post spelling fix
* Keymap: fix key label in readme
| -rw-r--r-- | keyboards/handwired/hillside/0_1/0_1.c | 4 | ||||
| -rw-r--r-- | keyboards/handwired/hillside/0_1/0_1.h | 34 | ||||
| -rw-r--r-- | keyboards/handwired/hillside/0_1/config.h | 35 | ||||
| -rw-r--r-- | keyboards/handwired/hillside/0_1/info.json | 13 | ||||
| -rw-r--r-- | keyboards/handwired/hillside/0_1/rules.mk | 8 | ||||
| -rw-r--r-- | keyboards/handwired/hillside/info.json | 97 | ||||
| -rw-r--r-- | keyboards/handwired/hillside/keymaps/default/keymap.json | 102 | ||||
| -rw-r--r-- | keyboards/handwired/hillside/keymaps/default/readme.md | 216 | ||||
| -rwxr-xr-x | keyboards/handwired/hillside/keymaps/json2hill.py | 136 | ||||
| -rw-r--r-- | keyboards/handwired/hillside/keymaps/via/keymap.json | 101 | ||||
| -rw-r--r-- | keyboards/handwired/hillside/readme.md | 29 |
11 files changed, 775 insertions, 0 deletions
diff --git a/keyboards/handwired/hillside/0_1/0_1.c b/keyboards/handwired/hillside/0_1/0_1.c new file mode 100644 index 000000000..ee096f18a --- /dev/null +++ b/keyboards/handwired/hillside/0_1/0_1.c | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | // Copyright 2021 Michael McCoyd (@mmccoyd) | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | #include "0_1.h" | ||
diff --git a/keyboards/handwired/hillside/0_1/0_1.h b/keyboards/handwired/hillside/0_1/0_1.h new file mode 100644 index 000000000..0aeefdf63 --- /dev/null +++ b/keyboards/handwired/hillside/0_1/0_1.h | |||
| @@ -0,0 +1,34 @@ | |||
| 1 | // Copyright 2021 Michael McCoyd (@mmccoyd) | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | #pragma once | ||
| 5 | |||
| 6 | #include "quantum.h" | ||
| 7 | |||
| 8 | /* This is a shortcut to help you visually see your layout. | ||
| 9 | * | ||
| 10 | * The first section contains all of the arguments representing the physical | ||
| 11 | * layout of the board and position of the keys. | ||
| 12 | * | ||
| 13 | * The second converts those identifiers into a two-dimensional array which | ||
| 14 | * represents the switch matrix. | ||
| 15 | */ | ||
| 16 | |||
| 17 | // clang-format off | ||
| 18 | #define LAYOUT( \ | ||
| 19 | L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \ | ||
| 20 | L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \ | ||
| 21 | L20, L21, L22, L23, L24, L25, LT4, RT4, R20, R21, R22, R23, R24, R25, \ | ||
| 22 | L30, LT0, LT1, LT2, LT3, RT3, RT2, RT1, RT0, R30 \ | ||
| 23 | ) \ | ||
| 24 | { \ | ||
| 25 | { L00, L01, L02, L03, L04, L05 }, \ | ||
| 26 | { L10, L11, L12, L13, L14, L15 }, \ | ||
| 27 | { L20, L21, L22, L23, L24, L25 }, \ | ||
| 28 | { L30, LT0, LT1, LT2, LT3, LT4 }, \ | ||
| 29 | { R05, R04, R03, R02, R01, R00 }, \ | ||
| 30 | { R15, R14, R13, R12, R11, R10 }, \ | ||
| 31 | { R25, R24, R23, R22, R21, R20 }, \ | ||
| 32 | { R30, RT0, RT1, RT2, RT3, RT4 } \ | ||
| 33 | } | ||
| 34 | // clang-format on | ||
diff --git a/keyboards/handwired/hillside/0_1/config.h b/keyboards/handwired/hillside/0_1/config.h new file mode 100644 index 000000000..c83b23d0e --- /dev/null +++ b/keyboards/handwired/hillside/0_1/config.h | |||
| @@ -0,0 +1,35 @@ | |||
| 1 | // Copyright 2021 Michael McCoyd (@mmccoyd) | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | #pragma once | ||
| 5 | |||
| 6 | #include "config_common.h" | ||
| 7 | |||
| 8 | /* key matrix size */ | ||
| 9 | // Rows are doubled-up | ||
| 10 | #define MATRIX_ROWS 8 | ||
| 11 | #define MATRIX_COLS 6 | ||
| 12 | |||
| 13 | /* Encoder */ | ||
| 14 | #define ENCODERS_PAD_A { F5 } | ||
| 15 | #define ENCODERS_PAD_B { F4 } | ||
| 16 | #define ENCODERS_PAD_A_RIGHT { F4 } | ||
| 17 | #define ENCODERS_PAD_B_RIGHT { F5 } | ||
| 18 | |||
| 19 | #define RGBLIGHT_SLEEP | ||
| 20 | |||
| 21 | /* Haptic hardware */ | ||
| 22 | // The Pimoroni is the likely hardware, for which these settings work | ||
| 23 | #define FB_ERM_LRA 1 | ||
| 24 | #define FB_BRAKEFACTOR 3 /* 1x:0, 2x:1, 3x:2, 4x:3, 6:4, 8:5, 16:6, Disable:7 */ | ||
| 25 | #define FB_LOOPGAIN 1 /* For Low:0, Medium:1, High:2, Very High:3 */ | ||
| 26 | /* Please refer to your datasheet for optimal setting for your specific motor.*/ | ||
| 27 | #define RATED_VOLTAGE 2 | ||
| 28 | #define V_PEAK 2.8 | ||
| 29 | #define V_RMS 2.0 | ||
| 30 | #define F_LRA 205 /* resonance freq */ | ||
| 31 | |||
| 32 | /* Haptic waveforms */ | ||
| 33 | // Two mild waveforms | ||
| 34 | #define DRV_GREETING alert_750ms | ||
| 35 | #define DRV_MODE_DEFAULT sharp_tick3_60 | ||
diff --git a/keyboards/handwired/hillside/0_1/info.json b/keyboards/handwired/hillside/0_1/info.json new file mode 100644 index 000000000..e45e4571f --- /dev/null +++ b/keyboards/handwired/hillside/0_1/info.json | |||
| @@ -0,0 +1,13 @@ | |||
| 1 | { | ||
| 2 | "matrix_pins": { | ||
| 3 | "rows": ["D7", "E6", "B4", "B5"], | ||
| 4 | "cols": ["F6", "F7", "B1", "B3", "B2", "B6"], | ||
| 5 | }, | ||
| 6 | "diode_direction": "COL2ROW", | ||
| 7 | |||
| 8 | "usb": { | ||
| 9 | "vid": "0xFEED", | ||
| 10 | "pid": "0x67C0", | ||
| 11 | "device_ver": "0x0001" | ||
| 12 | }, | ||
| 13 | } | ||
diff --git a/keyboards/handwired/hillside/0_1/rules.mk b/keyboards/handwired/hillside/0_1/rules.mk new file mode 100644 index 000000000..2501147ea --- /dev/null +++ b/keyboards/handwired/hillside/0_1/rules.mk | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | SPLIT_KEYBOARD = yes # Use shared split_common code | ||
| 2 | LTO_ENABLE = yes # Use link time optimization for smaller firmware | ||
| 3 | |||
| 4 | # If you add a haptic board, | ||
| 5 | # enable it and set its driver here or in your keymap folder | ||
| 6 | # The Pimoroni board's driver is DRV2605L | ||
| 7 | # HAPTIC_ENABLE = yes # Enable haptic driver | ||
| 8 | # HAPTIC_DRIVER = DRV2605L | ||
diff --git a/keyboards/handwired/hillside/info.json b/keyboards/handwired/hillside/info.json new file mode 100644 index 000000000..7a29df1c6 --- /dev/null +++ b/keyboards/handwired/hillside/info.json | |||
| @@ -0,0 +1,97 @@ | |||
| 1 | { | ||
| 2 | "manufacturer": "mmccoyd", | ||
| 3 | "maintainer": "mmccoyd", | ||
| 4 | |||
| 5 | "keyboard_name": "Hillside", | ||
| 6 | "url": "http://github.com/mmccoyd/hillside/", | ||
| 7 | |||
| 8 | "tags": ["split", "column stagger", "choc v1", "choc spaced" ], | ||
| 9 | |||
| 10 | "processor": "atmega32u4", | ||
| 11 | |||
| 12 | "features": { | ||
| 13 | "encoder": true, | ||
| 14 | "extrakey": true, | ||
| 15 | "rgblight": true | ||
| 16 | }, | ||
| 17 | "split": { | ||
| 18 | "soft_serial_pin": "D2", | ||
| 19 | "main": "left" | ||
| 20 | }, | ||
| 21 | |||
| 22 | "rgblight": { | ||
| 23 | "led_count": 5, | ||
| 24 | "pin": "D3", | ||
| 25 | "split": true, | ||
| 26 | "hue_steps": 8, | ||
| 27 | "saturation_steps": 8, | ||
| 28 | "brightness_steps": 8 | ||
| 29 | }, | ||
| 30 | |||
| 31 | "layouts": { | ||
| 32 | "LAYOUT": { | ||
| 33 | "layout": [ | ||
| 34 | |||
| 35 | {"label": "Tab", "x": 0, "y": 0.93}, | ||
| 36 | {"label": "Q", "x": 1, "y": 0.93}, | ||
| 37 | {"label": "W", "x": 2, "y": 0.31}, | ||
| 38 | {"label": "E", "x": 3, "y": 0}, | ||
| 39 | {"label": "R", "x": 4, "y": 0.28}, | ||
| 40 | {"label": "T", "x": 5, "y": 0.42}, | ||
| 41 | |||
| 42 | {"label": "Y", "x": 9.5, "y": 0.42}, | ||
| 43 | {"label": "U", "x": 10.5, "y": 0.28}, | ||
| 44 | {"label": "I", "x": 11.5, "y": 0}, | ||
| 45 | {"label": "O", "x": 12.5, "y": 0.31}, | ||
| 46 | {"label": "P", "x": 13.5, "y": 0.93}, | ||
| 47 | {"label": "Backspace", "x": 14.5, "y": 0.93}, | ||
| 48 | |||
| 49 | |||
| 50 | {"label": "Ctrl", "x": 0, "y": 1.93}, | ||
| 51 | {"label": "A", "x": 1, "y": 1.93}, | ||
| 52 | {"label": "S", "x": 2, "y": 1.31}, | ||
| 53 | {"label": "D", "x": 3, "y": 1}, | ||
| 54 | {"label": "F", "x": 4, "y": 1.28}, | ||
| 55 | {"label": "G", "x": 5, "y": 1.42}, | ||
| 56 | |||
| 57 | {"label": "H", "x": 9.5, "y": 1.42}, | ||
| 58 | {"label": "J", "x": 10.5, "y": 1.28}, | ||
| 59 | {"label": "K", "x": 11.5, "y": 1}, | ||
| 60 | {"label": "L", "x": 12.5, "y": 1.31}, | ||
| 61 | {"label": ";", "x": 13.5, "y": 1.93}, | ||
| 62 | {"label": "'", "x": 14.5, "y": 1.93}, | ||
| 63 | |||
| 64 | |||
| 65 | {"label": "Shift", "x": 0, "y": 2.93}, | ||
| 66 | {"label": "Z", "x": 1, "y": 2.93}, | ||
| 67 | {"label": "X", "x": 2, "y": 2.31}, | ||
| 68 | {"label": "C", "x": 3, "y": 2}, | ||
| 69 | {"label": "V", "x": 4, "y": 2.28}, | ||
| 70 | {"label": "B", "x": 5, "y": 2.42}, | ||
| 71 | {"label": "`", "x": 6, "y": 2.78}, | ||
| 72 | |||
| 73 | {"label": "Esc", "x": 8.5, "y": 2.78}, | ||
| 74 | {"label": "N", "x": 9.5, "y": 2.42}, | ||
| 75 | {"label": "M", "x": 10.5, "y": 2.28}, | ||
| 76 | {"label": ",", "x": 11.5, "y": 2}, | ||
| 77 | {"label": ".", "x": 12.5, "y": 2.31}, | ||
| 78 | {"label": "/", "x": 13.5, "y": 2.93}, | ||
| 79 | {"label": "Shift", "x": 14.5, "y": 2.93}, | ||
| 80 | |||
| 81 | |||
| 82 | {"label": "Enter", "x": 2, "y": 3.31}, | ||
| 83 | {"label": "Gui", "x": 3.5, "y": 3.28}, | ||
| 84 | {"label": "Alt", "x": 4.5, "y": 3.42}, | ||
| 85 | {"label": "Num", "x": 5.5, "y": 3.78}, | ||
| 86 | {"label": "Nav", "x": 6.5, "y": 4.14}, | ||
| 87 | |||
| 88 | |||
| 89 | {"label": "Sym", "x": 8, "y": 4.14}, | ||
| 90 | {"label": "Space", "x": 9, "y": 3.78}, | ||
| 91 | {"label": "Alt", "x": 10, "y": 3.42}, | ||
| 92 | {"label": "Gui", "x": 11, "y": 3.28}, | ||
| 93 | {"label": "App", "x": 12.5, "y": 3.31} | ||
| 94 | ] | ||
| 95 | } | ||
| 96 | } | ||
| 97 | } | ||
diff --git a/keyboards/handwired/hillside/keymaps/default/keymap.json b/keyboards/handwired/hillside/keymaps/default/keymap.json new file mode 100644 index 000000000..f5871b073 --- /dev/null +++ b/keyboards/handwired/hillside/keymaps/default/keymap.json | |||
| @@ -0,0 +1,102 @@ | |||
| 1 | { | ||
| 2 | "version": 1, | ||
| 3 | "notes": "", | ||
| 4 | "documentation": "\"This file is a QMK Configurator export. You can import this at <https://config.qmk.fm>. It can also be used directly with QMK's source code.\n\nTo setup your QMK environment check out the tutorial: <https://docs.qmk.fm/#/newbs>\n\nYou can convert this file to a keymap.c using this command: `qmk json2c {keymap}`\n\nYou can compile this keymap using this command: `qmk compile {keymap}`\"\n", | ||
| 5 | "keyboard": "handwired/hillside/0_1", | ||
| 6 | "author": "@mmccoyd", | ||
| 7 | "keymap": "default", | ||
| 8 | "layout": "LAYOUT", | ||
| 9 | "layers": [ | ||
| 10 | ["KC_TAB" , "KC_Q" , "KC_W" , "KC_E" , "KC_R" , "KC_T", | ||
| 11 | "KC_Y" , "KC_U" , "KC_I" , "KC_O" , "KC_P" , "KC_BSPC", | ||
| 12 | |||
| 13 | "KC_LCTL", "KC_A" , "KC_S" , "KC_D" , "KC_F" , "KC_G", | ||
| 14 | "KC_H" , "KC_J" , "KC_K" , "KC_L" , "KC_SCLN" , "KC_QUOT", | ||
| 15 | |||
| 16 | "KC_LSFT", "KC_Z" , "KC_X" , "KC_C" , "KC_V" , "KC_B" , "KC_GRV", | ||
| 17 | "KC_ESC" , "KC_N" , "KC_M" , "KC_COMM" , "KC_DOT" , "KC_SLSH" , "KC_RSFT", | ||
| 18 | |||
| 19 | "KC_ENT" , "KC_LGUI" , "KC_LALT" , "MO(5)" , "MO(3)", | ||
| 20 | "MO(4)" , "KC_SPC" , "KC_LALT" , "KC_RGUI" , "KC_APP" | ||
| 21 | |||
| 22 | ], | ||
| 23 | ["KC_TAB" , "KC_QUOT" , "KC_COMM" , "KC_DOT" , "KC_P" , "KC_Y", | ||
| 24 | "KC_F" , "KC_G" , "KC_C" , "KC_R" , "KC_L" , "KC_BSPC", | ||
| 25 | |||
| 26 | "KC_LCTL", "KC_A" , "KC_O" , "KC_E" , "KC_U" , "KC_I", | ||
| 27 | "KC_D" , "KC_H" , "KC_T" , "KC_N" , "KC_S" , "KC_SLSH", | ||
| 28 | |||
| 29 | "KC_LSFT", "KC_SCLN" , "KC_Q" , "KC_J" , "KC_K" , "KC_X" , "KC_GRV", | ||
| 30 | "KC_ESC" , "KC_B" , "KC_M" , "KC_W" , "KC_V" , "KC_Z" , "KC_RSFT", | ||
| 31 | |||
| 32 | "KC_ENT" , "KC_LGUI" , "KC_LALT" , "MO(5)" , "MO(3)", | ||
| 33 | "MO(4)" , "KC_SPC" , "KC_LALT" , "KC_RGUI" , "KC_APP" | ||
| 34 | |||
| 35 | ], | ||
| 36 | ["KC_TAB" , "KC_Q" , "KC_W" , "KC_F" , "KC_P" , "KC_B", | ||
| 37 | "KC_J" , "KC_L" , "KC_U" , "KC_Y" , "KC_SCLN" , "KC_BSPC", | ||
| 38 | |||
| 39 | "KC_LCTL", "KC_A" , "KC_R" , "KC_S" , "KC_T" , "KC_G", | ||
| 40 | "KC_M" , "KC_N" , "KC_E" , "KC_I" , "KC_O" , "KC_QUOT", | ||
| 41 | |||
| 42 | "KC_LSFT", "KC_Z" , "KC_X" , "KC_C" , "KC_D" , "KC_V" , "KC_GRV", | ||
| 43 | "KC_ESC" , "KC_K" , "KC_H" , "KC_COMM" , "KC_DOT" , "KC_SLSH" , "KC_RSFT", | ||
| 44 | |||
| 45 | "KC_ENT" , "KC_LGUI" , "KC_LALT" , "MO(5)" , "MO(3)", | ||
| 46 | "MO(4)" , "KC_SPC" , "KC_LALT" , "KC_RGUI" , "KC_APP" | ||
| 47 | |||
| 48 | ], | ||
| 49 | ["KC_CAPS", "KC_INS" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_VOLU", | ||
| 50 | "KC_PGUP", "KC_HOME" , "KC_NO" , "KC_END" , "KC_NO" , "KC_DEL", | ||
| 51 | |||
| 52 | "KC_LCTL", "KC_LGUI" , "KC_LALT" , "KC_LCTL" , "KC_LSFT" , "KC_VOLD", | ||
| 53 | "KC_PGDN", "KC_LEFT" , "KC_UP" , "KC_RGHT" , "KC_NO" , "KC_RCTL", | ||
| 54 | |||
| 55 | "KC_LSFT", "LCTL(KC_Z)", "LCTL(KC_X)" , "LCTL(KC_C)", "LCTL(KC_V)" , "LCTL(KC_Y)", "KC_MUTE", | ||
| 56 | "KC_ESC" , "KC_NO" , "LCTL(KC_LEFT)", "KC_DOWN" , "LCTL(KC_RGHT)", "KC_RALT" , "KC_RSFT", | ||
| 57 | |||
| 58 | "KC_TRNS", "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS", | ||
| 59 | "MO(6)" , "KC_BSPC" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS" | ||
| 60 | |||
| 61 | ], | ||
| 62 | ["KC_F12" , "KC_EXLM" , "KC_AT" , "KC_HASH" , "KC_DLR" , "KC_PERC", | ||
| 63 | "KC_CIRC", "KC_AMPR" , "KC_ASTR" , "KC_LPRN" , "KC_RPRN" , "KC_BSPC", | ||
| 64 | |||
| 65 | "KC_LCTL", "KC_F1" , "KC_F2" , "KC_F3" , "KC_F4" , "KC_F5", | ||
| 66 | "KC_PIPE", "KC_LSFT" , "KC_LCTL" , "KC_LALT" , "KC_LGUI" , "KC_RCTL", | ||
| 67 | |||
| 68 | "KC_LSFT", "KC_F6" , "KC_F7" , "KC_F8" , "KC_F9" , "KC_F10" , "KC_F11", | ||
| 69 | "KC_ESC" , "KC_BSLS" , "KC_LBRC" , "KC_RBRC" , "KC_LCBR" , "KC_RCBR" , "KC_RSFT", | ||
| 70 | |||
| 71 | "KC_TRNS", "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "MO(6)", | ||
| 72 | "KC_TRNS", "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS" | ||
| 73 | |||
| 74 | ], | ||
| 75 | ["KC_NO" , "KC_MINS" , "KC_PLUS" , "KC_EQL" , "KC_SLSH" , "KC_ASTR", | ||
| 76 | "KC_COMM", "KC_7" , "KC_8" , "KC_9" , "KC_NO" , "KC_TRNS", | ||
| 77 | |||
| 78 | "KC_TRNS", "KC_LGUI" , "KC_LALT" , "KC_LCTL" , "KC_LSFT" , "KC_NO", | ||
| 79 | "KC_0" , "KC_1" , "KC_2" , "KC_3" , "KC_UNDS" , "KC_RCTL", | ||
| 80 | |||
| 81 | "KC_TRNS", "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO", | ||
| 82 | "KC_NO" , "KC_DOT" , "KC_4" , "KC_5" , "KC_6" , "KC_NO" , "KC_TRNS", | ||
| 83 | |||
| 84 | "KC_TRNS", "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_NO", | ||
| 85 | "KC_NO" , "KC_BSPC" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS" | ||
| 86 | |||
| 87 | ], | ||
| 88 | ["KC_NO" , "DF(0)" , "DF(1)" , "DF(2)" , "AG_SWAP" , "AG_NORM", | ||
| 89 | "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO", | ||
| 90 | |||
| 91 | "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO", | ||
| 92 | "RGB_MOD", "RGB_VAI" , "RGB_HUI" , "RGB_SAI" , "KC_NO" , "KC_NO", | ||
| 93 | |||
| 94 | "RESET" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO", | ||
| 95 | "RGB_TOG", "RGB_RMOD" , "RGB_VAD" , "RGB_HUD" , "RGB_SAD" , "KC_NO" , "KC_NO", | ||
| 96 | |||
| 97 | "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_TRNS", | ||
| 98 | "KC_TRNS", "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" | ||
| 99 | |||
| 100 | ] | ||
| 101 | ] | ||
| 102 | } | ||
diff --git a/keyboards/handwired/hillside/keymaps/default/readme.md b/keyboards/handwired/hillside/keymaps/default/readme.md new file mode 100644 index 000000000..a982c0c38 --- /dev/null +++ b/keyboards/handwired/hillside/keymaps/default/readme.md | |||
| @@ -0,0 +1,216 @@ | |||
| 1 | # Default Keymap | ||
| 2 | |||
| 3 | This default keymap follows many of the norms seen in non-programmable keyboards | ||
| 4 | to ease initial use of the Hillside keyboard. | ||
| 5 | It is a starting point for you to tweak over time to better suit _your_ preferences. | ||
| 6 | You can easily customize it with the | ||
| 7 | [QMK configurator](https://config.qmk.fm/#/hillside/0_1/LAYOUT) | ||
| 8 | or with the [via firmware](https://caniusevia.com). | ||
| 9 | |||
| 10 | Some of its key features are: | ||
| 11 | - A mostly standard base layer with letters, some symbols, shift, modifier and delete keys | ||
| 12 | in the expected places for non-programmable keyboards. | ||
| 13 | - QWERTY, Colemak-DH and Dvorak options for the letter and symbol layout. | ||
| 14 | - Comfortable modifier and function or symbol combinations on the non-base layers | ||
| 15 | using modifiers on the home row of the navigation/edit, symbol/function and number-pad layers. | ||
| 16 | - Word navigation and cut/copy/paste keys on the navigation layer. | ||
| 17 | - A slightly optimized number pad with the more frequently used numbers on the home row. | ||
| 18 | |||
| 19 | We've deliberately omitted some features: | ||
| 20 | - Combos: because the online configuration tools do not handle them | ||
| 21 | and because they would add to the initial learning curve, | ||
| 22 | as helpful to a keymap as a light sprinkling of combos can be. | ||
| 23 | - Multi-function mod-tap keys, auto shift capitalization and auto-exit modes such as CAPWORD or NUMWORD: | ||
| 24 | as they may be too large a step for someone new to programmable keyboards. | ||
| 25 | |||
| 26 | ## Base Layer | ||
| 27 | |||
| 28 | ``` | ||
| 29 | | TAB | Q | W | E | R | T |---------------------------| Y | U | I | O | P | BKSPC | | ||
| 30 | | CTRL | A | S | D | F | G |---------------------------| H | J | K | L | ; | ' | | ||
| 31 | | SHIFT | Z | X | C | V | B | ~ |---------------| ESC | N | M | , | . | / | SHIFT | | ||
| 32 | --------------|ENTER|-----| GUI | ALT | Num | Nav |---| Sym |SPACE| ALT | GUI |-----| APP |-------------- | ||
| 33 | ``` | ||
| 34 | |||
| 35 | The base layer can be either of QWERTY, Colemak-DH or Dvorak, | ||
| 36 | with identical non-alpha and non-symbol keys. | ||
| 37 | QWERTY is the default. | ||
| 38 | |||
| 39 | A standard keyboard layout is used for: | ||
| 40 | |||
| 41 | - Tab, backspace and shift keys in the outer columns. | ||
| 42 | - Alt/option and GUI/command keys on both thumbs, with the location swappable for windows or mac. | ||
| 43 | - A space key on the right thumb. | ||
| 44 | |||
| 45 | The differences from a standard layout are: | ||
| 46 | |||
| 47 | - There are three additional "shift" keys | ||
| 48 | to access the navigation/editing, symbol/function, and number layers. | ||
| 49 | - Enter is on the left thumb or ring finger. | ||
| 50 | This location allowed preserving the more common right-hand keys. | ||
| 51 | Feel free to swap it with the quote key or have it share the right shift key | ||
| 52 | as a mod-tap key. | ||
| 53 | - Control is in the caps lock spot. | ||
| 54 | - Esc and `~ are above the thumbs. | ||
| 55 | - The rarer AltGr key is in a layer. | ||
| 56 | |||
| 57 | <details> | ||
| 58 | <summary>Details of Dvorak and Colemak-DH</summary> | ||
| 59 | In the Dvorak layout, the outer home row key is the "/?" symbols | ||
| 60 | so that the same 12 symbols are taken care of on the base layer. | ||
| 61 | |||
| 62 | ``` | ||
| 63 | Dvorak | ||
| 64 | | TAB | ' | , | . | P | Y |---------------------------| F | G | C | R | L | BKSPC | | ||
| 65 | | CTRL | A | O | E | U | I |---------------------------| D | H | T | N | S | / | | ||
| 66 | | SHIFT | ; | Q | J | K | X | ~ |---------------| ESC | B | M | W | V | Z | SHIFT | | ||
| 67 | --------------|ENTER|-----| GUI | ALT | Num | Nav |---| Sym |SPACE| ALT | GUI |-----| APP |-------------- | ||
| 68 | |||
| 69 | Colemak-DH | ||
| 70 | | TAB | Q | W | F | P | B |---------------------------| J | L | U | Y | ; | BKSPC | | ||
| 71 | | CTRL | A | R | S | T | G |---------------------------| M | N | E | I | O | ' | | ||
| 72 | | SHIFT | Z | X | C | D | V | ~ |---------------| ESC | K | H | , | . | / | SHIFT | | ||
| 73 | --------------|ENTER|-----| GUI | ALT | Num | Nav |---| Sym |SPACE| ALT | GUI |-----| APP |-------------- | ||
| 74 | ``` | ||
| 75 | </details> | ||
| 76 | |||
| 77 | ## Navigation, Editing and Media Layer | ||
| 78 | |||
| 79 | ``` | ||
| 80 | | CAPS | INS | | | |VOL+ |---------------------------|PG_UP|HOME | | END| | DEL | | ||
| 81 | | CTRL | GUI | ALT |CTRL |SHIFT|VOL- |---------------------------|PG_DN|LEFT | UP |RIGHT| | CTRL | | ||
| 82 | | SHIFT |UNDO | CUT |COPY |PASTE|REDO |MUTE |---------------| ESC | |WORDL|DOWN |WORDR|RALT | SHIFT | | ||
| 83 | --------------|ENTER|-----| GUI | ALT | Num | *** |---| Adj |BSPC | ALT | GUI |-----| APP |-------------- | ||
| 84 | ``` | ||
| 85 | Holding down the Nav key accesses a navigation and editing layer: | ||
| 86 | |||
| 87 | - Navigation arrows are on and below the right home row in a cross pattern. | ||
| 88 | This feels more natural for a column stagger keyboard than an inverted T. | ||
| 89 | The keys below that move left or right by a word. | ||
| 90 | Home, end, and page up/down are beside them. | ||
| 91 | - Modifiers in the left home row make it easier to use the arrows | ||
| 92 | to select text with the shift key or move between desktops or tabs. | ||
| 93 | - Editing keys appear on the lower left. | ||
| 94 | The edit keys, modifiers and arrows make it easy to move text around without leaving the layer. | ||
| 95 | - Delete is in the upper right, and a backspace key is on the thumb. | ||
| 96 | - The base layer modifiers and escape are in the same spots as on the base layer, | ||
| 97 | and a right-hand control key is added. | ||
| 98 | - Media volume and play keys are on the left, accessible with one hand. | ||
| 99 | - AltGr and caps lock fill out the layer. | ||
| 100 | - A few keys do nothing and are available for more user-specific needs. | ||
| 101 | |||
| 102 | ## Symbol and Function Layer | ||
| 103 | |||
| 104 | ``` | ||
| 105 | | F12 | ! | @ | # | $ | % |---------------------------| ^ | & | * | ( | ) | BSPC | | ||
| 106 | | CTRL | F1 | F2 | F3 | F4 | F5 |---------------------------| | |SHIFT|CTRL | ALT | GUI | CTRL | | ||
| 107 | | SHIFT | F6 | F7 | F8 | F9 | F10 | F11 |---------------| ESC | \ | [ | ] | { | } | SHIFT | | ||
| 108 | --------------|ENTER|-----| GUI | ALT | Num | Adj |---| *** |SPACE| ALT | GUI |-----| APP |-------------- | ||
| 109 | ``` | ||
| 110 | Holding down the Sym key accesses a layer of symbol and function keys: | ||
| 111 | |||
| 112 | - The symbols usually found on the number keys are in the top row. | ||
| 113 | If desired, you can use these positions for other things, | ||
| 114 | as the symbols are also accessible from the number pad layer with the shift key. | ||
| 115 | - The remaining symbols appear on the right. | ||
| 116 | - The function keys are on the left, beginning with two rows of five. | ||
| 117 | - A row of modifiers in the home row allows the comfortable creation of any modifier and function key combination. | ||
| 118 | - The base layer modifier and escape keys are still available, as is a right-hand control key. | ||
| 119 | |||
| 120 | ## Number Pad and Algebraic Layer | ||
| 121 | ``` | ||
| 122 | | | - | + | = | / | * |---------------------------| . | 7 | 8 | 9 | | BSPC | | ||
| 123 | | CTRL | GUI | ALT |CTRL |SHIFT| |---------------------------| 0 | 1 | 2 | 3 | _ | CTRL | | ||
| 124 | | SHIFT | | | | | | |---------------| ESC | , | 4 | 5 | 6 | | SHIFT | | ||
| 125 | --------------|ENTER|-----| GUI | ALT | *** | |---| |BSPC | ALT | GUI |-----| APP |-------------- | ||
| 126 | ``` | ||
| 127 | Holding down the Num key accesses a number pad and arithmetic symbols: | ||
| 128 | |||
| 129 | - The number pad has the lowest numbers swapped into the home row as these are the most commonly used. | ||
| 130 | - A row of modifiers in the home row allows the comfortable creation of any modifier and number combination. | ||
| 131 | - Symbols commonly used with numbers fill out the layer | ||
| 132 | and can be combined with the home row mods or the existing base layer modifiers on the right hand. | ||
| 133 | - Several keys remain unused and await more user-specific needs. | ||
| 134 | |||
| 135 | |||
| 136 | ## Adjust Layer | ||
| 137 | ``` | ||
| 138 | | |QWERT|DVORK|COLMK|AG_SWAP|AG_NORM|-----------------------| | | | | | | | ||
| 139 | | | | | | | |---------------------------|MOD+ |BRI+ |HUE+ |SAT+ | | | | ||
| 140 | | RESET | | | | | | |--------------|RGBTOG|MOD- |BRI- |HUE- |SAT- | | | | ||
| 141 | --------------| |-----| | | | *** |---| *** | | | |-----| |-------------- | ||
| 142 | ``` | ||
| 143 | Simultaneously holding down the Nav and Sym keys enables keys to adjust various keyboard settings: | ||
| 144 | |||
| 145 | - The base layer can be set to QWERTY, Colemak-DH or Dvorak, | ||
| 146 | but the keyboard reverts to QWERTY each time it is plugged in. | ||
| 147 | - Alt/option and GUI/command can be swapped for mac users or restored to the windows norm. | ||
| 148 | This setting persists over power loss. | ||
| 149 | - The backlight LEDs can be enabled, disabled, and controlled. | ||
| 150 | These settings also persist over power loss. | ||
| 151 | |||
| 152 | |||
| 153 | ## Make it Yours | ||
| 154 | |||
| 155 | If you are coming from a traditional keyboard, | ||
| 156 | with a row-staggered layout and a large set of physical keys, | ||
| 157 | learning to use a column staggered (ergo) and layer-based keyboard, | ||
| 158 | which uses layers instead of finger reaches to access numbers, symbols and functions, | ||
| 159 | will be an adjustment for your muscle memory and your mental keyboard map. | ||
| 160 | This default layout tries to simplify that adjustment by keeping things in the expected spots when possible. | ||
| 161 | |||
| 162 | Yet this layout is only a decent compromise and is not optimal for each user. | ||
| 163 | |||
| 164 | The online configurator makes it easy to tweak this layout to your needs. | ||
| 165 | You can add additional layers or completely switch around what these do. | ||
| 166 | |||
| 167 | Some changes you might consider making: | ||
| 168 | - Put some of your most-used key combinations on the unused keys on the navigation layer. | ||
| 169 | - If you are on a mac, switch the editing and word navigation keys from ctrl-x to cmd-x. | ||
| 170 | - Change the shift keys to one-shot shift keys, | ||
| 171 | where pressing and releasing them shifts the next key pressed. | ||
| 172 | That is much easier on your hands than holding them down. | ||
| 173 | Yet, they can still be held as usual if desired. | ||
| 174 | - Instead of holding down the thumb key to keep the symbol layer active, | ||
| 175 | you could use a one-shot layer key. | ||
| 176 | One-shot modifiers are likely less stress on your hands and may even be faster. | ||
| 177 | You would still be able to hold it down instead. | ||
| 178 | - Instead of holding down the key for the number pad layer, | ||
| 179 | you could make it a layer toggle, like caps lock is a capitalization toggle key. | ||
| 180 | |||
| 181 | Here are some other keymaps for inspiration and ideas: | ||
| 182 | - The [Ferris default](https://github.com/qmk/qmk_firmware/tree/master/keyboards/ferris/keymaps/default) uses more advanced features as it has far fewer keys to work with. | ||
| 183 | - The [Miryoku](https://github.com/manna-harbour/miryoku/tree/master/docs/reference) keymap ensures that all modifiers are comfortably available with each character key. | ||
| 184 | - The [Kyria default](https://github.com/qmk/qmk_firmware/tree/master/keyboards/splitkb/kyria/keymaps/default) has different keymap choices and a couple more keys. | ||
| 185 | |||
| 186 | A good metaphor is to think of your keymap as a bonsai tree that you tweak slightly over time | ||
| 187 | in response to ideas of how it might serve you better. | ||
| 188 | |||
| 189 | |||
| 190 | ## Why no keymap.c | ||
| 191 | |||
| 192 | Via and the online configurator provide straightforward visual ways to work with a simple layout, | ||
| 193 | and both use a .json keymap format. | ||
| 194 | So this default ```keymap.json``` was created with the online configurator | ||
| 195 | and formatted for easier reading and editing. | ||
| 196 | |||
| 197 | If you wish, you can edit the ```keymap.json``` directly in a text editor, optionally use the below ```json2hill.py``` to restore the spacing, and then compile and flash it. | ||
| 198 | |||
| 199 | Or, you can use the graphical configurator to edit the keymap. To do that: | ||
| 200 | |||
| 201 | - Open the [QMK configurator](https://config.qmk.fm/#/handwired/hillside/LAYOUT) | ||
| 202 | - Using the green up arrow button, load the keymap from ```qmk_firmware/keyboards/handwired/hillside/keymaps/default/keymap.json``` | ||
| 203 | - Make the changes you wish to the layout | ||
| 204 | - Save the keymap using the green down arrow button. | ||
| 205 | - Copy those changes back into your QMK repository and reformat for easy reading using the format script: | ||
| 206 | ``` | ||
| 207 | ./keyboards/handwired/hillside/keymaps/json2hill.py --input <Your download directory>/default.json > ./keyboards/handwired/hillside/keymaps/default/keymap.json | ||
| 208 | ``` | ||
| 209 | You may need to make that script executable with ```chmod +x```. After your keymap is safely copied and formated, you may want to remove the keymap from your download directory so later downloads will automatically receive the same file name. | ||
| 210 | |||
| 211 | After either method of editing, compile and flash the keymap as usual. | ||
| 212 | |||
| 213 | You can combine a .json based keymap with more advanced features specified in .c files | ||
| 214 | with a bit more complexity. | ||
| 215 | For example, see | ||
| 216 | [pierrec83's Kyria map](https://github.com/qmk/qmk_firmware/tree/master/keyboards/splitkb/kyria/keymaps/pierrec83). | ||
diff --git a/keyboards/handwired/hillside/keymaps/json2hill.py b/keyboards/handwired/hillside/keymaps/json2hill.py new file mode 100755 index 000000000..a9971c0d7 --- /dev/null +++ b/keyboards/handwired/hillside/keymaps/json2hill.py | |||
| @@ -0,0 +1,136 @@ | |||
| 1 | #!/usr/bin/env python3 | ||
| 2 | |||
| 3 | # Copyright 2020-2021 Pierre Viseu Chevalier, Michael McCoyd (@pierrechevalier83, @mmccoyd) | ||
| 4 | # SPDX-License-Identifier: GPL-2.0-or-later | ||
| 5 | |||
| 6 | """Pretty print keymap json in more readable row/side organized format.""" | ||
| 7 | |||
| 8 | import argparse | ||
| 9 | import json | ||
| 10 | import sys | ||
| 11 | from typing import NamedTuple | ||
| 12 | |||
| 13 | """Print keymap json in row and side format, though as still re-readable json. | ||
| 14 | |||
| 15 | For example, for one layer: | ||
| 16 | |||
| 17 | ["KC_TAB" , "KC_Q" , "KC_W" , "KC_E" , "KC_R" , "KC_T", | ||
| 18 | "KC_Y" , "KC_U" , "KC_I" , "KC_O" , "KC_P" , "KC_BSPC", | ||
| 19 | |||
| 20 | "KC_LCTL", "KC_A" , "KC_S" , "KC_D" , "KC_F" , "KC_G", | ||
| 21 | "KC_H" , "KC_J" , "KC_K" , "KC_L" , "KC_SCLN", "KC_QUOT", | ||
| 22 | |||
| 23 | "KC_LSFT", "KC_Z" , "KC_X" , "KC_C" , "KC_V" , "KC_B" , "KC_GRV", | ||
| 24 | "KC_ESC" , "KC_N" , "KC_M" , "KC_COMM", "KC_DOT" , "KC_SLSH", "KC_RSFT", | ||
| 25 | |||
| 26 | "KC_ENT" , "KC_LGUI", "KC_LALT", "MO(5)" , "MO(3)", | ||
| 27 | "MO(4)" , "KC_SPC" , "KC_LALT", "KC_RGUI", "KC_APP" | ||
| 28 | ], | ||
| 29 | """ | ||
| 30 | |||
| 31 | indent_level=4 # number of spaces of initial indent per output line | ||
| 32 | |||
| 33 | # The structure of the keymap | ||
| 34 | # [[Endpoint of sides with identical widths, side width, mapping to column],...] | ||
| 35 | KEYS_TO_COL = [[24, 6, lambda n: n % 6], | ||
| 36 | [38, 7, lambda n: (n - 24) % 7], | ||
| 37 | [48, 5, lambda n: (n - 38) % 5]] | ||
| 38 | LAST_KEY = KEYS_TO_COL[-1][0] - 1 | ||
| 39 | |||
| 40 | def parse_cli(): | ||
| 41 | parser = argparse.ArgumentParser(description='Hillside keymap formatter') | ||
| 42 | parser.add_argument("--input", type=argparse.FileType('r'), | ||
| 43 | default=sys.stdin, help="Input keymap " | ||
| 44 | "(json file produced by qmk configurator)") | ||
| 45 | return parser.parse_args() | ||
| 46 | |||
| 47 | class Column(NamedTuple): | ||
| 48 | """Column number within keymap side, if it ends side, and ends row. | ||
| 49 | |||
| 50 | Position within a keyboard row runs from 0 to n and again 0 to n""" | ||
| 51 | num: int | ||
| 52 | ends_side: bool | ||
| 53 | ends_row: bool | ||
| 54 | |||
| 55 | def get_col(key_index): | ||
| 56 | """Return Column for key_index.""" | ||
| 57 | for keys, num_cols, col_fn in KEYS_TO_COL: | ||
| 58 | if key_index < keys: | ||
| 59 | col_num = col_fn(key_index) | ||
| 60 | return Column(col_num, | ||
| 61 | ends_side=col_num == num_cols - 1, | ||
| 62 | ends_row=(keys - 1 - key_index) % (2 * num_cols) == 0) | ||
| 63 | |||
| 64 | def format_layers(layers): | ||
| 65 | formatted = indent_level * " " + "\"layers\": [\n" | ||
| 66 | |||
| 67 | # Find max key length per column | ||
| 68 | max_key_length = {} | ||
| 69 | for layer in layers: | ||
| 70 | for (index, keycode) in enumerate(layer): | ||
| 71 | col = get_col(index) | ||
| 72 | max_length = max_key_length.get(col.num) | ||
| 73 | if (not max_length) or len(keycode) > max_length: | ||
| 74 | max_key_length.update({col.num: len(keycode)}) | ||
| 75 | # Format each layer | ||
| 76 | for (layer_index, layer) in enumerate(layers): | ||
| 77 | # Opening [ | ||
| 78 | formatted += 2 * indent_level * " " | ||
| 79 | formatted += "[" | ||
| 80 | |||
| 81 | # Split keys into pairs of left and right rows by key row length | ||
| 82 | for (index, keycode) in enumerate(layer): | ||
| 83 | col = get_col(index) | ||
| 84 | |||
| 85 | # Indent for rows past first | ||
| 86 | if col.num == 0 and index != 0: | ||
| 87 | formatted += (1 + 2 * indent_level) * " " | ||
| 88 | |||
| 89 | # Print key | ||
| 90 | formatted += json.dumps(keycode) | ||
| 91 | |||
| 92 | # End layer, or end side, or space to next key | ||
| 93 | if index == LAST_KEY: | ||
| 94 | formatted += "\n" | ||
| 95 | elif col.ends_side: | ||
| 96 | formatted += ",\n" | ||
| 97 | else: | ||
| 98 | n_spaces = max_key_length[get_col(index).num] - len(keycode) | ||
| 99 | formatted += n_spaces * " " | ||
| 100 | formatted += ", " | ||
| 101 | |||
| 102 | # Split groups of row sides | ||
| 103 | if col.ends_row: | ||
| 104 | formatted += "\n" | ||
| 105 | |||
| 106 | # Closing ] with , or without | ||
| 107 | formatted += 2 * indent_level * " " | ||
| 108 | if layer_index < len(layers) - 1: | ||
| 109 | formatted += "],\n" | ||
| 110 | else: | ||
| 111 | formatted += "]\n" | ||
| 112 | |||
| 113 | formatted += indent_level * " " | ||
| 114 | formatted += "]" | ||
| 115 | |||
| 116 | return formatted | ||
| 117 | |||
| 118 | def format_keymap(keymap_json): | ||
| 119 | formatted = "{" | ||
| 120 | for (index, k) in enumerate(keymap_json): | ||
| 121 | if k == "layers": | ||
| 122 | formatted += format_layers(keymap_json[k]) | ||
| 123 | else: | ||
| 124 | formatted += f"{indent_level * ' '}{json.dumps(k)}: {json.dumps(keymap_json[k])}" | ||
| 125 | if index < len(keymap_json) - 1: | ||
| 126 | formatted += "," | ||
| 127 | formatted += "\n" | ||
| 128 | formatted += "}" | ||
| 129 | return formatted | ||
| 130 | |||
| 131 | def main(): | ||
| 132 | args=parse_cli() | ||
| 133 | keymap_json = json.loads(args.input.read()) | ||
| 134 | print(format_keymap(keymap_json)) | ||
| 135 | |||
| 136 | main() | ||
diff --git a/keyboards/handwired/hillside/keymaps/via/keymap.json b/keyboards/handwired/hillside/keymaps/via/keymap.json new file mode 100644 index 000000000..8b4810c30 --- /dev/null +++ b/keyboards/handwired/hillside/keymaps/via/keymap.json | |||
| @@ -0,0 +1,101 @@ | |||
| 1 | { | ||
| 2 | "version": 1, | ||
| 3 | "notes": "", | ||
| 4 | "keyboard": "handwired/hillside/0_1", | ||
| 5 | "author": "@mmccoyd", | ||
| 6 | "keymap": "via", | ||
| 7 | "layout": "LAYOUT", | ||
| 8 | "layers": [ | ||
| 9 | ["KC_TAB" , "KC_Q" , "KC_W" , "KC_E" , "KC_R" , "KC_T", | ||
| 10 | "KC_Y" , "KC_U" , "KC_I" , "KC_O" , "KC_P" , "KC_BSPC", | ||
| 11 | |||
| 12 | "KC_LCTL", "KC_A" , "KC_S" , "KC_D" , "KC_F" , "KC_G", | ||
| 13 | "KC_H" , "KC_J" , "KC_K" , "KC_L" , "KC_SCLN" , "KC_QUOT", | ||
| 14 | |||
| 15 | "KC_LSFT", "KC_Z" , "KC_X" , "KC_C" , "KC_V" , "KC_B" , "KC_GRV", | ||
| 16 | "KC_ESC" , "KC_N" , "KC_M" , "KC_COMM" , "KC_DOT" , "KC_SLSH" , "KC_RSFT", | ||
| 17 | |||
| 18 | "KC_ENT" , "KC_LGUI" , "KC_LALT" , "MO(5)" , "MO(3)", | ||
| 19 | "MO(4)" , "KC_SPC" , "KC_LALT" , "KC_RGUI" , "KC_APP" | ||
| 20 | |||
| 21 | ], | ||
| 22 | ["KC_TAB" , "KC_QUOT" , "KC_COMM" , "KC_DOT" , "KC_P" , "KC_Y", | ||
| 23 | "KC_F" , "KC_G" , "KC_C" , "KC_R" , "KC_L" , "KC_BSPC", | ||
| 24 | |||
| 25 | "KC_LCTL", "KC_A" , "KC_O" , "KC_E" , "KC_U" , "KC_I", | ||
| 26 | "KC_D" , "KC_H" , "KC_T" , "KC_N" , "KC_S" , "KC_SLSH", | ||
| 27 | |||
| 28 | "KC_LSFT", "KC_SCLN" , "KC_Q" , "KC_J" , "KC_K" , "KC_X" , "KC_GRV", | ||
| 29 | "KC_ESC" , "KC_B" , "KC_M" , "KC_W" , "KC_V" , "KC_Z" , "KC_RSFT", | ||
| 30 | |||
| 31 | "KC_ENT" , "KC_LGUI" , "KC_LALT" , "MO(5)" , "MO(3)", | ||
| 32 | "MO(4)" , "KC_SPC" , "KC_LALT" , "KC_RGUI" , "KC_APP" | ||
| 33 | |||
| 34 | ], | ||
| 35 | ["KC_TAB" , "KC_Q" , "KC_W" , "KC_F" , "KC_P" , "KC_B", | ||
| 36 | "KC_J" , "KC_L" , "KC_U" , "KC_Y" , "KC_SCLN" , "KC_BSPC", | ||
| 37 | |||
| 38 | "KC_LCTL", "KC_A" , "KC_R" , "KC_S" , "KC_T" , "KC_G", | ||
| 39 | "KC_M" , "KC_N" , "KC_E" , "KC_I" , "KC_O" , "KC_QUOT", | ||
| 40 | |||
| 41 | "KC_LSFT", "KC_Z" , "KC_X" , "KC_C" , "KC_D" , "KC_V" , "KC_GRV", | ||
| 42 | "KC_ESC" , "KC_K" , "KC_H" , "KC_COMM" , "KC_DOT" , "KC_SLSH" , "KC_RSFT", | ||
| 43 | |||
| 44 | "KC_ENT" , "KC_LGUI" , "KC_LALT" , "MO(5)" , "MO(3)", | ||
| 45 | "MO(4)" , "KC_SPC" , "KC_LALT" , "KC_RGUI" , "KC_APP" | ||
| 46 | |||
| 47 | ], | ||
| 48 | ["KC_CAPS", "KC_INS" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_VOLU", | ||
| 49 | "KC_PGUP", "KC_HOME" , "KC_NO" , "KC_END" , "KC_NO" , "KC_DEL", | ||
| 50 | |||
| 51 | "KC_LCTL", "KC_LGUI" , "KC_LALT" , "KC_LCTL" , "KC_LSFT" , "KC_VOLD", | ||
| 52 | "KC_PGDN", "KC_LEFT" , "KC_UP" , "KC_RGHT" , "KC_NO" , "KC_RCTL", | ||
| 53 | |||
| 54 | "KC_LSFT", "LCTL(KC_Z)", "LCTL(KC_X)" , "LCTL(KC_C)", "LCTL(KC_V)" , "LCTL(KC_Y)", "KC_MUTE", | ||
| 55 | "KC_ESC" , "KC_NO" , "LCTL(KC_LEFT)", "KC_DOWN" , "LCTL(KC_RGHT)", "KC_RALT" , "KC_RSFT", | ||
| 56 | |||
| 57 | "KC_TRNS", "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS", | ||
| 58 | "MO(6)" , "KC_BSPC" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS" | ||
| 59 | |||
| 60 | ], | ||
| 61 | ["KC_F12" , "KC_EXLM" , "KC_AT" , "KC_HASH" , "KC_DLR" , "KC_PERC", | ||
| 62 | "KC_CIRC", "KC_AMPR" , "KC_ASTR" , "KC_LPRN" , "KC_RPRN" , "KC_BSPC", | ||
| 63 | |||
| 64 | "KC_LCTL", "KC_F1" , "KC_F2" , "KC_F3" , "KC_F4" , "KC_F5", | ||
| 65 | "KC_PIPE", "KC_LSFT" , "KC_LCTL" , "KC_LALT" , "KC_LGUI" , "KC_RCTL", | ||
| 66 | |||
| 67 | "KC_LSFT", "KC_F6" , "KC_F7" , "KC_F8" , "KC_F9" , "KC_F10" , "KC_F11", | ||
| 68 | "KC_ESC" , "KC_BSLS" , "KC_LBRC" , "KC_RBRC" , "KC_LCBR" , "KC_RCBR" , "KC_RSFT", | ||
| 69 | |||
| 70 | "KC_TRNS", "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "MO(6)", | ||
| 71 | "KC_TRNS", "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS" | ||
| 72 | |||
| 73 | ], | ||
| 74 | ["KC_NO" , "KC_MINS" , "KC_PLUS" , "KC_EQL" , "KC_SLSH" , "KC_ASTR", | ||
| 75 | "KC_COMM", "KC_7" , "KC_8" , "KC_9" , "KC_NO" , "KC_TRNS", | ||
| 76 | |||
| 77 | "KC_TRNS", "KC_LGUI" , "KC_LALT" , "KC_LCTL" , "KC_LSFT" , "KC_NO", | ||
| 78 | "KC_0" , "KC_1" , "KC_2" , "KC_3" , "KC_UNDS" , "KC_RCTL", | ||
| 79 | |||
| 80 | "KC_TRNS", "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO", | ||
| 81 | "KC_NO" , "KC_DOT" , "KC_4" , "KC_5" , "KC_6" , "KC_NO" , "KC_TRNS", | ||
| 82 | |||
| 83 | "KC_TRNS", "KC_TRNS" , "KC_TRNS" , "KC_TRNS" , "KC_NO", | ||
| 84 | "KC_NO" , "KC_BSPC" , "KC_TRNS" , "KC_TRNS" , "KC_TRNS" | ||
| 85 | |||
| 86 | ], | ||
| 87 | ["KC_NO" , "DF(0)" , "DF(1)" , "DF(2)" , "AG_SWAP" , "AG_NORM", | ||
| 88 | "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO", | ||
| 89 | |||
| 90 | "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO", | ||
| 91 | "RGB_MOD", "RGB_VAI" , "RGB_HUI" , "RGB_SAI" , "KC_NO" , "KC_NO", | ||
| 92 | |||
| 93 | "RESET" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO", | ||
| 94 | "RGB_TOG", "RGB_RMOD" , "RGB_VAD" , "RGB_HUD" , "RGB_SAD" , "KC_NO" , "KC_NO", | ||
| 95 | |||
| 96 | "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_TRNS", | ||
| 97 | "KC_TRNS", "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" | ||
| 98 | |||
| 99 | ] | ||
| 100 | ] | ||
| 101 | } | ||
diff --git a/keyboards/handwired/hillside/readme.md b/keyboards/handwired/hillside/readme.md new file mode 100644 index 000000000..f1ff0f850 --- /dev/null +++ b/keyboards/handwired/hillside/readme.md | |||
| @@ -0,0 +1,29 @@ | |||
| 1 | # Hillside | ||
| 2 | |||
| 3 |  | ||
| 4 | |||
| 5 | [Hillside](https://github.com/mmccoyd/hillside) | ||
| 6 | is a split ergonomic keyboard | ||
| 7 | with 3x6+4+2 choc-spaced keys with aggressive column stagger, | ||
| 8 | a longer thumb arc and a breakoff outer-pinky column. | ||
| 9 | |||
| 10 | * Keyboard Maintainer: [Michael McCoyd](https://github.com/mmccoyd) | ||
| 11 | * Hardware Supported: ProMicro/Elite-C and compatible | ||
| 12 | * Hardware Availability: https://github.com/mmccoyd/hillside | ||
| 13 | |||
| 14 | Make example for this keyboard (after setting up your build environment): | ||
| 15 | |||
| 16 | make handwired/hillside/0_1:default | ||
| 17 | |||
| 18 | Flashing example for this keyboard: | ||
| 19 | |||
| 20 | make handwired/hillside/0_1:default:flash | ||
| 21 | |||
| 22 | ## Bootloader | ||
| 23 | |||
| 24 | Enter the bootloader by either: | ||
| 25 | |||
| 26 | * **Physical reset button**: Briefly press the button on the front of the PCB. | ||
| 27 | * **Keycode in layout**: Press the key mapped to `RESET` if it is available | ||
| 28 | |||
| 29 | 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). | ||
