aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormmccoyd <mmccoyd@users.noreply.github.com>2022-01-08 17:29:51 -0800
committerGitHub <noreply@github.com>2022-01-08 17:29:51 -0800
commit4c1fd0897cfec6d1b09b651b372b2d5bbc03de25 (patch)
tree3734f8c9052e9be96042f340f59b68e4cc98e35f
parentfc8346e0b3d601aadf37fd7a1e708910cee22f75 (diff)
downloadqmk_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.c4
-rw-r--r--keyboards/handwired/hillside/0_1/0_1.h34
-rw-r--r--keyboards/handwired/hillside/0_1/config.h35
-rw-r--r--keyboards/handwired/hillside/0_1/info.json13
-rw-r--r--keyboards/handwired/hillside/0_1/rules.mk8
-rw-r--r--keyboards/handwired/hillside/info.json97
-rw-r--r--keyboards/handwired/hillside/keymaps/default/keymap.json102
-rw-r--r--keyboards/handwired/hillside/keymaps/default/readme.md216
-rwxr-xr-xkeyboards/handwired/hillside/keymaps/json2hill.py136
-rw-r--r--keyboards/handwired/hillside/keymaps/via/keymap.json101
-rw-r--r--keyboards/handwired/hillside/readme.md29
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 @@
1SPLIT_KEYBOARD = yes # Use shared split_common code
2LTO_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
3This default keymap follows many of the norms seen in non-programmable keyboards
4 to ease initial use of the Hillside keyboard.
5It is a starting point for you to tweak over time to better suit _your_ preferences.
6You 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
10Some 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
19We'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
35The base layer can be either of QWERTY, Colemak-DH or Dvorak,
36 with identical non-alpha and non-symbol keys.
37QWERTY is the default.
38
39A 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
45The 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>
59In 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```
63Dvorak
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
69Colemak-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```
85Holding 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```
110Holding 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```
127Holding 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```
143Simultaneously 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
155If 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.
160This default layout tries to simplify that adjustment by keeping things in the expected spots when possible.
161
162Yet this layout is only a decent compromise and is not optimal for each user.
163
164The online configurator makes it easy to tweak this layout to your needs.
165You can add additional layers or completely switch around what these do.
166
167Some 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
181Here 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
186A 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
192Via and the online configurator provide straightforward visual ways to work with a simple layout,
193 and both use a .json keymap format.
194So this default ```keymap.json``` was created with the online configurator
195 and formatted for easier reading and editing.
196
197If 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
199Or, 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
211After either method of editing, compile and flash the keymap as usual.
212
213You can combine a .json based keymap with more advanced features specified in .c files
214 with a bit more complexity.
215For 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
8import argparse
9import json
10import sys
11from typing import NamedTuple
12
13"""Print keymap json in row and side format, though as still re-readable json.
14
15For 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
31indent_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],...]
35KEYS_TO_COL = [[24, 6, lambda n: n % 6],
36 [38, 7, lambda n: (n - 24) % 7],
37 [48, 5, lambda n: (n - 38) % 5]]
38LAST_KEY = KEYS_TO_COL[-1][0] - 1
39
40def 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
47class 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
55def 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
64def 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
118def 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
131def main():
132 args=parse_cli()
133 keymap_json = json.loads(args.input.read())
134 print(format_keymap(keymap_json))
135
136main()
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![hillside](https://imgur.com/XW0rX13.png)
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
14Make example for this keyboard (after setting up your build environment):
15
16 make handwired/hillside/0_1:default
17
18Flashing example for this keyboard:
19
20 make handwired/hillside/0_1:default:flash
21
22## Bootloader
23
24Enter 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
29See 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).