summaryrefslogtreecommitdiff
path: root/ar/.local/bin/setbg
blob: 66f681936159bfda3fb7f45d3b7f5d5dbf7c77d1 (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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/bin/sh

# This script does the following:
#	Run by itself, set the wallpaper (at X start).
#	If given a file, set that as the new wallpaper.
#	If given a directory, choose random file in it.
#	If wal is installed, also generates a colorscheme.

# Location of link to wallpaper link.
wallloc="${XDG_DATA_HOME:-${HOME}/.local/share}/wallpapers"
bgloc="$wallloc/bg"
vidloc="$wallloc/video/1/filename00001.jpg"

# Configuration files of applications that have their themes changed by pywal.
dunstconf="${XDG_CONFIG_HOME:-${HOME}/.config}/dunst/dunstrc"
zathuraconf="${XDG_CONFIG_HOME:-${HOME}/.config}/zathura/zathurarc"

# Give -s as parameter to make notifications silent.
while getopts "s" o; do
  case "${o}" in
  s) silent='1' ;;
  *) ;;
  esac
done

shift $((OPTIND - 1))

[ -d "$wallloc" ] || mkdir -p "$wallloc"

[ "$(ls "$wallloc/video" 2>/dev/null)" ] && {
  [ -n "$(pgrep -f "wallset")" ] && pgrep -f "wallset" | xargs kill
  wallset -r 2>/dev/null
  wallset -q 2>/dev/null
  rm -rf "$wallloc/video"
}

[ -f ~/.fehbg ] && rm -f ~/.fehbg

trueloc="$(readlink -f "$1")" &&
  case "$(file --mime-type -b "$trueloc")" in
  image/*) ln -sf "$trueloc" "$bgloc" && [ -z "$silent" ] && notify-send -i "$bgloc" "Changing wallpaper..." ;;
  inode/directory) ln -sf "$(find -L "$trueloc" -iregex '.*.\(jpg\|jpeg\|png\|gif\)' -type f | shuf -n 1)" "$bgloc" && [ -z "$silent" ] && notify-send -i "$bgloc" "Random Wallpaper chosen." ;;
  video/*)
    mkdir -p "$wallloc/video" 2>/dev/null
    if [ ! "${trueloc##*.}" = "mp4" ] || [ "$(($(mediainfo --Output="General;%Duration%" "$trueloc")))" -gt 10000 ]; then
      notify-send "⌛ Converting video for wallpaper..." && ffmpeg -i "$trueloc" -t 3 "$wallloc/video/bg.mp4" 2>/dev/null
    else
      cp "$trueloc" "$wallloc/video/bg.mp4" 2>/dev/null
    fi
    trueloc="$wallloc/video/bg.mp4"
    wallset --video "$trueloc" >/dev/null 2>&1 && [ -z "$silent" ] && notify-send -i "$vidloc" "Changing wallpaper..."
    exit
    ;;
  *)
    [ -z "$silent" ] && notify-send "🖼️ Error" "Not a valid image or directory."
    exit 1
    ;;
  esac

# If pywal is installed, use it.
if command -v wal >/dev/null 2>&1; then
  wal -n -i "$(readlink -f "$bgloc")" -o "${XDG_CONFIG_HOME:-${HOME}/.config}/wal/postrun" >/dev/null 2>&1
# If pywal is removed, return config files to normal.
else
  [ -f "$dunstconf.bak" ] && unlink "$dunstconf" && mv "$dunstconf.bak" "$dunstconf"
  [ -f "$zathuraconf.bak" ] && unlink "$zathuraconf" && mv "$zathuraconf.bak" "$zathuraconf"
fi

xwallpaper --zoom "$bgloc"
# If running, dwm hit the key to refresh the color scheme.
pidof dwm >/dev/null && xdotool key super+F5