package main import ( "fmt" "log" "os" "time" "github.com/xyproto/wallutils" ) func slideshow(ch <-chan string) { dir := <-ch duration := time.Duration(config.Duration) * time.Minute ticker := time.NewTicker(duration) go func() { for { img, err := setRandomWallpaper(dir) if err != nil { fmt.Printf("Failed to set random wallpaper from directory %v.", dir) panic(err) } log.Printf("set %v as wallpaper\n", img) select { case dir = <-ch: log.Println("directory set!") ticker.Reset(duration) continue case <-ticker.C: continue } } }() } func setRandomWallpaper(dir string) (string, error) { img, err := pickRandomImage(dir) if err != nil { return "", err } desktopEnv, bool := os.LookupEnv("DESKTOP_SESSION") if !bool { panic("cannot determine desktop environment") } var mode string switch desktopEnv { case "cinnamon": mode = "zoom" case "hyprland": mode = "fit" default: mode = "" } return img, wallutils.SetWallpaperCustom(img, mode, false) }