~variety/variety/trunk

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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
#!/bin/bash
#
# This script is run by Variety when a new wallpaper is set.
# You can use bash, python or whatever suits you for the script.
# Here you can put custom commands for setting the wallpaper on your specific desktop environment
# or run commands like notify-send to notify you of the change, or you can
# run commands that would theme your browser, login screen or whatever you desire.
#
# PARAMETERS:
# $1: The first passed parameter is the absolute path to the wallpaper image to be set as wallpaper
# (after effects, clock, etc. are applied).
#
# $2: The second passed parameter is "auto" when the wallpaper is changed automatically (i.e. regular change), "manual"
# when the user has triggered the change or "refresh" when the change is triggered by a change in quotes, clock, etc.
#
# $3: The third passed parameter is the absolute path to the original wallpaper image (before effects, clock, etc.)
#
# EXAMPLE:
# echo "$1" # /home/username/.config/variety/wallpaper/wallpaper-clock-fac0eef772f9b03bd9c0f82a79d72506.jpg
# echo "$2" # auto
# echo "$3" # /home/username/Pictures/Wallpapers/Nature/green-tunnel-1920x1080-wallpaper-861.jpg


# Here you may apply some additional custom operations on the wallpaper before it is applied.
# In the end put the path to the actual final wallpaper image file in the WP variable.
# The default is to simply set WP=$1.
WP=$1



# Enlightenment
# Needs Modules/System/DBus Extension loaded to work
if [ "`echo $DESKTOP | grep Enlightenment`" ]; then

    OUTPUT_DIR="$HOME/.e/e/backgrounds"

    TEMPLATE='
    images { image: "@IMAGE@" USER; }
    collections {
      group {
      name: "e/desktop/background";
      data { item: "style" "4"; item: "noanimation" "1"; }
      max: @WIDTH@ @HEIGHT@;
      parts {
        part {
        name: "bg";
        mouse_events: 0;
        description {
          state: "default" 0.0;
          aspect: @ASPECT@ @ASPECT@;
          aspect_preference: NONE;
          image { normal: "@IMAGE@"; scale_hint: STATIC; }
        }
        }
      }
      }
    }
    '

    OFILE="$OUTPUT_DIR/variety_wallpaper_$RANDOM"

    DIMENSION="$(identify -format "%w/%h" "$WP")"

    if [ ! -z "$DIMENSION" ]; then
        WIDTH=$(echo $DIMENSION | cut -d/ -f1)
        HEIGHT=$(echo $DIMENSION | cut -d/ -f2)
        IMAGE="$(echo "$WP" | sed 's/[^[:alnum:]_-]/\\&/g')"

        if [ -z "$HEIGHT" -o "$HEIGHT" = "0" ]; then
            ASPECT="0.0"
        else
            ASPECT=$(echo "scale=9; $DIMENSION" | bc)
        fi
    fi

    printf "%s" "$TEMPLATE" | \
    sed "s/@ASPECT@/$ASPECT/g; s/@WIDTH@/$WIDTH/g; s/@HEIGHT@/$HEIGHT/g; s|@IMAGE@|$IMAGE|g" > "$OFILE.edc"
    edje_cc "$OFILE.edc" "$OFILE.edj" 2>/dev/null
    rm "$OFILE.edc"

    ## Get the current number of virtual desktops
    desk_x_count=$(enlightenment_remote -desktops-get | awk '{print $1}')
    desk_y_count=$(enlightenment_remote -desktops-get | awk '{print $2}')

    ## Get the current number of screens
    screen_count=1
    # If xrandr is available use it to get screen desk_x_count
    if command -v xrandr >/dev/null 2>&1; then
        screen_count=$(xrandr -q | grep ' connected' | wc -l)
    fi

    ## Set the wallpaper for each virtual desktop
    for ((x=0; x<$desk_x_count; x++)); do
        for ((y=0; y<$desk_y_count; y++)); do
            for ((z=0; z<$screen_count; z++)); do
                # -desktop-bg-add OPT1 OPT2 OPT3 OPT4 OPT5 Add a desktop bg definition.
                # OPT1 = ContainerNo OPT2 = ZoneNo OPT3 = Desk_x. OPT4 = Desk_y. OPT5 = bg file path
                enlightenment_remote -desktop-bg-add 0 "$z" "$x" "$y" "$OFILE.edj"&
            done
        done
    done

    # Remove all Variety wallpapers, but the current one and the previous one
    #   as we are calling enlightenment_remote asynchronously, if the previous wallpaper hasn't been
    #   replaced yet then the wallpaper will get set back to the theme one causing ugly artifacts
    LAST_WALLPAPER_FILE="$HOME/.config/variety/.enlightenment_last_wallpaper.txt"

    if [ -e $LAST_WALLPAPER_FILE ]; then
        find $OUTPUT_DIR -name "variety_wallpaper*.*" | grep -v "$OFILE.edj" | grep -v $(cat $LAST_WALLPAPER_FILE) | xargs rm
    else
        find $OUTPUT_DIR -name "variety_wallpaper*.*" | grep -v "$OFILE.edj" | xargs rm
    fi
    echo "$OFILE.edj" > $LAST_WALLPAPER_FILE
    exit 0
