Skip to content

Add Linux WallpaperEngine Controller plugin#552

Merged
ItsLemmy merged 20 commits intonoctalia-dev:mainfrom
PaloMiku:main
Apr 7, 2026
Merged

Add Linux WallpaperEngine Controller plugin#552
ItsLemmy merged 20 commits intonoctalia-dev:mainfrom
PaloMiku:main

Conversation

@PaloMiku
Copy link
Copy Markdown
Contributor

@PaloMiku PaloMiku commented Apr 2, 2026

  • Introduced a new plugin for Noctalia to control linux-wallpaperengine with features for per-screen wallpaper selection.
  • Added README.md for documentation on usage, requirements, and troubleshooting.
  • Implemented Settings.qml for user configuration of wallpaper settings including folder paths, scaling options, and audio settings.
  • Created i18n files for English, Japanese, Simplified Chinese, and Traditional Chinese to support multiple languages.
  • Added manifest.json to define plugin metadata and entry points.
  • Included a preview image for the plugin.

Preview Panel:
图片

- Introduced a new plugin for Noctalia to control linux-wallpaperengine with features for per-screen wallpaper selection.
- Added README.md for documentation on usage, requirements, and troubleshooting.
- Implemented Settings.qml for user configuration of wallpaper settings including folder paths, scaling options, and audio settings.
- Created i18n files for English, Japanese, Simplified Chinese, and Traditional Chinese to support multiple languages.
- Added manifest.json to define plugin metadata and entry points.
- Included a preview image for the plugin.
Copilot AI review requested due to automatic review settings April 2, 2026 19:15
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 2, 2026

Automatic Code Quality Review


File: linux-wallpaperengine-controller/Panel.qml

  • (H) Line 444: Do not use hardcoded values, always prefer to use the Style singleton instead
+          border.width: 1
  • (H) Line 462: Use translations instead of hardcoded text. Instead of: "Example Label". To: pluginApi?.tr("panel.example-label")
+                text: "Linux-WallpaperEngine"
  • (H) Line 569: Do not use hardcoded values, always prefer to use the Style singleton instead
+                border.width: 1
  • (H) Line 617: Do not use hardcoded values, always prefer to use the Style singleton instead
+                border.width: 1
  • (H) Line 666: Do not use hardcoded values, always prefer to use the Style singleton instead
+          border.width: 1
  • (H) Line 842: Do not use hardcoded values, always prefer to use the Style singleton instead
+                border.width: 1
  • (H) Line 1118: Do not use hardcoded values, always prefer to use the Style singleton instead
+    border.width: 1
  • (H) Line 1171: Do not use hardcoded values, always prefer to use the Style singleton instead
+    border.width: 1

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces a new Linux WallpaperEngine Controller plugin for Noctalia, providing a bar widget + panel UI to browse Steam Workshop wallpaper projects and control the linux-wallpaperengine runtime.

Changes:

  • Added a new plugin implementation (engine control, IPC commands, bar widget, and a panel UI with scanning/search/sort/filter).
  • Added plugin settings UI and default configuration via manifest.json.
  • Added documentation and i18n resources (EN/JA/zh-CN/zh-TW), plus a preview image.

Reviewed changes

Copilot reviewed 10 out of 11 changed files in this pull request and generated 9 comments.

Show a summary per file
File Description
linux-wallpaperengine-controller/manifest.json Declares plugin metadata, entry points, and default settings.
linux-wallpaperengine-controller/Main.qml Implements engine availability checks, command building, process control, and IPC handlers.
linux-wallpaperengine-controller/Panel.qml Adds the browsing/apply UI, folder scanning process, and per-screen/all-displays controls.
linux-wallpaperengine-controller/Settings.qml Adds a settings page for defaults (FPS, scaling, audio flags, folder config).
linux-wallpaperengine-controller/BarWidget.qml Adds a bar icon with tooltip state and context menu actions (reload/stop/settings).
linux-wallpaperengine-controller/README.md Documents requirements, usage, IPC commands, and troubleshooting.
linux-wallpaperengine-controller/i18n/en.json English translations for widget/menu/panel/settings strings.
linux-wallpaperengine-controller/i18n/ja.json Japanese translations.
linux-wallpaperengine-controller/i18n/zh-CN.json Simplified Chinese translations.
linux-wallpaperengine-controller/i18n/zh-TW.json Traditional Chinese translations.
linux-wallpaperengine-controller/preview.png Plugin preview image.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +15 to +20
property string editWallpapersFolder: cfg.wallpapersFolder ?? defaults.wallpapersFolder ?? ""
property string editDefaultScaling: cfg.defaultScaling ?? defaults.defaultScaling ?? "fill"
property int editDefaultFps: cfg.defaultFps ?? defaults.defaultFps ?? 30
property int editDefaultVolume: cfg.defaultVolume ?? defaults.defaultVolume ?? 100
property bool editDefaultMuted: cfg.defaultMuted ?? defaults.defaultMuted ?? true
property bool editDefaultAudioReactiveEffects: cfg.defaultAudioReactiveEffects ?? defaults.defaultAudioReactiveEffects ?? true
Copy link

Copilot AI Apr 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

manifest.json defines assetsDir and autoApplyOnStartup defaults (and Main.qml reads both), but Settings.qml doesn't expose controls for them or persist them in saveSettings(). Add UI inputs/toggles for these settings and write them into pluginApi.pluginSettings so users can configure assets directory and startup behavior from the settings screen.

