diff --git a/.bauke/bin/desktop-wallpaper b/.bauke/bin/desktop-wallpaper new file mode 100755 index 0000000..f38c201 --- /dev/null +++ b/.bauke/bin/desktop-wallpaper @@ -0,0 +1,7 @@ +#!/usr/bin/env zsh + +deno run \ + --allow-run="curl,xfconf-query" \ + --allow-write \ + "$BAUKE_DIR/scripts/desktop-wallpaper.ts" \ + "$@" diff --git a/.bauke/scripts/desktop-wallpaper.ts b/.bauke/scripts/desktop-wallpaper.ts new file mode 100644 index 0000000..932a91a --- /dev/null +++ b/.bauke/scripts/desktop-wallpaper.ts @@ -0,0 +1,55 @@ +import { Command } from "https://deno.land/x/cliffy@v0.25.5/command/mod.ts"; + +const imagePath = new URL("../data/wallpaper.jpg", import.meta.url).pathname; + +async function main(): Promise { + const { options } = await new Command() + .name("desktop-wallpaper") + .description("Desktop wallpaper changer for XFCE") + .option("--unsplash", "Download a random Unsplash wallpaper") + .option("--height ", "The height of the image", { + default: 1080, + depends: ["unsplash"], + }) + .option("--width ", "The width of the image", { + default: 1920, + depends: ["unsplash"], + }) + .parse(Deno.args); + + if (options.unsplash) { + await downloadImage( + `https://source.unsplash.com/random/${options.width}x${options.height}`, + ); + console.log("Saved Unsplash image to"); + console.log("-", imagePath); + await setWallpaper(); + } +} + +async function downloadImage(url: string): Promise { + await Deno.run({ + cmd: ["curl", "-fsLS", url, "-o", imagePath], + }).status(); +} + +async function setWallpaper(): Promise { + const monitors = ["monitorHDMI-0", "monitorHDMI-1"]; + for (const monitor of monitors) { + await Deno.run({ + cmd: [ + "xfconf-query", + "-c", + "xfce4-desktop", + "-p", + `/backdrop/screen0/${monitor}/workspace0/last-image`, + "-s", + imagePath, + ], + }).status(); + } +} + +if (import.meta.main) { + void main(); +}