fi

# KDE: Users on KDE 4 or Plasma < 5.7 will have to manually choose ~/Pictures/variety-wallpaper/ as a slideshow folder with a short interval.
# Afterwards, with the command below, Variety will just overwrite the single file there when changing the wallpaper
# and KDE will refresh it
# On Plasma 5.7 and above, the wallpaper choosing is automatic.
if [ ${KDE_FULL_SESSION} == "true" ]; then
    # Plasma 5.7 introduced a new feature to set the wallpaper via a qdbus script:
    # https://github.com/KDE/plasma-workspace/commit/903cbfd7e267a4812a6ec222eb7e1b5dd775686f
    if [[ -n ${KDE_SESSION_VERSION} && ${KDE_SESSION_VERSION} == '5' ]]; then
        qdbus org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell.evaluateScript "
        var allDesktops = desktops();
        for (i=0; i < allDesktops.length; i++) {
            d = allDesktops[i];
            d.wallpaperPlugin = 'org.kde.image';
            d.currentConfigGroup = Array('Wallpaper', 'org.kde.image', 'General');
            d.writeConfig('Image', 'file://"$WP"')
        }
        "
        # Reuse the exit code from qdbus
        exit "$?"
    else
        WALLDIR="$(xdg-user-dir PICTURES)/variety-wallpaper"
        mkdir -p "$WALLDIR"
        # Remove all old wallpapers
        rm -fv ${WALLDIR}/*

        NEWWP="${WALLDIR}/wallpaper-kde-$RANDOM.jpg"
        cp "$WP" "$NEWWP"
        touch "$NEWWP"
    fi
fi

# Cinnamon, for cases when it is detectable
if [ "$XDG_CURRENT_DESKTOP" == "X-Cinnamon" ]; then
    gsettings set org.cinnamon.background picture-uri "file://$WP" 2> /dev/null
    if [ "`gsettings get org.cinnamon.background picture-options`" == "'none'" ]; then
        gsettings set org.cinnamon.background picture-options 'zoom'
    fi

    gsettings set org.cinnamon.desktop.background picture-uri "file://$WP" 2> /dev/null
    if [ "`gsettings get org.cinnamon.desktop.background picture-options`" == "'none'" ]; then
        gsettings set org.cinnamon.desktop.background picture-options 'zoom'
    fi
    exit 0
fi

# Gnome 3, Unity
gsettings set org.gnome.desktop.background picture-uri "file://$WP" 2> /dev/null
if [ "`gsettings get org.gnome.desktop.background picture-options`" == "'none'" ]; then
    gsettings set org.gnome.desktop.background picture-options 'zoom'
fi

# Deepin
if [ "$(gsettings list-schemas | grep com.deepin.wrap.gnome.desktop.background | wc -l)" -ge 1 ]; then
    gsettings set com.deepin.wrap.gnome.desktop.background picture-uri "file://$WP"
    if [ "`gsettings get com.deepin.wrap.gnome.desktop.background picture-options`" == "'none'" ]; then
        gsettings set com.deepin.wrap.gnome.desktop.background picture-options 'zoom'
    fi
fi

# XFCE
command -v xfconf-query >/dev/null 2>&1
rc=$?
if [[ $rc = 0 ]] ; then
    for i in $(xfconf-query -c xfce4-desktop -p /backdrop -l|egrep -e "screen.*/monitor.*image-path$" -e "screen.*/monitor.*/last-image$"); do
        xfconf-query -c xfce4-desktop -p $i -n -t string -s "" 2> /dev/null
        xfconf-query -c xfce4-desktop -p $i -s "" 2> /dev/null
        xfconf-query -c xfce4-desktop -p $i -s "$WP" 2> /dev/null
    done
