import { Astal, Gdk, Gtk } from "ags/gtk4"; import app from "ags/gtk4/app"; import { exec } from "ags/process"; import Gio from "gi://Gio"; import GLib from "gi://GLib"; export const WINDOW_NAME = "wallpaper-manager"; // @TODO wallpaper cache const wallpaperPath = `/home/tux/Wallpapers/new`; const imageFormats = [".jpeg", ".jpg", ".webp", ".png"]; export const WallpaperManager = (gdkmonitor: Gdk.Monitor) => { const { TOP, BOTTOM, LEFT } = Astal.WindowAnchor; const { VERTICAL } = Gtk.Orientation; const wallpaperList = getWallpaperList(wallpaperPath); return ( {wallpaperList.map((wall) => ( ))} ); }; const onKey = ( _e: Gtk.EventControllerKey, keyval: number, _: number, mod: number, ) => { if (keyval === Gdk.KEY_Escape) { app.toggle_window(WINDOW_NAME); return; } }; function getWallpaperList(path: string) { const dir = Gio.file_new_for_path(path); const fileEnum = dir.enumerate_children( "standard::name", Gio.FileQueryInfoFlags.NONE, null, ); const files: string[] = []; let i = fileEnum.next_file(null); while (i) { let fileName = i.get_name(); if (imageFormats.some((fmt) => fileName.endsWith(fmt))) { files.push(fileName); } i = fileEnum.next_file(null); } return files; } const setWallpaper = (name: string) => { const hyprctl = GLib.find_program_in_path("hyprctl"); const imagePath = `${wallpaperPath}/${name}`; if (!hyprctl) return; const preloadedWalls = exec([hyprctl, "hyprpaper", "listloaded"]); const nWall = preloadedWalls.split("\n").length; console.log(nWall); if (nWall >= 5) { exec([hyprctl, "hyprpaper", "unload", "all"]); } exec([hyprctl, "hyprpaper", "preload", imagePath]); exec([hyprctl, "hyprpaper", "wallpaper", `,${imagePath}`]); app.toggle_window(WINDOW_NAME); };