diff --git a/go.mod b/go.mod index a06e74e..a40a84f 100644 --- a/go.mod +++ b/go.mod @@ -12,4 +12,17 @@ require ( github.com/crazy3lf/colorconv v1.2.0 ) -require github.com/swaywm/swaybg v1.2.1 // indirect +require ( + github.com/anthonynsimon/bild v0.14.0 // indirect + github.com/fatih/color v1.18.0 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/stretchr/powerwalk v0.0.0-20151124150408-bceb9d014549 // indirect + github.com/xyproto/env/v2 v2.5.1 // indirect + golang.org/x/sys v0.26.0 // indirect +) + +require ( + github.com/swaywm/swaybg v1.2.1 // indirect + github.com/xyproto/wallutils v0.0.0-20241029150533-f105e9c53323 +) diff --git a/go.sum b/go.sum index 8823324..54e3e18 100644 --- a/go.sum +++ b/go.sum @@ -1,10 +1,29 @@ github.com/adhocore/jsonc v0.10.0 h1:YjNX9TojBfxQJ4kuoiNqVR5SFqu1YBEMsm+HxWnxbOI= github.com/adhocore/jsonc v0.10.0/go.mod h1:Ar4gd3i83+1Z+5M5SG6Vrfw9q3TO544OwLXH4+ZhWTE= +github.com/anthonynsimon/bild v0.14.0 h1:IFRkmKdNdqmexXHfEU7rPlAmdUZ8BDZEGtGHDnGWync= +github.com/anthonynsimon/bild v0.14.0/go.mod h1:hcvEAyBjTW69qkKJTfpcDQ83sSZHxwOunsseDfeQhUs= github.com/crazy3lf/colorconv v1.2.0 h1:UM7kSZWnwFMGiC+PpYrjxQSOd6sEyWb+dRKKTd3KslA= github.com/crazy3lf/colorconv v1.2.0/go.mod h1:2jTJ7QCWCj2sSLOhF4Gzi0J5/hoX8/VY8VzNvXAlD1I= github.com/disintegration/gift v1.2.1 h1:Y005a1X4Z7Uc+0gLpSAsKhWi4qLtsdEcMIbbdvdZ6pc= github.com/disintegration/gift v1.2.1/go.mod h1:Jh2i7f7Q2BM7Ezno3PhfezbR1xpUg9dUg3/RlKGr4HI= +github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= +github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/stretchr/powerwalk v0.0.0-20151124150408-bceb9d014549 h1:zjTKDjwZy1IVyLos+s70iYMwL/ZVojUbIDX5kghHa1Q= +github.com/stretchr/powerwalk v0.0.0-20151124150408-bceb9d014549/go.mod h1:RhJzAYfVBD/ULOCeUUaTn0CHDRQBYHjDY7yYpSt6+4M= github.com/swaywm/swaybg v1.2.1 h1:TvQYiifR9JW4dANxxb7HMbEaZdGnZ4CWynevENocIWU= github.com/swaywm/swaybg v1.2.1/go.mod h1:Og8Sb6ebG/J9hqY2nL3xnhKY5sL30mQL+JOrY9owcJM= +github.com/xyproto/env/v2 v2.5.1 h1:vu8A+z5VGp9TGgg7HQlAZPjbnk/Nvzt3gKzUtbt9kbQ= +github.com/xyproto/env/v2 v2.5.1/go.mod h1:F81ZEzu15s3TWUZJ1uzBl9iNeq9zcfHvxMkQJaLZUl0= +github.com/xyproto/wallutils v0.0.0-20241029150533-f105e9c53323 h1:N2G2i6IZsYEaXkkgn6NqaDBG7RoJanybfwHP98VTOs8= +github.com/xyproto/wallutils v0.0.0-20241029150533-f105e9c53323/go.mod h1:YneBbR00nKKlWx+pqDTyvWNwINDfPxiakTxDOvjTIcI= golang.org/x/image v0.21.0 h1:c5qV36ajHpdj4Qi0GnE0jUc/yuo33OLFaa0d+crTD5s= golang.org/x/image v0.21.0/go.mod h1:vUbsLavqK/W303ZroQQVKQ+Af3Yl6Uz1Ppu5J/cLz78= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= +golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= diff --git a/slideshow.go b/slideshow.go index b0e22af..894b986 100644 --- a/slideshow.go +++ b/slideshow.go @@ -1,54 +1,24 @@ package main import ( - // "bufio" "fmt" "log" - "os/exec" "time" + + "github.com/xyproto/wallutils" ) func slideshow(ch <-chan string) { dir := <-ch - ticker := time.NewTicker(time.Duration(config.Duration) * time.Minute) + ticker := time.NewTicker(time.Duration(config.Duration) * time.Second) - //set a flat background color based on config defaults - fillCmd := exec.Command("swaybg", "-c", "#232136") - // stdout, _ := fillCmd.StdoutPipe() - // scanner := bufio.NewScanner(stdout) - // out := make(chan string) - // go func() { - // for scanner.Scan() { - // fmt.Println("scanner: ", scanner.Text()) - // out <- scanner.Text() - // } - // }() - - ready := make(chan bool) - go func() { - err := fillCmd.Start() - if err != nil { - fmt.Println("could not set background color", err) - } - //NOTE: this is *very* hacky, but it is difficult to know when swaybg has initiated - time.Sleep(100 * time.Millisecond) - ready <- true - fmt.Println("bg color set!") - fillCmd.Wait() - }() - - var cmd *exec.Cmd go func() { for { - <-ready - newCmd := setRandomWallpaper(dir) - if cmd != nil { - err := cmd.Process.Kill() - if err != nil { - log.Fatal("could not kill process", err) - } + err := setRandomWallpaper(dir) + if err != nil { + fmt.Printf("Failed to set random wallpaper from directory %v.", dir) + panic(err) } - cmd = newCmd select { case dir = <-ch: log.Println("directory set!") @@ -60,18 +30,10 @@ func slideshow(ch <-chan string) { }() } -func setRandomWallpaper(dir string) *exec.Cmd { +func setRandomWallpaper(dir string) error { img, err := pickRandomImage(dir) if err != nil { - panic(err) + return err } - - cmd := exec.Command("swaybg", "-i", img, "--mode", "fit") - fmt.Printf("setting wallpaper: %v\n", img) - err = cmd.Start() - if err != nil { - log.Fatal("failed to set wallpaper!", err) - } - go cmd.Wait() - return cmd + return wallutils.SetWallpaperCustom(img, "fit", false) }