From 5c11962d986753d5da9244cf572242f43f4d126c Mon Sep 17 00:00:00 2001
From: KingCoinless <33333456+KingCoinless@users.noreply.github.com>
Date: Tue, 5 Jan 2021 10:56:47 -0800
Subject: [PATCH] feat(shields): add helix shield

PR: #429
---
 .github/workflows/build.yml                   |  2 +
 app/boards/shields/helix/Kconfig.defconfig    | 29 ++++++
 app/boards/shields/helix/Kconfig.shield       |  8 ++
 app/boards/shields/helix/README.md            | 12 +++
 .../shields/helix/boards/nice_nano.overlay    | 34 +++++++
 app/boards/shields/helix/helix.conf           |  6 ++
 app/boards/shields/helix/helix.dtsi           | 47 ++++++++++
 app/boards/shields/helix/helix.keymap         | 88 +++++++++++++++++++
 app/boards/shields/helix/helix_left.overlay   | 19 ++++
 app/boards/shields/helix/helix_right.overlay  | 23 +++++
 docs/docs/hardware.md                         |  1 +
 docs/static/setup.ps1                         |  6 +-
 docs/static/setup.sh                          |  5 +-
 13 files changed, 275 insertions(+), 5 deletions(-)
 create mode 100644 app/boards/shields/helix/Kconfig.defconfig
 create mode 100644 app/boards/shields/helix/Kconfig.shield
 create mode 100644 app/boards/shields/helix/README.md
 create mode 100644 app/boards/shields/helix/boards/nice_nano.overlay
 create mode 100644 app/boards/shields/helix/helix.conf
 create mode 100644 app/boards/shields/helix/helix.dtsi
 create mode 100644 app/boards/shields/helix/helix.keymap
 create mode 100644 app/boards/shields/helix/helix_left.overlay
 create mode 100644 app/boards/shields/helix/helix_right.overlay

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 58da8c41..d7011283 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -32,6 +32,8 @@ jobs:
           - cradio_right
           - crbn
           - eek
+          - helix_left
+          - helix_right
           - iris_left
           - iris_right
           - jian_left