Copilot uses AI. Check for mistakes.
Comment thread linux-wallpaperengine-controller/Panel.qml
Comment thread linux-wallpaperengine-controller/Panel.qml
Comment thread linux-wallpaperengine-controller/Panel.qml Outdated
Comment thread linux-wallpaperengine-controller/Panel.qml Outdated
Comment thread linux-wallpaperengine-controller/Main.qml Outdated
Comment thread linux-wallpaperengine-controller/manifest.json Outdated
Comment on lines +47 to +52
## Basic Troubleshooting

- Check binary in PATH: `command -v linux-wallpaperengine`
- If panel shows folder error: verify `Wallpapers source folder` exists and contains wallpaper project folders
- If engine fails to start: recheck dependencies and GPU/OpenGL environment
- For runtime logs: start shell with debug: `NOCTALIA_DEBUG=1 qs -c noctalia-shell`
Copy link

Copilot AI Apr 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The troubleshooting/docs mention folder configuration and PATH checks, but Main.qml can emit an assets-related error (main.error.assetsMissing) that instructs users to configure an assets directory—yet the README doesn't explain where to set this or what path is expected. Update the README to document the assets directory requirement and how to configure it (once the settings UI supports it).

Copilot uses AI. Check for mistakes.
Comment thread linux-wallpaperengine-controller/Panel.qml Outdated
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 2, 2026

Automatic Code Quality Review


File: linux-wallpaperengine-controller/Main.qml

  • (L) Line 443: When it comes to translations there is no need for fallback values. From: pluginApi?.tr("example") || "value". To: pluginApi?.tr("example")
+    const hint = String(pluginApi?.tr("main.error.autoRecovered") || "").trim();

Copy link
Copy Markdown
Collaborator

@spiros132 spiros132 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some feedback about the PR :)

Comment thread linux-wallpaperengine-controller/Settings.qml Outdated
Comment thread registry.json
Comment thread linux-wallpaperengine-controller/Main.qml Outdated
Comment thread linux-wallpaperengine-controller/Main.qml Outdated
Comment thread linux-wallpaperengine-controller/Main.qml Outdated
Comment thread linux-wallpaperengine-controller/Main.qml Outdated
Comment thread linux-wallpaperengine-controller/Panel.qml Outdated
Comment thread linux-wallpaperengine-controller/Panel.qml Outdated
Comment thread linux-wallpaperengine-controller/Panel.qml Outdated
Comment thread linux-wallpaperengine-controller/Panel.qml Outdated
@PaloMiku
Copy link
Copy Markdown
Contributor Author

PaloMiku commented Apr 4, 2026

Some feedback about the PR :)关于公关:)的一些反馈

Thank you for your guidance! I will make the revisions as soon as possible :)

@spiros132
Copy link
Copy Markdown
Collaborator

When you feel like you're ready with the changes, ping me :)

@PaloMiku PaloMiku requested a review from spiros132 April 6, 2026 04:37
Copy link
Copy Markdown
Collaborator

@spiros132 spiros132 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some more feedback about the PR :)

running: false
command: [
"sh", "-c",
"for common in \"$HOME/.steam/steam/steamapps/common\" \"$HOME/.local/share/Steam/steamapps/common\" \"$HOME/.var/app/com.valvesoftware.Steam/.local/share/Steam/steamapps/common\" \"$HOME/snap/steam/common/.local/share/Steam/steamapps/common\"; do if [ -d \"$common\" ]; then workshop=\"${common%/common}/workshop/content/431960\"; if [ -d \"$workshop\" ]; then printf '%s\\n' \"$workshop\"; exit 0; fi; fi; done; exit 0"
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would it be possible to move these scripts to their own files to make it easier to read them and for better organization? For example if there's either a "scripts" folder or a "assets/scripts" folder.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sounds good!

from: 1
to: 240
value: root.editDefaultFps
suffix: " FPS"
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm curious, would this fit as a translation or is it the same on every language?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FPS is written the same way as an abbreviation in most languages, namely FPS / fps; only its full name varies across different languages.

Comment thread linux-wallpaperengine-controller/Panel.qml Outdated
Comment thread linux-wallpaperengine-controller/Panel.qml
Comment thread linux-wallpaperengine-controller/Panel.qml
Comment thread linux-wallpaperengine-controller/Panel.qml
Comment thread linux-wallpaperengine-controller/Panel.qml Outdated
Comment thread linux-wallpaperengine-controller/Panel.qml Outdated
@PaloMiku PaloMiku requested a review from spiros132 April 7, 2026 01:49
Copy link
Copy Markdown
Collaborator

@spiros132 spiros132 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some minor feedback otherwise I think it's ready to be merged. :)

delegate: Rectangle {
required property var modelData
width: ListView.view.width
width: NListView.view.width
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure this property exists. Did you maybe mean filterList.width?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I may have misread the documentation somewhere :(
Fixed

Comment thread linux-wallpaperengine-controller/Panel.qml Outdated
@spiros132
Copy link
Copy Markdown
Collaborator

Looks great! Thank you so much for the PR! :D

@ItsLemmy

@ItsLemmy ItsLemmy merged commit 80b3c5b into noctalia-dev:main Apr 7, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants