import app from "ags/gtk3/app" import { Astal, Gtk } from "ags/gtk3" import { createPoll } from "ags/time" import { For } from "ags" import { sh, shell } from "../lib/utils" export const WALLPICKER_WINDOW = "wall-picker" const COLUMNS = 3 type Wallpaper = { name: string; path: string } const findCommand = "find -L \"$HOME/wallpapers\" -maxdepth 1 -type f " + "\\( -iname '*.png' -o -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.webp' -o -iname '*.gif' \\) " + "2>/dev/null | sort" const wallpapers = createPoll( [], 5000, shell(findCommand), (stdout) => stdout .split("\n") .filter((line) => line.length > 0) .map((path) => ({ path, name: path.split("/").pop() ?? path })), ) const rows = wallpapers.as((list) => { const chunks: Wallpaper[][] = [] for (let index = 0; index < list.length; index += COLUMNS) { chunks.push(list.slice(index, index + COLUMNS)) } return chunks }) const setWallpaper = (path: string) => { app.toggle_window(WALLPICKER_WINDOW) sh(`"$HOME/scripts/blob_wallpaper.sh" "${path}"`) } function Thumbnail({ wall }: { wall: Wallpaper }) { return ( ) } export default function WallPicker() { const hasWalls = wallpapers.as((list) => list.length > 0) const isEmpty = wallpapers.as((list) => list.length === 0) return ( row.map((wall) => wall.name).join("|")}> {(row: Wallpaper[]) => ( {row.map((wall) => ( ))} )} ) }