diff --git a/app/boards/shields/helix/Kconfig.defconfig b/app/boards/shields/helix/Kconfig.defconfig
new file mode 100644
index 00000000..f58684a8
--- /dev/null
+++ b/app/boards/shields/helix/Kconfig.defconfig
@@ -0,0 +1,29 @@
+# Copyright (c) 2020 The ZMK Contributors
+# SPDX-License-Identifier: MIT
+
+if SHIELD_HELIX_LEFT
+
+config ZMK_KEYBOARD_NAME
+    default "Helix Left"
+
+config ZMK_SPLIT_BLE_ROLE_CENTRAL
+    default y
+
+endif
+
+if SHIELD_HELIX_RIGHT
+
+config ZMK_KEYBOARD_NAME
+    default "Helix Right"
+
+config USB
+    default y
+
+endif
+
+if SHIELD_HELIX_LEFT || SHIELD_HELIX_RIGHT
+
+config ZMK_SPLIT
+    default y
+
+endif
\ No newline at end of file
diff --git a/app/boards/shields/helix/Kconfig.shield b/app/boards/shields/helix/Kconfig.shield
new file mode 100644
index 00000000..7e5bb9ae
--- /dev/null
+++ b/app/boards/shields/helix/Kconfig.shield
@@ -0,0 +1,8 @@
+# Copyright (c) 2020 The ZMK Contributors
+# SPDX-License-Identifier: MIT
+
+config SHIELD_HELIX_LEFT
+    def_bool $(shields_list_contains,helix_left)
+
+config SHIELD_HELIX_RIGHT
+    def_bool $(shields_list_contains,helix_right)
\ No newline at end of file
diff --git a/app/boards/shields/helix/README.md b/app/boards/shields/helix/README.md
new file mode 100644
index 00000000..f8b0e13f
--- /dev/null
+++ b/app/boards/shields/helix/README.md
@@ -0,0 +1,12 @@
+#### Note to user:
+
+- If desired, RGB underglow must be manually enabled before building and flashing. Check 'helix.conf' to do so.
+- Peripheral RGB function is impaired until full support is implemented in the master branch.
+- OLED displays are not currently included in this shield. This will be updated after OLED support is live.
+- 'KANA' and 'EISUU' input is currently utilized under the 'LANG1' and 'LANG2' keycodes respectively.
+
+---
+
+Thanks to Nicell, KemoNine, petejohanson, TJ "Chormbo The Great", joelspadin/Rinh, Wofiel, Okke, innovaker,
+and the rest of the ZMK contributors for their support in constructing this shield. I appreciate your assistance greatly.
+This has been a valuable learning experience for me. May this contribution serve the community well.
diff --git a/app/boards/shields/helix/boards/nice_nano.overlay b/app/boards/shields/helix/boards/nice_nano.overlay
new file mode 100644
index 00000000..78576d13
--- /dev/null
+++ b/app/boards/shields/helix/boards/nice_nano.overlay
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2020 The ZMK Contributors
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+&spi1 {
+  compatible = "nordic,nrf-spim";
+  status = "okay";
+  mosi-pin = <6>;
+  // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself.
+  sck-pin = <5>;
+  miso-pin = <7>;
+
+  led_strip: ws2812@0 {
+    compatible = "worldsemi,ws2812-spi";
+    label = "WS2812";
+
+    /* SPI */
+    reg = <0>; /* ignored, but necessary for SPI bindings */
+    spi-max-frequency = <4000000>;
+
+    /* WS2812 */
+    chain-length = <32>; /* number of LEDs */
+    spi-one-frame = <0x70>;
+    spi-zero-frame = <0x40>;
+  };
+};
+
+/ {
+  chosen {
+    zmk,underglow = &led_strip;
+  };
+};
diff --git a/app/boards/shields/helix/helix.conf b/app/boards/shields/helix/helix.conf
new file mode 100644
index 00000000..a8e57338
--- /dev/null
+++ b/app/boards/shields/helix/helix.conf
@@ -0,0 +1,6 @@
+# Copyright (c) 2020 The ZMK Contributors
+# SPDX-License-Identifier: MIT
+
+# Enables RGB functionality (Uncomment lines below to enable.)
+# CONFIG_ZMK_RGB_UNDERGLOW=y
+# CONFIG_WS2812_STRIP=y
\ No newline at end of file
diff --git a/app/boards/shields/helix/helix.dtsi b/app/boards/shields/helix/helix.dtsi
new file mode 100644
index 00000000..8df943f0
--- /dev/null
+++ b/app/boards/shields/helix/helix.dtsi
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2020 The ZMK Contributors
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <dt-bindings/zmk/matrix_transform.h>
+
+/ {
+    chosen {
+        zmk,kscan = &kscan0;
+        zmk,matrix_transform = &default_transform;
+    };
+
+    default_transform: keymap_transform_0 {
+        compatible = "zmk,matrix-transform";
+        columns = <14>;
+        rows = <5>;
+// | SW1  | SW2  | SW3  | SW4  | SW5  | SW6  |                 | SW6  | SW5  | SW4  | SW3  | SW2  | SW1  |
+// | SW7  | SW8  | SW9  | SW10 | SW11 | SW12 |                 | SW12 | SW11 | SW10 | SW9  | SW8  | SW7  |
+// | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 |                 | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 |
+// | SW19 | SW20 | SW21 | SW22 | SW23 | SW24 | SW25 |   | SW25 | SW24 | SW23 | SW22 | SW21 | SW20 | SW19 |
+// | SW26 | SW27 | SW28 | SW29 | SW30 | SW31 | SW32 |   | SW32 | SW31 | SW30 | SW29 | SW28 | SW27 | SW26 |
+        map = <
+RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5)                   RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13)
+RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5)                   RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13)
+RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5)                   RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,13)
+RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6)   RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,12) RC(3,13)
+RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6)   RC(4,7) RC(4,8) RC(4,9) RC(4,10) RC(4,11) RC(4,12) RC(4,13)
+        >;
+    };
+
+    kscan0: kscan {
+        compatible = "zmk,kscan-gpio-matrix";
+        label = "KSCAN";
+
+        diode-direction = "col2row";
+        row-gpios
+            = <&pro_micro_d 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
+            , <&pro_micro_d 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
+            , <&pro_micro_d 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
+            , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
+            , <&pro_micro_d 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
+            ;
+        
+    };
+};
\ No newline at end of file
diff --git a/app/boards/shields/helix/helix.keymap b/app/boards/shields/helix/helix.keymap
new file mode 100644
index 00000000..82327c32
--- /dev/null
+++ b/app/boards/shields/helix/helix.keymap
@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2020 The ZMK Contributors
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+ #include <behaviors.dtsi>
+ #include <dt-bindings/zmk/keys.h>
+ #include <dt-bindings/zmk/bt.h>
+ #include <dt-bindings/zmk/rgb.h>
+ #include <dt-bindings/zmk/ext_power.h>
+ #include <dt-bindings/zmk/outputs.h>
+
+ #define DEFAULT 0
+ #define LOWER  1
+ #define RAISE  2
+ #define ADJUST 3
+
+/* NOTE: At the time of the creation of this keymap, there are no specified codes for 'eisuu' and 'kana' input in ZMK.
+However, 'LANG1' and 'LANG2' are fully-functioning candidates for 'kana' and 'eisuu' input respectively.
+As such, those are in use within the default layer at this time.*/
+
+/ {
+       keymap {
+              compatible = "zmk,keymap";
+ 
+              default_layer {
+ // ---------------------------------------------------------------------------------------------------------------------------------
+ // | GRAVE  |   1    |   2    |   3    |   4    |   5    |                                      |   6    |   7    |   8    |   9    |   0    |  DEL   |
+ // |  TAB   |   Q    |   W    |   E    |   R    |   T    |                                      |   Y    |   U    |   I    |   O    |   P    |  BSPC  |
+ // |  CTRL  |   A    |   S    |   D    |   F    |   G    |                                      |   H    |   J    |   K    |   L    |   ;    |   '    |
+ // |  SHIFT |   Z    |   X    |   C    |   V    |   B    |  LBKT  |                    |  RBKT  |   N    |   M    |   ,    |   .    |   /    |  RET   |
+ // | ADJUST |  ESC   |  ALT   |  LGUI  | EISUU  | LOWER  | SPACE  |                    |  SPACE | RAISE  |  KANA  |  LEFT  |  DOWN  |  UP    |  RIGHT |
+                     bindings = <
+       &kp GRAVE  &kp N1  &kp N2   &kp N3   &kp N4    &kp N5                               &kp N6    &kp N7    &kp N8    &kp N9     &kp N0    &kp DEL
+       &kp TAB    &kp Q   &kp W    &kp E    &kp R     &kp T                                &kp Y     &kp U     &kp I     &kp O      &kp P     &kp BSPC
+       &kp LCTRL  &kp A   &kp S    &kp D    &kp F     &kp G                                &kp H     &kp J     &kp K     &kp L      &kp SEMI  &kp SQT
+       &kp LSHFT  &kp Z   &kp X    &kp C    &kp V     &kp B     &kp LBKT         &kp RBKT  &kp N     &kp M     &kp COMMA &kp PERIOD &kp SLASH &kp RET
+       &mo ADJUST &kp ESC &kp LALT &kp LGUI &kp LANG2 &mo LOWER &kp SPACE        &kp SPACE &mo RAISE &kp LANG1 &kp LEFT  &kp DOWN   &kp UP    &kp RIGHT
+                     >;
+              };
+              lower_layer {
+ // ---------------------------------------------------------------------------------------------------------------------------------
+ // |      |      |      |      |      |      |                                  |      |      |      |      |      |      |
+ // |  ~   |  !   |  @   |  #   |  $   |  %   |                                  |  ^   |  &   |  *   |  (   |  )   |      |
+ // |      |      |      |      |      |      |                                  |      |  _   |  +   |  {   |  }   | PIPE |
+ // |      |      |      |      |      |      |  (   |                    |  )   |      |      |      | HOME | END  |      |
+ // |      |      |      |      |      |      |      |                    |      |      |      |      |      |      |      |
+                     bindings = <
+       &trans    &trans   &trans &trans   &trans   &trans                             &trans    &trans    &trans    &trans   &trans   &trans
+       &kp TILDE &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT                          &kp CARET &kp AMPS  &kp ASTRK &kp LPAR &kp RPAR &trans
+       &trans    &trans   &trans &trans   &trans   &trans                             &trans    &kp UNDER &kp PLUS  &kp LBRC &kp RBRC &kp PIPE
+       &trans    &trans   &trans &trans   &trans   &trans    &kp LPAR        &kp RPAR &trans    &trans    &trans    &kp HOME &kp END  &trans
+       &trans    &trans   &trans &trans   &trans   &trans    &trans          &trans   &trans    &trans    &trans    &trans   &trans   &trans
+                     >;
+              };
+              raise_layer {
+ // ---------------------------------------------------------------------------------------------------------------------------------
+ // |       |       |       |       |       |       |                                    |       |       |       |       |       |       |
+ // |   `   |   1   |   2   |   3   |   4   |   5   |                                    |   6   |   7   |   8   |   9   |   0   |  DEL  |
+ // |       |  F1   |  F2   |  F3   |  F4   |  F5   |                                    |  F6   |   -   |   =   |   [   |   ]   |   \   |
+ // |       |  F7   |  F8   |  F9   |  F10  |  F11  |       |                    |       |  F12  |       | PSCRN | PG_DN | PG_UP |       |
+ // |       |       |       |       |       |       |       |                    |       |       |       | NEXT  | VOL-  | VOL+  | PLAY  |
+                     bindings = <
+       &trans    &trans &trans &trans &trans  &trans                       &trans  &trans    &trans     &trans       &trans       &trans
+       &kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4  &kp N5                       &kp N6  &kp N7    &kp N8     &kp N9       &kp N0       &kp DEL
+       &trans    &kp F1 &kp F2 &kp F3 &kp F4  &kp F5                       &kp F6  &kp MINUS &kp EQUAL  &kp LBKT     &kp RBKT     &kp BSLH
+       &trans    &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &trans        &trans &kp F12 &trans    &kp PSCRN  &kp PG_DN    &kp PG_UP    &trans
+       &trans    &trans &trans &trans &trans  &trans  &trans        &trans &trans  &trans    &kp C_NEXT &kp C_VOL_DN &kp C_VOL_UP &kp C_PP
+                     >;
+              };
+              adjust_layer {
+ // ---------------------------------------------------------------------------------------------------------------------------------
+ // |    `     |    !     |    @     |    #     |    $     |    %     |                                          |    ^     |    &     |    *     |    (     |    )     |  EP TOG  |
+ // |  BT CLR  | BT SEL0  | BT SEL1  | BT SEL2  | BGT SEL3 | BT SEL4  |                                          | RGB EFF+ | RGB HUE+ | RGB SAT+ | RGB SPD+ | RGB BRI+ | RGB TOG  |
+ // |  BT NXT  | OUT TOG  | OUT USB  | OUT BLE  |          |          |                                          | RGB EFF- | RGB HUE- | RGB SAT- | RGB SPD- | RGB BRI- |          |
+ // |  BT PRV  |          |          |          |          |          |    {     |                    |    }     |          |          |          |          |          |          |
+ // |          |          |          |          |          |          |          |                    |          |          |          |          |          |          |          |
+                     bindings = <
+       &kp GRAVE  &kp EXCL     &kp AT       &kp HASH     &kp DLLR     &kp PRCNT                             &kp CARET       &kp AMPS        &kp ASTRK       &kp LPAR        &kp RPAR        &ext_power EP_TOG
+       &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4                          &rgb_ug RGB_EFF &rgb_ug RGB_HUI &rgb_ug RGB_SAI &rgb_ug RGB_SPI &rgb_ug RGB_BRI &rgb_ug RGB_TOG 
+       &bt BT_NXT &out OUT_TOG &out OUT_USB &out OUT_BLE &trans       &trans                                &rgb_ug RGB_EFR &rgb_ug RGB_HUD &rgb_ug RGB_SAD &rgb_ug RGB_SPD &rgb_ug RGB_BRD &trans
+       &bt BT_PRV &trans       &trans       &trans       &trans       &trans       &kp LBRC        &kp RBRC &trans          &trans          &trans          &trans          &trans          &trans
+       &trans     &trans       &trans       &trans       &trans       &trans       &trans          &trans   &trans          &trans          &trans          &trans          &trans          &trans
+                     >;
+              };
+       };
+};
\ No newline at end of file
diff --git a/app/boards/shields/helix/helix_left.overlay b/app/boards/shields/helix/helix_left.overlay
new file mode 100644
index 00000000..733e55f9
--- /dev/null
+++ b/app/boards/shields/helix/helix_left.overlay
@@ -0,0 +1,19 @@
+/*
+ * Copyright (c) 2020 The ZMK Contributors
+ *
+ * SPDX-License-Identifier: MIT
+ */
+ 
+#include "helix.dtsi"
+
+&kscan0 {
+    col-gpios
+        = <&pro_micro_a 3 GPIO_ACTIVE_HIGH>
+        , <&pro_micro_a 2 GPIO_ACTIVE_HIGH>
+        , <&pro_micro_a 1 GPIO_ACTIVE_HIGH>
+        , <&pro_micro_a 0 GPIO_ACTIVE_HIGH>
+        , <&pro_micro_d 15 GPIO_ACTIVE_HIGH>
+        , <&pro_micro_d 14 GPIO_ACTIVE_HIGH>
+        , <&pro_micro_d 16 GPIO_ACTIVE_HIGH>
+        ;
+};
diff --git a/app/boards/shields/helix/helix_right.overlay b/app/boards/shields/helix/helix_right.overlay
new file mode 100644
index 00000000..2383a30e
--- /dev/null
+++ b/app/boards/shields/helix/helix_right.overlay
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2020 The ZMK Contributors
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "helix.dtsi"
+
+&default_transform {
+	col-offset = <7>;
+};
+
+&kscan0 {
+    col-gpios
+        = <&pro_micro_d 16 GPIO_ACTIVE_HIGH>
+        , <&pro_micro_d 14 GPIO_ACTIVE_HIGH>
+        , <&pro_micro_d 15 GPIO_ACTIVE_HIGH>
+        , <&pro_micro_a 0 GPIO_ACTIVE_HIGH>
+        , <&pro_micro_a 1 GPIO_ACTIVE_HIGH>
+        , <&pro_micro_a 2 GPIO_ACTIVE_HIGH>
+        , <&pro_micro_a 3 GPIO_ACTIVE_HIGH>
+        ;
+};
diff --git a/docs/docs/hardware.md b/docs/docs/hardware.md
index 244bdd60..0dc17782 100644
--- a/docs/docs/hardware.md
+++ b/docs/docs/hardware.md
@@ -25,6 +25,7 @@ That being said, there are currently only a few specific [boards](/docs/faq#what
 
 - [Kyria](https://splitkb.com/products/kyria-pcb-kit) (`kyria_left` and `kyria_right`)
 - [Corne](https://github.com/foostan/crkbd) (`corne_left` and `corne_right`)
+- [Helix](https://github.com/mcmadhatter/helix) (`helix_left` and `helix_right`)
 - [Lily58](https://github.com/kata0510/Lily58) (`lily58_left` and `lily58_right`)
 - [Sofle](https://github.com/josefadamcik/SofleKeyboard) (`sofle_left` and `sofle_right`)
 - [Splitreus62](https://github.com/Na-Cly/splitreus62) (`splitreus62_left` and `splitreus62_right`)
diff --git a/docs/static/setup.ps1 b/docs/static/setup.ps1
index ffd938f4..63cdb725 100644
--- a/docs/static/setup.ps1
+++ b/docs/static/setup.ps1
@@ -91,9 +91,9 @@ Write-Host "Keyboard Shield Selection:"
 $prompt = "Pick a keyboard"
 
 # TODO: Add support for "Other" and linking to docs on adding custom shields in user config repos.
-$options = "Kyria", "Lily58", "Corne", "Splitreus62", "Sofle", "Iris", "Reviung41", "RoMac", "RoMac+", "makerdiary M60", "Microdox", "TG4X", "QAZ", "NIBBLE", "Jorne", "Jian", "CRBN", "Tidbit", "Eek!", "BFO-9000"
-$names = "kyria", "lily58", "corne", "splitreus62", "sofle", "iris", "reviung41", "romac", "romac_plus", "m60", "microdox", "tg4x", "qaz", "nibble", "jorne", "jian", "crbn", "tidbit", "eek", "bfo9000"
-$splits = "y", "y", "y", "y", "y", "y", "n", "n", "n", "n", "y", "n", "n", "n", "y", "y", "n", "n", "n", "n"
+$options = "Kyria", "Lily58", "Corne", "Splitreus62", "Sofle", "Iris", "Reviung41", "RoMac", "RoMac+", "makerdiary M60", "Microdox", "TG4X", "QAZ", "NIBBLE", "Jorne", "Jian", "CRBN", "Tidbit", "Eek!", "BFO-9000", "Helix"
+$names = "kyria", "lily58", "corne", "splitreus62", "sofle", "iris", "reviung41", "romac", "romac_plus", "m60", "microdox", "tg4x", "qaz", "nibble", "jorne", "jian", "crbn", "tidbit", "eek", "bfo9000", "helix"
+$splits = "y", "y", "y", "y", "y", "y", "n", "n", "n", "n", "y", "n", "n", "n", "y", "y", "n", "n", "n", "n", "y"
 
 $choice = Get-Choice-From-Options -Options $options -Prompt $prompt
 $shield_title = $($options[$choice])
diff --git a/docs/static/setup.sh b/docs/static/setup.sh
index 486bb06c..89fd1af2 100644
--- a/docs/static/setup.sh
+++ b/docs/static/setup.sh
@@ -92,7 +92,7 @@ echo ""
 echo "Keyboard Shield Selection:"
 
 prompt="Pick an keyboard:"
-options=("Kyria" "Lily58" "Corne" "Splitreus62" "Sofle" "Iris" "Reviung41" "RoMac" "RoMac+" "makerdiary M60" "Microdox" "TG4X" "QAZ" "Jorne" "Jian" "CRBN" "Tidbit" "Eek!" "BF0-9000")
+options=("Kyria" "Lily58" "Corne" "Splitreus62" "Sofle" "Iris" "Reviung41" "RoMac" "RoMac+" "makerdiary M60" "Microdox" "TG4X" "QAZ" "Jorne" "Jian" "CRBN" "Tidbit" "Eek!" "BF0-9000" "Helix")
 
 PS3="$prompt "
 # TODO: Add support for "Other" and linking to docs on adding custom shields in user config repos.
@@ -120,7 +120,8 @@ select opt in "${options[@]}" "Quit"; do
     17 ) shield_title="CRBN" shield="crbn"; split="n"; break;;
     18 ) shield_title="Tidbit" shield="tidbit"; split="n" break;;
     19 ) shield_title="Eek!" shield="eek"; split="n" break;;
-    17 ) shield_title="BFO-9000" shield="bfo9000"; split="y"; break;;
+    20 ) shield_title="BFO-9000" shield="bfo9000"; split="y"; break;;
+    21 ) shield_title="Helix" shield="helix"; split"y"; break;;
 
     # Add link to docs on adding your own custom shield in your ZMK config!
     # $(( ${#options[@]}+1 )) ) echo "Other!"; break;;