1min_version = "2026.2.4"
2
3[vars]
4platform = "emery"
5screenshot = "screenshot_emery.png"
6python_version = "3.13"
7pebble_tool_version = "5.0.37"
8pebble_tool_python = "{{env.HOME}}/.local/share/mise/installs/pipx-pebble-tool/{{vars.pebble_tool_version}}/pebble-tool/bin/python"
9app_icons_script = "{{env.HOME}}/.agents/skills/pebble-watchface/scripts/create_app_icons.py"
10preview_gif_script = "{{env.HOME}}/.agents/skills/pebble-watchface/scripts/create_preview_gif.py"
11
12[tools]
13node = "22"
14"aqua:tamasfe/taplo" = "0.10.0"
15"npm:prettier" = "3.8.1"
16"pipx:pebble-tool" = { version = "{{vars.pebble_tool_version}}", uvx_args = "--python {{vars.python_version}}" }
17
18[tasks.fmt]
19description = "Format C, PebbleKit JS, JSON, Markdown, and TOML"
20run = ["mise run c:fmt", "mise run prettier:fmt", "mise run toml:fmt"]
21
22[tasks.lint]
23description = "Check formatting"
24run = ["mise run c:lint", "mise run prettier:lint", "mise run toml:lint"]
25
26[tasks.fix]
27description = "Format and run lightweight checks"
28run = ["mise run fmt", "mise run lint"]
29
30[tasks.build]
31description = "Build the Pebble PBW"
32run = "pebble build"
33
34[tasks.check]
35description = "Format, lint, and build without requiring an emulator"
36run = ["mise run fix", "mise run build"]
37
38[tasks.clean]
39description = "Remove Pebble build artifacts"
40run = "pebble clean"
41
42[tasks."c:fmt"]
43description = "Format Pebble C code"
44run = "clang-format -i src/c/main.c"
45
46[tasks."c:lint"]
47description = "Check Pebble C formatting"
48run = "clang-format --dry-run --Werror src/c/main.c"
49
50[tasks."prettier:fmt"]
51description = "Format JS, JSON, and Markdown"
52run = "prettier --trailing-comma none --write README.md PRODUCT.md package.json src/pkjs/index.js"
53
54[tasks."prettier:lint"]
55description = "Check JS, JSON, and Markdown formatting"
56run = "prettier --trailing-comma none --check README.md PRODUCT.md package.json src/pkjs/index.js"
57
58[tasks."toml:fmt"]
59description = "Format TOML"
60run = "taplo fmt mise.toml"
61
62[tasks."toml:lint"]
63description = "Check TOML formatting"
64run = "taplo fmt --check mise.toml"
65
66[tasks.size]
67description = "Analyze Pebble app ELF size"
68depends = ["build"]
69run = "pebble analyze-size build/{{vars.platform}}/pebble-app.elf"
70
71[tasks.install]
72description = "Install the app in the Pebble emulator"
73depends = ["build"]
74run = "pebble install --emulator {{vars.platform}}"
75
76[tasks."emu:config"]
77description = "Open the app-provided config page in the Pebble emulator"
78run = "pebble emu-app-config --emulator {{vars.platform}}"
79
80[tasks."install:cloudpebble"]
81description = "Install the app on a paired device through CloudPebble"
82depends = ["build"]
83run = "pebble install --cloudpebble"
84
85[tasks.screenshot]
86description = "Capture an emulator screenshot"
87run = "pebble screenshot --no-open --emulator {{vars.platform}} {{vars.screenshot}}"
88
89[tasks.logs]
90description = "Stream emulator logs"
91run = "pebble logs --emulator {{vars.platform}}"
92
93[tasks."emu:up"]
94description = "Press the emulator up button"
95run = "pebble emu-button click up --emulator {{vars.platform}}"
96
97[tasks."emu:select"]
98description = "Press the emulator select button"
99run = "pebble emu-button click select --emulator {{vars.platform}}"
100
101[tasks."emu:down"]
102description = "Press the emulator down button"
103run = "pebble emu-button click down --emulator {{vars.platform}}"
104
105[tasks."emu:back"]
106description = "Long-press the emulator back button"
107run = "pebble emu-button click back --duration 2000 --emulator {{vars.platform}}"
108
109[tasks.icons]
110description = "Generate app icons from the current emulator screenshot"
111run = "{{vars.pebble_tool_python}} {{vars.app_icons_script}} ."
112
113[tasks.gif]
114description = "Generate an emulator preview GIF"
115run = "{{vars.pebble_tool_python}} {{vars.preview_gif_script}} . --frames 8 --delay 400"