summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/docs/feature/keymaps.md75
-rw-r--r--docs/static/setup.sh30
2 files changed, 77 insertions, 28 deletions
diff --git a/docs/docs/feature/keymaps.md b/docs/docs/feature/keymaps.md
index 3eee145..3b8ebb8 100644
--- a/docs/docs/feature/keymaps.md
+++ b/docs/docs/feature/keymaps.md
@@ -102,24 +102,39 @@ ALl the remaining keymap nodes will be nested inside of the root devicetree node
};
```
+### Keymap Node
+
+Nested under the devicetree root, is the keymap node. The node _name_ itself is not critical, but the node **MUST** have a property
+`compatible = "zmk,keymap"` in order to be used by ZMK.
+
+```
+ keymap {
+ compatible = "zmk,keymap";
+
+ // Layer nodes go here!
+ };
+```
+
### Layers
+Each layer of your keymap will be nested under the keymap node. Here is a sample
+that defines just one layer for this keymap:
+
```
- layers {
- compatible = "zmk,layers";
+ keymap {
+ compatible = "zmk,keymap";
- default: layer_0 {
- label = "DEFAULT";
+ default_layer {
// ---------------------------------------------------------------------------------------------------------------------------------
// | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ |
// | TAB | A | S | D | F | G | | H | J | K | L | ; | ' |
// | SHIFT | Z | X | C | V | B | L SHIFT | L SHIFT | | L SHIFT | L SHIFT | N | M | , | . | / | CTRL |
// | GUI | DEL | RET | SPACE | ESC | | RET | SPACE | TAB | BSPC | R-ALT |
bindings = <
- &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH
- &kp TAB &kp A &kp S &mt MOD_LCTL D &mt MOD_LSFT F &kp G &kp H &mt MOD_LSFT J &mt MOD_LCTL K &kp L &kp SCLN &kp QUOT
- &kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp LSFT &kp LSFT &kp LSFT &kp LSFT &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RCTL
- &kp LGUI &kp DEL &kp RET &kp SPC &mo 1 &mo 2 &kp SPC &kp RET &kp BKSP &kp RALT
+ &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH
+ &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT
+ &kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp LSFT &kp LSFT &kp LSFT &kp LSFT &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RCTL
+ &kp LGUI &kp DEL &kp RET &kp SPC &kp ESC &kp RET &kp SPC &kp TAB &kp BKSP &kp RALT
>;
sensor-bindings = <&inc_dec_cp M_VOLU M_VOLD &inc_dec_kp PGUP PGDN>;
@@ -127,24 +142,40 @@ ALl the remaining keymap nodes will be nested inside of the root devicetree node
};
```
-### Keymap
+Each layer should have:
+
+1. A `bindings` property this will be a list of behaviour bindings, one for each key position for the keyboard.
+1. (Optional) A `sensor-bindings` property that will be a list of behavior bindings for each sensor on the keyboard. (Currently, only encoders are supported as sensor hardware, but in the future devices like trackpoints would be supported the same way)
+
+For the full set of possible behaviors, start at the [Key Press](/docs/behavior/key-press) behavior.
+
+### Complete Example
+
+Putting this all together, a complete [`kyria.keymap`](https://github.com/zmkfirmware/zmk/blob/main/app/boards/shields/kyria/kyria.keymap) looks like:
```
- keymap0: keymap {
+#include <behaviors.dtsi>
+#include <dt-bindings/zmk/keys.h>
+
+/ {
+ keymap {
compatible = "zmk,keymap";
- label ="Default Kyria Keymap";
- layers = <&default>;
- };
-```
-### Chosen Keymap
+ default_layer {
+// ---------------------------------------------------------------------------------------------------------------------------------
+// | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ |
+// | TAB | A | S | D | F | G | | H | J | K | L | ; | ' |
+// | SHIFT | Z | X | C | V | B | L SHIFT | L SHIFT | | L SHIFT | L SHIFT | N | M | , | . | / | CTRL |
+// | GUI | DEL | RET | SPACE | ESC | | RET | SPACE | TAB | BSPC | R-ALT |
+ bindings = <
+ &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH
+ &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT
+ &kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp LSFT &kp LSFT &kp LSFT &kp LSFT &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RCTL
+ &kp LGUI &kp DEL &kp RET &kp SPC &kp ESC &kp RET &kp SPC &kp TAB &kp BKSP &kp RALT
+ >;
-```
- chosen {
- zmk,keymap = &keymap0;
+ sensor-bindings = <&inc_dec_cp M_VOLU M_VOLD &inc_dec_kp PGUP PGDN>;
+ };
};
+};
```
-
-### Complete Example
-
-You can see a complete example if you see the [stock Kyria keymap](https://github.com/zmkfirmware/zmk/blob/main/app/boards/shields/kyria/kyria.keymap).
diff --git a/docs/static/setup.sh b/docs/static/setup.sh
index 23ab42b..a122994 100644
--- a/docs/static/setup.sh
+++ b/docs/static/setup.sh
@@ -7,6 +7,7 @@ title="ZMK Config Setup:"
# TODO: Check for git being installed
+# TODO: Check for curl being installed
# TODO: Check for user.name and user.email git configs being set
prompt="Pick an MCU board:"
@@ -41,7 +42,7 @@ options=("Kyria" "Lily58")
PS3="$prompt "
# TODO: Add support for "Other" and linking to docs on adding custom shields in user config repos.
# select opt in "${options[@]}" "Other" "Quit"; do
-select opt in "${options[@]}" "Other" "Quit"; do
+select opt in "${options[@]}" "Quit"; do
case "$REPLY" in
@@ -56,12 +57,16 @@ select opt in "${options[@]}" "Other" "Quit"; do
esac
done
-read -p "GitHub Username (leave empty to skip GitHub repo creation): " github_user
+read -e -p "Copy in the stock keymap for customization? [Yn]: " copy_keymap
+
+if [ -z "$copy_keymap" ] || [ "$copy_keymap" == "Y" ] || [ "$copy_keymap" == "y" ]; then copy_keymap="yes"; fi
+
+read -e -p "GitHub Username (leave empty to skip GitHub repo creation): " github_user
if [ -n "$github_user" ]; then
- read -p "GitHub Repo Name [zmk-config]: " repo_name
+ read -e -i "zmk-config" -p "GitHub Repo Name: " repo_name
if [ -z "$repo_name" ]; then repo_name="zmk-config"; fi
- read -p "GitHub Repo [https://github.com/${github_user}/${repo_name}.git]: " github_repo
+ read -e -i "https://github.com/${github_user}/${repo_name}.git" -p "GitHub Repo: " github_repo
if [ -z "$github_repo" ]; then github_repo="https://github.com/${github_user}/${repo_name}.git"; fi
else
@@ -72,6 +77,11 @@ echo ""
echo "Preparing a user config for:"
echo "* MCU Board: ${board}"
echo "* Shield: ${shield}"
+if [ "$copy_keymap" == "yes" ]; then
+ echo "* Copy Keymap?: ✓"
+else
+ echo "* Copy Keymap?: ❌"
+fi
if [ -n "$github_repo" ]; then
echo "* GitHub Repo To Push (please create this in GH first!): ${github_repo}"
fi
@@ -87,14 +97,22 @@ fi
git clone --single-branch $repo_path ${repo_name}
cd ${repo_name}
+pushd config
+
+curl -O "https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/boards/shields/${shield}/${shield}.conf"
+
+if [ "$copy_keymap" == "yes" ]; then
+ curl -O "https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/boards/shields/${shield}/${shield}.keymap"
+fi
+
+popd
+
sed -i \
-e "s/BOARD_NAME/$board/" \
-e "s/SHIELD_NAME/$shield/" \
-e "s/KEYBOARD_TITLE/$shield_title/" \
.github/workflows/build.yml
-mv config/prj.conf "config/${shield}.conf"
-
rm -rf .git
git init .
git add .