fi

# LXDE/PCmanFM
if [ "$XDG_CURRENT_DESKTOP" == "LXDE" ]; then
    pcmanfm --set-wallpaper "$WP" 2> /dev/null
fi

# LXQt/PCmanFM-qt
if [ "$XDG_CURRENT_DESKTOP" == "LXQt" ]; then
    pcmanfm-qt --set-wallpaper "$WP" 2> /dev/null
fi

# i3-wm/Feh. Use Feh only for i3, as it may cause problems with Nautilus, (see bug https://bugs.launchpad.net/variety/+bug/1047083)
if [ "$XDG_CURRENT_DESKTOP" == "i3" ] || [ "$XDG_SESSION_DESKTOP" == "i3" ]; then
    feh --bg-fill "$WP" 2> /dev/null
fi

# trinity
if [ "$XDG_CURRENT_DESKTOP" == "Trinity" ]; then
    dcop kdesktop KBackgroundIface setWallpaper "$WP" 4 2> /dev/null
fi

# MATE after 1.6
gsettings set org.mate.background picture-filename "$WP" 2> /dev/null

# MATE before 1.6
mateconftool-2 -t string -s /desktop/mate/background/picture_filename "$WP" 2> /dev/null

# Cinnamon after 1.8, before 2.0
gsettings set org.cinnamon.background picture-uri "file://$WP" 2> /dev/null

# Cinnamon after 2.0
gsettings set org.cinnamon.desktop.background picture-uri "file://$WP" 2> /dev/null

# Gnome 2
gconftool-2 -t string -s /desktop/gnome/background/picture_filename "$WP" 2> /dev/null


# openbox/nitrogen
#	check if openbox is running
#	if so, check if nitrogen is installed
#	now apply
if [ "$DESKTOP_SESSION" == "openbox" ]; then
    if dpkg-query -Wf'${db:Status-abbrev}' nitrogen 2>/dev/null | grep -q '^i'; then
        nitrogen --set-zoom-fill --save "$WP" 2> /dev/null
    fi
fi


# Awesome Window Manager

# Set the path to the wallpaper using awesome-client, which communicates with awesome using D-Bus.
# Be sure to start variety when you start awesome, such as by adding it to ~/.xinitrc in Arch Linux.

# echo "local gears = require(\"gears\") gears.wallpaper.maximized(\"$1\", s, true)" | awesome-client

# NOTE: This config will change the wallpaper after your current awesome theme sets it.
# As such, the theme's wallpaper will briefly appear before being replaced with variety's wallpaper.


# Show a notification on wallpaper change (only when the change is automatic). Display the original filename, but the post-effects image.
# name=$(echo "$3" | sed 's/\//\n/g'| tail -n 1)
# if [ "$2" == "auto" ]; then notify-send --icon "$WP" "Wallpaper changed" "$name" ; fi