Added ags
TODO copy ags config
This commit is contained in:
98
roles/ags/files/service/wallpaper.ts
Normal file
98
roles/ags/files/service/wallpaper.ts
Normal file
@@ -0,0 +1,98 @@
|
||||
import options from "options"
|
||||
import { dependencies, sh } from "lib/utils"
|
||||
|
||||
export type Resolution = 1920 | 1366 | 3840
|
||||
export type Market =
|
||||
| "random"
|
||||
| "en-US"
|
||||
| "ja-JP"
|
||||
| "en-AU"
|
||||
| "en-GB"
|
||||
| "de-DE"
|
||||
| "en-NZ"
|
||||
| "en-CA"
|
||||
|
||||
const WP = `${Utils.HOME}/.config/background`
|
||||
const Cache = `${Utils.HOME}/Pictures/Wallpapers/Bing`
|
||||
|
||||
class Wallpaper extends Service {
|
||||
static {
|
||||
Service.register(this, {}, {
|
||||
"wallpaper": ["string"],
|
||||
})
|
||||
}
|
||||
|
||||
#blockMonitor = false
|
||||
|
||||
#wallpaper() {
|
||||
if (!dependencies("swww"))
|
||||
return
|
||||
|
||||
sh("hyprctl cursorpos").then(pos => {
|
||||
sh([
|
||||
"swww", "img",
|
||||
"--transition-type", "grow",
|
||||
"--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
|
||||
}
|
||||
|
||||
async #fetchBing() {
|
||||
const res = await Utils.fetch("https://bing.biturl.top/", {
|
||||
params: {
|
||||
resolution: options.wallpaper.resolution.value,
|
||||
format: "json",
|
||||
image_format: "jpg",
|
||||
index: "random",
|
||||
mkt: options.wallpaper.market.value,
|
||||
},
|
||||
}).then(res => res.text())
|
||||
|
||||
if (!res.startsWith("{"))
|
||||
return console.warn("bing api", res)
|
||||
|
||||
const { url } = JSON.parse(res)
|
||||
const file = `${Cache}/${url.replace("https://www.bing.com/th?id=", "")}`
|
||||
|
||||
if (dependencies("curl")) {
|
||||
Utils.ensureDirectory(Cache)
|
||||
await sh(`curl "${url}" --output ${file}`)
|
||||
this.#setWallpaper(file)
|
||||
}
|
||||
}
|
||||
|
||||
readonly random = () => { this.#fetchBing() }
|
||||
readonly set = (path: string) => { this.#setWallpaper(path) }
|
||||
get wallpaper() { return WP }
|
||||
|
||||
constructor() {
|
||||
super()
|
||||
|
||||
if (!dependencies("swww"))
|
||||
return this
|
||||
|
||||
// gtk portal
|
||||
Utils.monitorFile(WP, () => {
|
||||
if (!this.#blockMonitor)
|
||||
this.#wallpaper()
|
||||
})
|
||||
|
||||
Utils.execAsync("swww-daemon")
|
||||
.then(this.#wallpaper)
|
||||
.catch(() => null)
|
||||
}
|
||||
}
|
||||
|
||||
export default new Wallpaper
|
||||
Reference in New Issue
Block a user