Skip to content

Commit cbb6579

Browse files
feat(theme): hard-cut hyprpaper and make control center realtime
Remove hyprpaper from runtime/provisioning and switch wallpaper orchestration to quickshell+wpgtk with stateful fallback, while applying appearance changes instantly without Apply/Save/Revert staging. Made-with: Cursor
1 parent 787bdb4 commit cbb6579

57 files changed

Lines changed: 109 additions & 409 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ dots rice list # See all available themes
164164
🐾 **[Kitty](https://sw.kovidgoyal.net/kitty)** — GPU-accelerated terminal emulator
165165
🐚 **[Zsh](https://zsh.org) + [Powerlevel10k](https://github.com/romkatv/powerlevel10k)** — Feature-rich shell with beautiful prompt
166166
🔒 **[Hyprlock](https://github.com/hyprwm/hyprlock)** — Secure lock screen
167-
🖼️ **[Hyprpaper](https://github.com/hyprwm/hyprpaper)**Fast wallpaper daemon
167+
🖼️ **Quickshell + wpgtk wallpaper flow**Unified wallpaper management via `dots-wallpaper-set`
168168
🎨 **Rice System** — Instant theme switching with Material Design 3 colors
169169

170170
> 📖 [Complete component list →](https://github.com/ulises-jeremias/dotfiles/wiki/Home)

docs/Quickshell-Hard-Cut-Matrix.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ It defines what stays, what is removed, and why.
99
- `home/dot_local/bin/executable_dots-appearance`
1010
- `home/dot_local/bin/executable_dots-color-scheme`
1111
- `home/dot_local/bin/executable_dots-smart-colors`
12-
- `home/dot_local/bin/executable_dots-hyprpaper-set`
12+
- `home/dot_local/bin/executable_dots-wallpaper-set`
1313
- `home/dot_local/bin/executable_dots-wal-reload`
1414
- `home/dot_local/bin/executable_dots-settings-gui`
1515
- `home/dot_local/bin/executable_dots-launcher` (Quickshell-first, minimal rescue)
@@ -43,7 +43,7 @@ It defines what stays, what is removed, and why.
4343

4444
Core install should represent Quickshell + Hyprland only:
4545

46-
- Keep: `hyprland`, `quickshell`, `hyprpaper`, `hyprlock`, `hypridle`, `cliphist`, `wl-clipboard`, `copyq`, core media/network/system packages.
46+
- Keep: `hyprland`, `quickshell`, `hyprlock`, `hypridle`, `cliphist`, `wl-clipboard`, `copyq`, core media/network/system packages.
4747
- Remove from core defaults: `mako`, `wofi`, `nwg-bar`, `nwg-drawer`, `wlogout`, and other legacy menu/widget stack assumptions.
4848

4949
## Call-Site Cleanup Requirement

docs/System-Architecture.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
- Quickshell (M3 color scheme via scheme.json)
1818
- Hyprland (compositor animations and settings)
19-
- Wallpaper system (hyprpaper)
19+
- Wallpaper system (Quickshell background + wpgtk contract)
2020
- GTK themes (automatic light/dark selection)
2121

2222
**Design Constraints:**

docs/wiki/Dots-Scripts.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -100,14 +100,14 @@ dots smart-colors --concept=error
100100
dots wal-reload
101101
```
102102

103-
### hyprpaper-set
103+
### wallpaper-set
104104

105-
- Sets wallpaper through Hyprpaper IPC
106-
- Persists wallpaper state
107-
- Triggers smart-colors regeneration and Quickshell palette reload (unless invoked from an outer theme pipeline)
105+
- Unified wallpaper entrypoint used by Quickshell and scripts
106+
- Delegates to `wpg -s` when available
107+
- Fallback path writes wallpaper state files and triggers smart-colors + Quickshell palette reload
108108

109109
```bash
110-
dots hyprpaper-set /path/to/wallpaper.jpg
110+
dots wallpaper-set /path/to/wallpaper.jpg
111111
```
112112

113113
## Notes

docs/wiki/Home.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ Most were written from scratch. Core stack:
5252
- **Terminal Emulator** 🐾 [Kitty](https://sw.kovidgoyal.net/kitty/) - GPU-accelerated terminal
5353
- **Shell** 🐚 [Zsh](https://zsh.org) with Powerlevel10k prompt
5454
- **Lockscreen** 🔒 [Hyprlock](https://github.com/hyprwm/hyprlock) - Secure lock screen
55-
- **Wallpaper** 🖼️ [Hyprpaper](https://github.com/hyprwm/hyprpaper) - Fast wallpaper daemon
55+
- **Wallpaper** 🖼️ Quickshell + wpgtk integration via `dots-wallpaper-set`
5656
- **File Manager** 🃏 [Thunar](https://docs.xfce.org/xfce/thunar/start) with customized side pane
5757
- and many more!
5858

docs/wiki/Smart-Colors-System.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ Smart Colors generates semantic colors and Material Design 3 palettes from the c
55
## Primary Contract
66

77
- Quickshell is the main consumer through `~/.cache/dots/smart-colors/scheme.json`.
8-
- `dots-wal-reload` and `dots-hyprpaper-set` trigger palette refresh and Quickshell IPC reload.
8+
- `dots-wal-reload` and `dots-wallpaper-set` trigger palette refresh and Quickshell IPC reload.
99
- Script consumers can source shell/env exports from the same cache directory.
1010

1111
## Wallpaper Pipeline Contract
1212

1313
### Historical pipelines
1414

15-
- **wpgtk pipeline**: `wpg -s <image>` -> `wpg.conf` runs `dots-wal-reload` -> `dots-hyprpaper-set` updates runtime wallpaper state.
16-
- **Quickshell direct pipeline**: UI actions used to call `dots-hyprpaper-set` directly, bypassing `wpg` and global reload orchestration.
15+
- **wpgtk pipeline**: `wpg -s <image>` -> `wpg.conf` runs `dots-wal-reload` and refreshes shell colors.
16+
- **Legacy Quickshell direct pipeline**: UI actions used to call compositor-specific wallpaper setters directly, bypassing `wpg` and global reload orchestration.
1717

1818
The direct pipeline could desynchronize `~/.config/wpg/.current` from shell/runtime state and miss some app reloads that are centralized in `dots-wal-reload`.
1919

home/.chezmoiscripts/linux/run_onchange_before_install-hyprland.sh.tmpl

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,7 @@ yay -S --noconfirm --needed \
3030

3131
# Wallpaper management
3232
yay -S --noconfirm --needed \
33-
swaybg \
34-
hyprpaper
33+
swaybg
3534

3635
# Clipboard manager
3736
yay -S --noconfirm --needed \

home/dot_config/hypr/hyprland.conf.d/autostart.conf

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,6 @@ exec-once = ~/.local/bin/dots-battery-monitor -d
5454
# Load Xresources (for XWayland apps)
5555
exec-once = xrdb -merge ~/.Xresources
5656

57-
# Wallpaper daemon
58-
exec-once = hyprpaper
59-
6057
# Cursor theme
6158
exec-once = hyprctl setcursor elementary 24
6259

home/dot_config/hypr/hyprpaper.conf.tmpl

Lines changed: 0 additions & 34 deletions
This file was deleted.

home/dot_config/quickshell/modules/controlcenter/ControlCenter.qml

Lines changed: 0 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -25,43 +25,12 @@ Item {
2525
root: root
2626
}
2727

28-
readonly property bool hasPendingChanges: Config.hasPendingChanges || session.hasPendingActions
29-
3028
function close(): void {
3129
}
3230

33-
function applyChanges(): void {
34-
session.applyPendingActions();
35-
Schemes.reload();
36-
Appearances.reload();
37-
Wallpapers.stopPreview();
38-
Colours.showPreview = false;
39-
}
40-
41-
function saveChanges(): void {
42-
session.applyPendingActions();
43-
Config.writeNow();
44-
Schemes.reload();
45-
Appearances.reload();
46-
Wallpapers.stopPreview();
47-
Colours.showPreview = false;
48-
}
49-
50-
function revertChanges(): void {
51-
session.clearPendingActions();
52-
Config.revertChanges();
53-
Schemes.reload();
54-
Appearances.reload();
55-
Wallpapers.stopPreview();
56-
Colours.showPreview = false;
57-
}
58-
5931
implicitWidth: implicitHeight * Config.controlCenter.sizes.ratio
6032
implicitHeight: screen.height * Config.controlCenter.sizes.heightMult
6133

62-
Component.onCompleted: Config.beginEditSession()
63-
Component.onDestruction: Config.endEditSession()
64-
6534
GridLayout {
6635
anchors.fill: parent
6736

@@ -128,50 +97,5 @@ Item {
12897
}
12998
}
13099

131-
StyledRect {
132-
id: actionBar
133-
z: 20
134-
135-
anchors.right: parent.right
136-
anchors.bottom: parent.bottom
137-
anchors.rightMargin: Appearance.padding.large
138-
anchors.bottomMargin: Appearance.padding.large
139-
140-
color: Colours.tPalette.m3surfaceContainerHigh
141-
radius: Appearance.rounding.full
142-
visible: true
143-
opacity: root.hasPendingChanges ? 1 : 0.9
144-
145-
implicitHeight: actionsRow.implicitHeight + Appearance.padding.small * 2
146-
implicitWidth: actionsRow.implicitWidth + Appearance.padding.small * 2
147-
148-
RowLayout {
149-
id: actionsRow
150-
anchors.centerIn: parent
151-
spacing: Appearance.spacing.small
152-
153-
TextButton {
154-
type: TextButton.Tonal
155-
text: qsTr("Apply")
156-
enabled: root.hasPendingChanges
157-
onClicked: root.applyChanges()
158-
}
159-
160-
TextButton {
161-
type: TextButton.Filled
162-
text: qsTr("Save")
163-
enabled: root.hasPendingChanges
164-
onClicked: root.saveChanges()
165-
}
166-
167-
TextButton {
168-
type: TextButton.Text
169-
text: qsTr("Revert")
170-
enabled: root.hasPendingChanges
171-
onClicked: root.revertChanges()
172-
}
173-
}
174-
}
175-
176100
readonly property bool initialOpeningComplete: panes.initialOpeningComplete
177101
}

0 commit comments

Comments
 (0)