diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..66069c3 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.keymap linguist-language=C diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1fd39fc..3056cab 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -6,18 +6,18 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: recursive - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: repository: moergo-sc/zmk ref: main path: src - - uses: cachix/install-nix-action@v20 + - uses: cachix/install-nix-action@v30 with: nix_path: nixpkgs=channel:nixos-22.05 - - uses: cachix/cachix-action@v12 + - uses: cachix/cachix-action@v15 with: name: moergo-glove80-zmk-dev skipPush: true @@ -26,7 +26,7 @@ jobs: - name: Copy result out of nix store run: cp combined/glove80.uf2 glove80.uf2 - name: Upload result - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: glove80.uf2 path: glove80.uf2 diff --git a/.gitignore b/.gitignore index b25c15b..972873c 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ *~ +*.uf2 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..268b5b1 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,44 @@ +FROM nixpkgs/nix:nixos-23.11 + +ENV PATH=/root/.nix-profile/bin:/usr/bin:/bin + +RUN <&2 + cd /src + git fetch origin + git checkout -q --detach "\$BRANCH" + + echo 'Building Glove80 firmware' >&2 + cd /config + nix-build ./config --arg firmware 'import /src/default.nix {}' -j2 -o /tmp/combined --show-trace + install -o "\$UID" -g "\$GID" /tmp/combined/glove80.uf2 ./glove80.uf2 +EOF + +ENTRYPOINT ["/bin/entrypoint.sh"] + +# Run build.sh to use this file diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..73249c4 --- /dev/null +++ b/build.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +set -euo pipefail + +IMAGE=glove80-zmk-config-docker +BRANCH="${1:-main}" + +docker build -t "$IMAGE" . +docker run --rm -v "$PWD:/config" -e UID="$(id -u)" -e GID="$(id -g)" -e BRANCH="$BRANCH" "$IMAGE" diff --git a/config/default.nix b/config/default.nix index 0d9645c..c781cb6 100644 --- a/config/default.nix +++ b/config/default.nix @@ -1,7 +1,8 @@ -{ pkgs ? import {} }: +{ pkgs ? import {} +, firmware ? import ../src {} +}: let - firmware = import ../src {}; config = ./.; glove80_left = firmware.zmk.override { board = "glove80_lh"; keymap = "${config}/glove80.keymap"; kconfig = "${config}/glove80.conf"; }; diff --git a/config/info.json b/config/info.json index 03e32f0..03d1ad2 100644 --- a/config/info.json +++ b/config/info.json @@ -1,96 +1,93 @@ { - "id": "glove80", - "name": "glove80", "layouts": { "LAYOUT": { "layout": [ - { "label": "L_C6R1", "row": 0, "col": 0, "x": 0, "y": 0.5 }, - { "label": "L_C5R1", "row": 0, "col": 1, "x": 1, "y": 0.5 }, - { "label": "L_C4R1", "row": 0, "col": 2, "x": 2, "y": 0 }, - { "label": "L_C3R1", "row": 0, "col": 3, "x": 3, "y": 0 }, - { "label": "L_C2R1", "row": 0, "col": 4, "x": 4, "y": 0 }, - { "label": "R_C2R1", "row": 0, "col": 13, "x": 13, "y": 0 }, - { "label": "R_C3R1", "row": 0, "col": 14, "x": 14, "y": 0 }, - { "label": "R_C4R1", "row": 0, "col": 15, "x": 15, "y": 0 }, - { "label": "R_C5R1", "row": 0, "col": 16, "x": 16, "y": 0.5 }, - { "label": "R_C6R1", "row": 0, "col": 17, "x": 17, "y": 0.5 }, + { "label": "L_C6R1", "row": 0, "col": 0, "x": 0, "y": 0.5 }, + { "label": "L_C5R1", "row": 0, "col": 1, "x": 1, "y": 0.5 }, + { "label": "L_C4R1", "row": 0, "col": 2, "x": 2, "y": 0 }, + { "label": "L_C3R1", "row": 0, "col": 3, "x": 3, "y": 0 }, + { "label": "L_C2R1", "row": 0, "col": 4, "x": 4, "y": 0 }, + { "label": "R_C2R1", "row": 0, "col": 13, "x": 13, "y": 0 }, + { "label": "R_C3R1", "row": 0, "col": 14, "x": 14, "y": 0 }, + { "label": "R_C4R1", "row": 0, "col": 15, "x": 15, "y": 0 }, + { "label": "R_C5R1", "row": 0, "col": 16, "x": 16, "y": 0.5 }, + { "label": "R_C6R1", "row": 0, "col": 17, "x": 17, "y": 0.5 }, - { "label": "L_C6R2", "row": 1, "col": 0, "x": 0, "y": 1.5 }, - { "label": "L_C5R2", "row": 1, "col": 1, "x": 1, "y": 1.5 }, - { "label": "L_C4R2", "row": 1, "col": 2, "x": 2, "y": 1 }, - { "label": "L_C3R2", "row": 1, "col": 3, "x": 3, "y": 1 }, - { "label": "L_C2R2", "row": 1, "col": 4, "x": 4, "y": 1 }, - { "label": "L_C1R2", "row": 1, "col": 5, "x": 5, "y": 1 }, - { "label": "R_C1R2", "row": 1, "col": 12, "x": 12, "y": 1 }, - { "label": "R_C2R2", "row": 1, "col": 13, "x": 13, "y": 1 }, - { "label": "R_C3R2", "row": 1, "col": 14, "x": 14, "y": 1 }, - { "label": "R_C4R2", "row": 1, "col": 15, "x": 15, "y": 1 }, - { "label": "R_C5R2", "row": 1, "col": 16, "x": 16, "y": 1.5 }, - { "label": "R_C6R2", "row": 1, "col": 17, "x": 17, "y": 1.5 }, + { "label": "L_C6R2", "row": 1, "col": 0, "x": 0, "y": 1.5 }, + { "label": "L_C5R2", "row": 1, "col": 1, "x": 1, "y": 1.5 }, + { "label": "L_C4R2", "row": 1, "col": 2, "x": 2, "y": 1 }, + { "label": "L_C3R2", "row": 1, "col": 3, "x": 3, "y": 1 }, + { "label": "L_C2R2", "row": 1, "col": 4, "x": 4, "y": 1 }, + { "label": "L_C1R2", "row": 1, "col": 5, "x": 5, "y": 1 }, + { "label": "R_C1R2", "row": 1, "col": 12, "x": 12, "y": 1 }, + { "label": "R_C2R2", "row": 1, "col": 13, "x": 13, "y": 1 }, + { "label": "R_C3R2", "row": 1, "col": 14, "x": 14, "y": 1 }, + { "label": "R_C4R2", "row": 1, "col": 15, "x": 15, "y": 1 }, + { "label": "R_C5R2", "row": 1, "col": 16, "x": 16, "y": 1.5 }, + { "label": "R_C6R2", "row": 1, "col": 17, "x": 17, "y": 1.5 }, - { "label": "L_C6R3", "row": 2, "col": 0, "x": 0, "y": 2.5 }, - { "label": "L_C5R3", "row": 2, "col": 1, "x": 1, "y": 2.5 }, - { "label": "L_C4R3", "row": 2, "col": 2, "x": 2, "y": 2 }, - { "label": "L_C3R3", "row": 2, "col": 3, "x": 3, "y": 2 }, - { "label": "L_C2R3", "row": 2, "col": 4, "x": 4, "y": 2 }, - { "label": "L_C1R3", "row": 2, "col": 5, "x": 5, "y": 2 }, - { "label": "R_C1R3", "row": 2, "col": 12, "x": 12, "y": 2 }, - { "label": "R_C2R3", "row": 2, "col": 13, "x": 13, "y": 2 }, - { "label": "R_C3R3", "row": 2, "col": 14, "x": 14, "y": 2 }, - { "label": "R_C4R3", "row": 2, "col": 15, "x": 15, "y": 2 }, - { "label": "R_C5R3", "row": 2, "col": 16, "x": 16, "y": 2.5 }, - { "label": "R_C6R3", "row": 2, "col": 17, "x": 17, "y": 2.5 }, + { "label": "L_C6R3", "row": 2, "col": 0, "x": 0, "y": 2.5 }, + { "label": "L_C5R3", "row": 2, "col": 1, "x": 1, "y": 2.5 }, + { "label": "L_C4R3", "row": 2, "col": 2, "x": 2, "y": 2 }, + { "label": "L_C3R3", "row": 2, "col": 3, "x": 3, "y": 2 }, + { "label": "L_C2R3", "row": 2, "col": 4, "x": 4, "y": 2 }, + { "label": "L_C1R3", "row": 2, "col": 5, "x": 5, "y": 2 }, + { "label": "R_C1R3", "row": 2, "col": 12, "x": 12, "y": 2 }, + { "label": "R_C2R3", "row": 2, "col": 13, "x": 13, "y": 2 }, + { "label": "R_C3R3", "row": 2, "col": 14, "x": 14, "y": 2 }, + { "label": "R_C4R3", "row": 2, "col": 15, "x": 15, "y": 2 }, + { "label": "R_C5R3", "row": 2, "col": 16, "x": 16, "y": 2.5 }, + { "label": "R_C6R3", "row": 2, "col": 17, "x": 17, "y": 2.5 }, - { "label": "L_C6R4", "row": 3, "col": 0, "x": 0, "y": 3.5 }, - { "label": "L_C5R4", "row": 3, "col": 1, "x": 1, "y": 3.5 }, - { "label": "L_C4R4", "row": 3, "col": 2, "x": 2, "y": 3 }, - { "label": "L_C3R4", "row": 3, "col": 3, "x": 3, "y": 3 }, - { "label": "L_C2R4", "row": 3, "col": 4, "x": 4, "y": 3 }, - { "label": "L_C1R4", "row": 3, "col": 5, "x": 5, "y": 3 }, - { "label": "R_C1R4", "row": 3, "col": 12, "x": 12, "y": 3 }, - { "label": "R_C2R4", "row": 3, "col": 13, "x": 13, "y": 3 }, - { "label": "R_C3R4", "row": 3, "col": 14, "x": 14, "y": 3 }, - { "label": "R_C4R4", "row": 3, "col": 15, "x": 15, "y": 3 }, - { "label": "R_C5R4", "row": 3, "col": 16, "x": 16, "y": 3.5 }, - { "label": "R_C6R4", "row": 3, "col": 17, "x": 17, "y": 3.5 }, + { "label": "L_C6R4", "row": 3, "col": 0, "x": 0, "y": 3.5 }, + { "label": "L_C5R4", "row": 3, "col": 1, "x": 1, "y": 3.5 }, + { "label": "L_C4R4", "row": 3, "col": 2, "x": 2, "y": 3 }, + { "label": "L_C3R4", "row": 3, "col": 3, "x": 3, "y": 3 }, + { "label": "L_C2R4", "row": 3, "col": 4, "x": 4, "y": 3 }, + { "label": "L_C1R4", "row": 3, "col": 5, "x": 5, "y": 3 }, + { "label": "R_C1R4", "row": 3, "col": 12, "x": 12, "y": 3 }, + { "label": "R_C2R4", "row": 3, "col": 13, "x": 13, "y": 3 }, + { "label": "R_C3R4", "row": 3, "col": 14, "x": 14, "y": 3 }, + { "label": "R_C4R4", "row": 3, "col": 15, "x": 15, "y": 3 }, + { "label": "R_C5R4", "row": 3, "col": 16, "x": 16, "y": 3.5 }, + { "label": "R_C6R4", "row": 3, "col": 17, "x": 17, "y": 3.5 }, - { "label": "L_C6R5", "row": 4, "col": 0, "x": 0, "y": 4.5 }, - { "label": "L_C5R5", "row": 4, "col": 1, "x": 1, "y": 4.5 }, - { "label": "L_C4R5", "row": 4, "col": 2, "x": 2, "y": 4 }, - { "label": "L_C3R5", "row": 4, "col": 3, "x": 3, "y": 4 }, - { "label": "L_C2R5", "row": 4, "col": 4, "x": 4, "y": 4 }, - { "label": "L_C1R5", "row": 4, "col": 5, "x": 5, "y": 4 }, - { "label": "L_T1", "row": 4, "col": 6, "x": 6.4, "y": 4, "r": 20, "rx": 4 }, - { "label": "L_T2", "row": 4, "col": 7, "x": 7.8, "y": 3.3, "r": 30, "rx": 4 }, - { "label": "L_T3", "row": 4, "col": 8, "x": 10.1, "y": 1.5, "r": 45, "rx": 4 }, - { "label": "R_T3", "row": 4, "col": 9, "x": 7, "y": 1.5, "r": -45, "rx": 14 }, - { "label": "R_T2", "row": 4, "col": 10, "x": 9.3, "y": 3.3, "r": -30, "rx": 14 }, - { "label": "R_T1", "row": 4, "col": 11, "x": 10.7, "y": 4, "r": -20, "rx": 14 }, - { "label": "R_C1R5", "row": 4, "col": 12, "x": 12, "y": 4 }, - { "label": "R_C2R5", "row": 4, "col": 13, "x": 13, "y": 4 }, - { "label": "R_C3R5", "row": 4, "col": 14, "x": 14, "y": 4 }, - { "label": "R_C4R5", "row": 4, "col": 15, "x": 15, "y": 4 }, - { "label": "R_C5R5", "row": 4, "col": 16, "x": 16, "y": 4.5 }, - { "label": "R_C6R5", "row": 4, "col": 17, "x": 17, "y": 4.5 }, + { "label": "L_C6R5", "row": 4, "col": 0, "x": 0, "y": 4.5 }, + { "label": "L_C5R5", "row": 4, "col": 1, "x": 1, "y": 4.5 }, + { "label": "L_C4R5", "row": 4, "col": 2, "x": 2, "y": 4 }, + { "label": "L_C3R5", "row": 4, "col": 3, "x": 3, "y": 4 }, + { "label": "L_C2R5", "row": 4, "col": 4, "x": 4, "y": 4 }, + { "label": "L_C1R5", "row": 4, "col": 5, "x": 5, "y": 4 }, + { "label": "L_T1", "row": 4, "col": 6, "x": 6.4, "y": 4, "r": 20, "rx": 4 }, + { "label": "L_T2", "row": 4, "col": 7, "x": 7.8, "y": 3.3, "r": 30, "rx": 4 }, + { "label": "L_T3", "row": 4, "col": 8, "x": 10.1, "y": 1.5, "r": 45, "rx": 4 }, + { "label": "R_T3", "row": 4, "col": 9, "x": 7, "y": 1.5, "r": -45, "rx": 14 }, + { "label": "R_T2", "row": 4, "col": 10, "x": 9.3, "y": 3.3, "r": -30, "rx": 14 }, + { "label": "R_T1", "row": 4, "col": 11, "x": 10.7, "y": 4, "r": -20, "rx": 14 }, + { "label": "R_C1R5", "row": 4, "col": 12, "x": 12, "y": 4 }, + { "label": "R_C2R5", "row": 4, "col": 13, "x": 13, "y": 4 }, + { "label": "R_C3R5", "row": 4, "col": 14, "x": 14, "y": 4 }, + { "label": "R_C4R5", "row": 4, "col": 15, "x": 15, "y": 4 }, + { "label": "R_C5R5", "row": 4, "col": 16, "x": 16, "y": 4.5 }, + { "label": "R_C6R5", "row": 4, "col": 17, "x": 17, "y": 4.5 }, - { "label": "L_C6R6", "row": 5, "col": 0, "x": 0, "y": 5.5 }, - { "label": "L_C5R6", "row": 5, "col": 1, "x": 1, "y": 5.5 }, - { "label": "L_C4R6", "row": 5, "col": 2, "x": 2, "y": 5 }, - { "label": "L_C3R6", "row": 5, "col": 3, "x": 3, "y": 5 }, - { "label": "L_C2R6", "row": 5, "col": 4, "x": 4, "y": 5 }, - { "label": "L_T4", "row": 5, "col": 6, "x": 5.3, "y": 5.4, "r": 15, "rx": 4 }, - { "label": "L_T5", "row": 5, "col": 7, "x": 6.6, "y": 5, "r": 25, "rx": 4 }, - { "label": "L_T6", "row": 5, "col": 8, "x": 9, "y": 3.2, "r": 45, "rx": 4 }, - { "label": "R_T6", "row": 5, "col": 9, "x": 8, "y": 3.2, "r": -45, "rx": 14 }, - { "label": "R_T5", "row": 5, "col": 10, "x": 10.4, "y": 5, "r": -25, "rx": 14 }, - { "label": "R_T4", "row": 5, "col": 11, "x": 11.7, "y": 5.4, "r": -15, "rx": 14 }, - { "label": "R_C2R6", "row": 5, "col": 13, "x": 13, "y": 5 }, - { "label": "R_C3R6", "row": 5, "col": 14, "x": 14, "y": 5 }, - { "label": "R_C4R6", "row": 5, "col": 15, "x": 15, "y": 5 }, - { "label": "R_C5R6", "row": 5, "col": 16, "x": 16, "y": 5.5 }, - { "label": "R_C6R6", "row": 5, "col": 17, "x": 17, "y": 5.5 } + { "label": "L_C6R6", "row": 5, "col": 0, "x": 0, "y": 5.5 }, + { "label": "L_C5R6", "row": 5, "col": 1, "x": 1, "y": 5.5 }, + { "label": "L_C4R6", "row": 5, "col": 2, "x": 2, "y": 5 }, + { "label": "L_C3R6", "row": 5, "col": 3, "x": 3, "y": 5 }, + { "label": "L_C2R6", "row": 5, "col": 4, "x": 4, "y": 5 }, + { "label": "L_T4", "row": 5, "col": 6, "x": 5.3, "y": 5.4, "r": 15, "rx": 4 }, + { "label": "L_T5", "row": 5, "col": 7, "x": 6.6, "y": 5, "r": 25, "rx": 4 }, + { "label": "L_T6", "row": 5, "col": 8, "x": 9, "y": 3.2, "r": 45, "rx": 4 }, + { "label": "R_T6", "row": 5, "col": 9, "x": 8, "y": 3.2, "r": -45, "rx": 14 }, + { "label": "R_T5", "row": 5, "col": 10, "x": 10.4, "y": 5, "r": -25, "rx": 14 }, + { "label": "R_T4", "row": 5, "col": 11, "x": 11.7, "y": 5.4, "r": -15, "rx": 14 }, + { "label": "R_C2R6", "row": 5, "col": 13, "x": 13, "y": 5 }, + { "label": "R_C3R6", "row": 5, "col": 14, "x": 14, "y": 5 }, + { "label": "R_C4R6", "row": 5, "col": 15, "x": 15, "y": 5 }, + { "label": "R_C5R6", "row": 5, "col": 16, "x": 16, "y": 5.5 }, + { "label": "R_C6R6", "row": 5, "col": 17, "x": 17, "y": 5.5 } ] } - }, - "sensors": [] -} \ No newline at end of file + } +}