- Idle is handled in the shell instead of hypridle: the screen dims slowly at 4 minutes, locks at 5, powers down at 6, and suspends at 15 on battery. Idle inhibitors hold every stage off; Super+Shift+I does the same by hand and puts a cup on the rail. - The shell draws the wallpaper (backdrop/), so hyprpaper is gone. The picture is drawn a little larger than the screen and drifts with the workspace a beat after the windows, and dims a shade while windows are open. The path lives in quickshell/wallpaper. - The lock screen and power menu say "Take your time." instead of the NieR slogan. - hyprpaper is no longer launched twice, the media module keeps the player that played last instead of an empty browser tab, and grouped windows show thin untitled tabs with their place in the group (2/3) in the bar title. - qt6ct uses Darkly; the package list gains adw-gtk-theme and darkly-bin.
63 lines
2.0 KiB
QML
63 lines
2.0 KiB
QML
pragma Singleton
|
|
|
|
import QtQuick
|
|
import Quickshell
|
|
import Quickshell.Io
|
|
import "root:/config"
|
|
|
|
// The wallpaper, owned by the shell. backdrop/Backdrop.qml draws it and the lock
|
|
// screen fades in from the same picture, so there is one answer to "what is
|
|
// on screen" and nothing to ask a separate daemon (this used to poll
|
|
// hyprpaper every ten seconds).
|
|
//
|
|
// The choice lives in ~/.config/quickshell/wallpaper — one line, a path, `~`
|
|
// allowed — so it survives restarts and can be edited by hand. Change it live
|
|
// with `qs ipc call shell wallpaper ~/.wallpapers/other.jpg`.
|
|
Singleton {
|
|
id: root
|
|
|
|
// The wallpaper to use when no particular monitor is being asked about.
|
|
property string path: ""
|
|
|
|
readonly property url source: root.path !== ""
|
|
? Qt.resolvedUrl("file://" + root.path)
|
|
: Theme.fallbackWallpaper
|
|
|
|
signal changed()
|
|
|
|
// Every monitor shows the same picture. Kept as a per-monitor lookup so
|
|
// callers do not have to change if that stops being true.
|
|
function forMonitor(name: string): url {
|
|
return root.source;
|
|
}
|
|
|
|
function set(p: string) {
|
|
const next = root._expand(p);
|
|
if (next === "") return;
|
|
store.setText("# The wallpaper the shell draws (services/Wallpaper.qml). One path; ~ allowed.\n"
|
|
+ next + "\n");
|
|
}
|
|
|
|
function _expand(p: string): string {
|
|
const s = p.trim();
|
|
if (s.startsWith("~/")) return Quickshell.env("HOME") + s.slice(1);
|
|
return s;
|
|
}
|
|
|
|
FileView {
|
|
id: store
|
|
path: Quickshell.env("HOME") + "/.config/quickshell/wallpaper"
|
|
watchChanges: true
|
|
printErrors: false
|
|
onFileChanged: reload()
|
|
onLoaded: {
|
|
const line = text().split("\n").map(l => l.trim()).find(l => l !== "" && !l.startsWith("#"));
|
|
const next = line ? root._expand(line) : "";
|
|
if (next !== root.path) {
|
|
root.path = next;
|
|
root.changed();
|
|
}
|
|
}
|
|
}
|
|
}
|