This commit is contained in:
Glen 2022-04-01 22:33:47 -04:00
parent 0c28a3586a
commit f59457cf87
20 changed files with 409 additions and 39 deletions

View file

@ -3,12 +3,47 @@ on: [pull_request, workflow_dispatch]
name: Build
jobs:
matrix:
runs-on: ubuntu-latest
name: Fetch Build Keyboards
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Install yaml2json
run: python3 -m pip install remarshal
- id: set-matrix
name: Fetch Build Matrix
run: |
matrix=$(yaml2json build.yaml | jq -c .)
yaml2json build.yaml
echo "::set-output name=matrix::${matrix}"
build:
runs-on: ubuntu-latest
container:
image: zmkfirmware/zmk-build-arm:2.4
image: petejohanson/zmk-build-arm:3.0-branch
needs: matrix
name: Build
strategy:
fail-fast: false
matrix: ${{fromJson(needs.matrix.outputs.matrix)}}
steps:
- name: Prepare variables
id: variables
run: |
if [ -n "${{ matrix.shield }}" ]; then
EXTRA_CMAKE_ARGS="-DSHIELD=${{ matrix.shield }}"
ARTIFACT_NAME="${{ matrix.shield }}-${{ matrix.board }}-zmk"
DISPLAY_NAME="${{ matrix.shield }} - ${{ matrix.board }}"
else
EXTRA_CMAKE_ARGS=
DISPLAY_NAME="${{ matrix.board }}"
ARTIFACT_NAME="${{ matrix.board }}-zmk"
fi
echo ::set-output name=extra-cmake-args::${EXTRA_CMAKE_ARGS}
echo ::set-output name=artifact-name::${ARTIFACT_NAME}
echo ::set-output name=display-name::${DISPLAY_NAME}
- name: Checkout
uses: actions/checkout@v2
- name: Cache west modules
@ -33,19 +68,28 @@ jobs:
run: west update
- name: West Zephyr export
run: west zephyr-export
- name: West Build (Hummingbird)
run: west build -s zmk/app -b seeeduino_xiao -- -DSHIELD=hummingbird -DZMK_CONFIG="${GITHUB_WORKSPACE}/config"
- name: UF2 Build
run: python3 ./tools/uf2/utils/uf2conv.py -c -f SAMD21 -o build/zephyr/zmk.uf2 build/zephyr/zmk.bin
- name: Hummingbird DTS File
- name: West Build (${{ steps.variables.outputs.display-name }})
run: |
west build -s zmk/app -b ${{ matrix.board }} -- -DZMK_CONFIG=${GITHUB_WORKSPACE}/config ${{ steps.variables.outputs.extra-cmake-args }} ${{ matrix.cmake-args }}
- name: ${{ steps.variables.outputs.display-name }} DTS File
if: ${{ always() }}
run: cat -n build/zephyr/seeeduino_xiao.dts.pre.tmp
- name: Hummingbird Kconfig file
run: |
if [ -f "build/zephyr/${{ matrix.board }}.dts.pre.tmp" ]; then cat -n build/zephyr/${{ matrix.board }}.dts.pre.tmp; fi
if [ -f "build/zephyr/zephyr.dts" ]; then cat -n build/zephyr/zephyr.dts; fi
- name: ${{ steps.variables.outputs.display-name }} Kconfig file
run: cat build/zephyr/.config | grep -v "^#" | grep -v "^$"
- name: Rename zmk.uf2
run: cp build/zephyr/zmk.uf2 hummingbird.uf2
- name: Archive (Hummingbird)
- name: Rename artifacts
run: |
mkdir build/artifacts
if [ -f build/zephyr/zmk.uf2 ]
then
cp build/zephyr/zmk.uf2 "build/artifacts/${{ steps.variables.outputs.artifact-name }}.uf2"
elif [ -f build/zephyr/zmk.hex ]
then
cp build/zephyr/zmk.hex "build/artifacts/${{ steps.variables.outputs.artifact-name }}.hex"
fi
- name: Archive (${{ steps.variables.outputs.display-name }})
uses: actions/upload-artifact@v2
with:
name: firmware
path: hummingbird.uf2
path: build/artifacts

23
build.yaml Normal file
View file

@ -0,0 +1,23 @@
# This file generates the GitHub Actions matrix
# For simple board + shield combinations, add them
# to the top level board and shield arrays, for more
# control, add individual board + shield combinations to
# the `include` property, e.g:
#
# board: [ "nice_nano_v2" ]
# shield: [ "corne_left", "corne_right" ]
# include:
# - board: bdn9_rev2
# - board: nice_nano_v2
# shield: reviung41
#
---
include:
- board: nice_nano_v2
shield: berylline_left
- board: nice_nano_v2
shield: berylline_right
- board: seeeduino_xiao
shield: hummingbird
- board: seeeduino_xiao_ble
shield: hummingbird

171
config/base.keymap Normal file
View file

@ -0,0 +1,171 @@
/*
* Copyright (c) 2020 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/
#include <behaviors.dtsi>
#include <dt-bindings/zmk/keys.h>
/* Layers */
#define DEF_L 0
#define NAV_L 1
#define UPP_L 2
#define SYM_L 3
#define NUM_L 4
/* Behavior Settings */
&caps_word {
continue-list = <UNDERSCORE MINUS BACKSPACE>;
};
&sk {
release-after-ms = <60000>;
};
/ {
ZMK_MACRO(mo_nav,
wait-ms = <0>;
tap-ms = <0>;
bindings
= <&macro_tap &kp K_CANCEL>
, <&macro_press &mo NAV_L>
, <&macro_pause_for_release>
, <&macro_release &mo NAV_L>;)
ZMK_MACRO(mo_upp,
wait-ms = <0>;
tap-ms = <0>;
bindings
= <&macro_tap &kp K_CANCEL>
, <&macro_press &mo UPP_L>
, <&macro_pause_for_release>
, <&macro_release &mo UPP_L>;)
ZMK_MACRO(mo_sym,
wait-ms = <0>;
tap-ms = <0>;
bindings
= <&macro_tap &kp K_CANCEL>
, <&macro_press &mo SYM_L>
, <&macro_pause_for_release>
, <&macro_release &mo SYM_L>;)
combos {
compatible = "zmk,combos";
#define COMBO(NAME, BINDINGS, KEYPOS, LAYERS) \
combo_##NAME { \
bindings = <BINDINGS>; \
key-positions = <KEYPOS>; \
layers = <LAYERS>; \
};
/* KEY POSITIONS
╭────────────────────╮ ╭────────────────────╮
│ 0 1 2 3 4 │ │ 5 6 7 8 9 │
│ 10 11 12 13 14 │ │ 15 16 17 18 19 │
│ 20 21 22 │ │ 23 24 25 │
╰───────────╮ 26 27 │ │ 28 29 ╭───────────╯
╰────────╯ ╰────────╯ */
/* Letters */
COMBO(lower_v, &kp V, 1 2, DEF_L)
COMBO(lower_q, &kp Q, 1 3, DEF_L)
COMBO(lower_z, &kp Z, 20 21, DEF_L)
COMBO(upper_v, &kp LS(V), 1 2, UPP_L)
COMBO(upper_q, &kp LS(Q), 1 3, UPP_L)
COMBO(upper_z, &kp LS(Z), 20 21, UPP_L)
/* Brackets */
COMBO(left_bracket, &kp LBKT, 1 11, DEF_L UPP_L SYM_L NUM_L)
COMBO(right_bracket, &kp RBKT, 8 18, DEF_L UPP_L SYM_L NUM_L)
COMBO(left_parenthesis, &kp LPAR, 2 12, DEF_L UPP_L SYM_L NUM_L)
COMBO(right_parenthesis, &kp RPAR, 7 17, DEF_L UPP_L SYM_L NUM_L)
COMBO(left_brace, &kp LBRC, 3 13, DEF_L UPP_L SYM_L NUM_L)
COMBO(right_brace, &kp RBRC, 6 16, DEF_L UPP_L SYM_L NUM_L)
/* Convenience */
COMBO(esc, &kp ESC, 3 4, DEF_L)
COMBO(del, &kp DEL, 13 14, DEF_L)
COMBO(select_all, &kp LC(A), 20 21, NAV_L)
};
conditional_layers {
compatible = "zmk,conditional-layers";
tri_layer {
if-layers = <UPP_L SYM_L>;
then-layer = <NUM_L>;
};
};
keymap {
compatible = "zmk,keymap";
default_layer {
bindings = <
// ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮
&kp J &kp P &kp U &kp O &kp K &kp B &kp D &kp R &kp F &kp Q
&kp W &kp I &kp E &kp A &kp DOT &kp G &kp T &kp N &kp S &kp H
&kp Y &kp QUOT &kp COMMA &kp M &kp L &kp C
// ╰─────────────┴─────────────┴─────────────╮ ╭─────────────┴─────────────┴─────────────╯
&mo_nav &kp SPACE &mo_upp &mo_sym
// ╰─────────────┴─────────────╯ ╰─────────────┴─────────────╯
>;
};
nav_layer {
label = "Nav";
bindings = <
// ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮
&kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp PG_UP &kp HOME &kp UARW &kp END &caps_word
&sk LGUI &sk LALT &sk LSHFT &sk LCTRL &kp LC(Z) &kp PG_DN &kp LARW &kp ENTER &kp RARW &kp ESC
&kp LC(X) &kp LC(C) &kp LC(V) &kp TAB &kp DARW &key_repeat
// ╰─────────────┴─────────────┴─────────────╮ ╭─────────────┴─────────────┴─────────────╯
&trans &trans &kp BSPC &kp DEL
// ╰─────────────┴─────────────╯ ╰─────────────┴─────────────╯
>;
};
upper_layer {
label = "Upp";
bindings = <
// ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮
&kp LS(J) &kp LS(P) &kp LS(U) &kp LS(O) &kp LS(K) &kp LS(B) &kp LS(D) &kp LS(R) &kp LS(F) &kp LS(Q)
&kp LS(W) &kp LS(I) &kp LS(E) &kp LS(A) &kp LS(GT) &kp LS(G) &kp LS(T) &kp LS(N) &kp LS(S) &kp LS(H)
&kp LS(Y) &kp DQT &kp LT &kp LS(M) &kp LS(L) &kp LS(C)
// ╰─────────────┴─────────────┴─────────────╮ ╭─────────────┴─────────────┴─────────────╯
&trans &kp LS(SPACE) &trans &trans
// ╰─────────────┴─────────────╯ ╰─────────────┴─────────────╯
>;
};
sym_layer {
label = "Sym";
bindings = <
// ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮
&kp EXCL &kp AT &kp POUND &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp SEMI &kp COLON &kp DQT
&kp MINUS &kp PLUS &kp EQUAL &kp ASTRK &kp FSLH &kp BSLH &sk LCTRL &sk LSHFT &sk LALT &sk LGUI
&kp TILDE &kp GRAVE &kp QMARK &kp PIPE &kp LT &kp GT
// ╰─────────────┴─────────────┴─────────────╮ ╭─────────────┴─────────────┴─────────────╯
&trans &kp UNDER &trans &trans
// ╰─────────────┴─────────────╯ ╰─────────────┴─────────────╯
>;
};
num_layer {
label = "Num";
bindings = <
// ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮
&none &kp N7 &kp N4 &kp N3 &none &kp F6 &kp F7 &kp F8 &kp F9 &kp F10
&kp MINUS &kp N2 &kp N1 &kp N0 &kp SLASH &kp F11 &sk LCTRL &sk LSHFT &sk LALT &sk LGUI
&kp N8 &kp N6 &kp N5 &kp F12 &kp COMMA &kp DOT
// ╰─────────────┴─────────────┴─────────────╮ ╭─────────────┴─────────────┴─────────────╯
&trans &kp N9 &trans &trans
// ╰─────────────┴─────────────╯ ╰─────────────┴─────────────╯
>;
};
};
};

0
config/berylline.conf Normal file
View file

1
config/berylline.keymap Normal file
View file

@ -0,0 +1 @@
#include "base.keymap"

View file

@ -0,0 +1,19 @@
# Copyright (c) 2020 The ZMK Contributors
# SPDX-License-Identifier: MIT
if SHIELD_BERYLLINE_LEFT
config ZMK_KEYBOARD_NAME
default "Berylline"
config ZMK_SPLIT_BLE_ROLE_CENTRAL
default y
endif
if SHIELD_BERYLLINE_LEFT || SHIELD_BERYLLINE_RIGHT
config ZMK_SPLIT
default y
endif

View file

@ -0,0 +1,8 @@
# Copyright (c) 2020 The ZMK Contributors
# SPDX-License-Identifier: MIT
config SHIELD_BERYLLINE_LEFT
def_bool $(shields_list_contains,berylline_left)
config SHIELD_BERYLLINE_RIGHT
def_bool $(shields_list_contains,berylline_right)

View file

@ -0,0 +1,2 @@
CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS=10
CONFIG_ZMK_SLEEP=y

View file

@ -0,0 +1,32 @@
/*
* 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 = <30>;
rows = <1>;
map = <
RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,15) RC(0,16) RC(0,17) RC(0,18) RC(0,19)
RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,20) RC(0,21) RC(0,22) RC(0,23) RC(0,24)
RC(0,10) RC(0,11) RC(0,12) RC(0,25) RC(0,26) RC(0,27)
RC(0,13) RC(0,14) RC(0,28) RC(0,29)
>;
};
kscan0: kscan {
compatible = "zmk,kscan-gpio-direct";
label = "KSCAN";
};
};

View file

@ -0,0 +1,2 @@
# Copyright (c) 2020 The ZMK Contributors
# SPDX-License-Identifier: MIT

View file

@ -0,0 +1,27 @@
/*
* Copyright (c) 2020 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/
#include "berylline.dtsi"
&kscan0 {
input-gpios
= <&pro_micro 20 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pro_micro 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pro_micro 19 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pro_micro 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pro_micro 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pro_micro 21 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pro_micro 16 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pro_micro 18 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pro_micro 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pro_micro 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pro_micro 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pro_micro 15 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pro_micro 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pro_micro 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pro_micro 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
;
};

View file

@ -0,0 +1,2 @@
# Copyright (c) 2020 The ZMK Contributors
# SPDX-License-Identifier: MIT

View file

@ -0,0 +1,31 @@
/*
* Copyright (c) 2020 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/
#include "berylline.dtsi"
&default_transform {
col-offset = <15>;
};
&kscan0 {
input-gpios
= <&pro_micro 19 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pro_micro 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pro_micro 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pro_micro 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pro_micro 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pro_micro 18 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pro_micro 16 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pro_micro 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pro_micro 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pro_micro 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pro_micro 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pro_micro 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pro_micro 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pro_micro 20 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
, <&pro_micro 15 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
;
};

View file

@ -0,0 +1,5 @@
CONFIG_CONSOLE=n
CONFIG_UART_CONSOLE=n
CONFIG_UART_INTERRUPT_DRIVEN=n
CONFIG_ZMK_USB=y
CONFIG_ZMK_BLE=y

View file

@ -1 +1 @@
CONFIG_ZMK_COMBO_MAX_COMBOS_PER_KEY=6

View file

@ -33,24 +33,25 @@
diode-direction = "row2col";
col-gpios
= <&portb 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
, <&portb 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
, <&porta 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
, <&porta 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
, <&porta 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
= <&xiao_d 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
, <&xiao_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
, <&xiao_d 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
, <&xiao_d 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
, <&xiao_d 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
;
row-gpios
= <&porta 2 GPIO_ACTIVE_HIGH>
, <&porta 4 GPIO_ACTIVE_HIGH>
, <&porta 10 GPIO_ACTIVE_HIGH>
, <&porta 11 GPIO_ACTIVE_HIGH>
, <&porta 8 GPIO_ACTIVE_HIGH>
, <&porta 9 GPIO_ACTIVE_HIGH>
= <&xiao_d 0 GPIO_ACTIVE_HIGH>
, <&xiao_d 1 GPIO_ACTIVE_HIGH>
, <&xiao_d 2 GPIO_ACTIVE_HIGH>
, <&xiao_d 3 GPIO_ACTIVE_HIGH>
, <&xiao_d 4 GPIO_ACTIVE_HIGH>
, <&xiao_d 5 GPIO_ACTIVE_HIGH>
;
};
};
&sercom0 { status = "disabled"; };
&sercom4 { status = "disabled"; };
&xiao_spi { status = "disabled"; };
&xiao_i2c { status = "disabled"; };
&xiao_serial { status = "disabled"; };

1
config/hummingbird.conf Normal file
View file

@ -0,0 +1 @@

View file

@ -0,0 +1 @@
#include "base.keymap"