8 Commits

Author SHA1 Message Date
Uyanide cf73b12996 feat: quitOnSelected default to true
Release / Build ArchLinux Package (push) Successful in 1m0s
Release / Publish to Gitea Release (push) Successful in 3s
Release / Publish to AUR (push) Successful in 9s
2026-04-03 09:09:40 +02:00
Uyanide 9a6fa483a5 ⬆️ bump to v2.1.0
Release / Build ArchLinux Package (push) Successful in 1m3s
Release / Publish to Gitea Release (push) Successful in 3s
Release / Publish to AUR (push) Successful in 8s
2026-04-03 08:54:39 +02:00
Uyanide 5db3650184 🐛 fix: remove unused config 'printPreview' 2026-04-03 08:52:56 +02:00
Uyanide 0524f26f97 🐛 fix: forgot to implement 'printSelected' 😒 2026-04-03 08:48:49 +02:00
Uyanide 740411f194 🐛 fix: correct behaviour of --disable-actions
Release / Build ArchLinux Package (push) Successful in 1m0s
Release / Publish to Gitea Release (push) Successful in 3s
Release / Publish to AUR (push) Successful in 9s
2026-03-24 12:48:01 +01:00
Uyanide 1a2daec165 🚀 CD: refactor release workflow 2026-03-24 11:42:41 +01:00
Uyanide 524b53b7b2 CD: rename workflow to Release 2026-03-24 11:23:10 +01:00
Uyanide b5ea96bb8b 🚀 CD: add MAKEFLAGS to optimize local build process 2026-03-24 11:14:08 +01:00
14 changed files with 149 additions and 112 deletions
+27 -10
View File
@@ -1,4 +1,4 @@
name: CI/CD
name: Release
on:
push:
@@ -6,8 +6,8 @@ on:
- 'v*'
jobs:
build:
name: Package
build-arch:
name: Build ArchLinux Package
runs-on: ubuntu-latest
steps:
- name: Checkout Code
@@ -34,6 +34,7 @@ jobs:
license=('MIT')
depends=('qt6-base' 'qt6-declarative' 'gcc-libs' 'glibc')
makedepends=('cmake')
options=('!debug')
source=("${pkgname}-${pkgver}.tar.gz::https://git.uyani.de/Uyanide/WallReel/archive/v${pkgver}.tar.gz")
sha256sums=('INSERT_SHA256_HERE')
@@ -66,6 +67,8 @@ jobs:
pacman -Sy --noconfirm archlinux-keyring
pacman -Su --noconfirm base-devel cmake qt6-base qt6-declarative sudo
echo 'MAKEFLAGS="-j$(nproc)"' >> /etc/makepkg.conf
useradd -m builduser
chown -R builduser:builduser /workspace
echo 'builduser ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
@@ -76,27 +79,27 @@ jobs:
tar -cf - *.pkg.tar.zst PKGBUILD SRCINFO.txt >&3
" | tar -xf -
- name: Upload Artifacts
- name: Upload Arch Artifacts
uses: actions/upload-artifact@v3
with:
name: release-artifacts
name: arch-artifacts
path: |
*.pkg.tar.zst
PKGBUILD
SRCINFO.txt
release:
name: Publish
needs: build
publish-gitea:
name: Publish to Gitea Release
needs: [build-arch]
runs-on: ubuntu-latest
steps:
- name: Extract Version
run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_ENV
- name: Download Artifacts
- name: Download Arch Artifacts
uses: actions/download-artifact@v3
with:
name: release-artifacts
name: arch-artifacts
path: .
- name: Publish to Gitea Release
@@ -109,6 +112,20 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
publish-aur:
name: Publish to AUR
needs: [build-arch]
runs-on: ubuntu-latest
steps:
- name: Extract Version
run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_ENV
- name: Download Arch Artifacts
uses: actions/download-artifact@v3
with:
name: arch-artifacts
path: .
- name: Publish to AUR
env:
AUR_KEY: ${{ secrets.AUR_SSH_PRIVATE_KEY }}
+1 -1
View File
@@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.16)
project(WallReel VERSION 2.0.1 LANGUAGES CXX)
project(WallReel VERSION 2.1.0 LANGUAGES CXX)
set(EXECUTABLE_NAME "wallreel")
set(CORELIB_NAME "wallreel-core")
+1 -2
View File
@@ -117,12 +117,11 @@ Configures system commands to execute on specific events mapping to your window
| :-------------------- | :--------------- | :------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `previewDebounceTime` | Integer | `300` | Debounce time (ms) for triggering the preview action. |
| `printSelected` | Boolean | `true` | Print selected wallpaper path to stdout on confirm. |
| `printPreview` | Boolean | `false` | Print previewed wallpaper path to stdout on preview. |
| `onSelected` | String | `""` | Command to execute when a wallpaper is confirmed. |
| `onPreview` | String | `""` | Command to execute when a wallpaper is previewed. |
| `saveState` | Array of Objects | `[]` | Commands to fetch system states before changing wallpapers. Each object defines: `key`, `fallback` (fallback value), `command` (stdout mapping), and `timeout` (ms). |
| `onRestore` | String | `""` | Command to execute on restore. Extracted states from `saveState` can be injected using `{{ key }}`. |
| `quitOnSelected` | Boolean | `false` | Quit the application after a selection is made. |
| `quitOnSelected` | Boolean | `true` | Quit the application after a selection is made. |
| `restoreOnClose` | Boolean | `true` | Run `onRestore` command if the application is closed without making a final selection. |
Available placeholders for `onSelected`, `onPreview` commands:
+10 -10
View File
@@ -1,6 +1,6 @@
.\" Automatically generated by Pandoc 3.5
.\" Automatically generated by Pandoc 3.9.0.2
.\"
.TH "WALLREEL" "1" "2026\-03\-24" "WallReel 2.0.1" "User Commands"
.TH "WALLREEL" "1" "2026\-03\-24" "WallReel 2.0.2" "User Commands"
.SH NAME
wallreel \- Choose and set desktop wallpapers with customizable themes
and actions
@@ -42,20 +42,20 @@ In this mode, the configuration is still parsed.
Action placeholders are resolved from the selected image and any
captured state values.
.SH BEHAVIOR NOTES
.IP \[bu] 2
.IP \(bu 2
CLI options are generally optional; configuration is the preferred
customization path.
.IP \[bu] 2
.IP \(bu 2
Some options are mutually exclusive (for example \f[CR]\-\-verbose\f[R]
and \f[CR]\-\-quiet\f[R]).
.IP \[bu] 2
.IP \(bu 2
With \f[CR]\-\-apply\f[R], WallReel executes configured selection
actions without opening the UI.
.SH FILES
\f[CR]\[ti]/.config/wallreel/config.json\f[R] : Default configuration
\f[CR]\(ti/.config/wallreel/config.json\f[R] : Default configuration
file location.
.PP
\f[CR]\[ti]/.cache/wallreel/\f[R] : Runtime cache location.
\f[CR]\(ti/.cache/wallreel/\f[R] : Runtime cache location.
.SH EXAMPLES
Run with default configuration:
.IP
@@ -66,19 +66,19 @@ wallreel
Use a custom configuration file:
.IP
.EX
wallreel \-\-config\-file \[ti]/.config/wallreel/config.json
wallreel \-\-config\-file \(ti/.config/wallreel/config.json
.EE
.PP
Append additional search directories:
.IP
.EX
wallreel \-\-append\-dir \[ti]/Pictures/Wallpapers \-\-append\-dir \[ti]/Art
wallreel \-\-append\-dir \(ti/Pictures/Wallpapers \-\-append\-dir \(ti/Art
.EE
.PP
Apply a wallpaper and exit:
.IP
.EX
wallreel \-\-apply \[ti]/Pictures/wallpaper.jpg
wallreel \-\-apply \(ti/Pictures/wallpaper.jpg
.EE
.SH EXIT STATUS
Returns \f[CR]0\f[R] on success.
+61 -64
View File
@@ -1,22 +1,22 @@
.\" Automatically generated by Pandoc 3.5
.\" Automatically generated by Pandoc 3.9.0.2
.\"
.TH "WALLREEL" "5" "2026\-03\-24" "WallReel 2.0.1" "File Formats Manual"
.TH "WALLREEL" "5" "2026\-03\-24" "WallReel 2.0.2" "File Formats Manual"
.SH NAME
wallreel\-config \- configuration format for wallreel
.SH SYNOPSIS
\f[CR]\[ti]/.config/wallreel/config.json\f[R]
\f[CR]\(ti/.config/wallreel/config.json\f[R]
.SH DESCRIPTION
WallReel reads configuration from a JSON document.
The root object is divided into five sections:
.IP \[bu] 2
.IP \(bu 2
\f[CR]wallpaper\f[R]
.IP \[bu] 2
.IP \(bu 2
\f[CR]theme\f[R]
.IP \[bu] 2
.IP \(bu 2
\f[CR]action\f[R]
.IP \[bu] 2
.IP \(bu 2
\f[CR]style\f[R]
.IP \[bu] 2
.IP \(bu 2
\f[CR]cache\f[R]
.PP
For complete machine\-readable validation details, refer to
@@ -25,7 +25,7 @@ For complete machine\-readable validation details, refer to
Defines where WallReel looks for images and what to exclude.
.PP
If both \f[CR]paths\f[R] and \f[CR]dirs\f[R] are empty or omitted,
WallReel defaults to recursively scanning the user\[aq]s Pictures
WallReel defaults to recursively scanning the user\(aqs Pictures
directory and treating all supported image files as wallpaper
candidates.
.PP
@@ -36,9 +36,9 @@ to specific image files.
to scan for images.
.PP
Each item has:
.IP \[bu] 2
.IP \(bu 2
\f[CR]path\f[R] (string)
.IP \[bu] 2
.IP \(bu 2
\f[CR]recursive\f[R] (boolean)
.PP
\f[CR]excludes\f[R] (array of string, default: \f[CR][]\f[R]) : Exclude
@@ -54,16 +54,16 @@ the primary color.
palette definitions.
.PP
Each palette has:
.IP \[bu] 2
.IP \(bu 2
\f[CR]name\f[R] (string)
.IP \[bu] 2
.IP \(bu 2
\f[CR]colors\f[R] (array)
.PP
Each color item has:
.IP \[bu] 2
.IP \(bu 2
\f[CR]name\f[R] (string)
.IP \[bu] 2
\f[CR]value\f[R] (hex string, for example \f[CR]\[dq]#89b4fa\[dq]\f[R])
.IP \(bu 2
\f[CR]value\f[R] (hex string, for example \f[CR]\(dq#89b4fa\(dq\f[R])
.SH ACTION SECTION
Configures commands executed for preview, selection, and restore
behavior.
@@ -74,33 +74,30 @@ Debounce interval in milliseconds for preview actions.
\f[CR]printSelected\f[R] (boolean, default: \f[CR]true\f[R]) : Print
selected wallpaper path to stdout on confirmation.
.PP
\f[CR]printPreview\f[R] (boolean, default: \f[CR]false\f[R]) : Print
previewed wallpaper path to stdout on preview.
.PP
\f[CR]onSelected\f[R] (string, default: \f[CR]\[dq]\[dq]\f[R]) : Command
\f[CR]onSelected\f[R] (string, default: \f[CR]\(dq\(dq\f[R]) : Command
executed when a wallpaper is confirmed.
.PP
\f[CR]onPreview\f[R] (string, default: \f[CR]\[dq]\[dq]\f[R]) : Command
\f[CR]onPreview\f[R] (string, default: \f[CR]\(dq\(dq\f[R]) : Command
executed when a wallpaper is previewed.
.PP
\f[CR]saveState\f[R] (array of object, default: \f[CR][]\f[R]) :
Commands for capturing system values before changing wallpaper.
.PP
Each item has:
.IP \[bu] 2
.IP \(bu 2
\f[CR]key\f[R] (placeholder key)
.IP \[bu] 2
.IP \(bu 2
\f[CR]fallback\f[R] (default value)
.IP \[bu] 2
.IP \(bu 2
\f[CR]command\f[R] (stdout\-mapped command)
.IP \[bu] 2
.IP \(bu 2
\f[CR]timeout\f[R] (milliseconds)
.PP
\f[CR]onRestore\f[R] (string, default: \f[CR]\[dq]\[dq]\f[R]) : Command
\f[CR]onRestore\f[R] (string, default: \f[CR]\(dq\(dq\f[R]) : Command
executed on restore.
Saved state keys are usable as placeholders.
.PP
\f[CR]quitOnSelected\f[R] (boolean, default: \f[CR]false\f[R]) : Exit
\f[CR]quitOnSelected\f[R] (boolean, default: \f[CR]true\f[R]) : Exit
application immediately after confirming a selection.
.PP
\f[CR]restoreOnClose\f[R] (boolean, default: \f[CR]true\f[R]) : Run
@@ -117,13 +114,13 @@ The following placeholders are available in \f[CR]onSelected\f[R],
wallpaper.
.PP
\f[CR]{{ palette }}\f[R] : Selected palette name
(\f[CR]\[dq]null\[dq]\f[R] if none).
(\f[CR]\(dqnull\(dq\f[R] if none).
.PP
\f[CR]{{ colorName }}\f[R] : Chosen primary color name
(\f[CR]\[dq]null\[dq]\f[R] if none).
(\f[CR]\(dqnull\(dq\f[R] if none).
.PP
\f[CR]{{ colorHex }}\f[R] : Chosen primary color hex
(\f[CR]\[dq]null\[dq]\f[R] if none).
(\f[CR]\(dqnull\(dq\f[R] if none).
.PP
\f[CR]{{ domColorHex }}\f[R] : Dominant color hex extracted from the
wallpaper.
@@ -162,54 +159,54 @@ Older entries are evicted.
.IP
.EX
{
\[dq]$schema\[dq]: \[dq]https://raw.githubusercontent.com/Uyanide/WallReel/refs/heads/master/config.schema.json\[dq],
\[dq]wallpaper\[dq]: {
\[dq]paths\[dq]: [\[dq]/home/user/Pictures/favorite.jpg\[dq]],
\[dq]dirs\[dq]: [
\(dq$schema\(dq: \(dqhttps://raw.githubusercontent.com/Uyanide/WallReel/refs/heads/master/config.schema.json\(dq,
\(dqwallpaper\(dq: {
\(dqpaths\(dq: [\(dq/home/user/Pictures/favorite.jpg\(dq],
\(dqdirs\(dq: [
{
\[dq]path\[dq]: \[dq]/home/user/Pictures/Wallpapers\[dq],
\[dq]recursive\[dq]: \f[B]true\f[R]
\(dqpath\(dq: \(dq/home/user/Pictures/Wallpapers\(dq,
\(dqrecursive\(dq: \f[B]true\f[R]
}
],
\[dq]excludes\[dq]: [\[dq]\[rs]\[rs].gif$\[dq]]
\(dqexcludes\(dq: [\(dq\(rs\(rs.gif$\(dq]
},
\[dq]theme\[dq]: {
\[dq]palettes\[dq]: [
\(dqtheme\(dq: {
\(dqpalettes\(dq: [
{
\[dq]name\[dq]: \[dq]Dark\[dq],
\[dq]colors\[dq]: [
{ \[dq]name\[dq]: \[dq]blue\[dq], \[dq]value\[dq]: \[dq]#89b4fa\[dq] },
{ \[dq]name\[dq]: \[dq]red\[dq], \[dq]value\[dq]: \[dq]#f38ba8\[dq] }
\(dqname\(dq: \(dqDark\(dq,
\(dqcolors\(dq: [
{ \(dqname\(dq: \(dqblue\(dq, \(dqvalue\(dq: \(dq#89b4fa\(dq },
{ \(dqname\(dq: \(dqred\(dq, \(dqvalue\(dq: \(dq#f38ba8\(dq }
]
}
]
},
\[dq]action\[dq]: {
\[dq]previewDebounceTime\[dq]: 500,
\[dq]quitOnSelected\[dq]: \f[B]true\f[R],
\[dq]onPreview\[dq]: \[dq]swww img {{ path }}\[dq],
\[dq]onSelected\[dq]: \[dq]cp {{ path }} \[ti]/.config/wallpaper/current/ && swww img {{ path }}\[dq],
\[dq]saveState\[dq]: [
\(dqaction\(dq: {
\(dqpreviewDebounceTime\(dq: 500,
\(dqquitOnSelected\(dq: \f[B]true\f[R],
\(dqonPreview\(dq: \(dqswww img {{ path }}\(dq,
\(dqonSelected\(dq: \(dqcp {{ path }} \(ti/.config/wallpaper/current/ && swww img {{ path }}\(dq,
\(dqsaveState\(dq: [
{
\[dq]key\[dq]: \[dq]current_wp\[dq],
\[dq]fallback\[dq]: \[dq]/home/user/Pictures/default.jpg\[dq],
\[dq]command\[dq]: \[dq]find \[ti]/.config/wallpaper/current \-type f | head \-n 1\[dq],
\[dq]timeout\[dq]: 1000
\(dqkey\(dq: \(dqcurrent_wp\(dq,
\(dqfallback\(dq: \(dq/home/user/Pictures/default.jpg\(dq,
\(dqcommand\(dq: \(dqfind \(ti/.config/wallpaper/current \-type f | head \-n 1\(dq,
\(dqtimeout\(dq: 1000
}
],
\[dq]onRestore\[dq]: \[dq]swww img {{ current_wp }}\[dq]
\(dqonRestore\(dq: \(dqswww img {{ current_wp }}\(dq
},
\[dq]style\[dq]: {
\[dq]image_width\[dq]: 640,
\[dq]image_height\[dq]: 400,
\[dq]image_focus_scale\[dq]: 1.2,
\[dq]window_width\[dq]: 1280,
\[dq]window_height\[dq]: 720
\(dqstyle\(dq: {
\(dqimage_width\(dq: 640,
\(dqimage_height\(dq: 400,
\(dqimage_focus_scale\(dq: 1.2,
\(dqwindow_width\(dq: 1280,
\(dqwindow_height\(dq: 720
},
\[dq]cache\[dq]: {
\[dq]saveSortMethod\[dq]: \f[B]true\f[R],
\[dq]savePalette\[dq]: \f[B]true\f[R],
\[dq]maxImageEntries\[dq]: 300
\(dqcache\(dq: {
\(dqsaveSortMethod\(dq: \f[B]true\f[R],
\(dqsavePalette\(dq: \f[B]true\f[R],
\(dqmaxImageEntries\(dq: 300
}
}
.EE
+2 -4
View File
@@ -27,7 +27,6 @@
//
// action.previewDebounceTime number 300 Debounce time for preview action in milliseconds
// action.printSelected boolean true Whether to print the selected wallpaper path to stdout on confirm
// action.printPreview boolean false Whether to print the previewed wallpaper path to stdout on preview
// action.onSelected string "" Command to execute on confirmation
// action.onPreview string "" Command to execute on preview
// action.saveState array [] Useful for restore command
@@ -36,7 +35,7 @@
// action.saveState[].command string "" Command that outputs(to stdout) the value to save when executed
// action.saveState[].timeout number 3000 Timeout for executing "command" in milliseconds. 0 or negative means no timeout
// action.onRestore string "" Command to execute on restore ({{ key }} -> value defined or obtained in saveState)
// action.quitOnSelected boolean false Whether to quit the application after confirming a wallpaper
// action.quitOnSelected boolean true Whether to quit the application after confirming a wallpaper
// action.restoreOnClose boolean true Whether to run the restore command after closing the application without confirming a wallpaper
//
// style.image_width number 320 Width of each image
@@ -126,8 +125,7 @@ struct ActionConfigItems {
QString onRestore;
int previewDebounceTime = 300; // milliseconds
bool printSelected = true;
bool printPreview = false;
bool quitOnSelected = false;
bool quitOnSelected = true;
bool restoreOnClose = true;
};
+9 -7
View File
@@ -26,8 +26,9 @@ Manager::Manager(
const QDir& picturesDir,
const QStringList& searchDirs,
const QString& configPath,
bool disableActions,
QObject* parent)
: QObject(parent), m_configDir(configDir) {
: QObject(parent), m_configDir(configDir), m_disableActions(disableActions) {
connect(this, &Manager::stateCaptured, this, [this]() {
m_stateCaptured = true;
WR_INFO("State capture completed");
@@ -202,12 +203,6 @@ void Manager::_loadActionConfig(const QJsonObject& root) {
m_actionConfig.printSelected = val.toBool();
}
}
if (config.contains("printPreview")) {
const auto& val = config["printPreview"];
if (val.isBool()) {
m_actionConfig.printPreview = val.toBool();
}
}
if (config.contains("saveState") && config["saveState"].isArray()) {
const QJsonArray& arr = config["saveState"].toArray();
for (const auto& item : arr) {
@@ -398,6 +393,13 @@ void Manager::captureState() {
if (m_stateCaptured) {
WR_DEBUG("State already captured, skipping capture");
emit stateCaptured();
return;
}
if (m_disableActions) {
WR_DEBUG("Actions are disabled, skipping state capture");
emit stateCaptured();
return;
}
if (m_pendingCaptures > 0) {
+4
View File
@@ -27,6 +27,7 @@ class Manager : public QObject {
* @param searchDirs Additional directories to search for wallpapers (not recursive)
* @param configPath Optional path to a specific configuration file (overrides the default config path)
* @param picturesDir The pictures directory (default location for user wallpapers)
* @param disableActions Whether to disable actions
* @param parent QObject parent
*
* @note The constructor will load the configuration and scan for wallpapers immediately.
@@ -36,6 +37,7 @@ class Manager : public QObject {
const QDir& picturesDir,
const QStringList& searchDirs = {},
const QString& configPath = "",
bool disableActions = false,
QObject* parent = nullptr);
~Manager();
@@ -88,6 +90,8 @@ class Manager : public QObject {
private:
const QDir m_configDir;
bool m_disableActions = false;
WallpaperConfigItems m_wallpaperConfig;
ThemeConfigItems m_themeConfig;
ActionConfigItems m_actionConfig;
+9 -2
View File
@@ -18,12 +18,13 @@ class Bootstrap {
friend class Carousel;
public:
Bootstrap(const AppOptions& options) {
Bootstrap(const AppOptions& options) : options(options) {
configMgr = new Config::Manager(
Utils::getConfigDir(),
Utils::getPicturesDir(),
options.appendDirs,
options.configPath);
options.configPath,
options.disableActions);
cacheMgr = new Cache::Manager(
Utils::getCacheDir(),
@@ -58,6 +59,11 @@ class Bootstrap {
}
bool apply(const QString& path) {
if (options.disableActions) {
Logger::warn("Bootstrap", "Actions are disabled, cannot apply wallpaper");
return false;
}
QEventLoop loop;
bool successFlag = false;
@@ -122,6 +128,7 @@ class Bootstrap {
}
private:
const AppOptions& options;
Cache::Manager* cacheMgr{};
Config::Manager* configMgr{};
Image::Manager* imageMgr{};
+3
View File
@@ -1,5 +1,6 @@
#include "manager.hpp"
#include "Utils/misc.hpp"
#include "Utils/texttemplate.hpp"
#include "logger.hpp"
@@ -61,6 +62,8 @@ void Manager::selectWallpaper(const QString& id) {
return;
}
Utils::printPath(data->getFullPath());
const auto command = _renderCommand(m_actionConfig.onSelected, _generateVariables(*data));
m_wallpaperService->select(command);
}
+18
View File
@@ -179,6 +179,24 @@ inline QDir getPicturesDir() {
return QDir(picturesDir);
}
inline void printPath(const QString& path, std::FILE* out = stdout) {
if (path.isEmpty()) {
return;
}
const QByteArray bytes = QFile::encodeName(path);
const size_t n = static_cast<size_t>(bytes.size());
if (std::fwrite(bytes.constData(), 1, n, out) != n) {
return;
}
if (std::fputc('\n', out) == EOF) {
return;
}
std::fflush(out);
return;
}
} // namespace WallReel::Core::Utils
#endif // WALLREEL_MISC_HPP
+1 -6
View File
@@ -96,11 +96,6 @@
"default": true,
"description": "Whether to print the selected wallpaper path to stdout on confirm"
},
"printPreview": {
"type": "boolean",
"default": false,
"description": "Whether to print the previewed wallpaper path to stdout on preview"
},
"onSelected": {
"type": "string",
"default": "",
@@ -148,7 +143,7 @@
},
"quitOnSelected": {
"type": "boolean",
"default": false,
"default": true,
"description": "Whether to quit the application after confirming a wallpaper"
},
"restoreOnClose": {
+1 -1
View File
@@ -2,7 +2,7 @@
title: WALLREEL
section: 1
header: User Commands
footer: WallReel 2.0.1
footer: WallReel 2.0.2
date: 2026-03-24
---
+2 -5
View File
@@ -2,7 +2,7 @@
title: WALLREEL
section: 5
header: File Formats Manual
footer: WallReel 2.0.1
footer: WallReel 2.0.2
date: 2026-03-24
---
@@ -79,9 +79,6 @@ Configures commands executed for preview, selection, and restore behavior.
`printSelected` (boolean, default: `true`)
: Print selected wallpaper path to stdout on confirmation.
`printPreview` (boolean, default: `false`)
: Print previewed wallpaper path to stdout on preview.
`onSelected` (string, default: `""`)
: Command executed when a wallpaper is confirmed.
@@ -101,7 +98,7 @@ Each item has:
`onRestore` (string, default: `""`)
: Command executed on restore. Saved state keys are usable as placeholders.
`quitOnSelected` (boolean, default: `false`)
`quitOnSelected` (boolean, default: `true`)
: Exit application immediately after confirming a selection.
`restoreOnClose` (boolean, default: `true`)