Add animated moire/halftone Plasma wallpaper with waxx themes

f629a67 · Gabriel Morell · 2026-09-29 20:43

28 files +909 -4
Message
{commit_body(@commit)}

Files changed

modified .github/workflows/package.yml
+2 −0
@@ -71,6 +71,7 @@ jobs:
71 71 cargo deb -p plymouth-theme-neiam --no-build --no-strip
72 72 cargo deb -p sddm-theme-neiam --no-build --no-strip
73 73 cargo deb -p plasma-wallpaper-neiam --no-build --no-strip
74 + cargo deb -p plasma-wallpaper-neiam-moire --no-build --no-strip
74 75 cargo deb -p plasma-splash-neiam --no-build --no-strip
75 76 cargo deb -p neiam-branding --no-build --no-strip
76 77 tools/deb-fixup.sh target/debian/*.deb
@@ -81,6 +82,7 @@ jobs:
81 82 cargo generate-rpm -p plymouth -a noarch
82 83 cargo generate-rpm -p sddm -a noarch
83 84 cargo generate-rpm -p wallpaper -a noarch
85 + cargo generate-rpm -p moire -a noarch
84 86 cargo generate-rpm -p splash -a noarch
85 87 cargo generate-rpm -p branding -a noarch
86 88
modified Cargo.toml
+1 −1
@@ -3,7 +3,7 @@
3 3 # ppl and publish to the same registries.
4 4 [workspace]
5 5 resolver = "2"
6 −members = ["plymouth", "sddm", "wallpaper", "splash", "branding"]
6 +members = ["plymouth", "sddm", "wallpaper", "moire", "splash", "branding"]
7 7
8 8 # CI stamps this line (the first `version = ` in the file) per build.
9 9 [workspace.package]
modified README.md
+35 −1
@@ -9,6 +9,7 @@ through the same pipeline as ppl.
9 9 | `plymouth-theme-neiam` | `/usr/share/plymouth/themes/neiam/` |
10 10 | `sddm-theme-neiam` | `/usr/share/sddm/themes/neiam/` |
11 11 | `plasma-wallpaper-neiam` | `/usr/share/wallpapers/neiam/` (desktop and lock screen) |
12 +| `plasma-wallpaper-neiam-moire` | `/usr/share/plasma/wallpapers/org.neiam.moire/` (animated; desktop and lock screen) |
12 13 | `plasma-splash-neiam` | `/usr/share/plasma/look-and-feel/org.neiam.desktop/` (splash after login) |
13 14
14 15 Both are architecture-independent (`all` / `noarch`).
@@ -48,6 +49,36 @@ wallpaper's sizes by itself.
48 49 The Plymouth theme is copied into the initramfs, so every render there
49 50 adds to its size.
50 51
52 +## Animated wallpaper
53 +
54 +`plasma-wallpaper-neiam-moire` is a Plasma wallpaper plugin ("neiam
55 +moire" under *Wallpaper type*, for the desktop or the lock screen)
56 +that draws the moire live, with a halftone field, both, or fading
57 +between the two. Everything drifts slowly and never visibly repeats.
58 +
59 +Its colours come from the waxx themes (dark, light, her, afterdark,
60 +forest, sky, clays, stones, blueprint): the ground is `base-100`
61 +fading to `base-300`, the moire `accent`, the halftone `primary`. It
62 +can hold one theme, or follow the time of day through night, sunrise,
63 +day and sunset themes, either by clock times or by the real sun at a
64 +latitude and longitude. Between phases it blends by the sun's
65 +elevation, turning the hue so the transitions pass through the purples
66 +of a real twilight rather than grey.
67 +
68 +Settings trade smoothness for power: frame rate (30 by default) and
69 +speed, where 0 holds a still frame and costs nothing after drawing it.
70 +
71 + moire/shaders/field.frag shader source
72 + moire/theme/contents/ui/field.frag.qsb compiled; run tools/shaders.sh after editing
73 + moire/theme/contents/ui/themes.js generated; tools/themes.py ../waxx/assets/css/app.css
74 + moire/theme/contents/ui/schedule.js sun position and theme blending
75 + moire/theme/contents/ui/Field.qml the picture, without Plasma
76 +
77 +`Field.qml` is plain QtQuick, so it can be rendered outside Plasma.
78 +Offscreen rendering needs the GPU path, or the shader is skipped:
79 +
80 + QT_QUICK_BACKEND=rhi QSG_RHI_BACKEND=opengl QT_QPA_PLATFORM=offscreen qml6 ...
81 +
51 82 ## Enabling
52 83
53 84 Installing a package does not switch to its theme:
@@ -62,7 +93,8 @@ Installing a package does not switch to its theme:
62 93 printf '[Theme]\nCurrent=neiam\n' | sudo tee /etc/sddm.conf.d/neiam.conf
63 94
64 95 Per user, in System Settings: the wallpaper under *Wallpaper* and
65 −*Screen Locking → Appearance*, the splash under *Splash Screen*
96 +*Screen Locking → Appearance* (as the "Image" type for the stills, or
97 +"neiam moire" for the animated one), the splash under *Splash Screen*
66 98 (or `plasma-apply-wallpaperimage /usr/share/wallpapers/neiam` and
67 99 `kwriteconfig6 --file ksplashrc --group KSplash --key Theme org.neiam.desktop`).
68 100
@@ -86,12 +118,14 @@ The packages are data-only cargo crates so that `cargo-deb` and
86 118 cargo deb -p plymouth-theme-neiam --no-build --no-strip
87 119 cargo deb -p sddm-theme-neiam --no-build --no-strip
88 120 cargo deb -p plasma-wallpaper-neiam --no-build --no-strip
121 + cargo deb -p plasma-wallpaper-neiam-moire --no-build --no-strip
89 122 cargo deb -p plasma-splash-neiam --no-build --no-strip
90 123 cargo deb -p neiam-branding --no-build --no-strip
91 124 tools/deb-fixup.sh target/debian/*.deb
92 125 cargo generate-rpm -p plymouth -a noarch
93 126 cargo generate-rpm -p sddm -a noarch
94 127 cargo generate-rpm -p wallpaper -a noarch
128 + cargo generate-rpm -p moire -a noarch
95 129 cargo generate-rpm -p splash -a noarch
96 130 cargo generate-rpm -p branding -a noarch
97 131
modified branding/Cargo.toml
+3 −2
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "neiam-branding"
3 −description = "neiam device branding: boot splash, login screen, wallpaper and login splash"
3 +description = "neiam device branding: boot splash, login screen, wallpapers and login splash"
4 4 version.workspace = true
5 5 edition.workspace = true
6 6 authors.workspace = true
@@ -14,7 +14,7 @@ path = "src/lib.rs"
14 14 # every branding package.
15 15 [package.metadata.deb]
16 16 section = "metapackages"
17 −depends = "plymouth-theme-neiam, sddm-theme-neiam, plasma-wallpaper-neiam, plasma-splash-neiam"
17 +depends = "plymouth-theme-neiam, sddm-theme-neiam, plasma-wallpaper-neiam, plasma-wallpaper-neiam-moire, plasma-splash-neiam"
18 18 assets = [
19 19 ["../README.md", "usr/share/doc/neiam-branding/README.md", "644"],
20 20 ]
@@ -28,4 +28,5 @@ assets = [
28 28 plymouth-theme-neiam = "*"
29 29 sddm-theme-neiam = "*"
30 30 plasma-wallpaper-neiam = "*"
31 +plasma-wallpaper-neiam-moire = "*"
31 32 plasma-splash-neiam = "*"
added moire/Cargo.toml
+30 −0
@@ -0,0 +1,30 @@
1 +[package]
2 +name = "plasma-wallpaper-neiam-moire"
3 +description = "Animated neiam moire and halftone wallpaper for Plasma, optionally following the sun"
4 +version.workspace = true
5 +edition.workspace = true
6 +authors.workspace = true
7 +license.workspace = true
8 +publish = false
9 +
10 +[lib]
11 +path = "src/lib.rs"
12 +
13 +# A Plasma wallpaper plugin. shaders/ holds the shader's source; the
14 +# package ships only the compiled .qsb (see tools/shaders.sh).
15 +[package.metadata.deb]
16 +section = "misc"
17 +assets = [
18 + ["theme/metadata.json", "usr/share/plasma/wallpapers/org.neiam.moire/", "644"],
19 + ["theme/contents/config/*", "usr/share/plasma/wallpapers/org.neiam.moire/contents/config/", "644"],
20 + ["theme/contents/ui/*", "usr/share/plasma/wallpapers/org.neiam.moire/contents/ui/", "644"],
21 + ["../README.md", "usr/share/doc/plasma-wallpaper-neiam-moire/README.md", "644"],
22 +]
23 +
24 +[package.metadata.generate-rpm]
25 +assets = [
26 + { source = "theme/metadata.json", dest = "/usr/share/plasma/wallpapers/org.neiam.moire/metadata.json", mode = "0644" },
27 + { source = "theme/contents/config/*", dest = "/usr/share/plasma/wallpapers/org.neiam.moire/contents/config/", mode = "0644" },
28 + { source = "theme/contents/ui/*", dest = "/usr/share/plasma/wallpapers/org.neiam.moire/contents/ui/", mode = "0644" },
29 + { source = "../README.md", dest = "/usr/share/doc/plasma-wallpaper-neiam-moire/README.md", doc = true, mode = "0644" },
30 +]
added moire/shaders/field.frag
+90 −0

Click to load diff…

added moire/src/lib.rs
+1 −0

Click to load diff…

added moire/theme/contents/config/main.xml
+60 −0

Click to load diff…

added moire/theme/contents/ui/Field.qml
+86 −0

Click to load diff…

added moire/theme/contents/ui/config.qml
+202 −0

Click to load diff…

modified ?
+0 −0

Click to load diff…

added moire/theme/contents/ui/main.qml
+42 −0

Click to load diff…

added moire/theme/contents/ui/schedule.js
+159 −0

Click to load diff…

added moire/theme/contents/ui/themes.js
+62 −0

Click to load diff…

added moire/theme/metadata.json
+17 −0

Click to load diff…

added tools/shaders.sh
+21 −0

Click to load diff…

added tools/themes.py
+98 −0

Click to load diff…

Parents: 26c46bb