88 lines
2.2 KiB
TypeScript
88 lines
2.2 KiB
TypeScript
import { dependencies, sh } from "lib/utils"
|
|
import options from "options";
|
|
const hyprland = await Service.import("hyprland");
|
|
|
|
const WP = `${Utils.HOME}/.config/background`
|
|
|
|
class Wallpaper extends Service {
|
|
static {
|
|
Service.register(this, {}, {
|
|
"wallpaper": ["string"],
|
|
})
|
|
}
|
|
|
|
#blockMonitor = false
|
|
#isRunning = false
|
|
|
|
#wallpaper() {
|
|
if (!dependencies("swww"))
|
|
return
|
|
|
|
hyprland.monitors.map(m => m.name);
|
|
sh("hyprctl cursorpos").then(pos => {
|
|
sh([
|
|
"swww", "img",
|
|
"--invert-y",
|
|
"--transition-type", "grow",
|
|
"--transition-duration", "1.5",
|
|
"--transition-fps", "30",
|
|
"--transition-pos", pos.replace(" ", ""),
|
|
WP,
|
|
]).then(() => {
|
|
this.changed("wallpaper")
|
|
})
|
|
})
|
|
}
|
|
|
|
async #setWallpaper(path: string) {
|
|
this.#blockMonitor = true
|
|
|
|
await sh(`cp ${path} ${WP}`)
|
|
this.#wallpaper()
|
|
|
|
this.#blockMonitor = false
|
|
}
|
|
|
|
readonly set = (path: string) => { this.#setWallpaper(path) }
|
|
readonly isRunning = () => { return this.#isRunning }
|
|
|
|
get wallpaper() { return WP }
|
|
|
|
constructor() {
|
|
super()
|
|
|
|
options.wallpaper.enable.connect("changed", () => {
|
|
if (options.wallpaper.enable.value) {
|
|
this.#isRunning = true
|
|
Utils.execAsync("swww-daemon")
|
|
.then(() => {
|
|
this.#wallpaper
|
|
})
|
|
.catch(() => null)
|
|
} else {
|
|
this.#isRunning = false
|
|
Utils.execAsync("pkill swww-daemon")
|
|
.catch(() => null)
|
|
}
|
|
|
|
})
|
|
|
|
if (!dependencies("swww") || !options.wallpaper.enable.value)
|
|
return this
|
|
|
|
this.#isRunning = true
|
|
Utils.monitorFile(WP, () => {
|
|
if (!this.#blockMonitor)
|
|
this.#wallpaper()
|
|
})
|
|
|
|
Utils.execAsync("swww-daemon")
|
|
.then(() => {
|
|
this.#wallpaper
|
|
})
|
|
.catch(() => null)
|
|
}
|
|
}
|
|
|
|
export default new Wallpaper
|