From 493365b028ab4fde111c294ab0e374a06ff15f08 Mon Sep 17 00:00:00 2001 From: Jin Liu Date: Sun, 19 Jul 2026 20:45:34 +0800 Subject: [PATCH] Add ImageMagick Clock plugin (#46) * Add ImageMagick Clock plugin ImageMagick Clock draws a custom clock using ImageMagick (or any other CLI image drawing tool). * Address review comments * Update thumbnail * Add description to image_width/height settings * Guard the mv command to fix race condition * Handle time jump (resume from sleep) --- imagemagick-clock/README.md | 53 ++++++++++++++ imagemagick-clock/plugin.toml | 39 +++++++++++ imagemagick-clock/thumbnail.webp | Bin 0 -> 44064 bytes imagemagick-clock/translations/en.json | 16 +++++ imagemagick-clock/widget.luau | 91 +++++++++++++++++++++++++ 5 files changed, 199 insertions(+) create mode 100644 imagemagick-clock/README.md create mode 100644 imagemagick-clock/plugin.toml create mode 100644 imagemagick-clock/thumbnail.webp create mode 100644 imagemagick-clock/translations/en.json create mode 100644 imagemagick-clock/widget.luau diff --git a/imagemagick-clock/README.md b/imagemagick-clock/README.md new file mode 100644 index 0000000..cf9c91e --- /dev/null +++ b/imagemagick-clock/README.md @@ -0,0 +1,53 @@ +# ImageMagick Clock + +ImageMagick Clock draws a custom clock using ImageMagick (or any other CLI image drawing tool). + +## Plugin + +| Field | Value | +| --- | --- | +| ID | `jinliu/imagemagick-clock` | +| Entries | Bar widget: `clock` | + +## Requirements + +* `magick` from `ImageMagick`. +* `mv` from `coreutils`. +* (Optional) [7-Segment font](https://www.dafont.com/seven-segment.font) for a classic digital clock look. + +## Usage + +Add `ImageMagick Clock` from the Add-widget picker. The widget displays a +custom clock image generated by ImageMagick (or any other CLI image drawing tool). + +The default command line is: + +```bash +magick -size 270x100 canvas:black -transparent black -pointsize 128 -fill '#FF2400' -draw 'text 0,100 \"%H\"' -fill white -pointsize 84 -draw 'text 120,100 \":%M\"' -fill '#FF2400' -stroke '#FF2400' -strokewidth 5 -draw 'line 225,0 225,100' -strokewidth 0 -stroke white -fill white -pointsize 32 -draw 'text 235, 25 \"%m\"' -draw 'text 235, 60 \"%d\"' -draw 'text 235, 95 \"%a\"' '%output_file' +``` + +You can customize the command line in the widget's configuration to change how the clock looks. The "%output_file" placeholder will be replaced with the path to the file where the clock image should be saved. Other placeholders like "%H", "%M", "%a" will be replaced with the hour, minute, and day of the week, etc. See `man strftime` for the complete list of placeholders. + +You might want to install the `7-Segment` font to get a classic digital clock look. Add `-font '7-Segment'` to the command line after `magick` to use it. The command line would then look like this: + +```bash +magick -font '7-Segment' -size 270x100 canvas:black -transparent black -pointsize 128 -fill '#FF2400' -draw 'text 0,100 \"%H\"' -fill white -pointsize 84 -draw 'text 120,100 \":%M\"' -fill '#FF2400' -stroke '#FF2400' -strokewidth 5 -draw 'line 225,0 225,100' -strokewidth 0 -stroke white -fill white -pointsize 32 -draw 'text 235, 25 \"%m\"' -draw 'text 235, 60 \"%d\"' -draw 'text 235, 95 \"%a\"' '%output_file' +``` + +If your locale uses characters that are not supported by the `7-Segment` font (e.g., Chinese), you might want to set a different font before the last `-draw` command. For example: + +```bash +magick -font '7-Segment' -size 270x100 canvas:black -transparent black -pointsize 128 -fill '#FF2400' -draw 'text 0,100 \"%H\"' -fill white -pointsize 84 -draw 'text 120,100 \":%M\"' -fill '#FF2400' -stroke '#FF2400' -strokewidth 5 -draw 'line 225,0 225,100' -strokewidth 0 -stroke white -fill white -pointsize 32 -draw 'text 235, 25 \"%m\"' -draw 'text 235, 60 \"%d\"' -stroke none -font Noto-Sans-CJK-SC-Bold -draw 'text 235, 95 \"%a\"' '%output_file' +``` + +(Note: You can list all available fonts on your system by running `magick -list font`.) + +You can use any command-line drawing tool, not just ImageMagick, as long as it generates an image file at the specified output path. The plugin will call the command at the beginning of every minute to generate a new clock image for the next minute. Therefore, your command can take up to a full minute to generate one image, though I wouldn't recommend something that heavy. + +## Settings + +| Setting | Type | Default | Description | +| --- | --- | --- | --- | +| `command_line` | `string` | (too long, omitted) | The command line to draw the clock | +| `image_width` | `int` | 54 | The width of the clock image | +| `image_height` | `int` | 20 | The height of the clock image | diff --git a/imagemagick-clock/plugin.toml b/imagemagick-clock/plugin.toml new file mode 100644 index 0000000..b1fbea2 --- /dev/null +++ b/imagemagick-clock/plugin.toml @@ -0,0 +1,39 @@ +id = "jinliu/imagemagick-clock" +name = "ImageMagick Clock" +version = "1.0.0" +plugin_api = 3 +author = "Jin Liu" +tags = ["clock"] +icon = "clock" +description = "A custom clock drawn with ImageMagick." +dependencies = ["magick", "mv"] +license = "MIT" + +[[widget]] +id = "clock" +entry = "widget.luau" + + [[widget.setting]] + key = "command_line" + type = "string" + label_key = "settings.cmdline.label" + description_key = "settings.cmdline.description" + default = "magick -size 270x100 canvas:black -transparent black -pointsize 128 -fill '#FF2400' -draw 'text 0,100 \"%H\"' -fill white -pointsize 84 -draw 'text 120,100 \":%M\"' -fill '#FF2400' -stroke '#FF2400' -strokewidth 5 -draw 'line 225,0 225,100' -strokewidth 0 -stroke white -fill white -pointsize 32 -draw 'text 235, 25 \"%m\"' -draw 'text 235, 60 \"%d\"' -draw 'text 235, 95 \"%a\"' '%output_file'" + + [[widget.setting]] + key = "image_width" + type = "int" + label_key = "settings.image_width.label" + description_key = "settings.image_width.description" + default = 54 + min = 1 + max = 1000 + + [[widget.setting]] + key = "image_height" + type = "int" + label_key = "settings.image_height.label" + description_key = "settings.image_height.description" + default = 20 + min = 1 + max = 1000 diff --git a/imagemagick-clock/thumbnail.webp b/imagemagick-clock/thumbnail.webp new file mode 100644 index 0000000000000000000000000000000000000000..b12126ba8ed427dfaa155b0f2d73349822f3049c GIT binary patch literal 44064 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 nextClockFaceTimestamp - 60) then + return + end + + if not nextClockFaceTimestamp or timestamp >= nextClockFaceTimestamp + 60 or timestamp < nextClockFaceTimestamp - 60 then + -- Next clock face unavailable (startup), or doesn't match current time (resume from sleep, or system clock changed). + -- Either case, draw the current clock face immediately. + drawCurrentClockFace() + return + end + + if nextClockFaceReady then + nextClockFaceReady = false + movingClockFace = true + noctalia.runAsync("mv -f '" .. NEXT_CLOCK_FACE_PATH .. "' '" .. CURRENT_CLOCK_FACE_PATH .. "'", function(result) + movingClockFace = false + if result.exitCode == 0 then + barWidget.setImage(CURRENT_CLOCK_FACE_PATH, true, IMAGE_WIDTH, IMAGE_HEIGHT) + else + print("Error moving new clock face: " .. result.stderr .. " (command: mv -f " .. NEXT_CLOCK_FACE_PATH .. " " .. CURRENT_CLOCK_FACE_PATH .. ") " .. "output: " .. result.stdout) + end + drawNextClockFace() + end) + else + drawNextClockFace() + end +end + +function onClick() + noctalia.runAsync("noctalia msg panel-toggle control-center calendar", function(result) + if result.exitCode ~= 0 then + print("Error toggling calendar panel: " .. result.stderr .. " (command: noctalia msg panel-toggle control-center calendar) " .. "output: " .. result.stdout) + end + end) +end + +noctalia.setUpdateInterval(1000)