Feature Description
I’d like Noctalia to support binding a wallpaper to each theme variant:
- Light theme → Wallpaper A
- Dark theme → Wallpaper B
When the theme switches (manually or automatically), Noctalia should switch to the corresponding wallpaper automatically (ideally using Noctalia’s existing wallpaper transition animation).
Why Is This Needed?
Noctalia already supports automatically switching between light/dark themes (e.g., based on location/time). In practice, users often want the wallpaper to follow the theme as well.
Right now this can be approximated with Hooks (Theme Changed → call ipc wallpaper set ...), but it can lead to a race/competition at login:
Example scenario:
- Before shutdown, the system is in dark theme.
- After reboot/login, the automatic theme logic decides it should be light theme (e.g., morning).
- During session startup, Noctalia may first restore the previous dark theme and trigger the hook → wallpaper switches to dark wallpaper.
- Immediately after, the system switches to light theme and triggers the hook again → wallpaper switches again to light wallpaper.
Result: the wallpaper transitions twice during login, and the first transition may still be in progress when the second starts.
Expected behavior: wallpaper should switch only once, based on the final theme state after startup has stabilized.
This happens frequently in a real workflow: using the PC at night (dark theme), shutting down, and then booting in the morning (light theme).
This feels like something Noctalia should handle internally, because Noctalia has the best knowledge of:
- when the theme state is “final” vs “intermediate” during startup,
- when wallpaper transitions are in progress,
- and how to avoid duplicate transitions.
Suggested Solutions
One possible implementation approach:
-
Add per-theme wallpaper settings
- A “Light wallpaper” and “Dark wallpaper” entry in wallpaper settings (or theme settings).
- Optional per-monitor overrides if Noctalia already supports per-monitor wallpaper.
-
Internal debounce / “final state wins” logic
- If multiple theme changes happen within a short window during startup (or while restoring session), only apply the wallpaper change once, based on the final theme state.
- Alternatively: queue wallpaper changes and cancel any in-progress/queued transition when a newer theme state arrives.
-
Startup alignment
- After Noctalia finishes loading (or after the auto-theme decision is applied), sync wallpaper to the current theme exactly once.
- This would prevent the “restore old theme then immediately switch” issue.
-
Expose as a first-class feature
- This would remove the need for user-side hook scripts and avoid race conditions caused by external commands.
Additional Context
- Current workaround: use “Theme Changed” hook to run
ipc call wallpaper set ..., but it’s susceptible to the startup race described above.
- I’m using niri (single monitor
eDP-1), but I believe this can affect any setup where theme is automatically changed on login.
Feature Description
I’d like Noctalia to support binding a wallpaper to each theme variant:
When the theme switches (manually or automatically), Noctalia should switch to the corresponding wallpaper automatically (ideally using Noctalia’s existing wallpaper transition animation).
Why Is This Needed?
Noctalia already supports automatically switching between light/dark themes (e.g., based on location/time). In practice, users often want the wallpaper to follow the theme as well.
Right now this can be approximated with Hooks (Theme Changed → call
ipc wallpaper set ...), but it can lead to a race/competition at login:Example scenario:
Result: the wallpaper transitions twice during login, and the first transition may still be in progress when the second starts.
Expected behavior: wallpaper should switch only once, based on the final theme state after startup has stabilized.
This happens frequently in a real workflow: using the PC at night (dark theme), shutting down, and then booting in the morning (light theme).
This feels like something Noctalia should handle internally, because Noctalia has the best knowledge of:
Suggested Solutions
One possible implementation approach:
Add per-theme wallpaper settings
Internal debounce / “final state wins” logic
Startup alignment
Expose as a first-class feature
Additional Context
ipc call wallpaper set ..., but it’s susceptible to the startup race described above.eDP-1), but I believe this can affect any setup where theme is automatically changed on login.