Skip to content

Commit f9ef6c8

Browse files
committed
refactor(ci): use flake to draw SVGs
1 parent 73a113f commit f9ef6c8

File tree

3 files changed

+53
-82
lines changed

3 files changed

+53
-82
lines changed

.github/workflows/draw-keymaps.yml

+11-66
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,8 @@ on:
44
push: # automatically run on changes to following paths
55
paths:
66
- "**.lock"
7+
- "drawer/**"
78
- "config/**"
8-
env:
9-
km_dr_version: main
10-
km_dr_config: config/keymap_drawer.yaml
11-
keymap_path: config/*.keymap
12-
output_folder: img
139

1410
jobs:
1511
draw:
@@ -21,72 +17,21 @@ jobs:
2117
steps:
2218

2319
- name: Checkout
24-
uses: actions/checkout@v3
20+
uses: actions/checkout@v4
2521
with:
26-
fetch-depth: 1 # Set to 2 if amending, or 1 if creating a new commit
22+
# Set to 2 if amending, or 1 if creating a new commit
23+
fetch-depth: 1
2724
submodules: recursive
2825

29-
- name: Install python dependencies
30-
run: |
31-
pip install "git+https://github.com/caksoylar/keymap-drawer.git@${{ env.km_dr_version }}"
32-
pip install pyyaml
26+
- name: Install nix
27+
uses: cachix/install-nix-action@v25
28+
- name: Setup nix cache
29+
uses: DeterminateSystems/magic-nix-cache-action@main
3330

34-
# TODO get keyboads & configs dynamically
35-
- name: Parse keymap
36-
run: |
37-
# TODO set generic vars in one place globally
38-
CONFIG="${{ env.km_dr_config }}"
39-
40-
for KEYMAP in ${{ env.keymap_path }}; do
41-
KEYBOARD=$(basename -s .keymap "$KEYMAP")
42-
OUTPUT="${{ env.output_folder }}/${KEYBOARD}.yaml"
43-
44-
# TODO consider running through `parallel`?
45-
echo "Parsing keymap for $KEYBOARD"
46-
keymap -c "$CONFIG" parse -z "$KEYMAP" > "$OUTPUT"
47-
done
48-
49-
- name: Draw keymap for all layers
50-
run: |
51-
CONFIG="${{ env.km_dr_config }}"
52-
53-
# FIXME can glob false positeves, e.g. previous keymaps
54-
for KEYMAP in ${{ env.output_folder }}/*.yaml; do
55-
KEYBOARD=$(basename -s .yaml "$KEYMAP")
56-
OUTPUT="${{ env.output_folder }}/${KEYBOARD}.svg"
57-
58-
echo "Drawing all layers for $KEYBOARD"
59-
keymap -c "$CONFIG" draw "$KEYMAP" > "$OUTPUT"
60-
done
61-
62-
63-
- name: Draw seperate layer keymaps
64-
run: |
65-
# Ensure errors propagate when piping stdout
66-
set -o pipefail
67-
68-
export CONFIG="${{ env.km_dr_config }}"
69-
70-
# Function to draw the given layer's keymap
71-
draw() {
72-
KEYMAP="$1"
73-
LAYER="$2"
74-
KEYBOARD=$(basename -s .yaml "$KEYMAP")
75-
OUTPUT="${{ env.output_folder }}/${KEYBOARD}_${LAYER}.svg"
76-
77-
echo "Drawing $LAYER layer for $KEYBOARD"
78-
keymap -c "$CONFIG" draw "$KEYMAP" -s "$LAYER" > "$OUTPUT"
79-
}
80-
export -f draw # Ensure the draw function can be called by `parallel`'s subprocess
81-
82-
# FIXME can glob false positeves, e.g. previous keymaps
83-
for KEYMAP in ${{ env.output_folder }}/*.yaml; do
84-
# Run `draw()` for each layer in the keymap. Up to 4 layers at a time...
85-
echo "Drawing layers in parallel"
86-
python3 .github/workflows/layers.py "$KEYMAP" \
87-
| parallel --jobs 4 draw "$KEYMAP"
88-
done
31+
- name: Draw keymaps
32+
run: nix run . -- draw
8933

34+
# TODO print to $GITHUB_STEP_SUMMARY
9035
- name: Commit changes
9136
uses: stefanzweifel/git-auto-commit-action@v4
9237
with:

.github/workflows/layers.py

-16
This file was deleted.

drawer/default.nix

+42
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,15 @@
55
}: let
66
in {
77
perSystem = {
8+
config,
89
pkgs,
910
system,
1011
...
1112
}: let
1213
inherit (inputs.poetry2nix.lib.mkPoetry2Nix {inherit pkgs;}) mkPoetryApplication;
14+
15+
exe = lib.getExe config.packages.keymap-drawer;
16+
yq = lib.getExe pkgs.yq-go;
1317
in {
1418
packages = {
1519
keymap-drawer = mkPoetryApplication {
@@ -21,4 +25,42 @@ in {
2125
};
2226
};
2327
};
28+
29+
devshells.default.commands = [
30+
{
31+
name = "draw";
32+
command = /*bash*/ ''
33+
set +e
34+
35+
out="$PRJ_ROOT"/img
36+
keymap_dir="$PRJ_ROOT"/config
37+
cmd="${exe} --config $keymap_dir/keymap_drawer.yaml"
38+
39+
echo "Removing previous images"
40+
rm "$out"/*
41+
42+
for file in "$keymap_dir"/*.keymap
43+
do
44+
name="$(basename --suffix=".keymap" "$file")"
45+
config="$out/$name.yaml"
46+
echo "Found keymap $name"
47+
48+
echo "- Parsing keymap-drawer"
49+
$cmd parse --zmk-keymap "$file" > "$config"
50+
51+
echo "- Drawing all layers"
52+
$cmd draw "$config" > "$out"/"$name".svg
53+
54+
layers=$(${yq} '.layers | keys | .[]' "$config")
55+
for layer in $layers
56+
do
57+
echo "- Drawing $layer layer"
58+
$cmd draw "$config" --select-layers "$layer" > "$out"/"$name"_"$layer".svg
59+
done
60+
done
61+
'';
62+
help = "Draw SVG images of the keymap";
63+
}
64+
];
65+
};
2466
}

0 commit comments

Comments
 (0)