aboutsummaryrefslogtreecommitdiffstats
path: root/pick-random-wallpaper
blob: 3853616f799c1837358f199d67f01ea8770d24da (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/usr/bin/env sh
# # -*- mode: scheme; -*-
IFS=" "
exec scsh -s "$0" "$@"
!#
;; Copyright (C) 2022  Tom Willemse

;; This program is free software: you can redistribute it and/or modify it under
;; the terms of the GNU General Public License as published by the Free Software
;; Foundation, either version 3 of the License, or (at your option) any later
;; version.

;; This program is distributed in the hope that it will be useful, but WITHOUT
;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
;; FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
;; details.

;; You should have received a copy of the GNU General Public License along with
;; this program. If not, see <https://www.gnu.org/licenses/>.

(define (random-wallpaper)
  (let* ((root-info (let ((port (run/port (xwininfo -root))))
                      (reverse (awk (read-line port) (line) ((result '()))
                                    ((seq (or "Width" "Height") ": "
                                          (submatch (+ digit))) =>
                                          (lambda (m)
                                            (cons (string->number (match:substring m 1))
                                                  result)))))))
         (width (car root-info))
         (height (cadr root-info)))
    (string-trim-right
     (run/string (pipe (find ,(format #f "~a/pictures/wallpaper" (getenv "HOME"))
                             -type f
                             "(" -wholename ,(format #f "*/~ax~a/*" width height)
                             -o -wholename "*/patterns/*" ")"
                             -not -name "*.org")
                       (shuf -n 1))))))

(define (attribute-exists? name)
  (= 0 (run (herbstclient attr ,name)
            (> 1 /dev/null)
            (> 2 1))))

(let ((wallpaper (random-wallpaper)))
  (if (not (attribute-exists? "my_wallpaper"))
      (run (herbstclient new_attr string my_wallpaper)))
  (&& (feh --bg-tile ,wallpaper)
      (herbstclient set_attr my_wallpaper ,wallpaper)))