~kris/dots

srice

ref: e98f3b030dc24445bd55c68d95d2d81933fd68b3 srice/.local/bin/media/setbg -rw-r--r-- 4.3 KiB
e98f3b03 — Kris Yotam chore: sync local state after restore (push updates, no pull) a month ago
                                                                                
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#!/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.
#	Use -c <image> to generate colors from a different image than the wallpaper.
#
# Usage:
#	setbg <wallpaper>                  # wallpaper + colors from same image
#	setbg <wallpaper> -c <colorimg>    # wallpaper from first, colors from second
#	setbg -c <colorimg> <wallpaper>    # same as above (order doesn't matter)
#	setbg -s <wallpaper>               # silent mode (no notifications)
#	setbg -w <wallpaper>               # wallpaper only (no colorscheme)
#	setbg -d                           # default Plan 9 theme + solid grey root

# Location of link to wallpaper link.
bgloc="${XDG_DATA_HOME:-$HOME/.local/share}/bg"
default_bg="#737573"
default_wallpaper="${XDG_DATA_HOME:-$HOME/.local/share}/wallpapers/plan9-grey.png"
xresources="${XDG_CONFIG_HOME:-$HOME/.config}/x11/xresources"

# 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"

# Parse options
silent=""
colorimg=""
wallonly=""
default_theme=""

while getopts "sdwc:" o; do case "${o}" in
	s) silent='1' ;;
	d) default_theme='1' ;;
	w) wallonly='1' ;;
	c) colorimg="$OPTARG" ;;
esac done

shift $((OPTIND - 1))

refreshdwm() {
	pidof dwm >/dev/null && xdotool key super+F5
}

set_default_terminal_colors() {
	for term in /dev/pts/[0-9]*; do
		[ -w "$term" ] || continue
		{
			printf '\033]10;#000000\007'
			printf '\033]11;%s\007' "$default_bg"
			printf '\033]12;#000000\007'
			printf '\033]4;0;#000000\007'
			printf '\033]4;1;#aa0000\007'
			printf '\033]4;2;#448844\007'
			printf '\033]4;3;#99994c\007'
			printf '\033]4;4;#005dbb\007'
			printf '\033]4;5;#8888cc\007'
			printf '\033]4;6;#008888\007'
			printf '\033]4;7;#ffffea\007'
			printf '\033]4;8;%s\007' "$default_bg"
			printf '\033]4;9;#ff0000\007'
			printf '\033]4;10;#88cc88\007'
			printf '\033]4;11;#eeee9e\007'
			printf '\033]4;12;#4993dd\007'
			printf '\033]4;13;#ff00ff\007'
			printf '\033]4;14;#eaffff\007'
			printf '\033]4;15;#ffffff\007'
			printf '\033]4;256;#000000\007'
			printf '\033]4;258;%s\007' "$default_bg"
			printf '\033]4;259;#000000\007'
		} >"$term" 2>/dev/null
	done
}

if [ -n "$default_theme" ]; then
	[ -f "$xresources" ] && xrdb -merge "$xresources"
	[ -f "$default_wallpaper" ] && ln -sf "$default_wallpaper" "$bgloc"
	xwallpaper --tile "$default_wallpaper"
	set_default_terminal_colors
	[ -z "$silent" ] && notify-send "Default Plan 9 theme" "$default_bg"
	refreshdwm
	exit 0
fi

# If no argument, just apply existing wallpaper
if [ -z "$1" ]; then
	[ -f "$bgloc" ] && xwallpaper --zoom "$bgloc"
	exit 0
fi

trueloc="$(readlink -f "$1")" &&
case "$(/usr/bin/file --mime-type -b "$trueloc")" in
	image/* ) ln -sf "$trueloc" "$bgloc" && [ -z "$silent" ] && notify-send -i "$bgloc" "Changing wallpaper..." ;;
	inode/directory ) ln -sf "$(find "$trueloc" -iregex '.*.\(jpg\|jpeg\|png\|gif\)' -type f | shuf -n 1)" "$bgloc" && [ -z "$silent" ] && notify-send -i "$bgloc" "Random Wallpaper chosen." ;;
	*) [ -z "$silent" ] && notify-send "🖼️ Error" "Not a valid image or directory." ; exit 1;;
esac

# Determine which image to use for colorscheme
if [ -n "$colorimg" ]; then
	colorloc="$(readlink -f "$colorimg")"
	# Verify it's a valid image
	case "$(/usr/bin/file --mime-type -b "$colorloc")" in
		image/* ) ;;
		*) [ -z "$silent" ] && notify-send "🎨 Error" "Color image not valid." ; colorloc="" ;;
	esac
else
	colorloc="$(readlink -f "$bgloc")"
fi

# If pywal is installed and wallpaper-only mode is not set, use it.
if [ -z "$wallonly" ] && command -v wal >/dev/null 2>&1 ; then
	wal -n -i "$colorloc" -o "${XDG_CONFIG_HOME:-$HOME/.config}/wal/postrun" >/dev/null 2>&1
	[ -z "$silent" ] && [ -n "$colorimg" ] && notify-send -i "$colorloc" "Colors from separate image"
# If pywal is removed, return config files to normal.
elif [ -z "$wallonly" ]; then
	[ -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.
refreshdwm