Add Linux WallpaperEngine Controller plugin#552
Conversation
- 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.
Automatic Code Quality ReviewFile: linux-wallpaperengine-controller/Panel.qml
+ border.width: 1
+ text: "Linux-WallpaperEngine"
+ border.width: 1
+ border.width: 1
+ border.width: 1
+ border.width: 1
+ border.width: 1
+ border.width: 1 |
There was a problem hiding this comment.
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.
| 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 |
There was a problem hiding this comment.
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.
| ## 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` |
There was a problem hiding this comment.
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).
Automatic Code Quality ReviewFile: linux-wallpaperengine-controller/Main.qml
+ const hint = String(pluginApi?.tr("main.error.autoRecovered") || "").trim(); |
spiros132
left a comment
There was a problem hiding this comment.
Some feedback about the PR :)
Thank you for your guidance! I will make the revisions as soon as possible :) |
|
When you feel like you're ready with the changes, ping me :) |
spiros132
left a comment
There was a problem hiding this comment.
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" |
There was a problem hiding this comment.
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.
| from: 1 | ||
| to: 240 | ||
| value: root.editDefaultFps | ||
| suffix: " FPS" |
There was a problem hiding this comment.
I'm curious, would this fit as a translation or is it the same on every language?
There was a problem hiding this comment.
FPS is written the same way as an abbreviation in most languages, namely FPS / fps; only its full name varies across different languages.
| delegate: Rectangle { | ||
| required property var modelData | ||
| width: ListView.view.width | ||
| width: NListView.view.width |
There was a problem hiding this comment.
I'm not sure this property exists. Did you maybe mean filterList.width?
There was a problem hiding this comment.
I may have misread the documentation somewhere :(
Fixed
|
Looks great! Thank you so much for the PR! :D |
Preview Panel:
