253 lines
10 KiB
Text
253 lines
10 KiB
Text
|
#!/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="${HOME}/.config/variety/wallpaper/edited.png"
|
||
|
|
||
|
# Décalage Conky
|
||
|
convert "$3" -geometry 1380x1058 -background "#2d2d2d" -compose Copy -gravity Center -extent 1380x1058 "$WP"
|
||
|
convert "$WP" -geometry 1920x1080 -background "#2d2d2d" -compose Copy -gravity Center -extent 1920x1080+0+22 "$WP"
|
||
|
|
||
|
# Météo
|
||
|
#touch -t $(date +%Y%m%d%H%M -d "now-1hour") /dev/shm/meteo.png.timestamp
|
||
|
#if [[ ! -f "/dev/shm/meteo.png" ]] || [[ "/dev/shm/meteo.png" -ot "/dev/shm/meteo.png.timestamp" ]]
|
||
|
#then
|
||
|
# convert <(curl fr.wttr.in/Rennes_0q.png) -fill "#2d2d2d" -opaque "#000000" /dev/shm/meteo.png
|
||
|
#fi
|
||
|
#convert "$WP" /dev/shm/meteo.png -gravity SouthEast -geometry +7+22 -composite "$WP"
|
||
|
|
||
|
# Enlightenment
|
||
|
# Needs Modules/System/DBus Extension loaded to work
|
||
|
if [[ "$DESKTOP" == *"Enlightenment"* ]] || [[ "$DESKTOP" == *"Moksha"* ]]; 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" ] || [ "$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 -c ' connected')
|
||
|
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 -c com.deepin.wrap.gnome.desktop.background)" -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 | grep -E -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, openbox, dwm: use either feh or nitrogen
|
||
|
if [[ "$XDG_CURRENT_DESKTOP" == "i3"* ]] || [[ "$XDG_SESSION_DESKTOP" == "i3"* ]] ||
|
||
|
[[ "$DESKTOP_SESSION" == "openbox" ]] || [[ "$XDG_SESSION_DESKTOP" == *"dwm"* ]] ||
|
||
|
[[ "$XDG_CURRENT_DESKTOP" == *"dwm"* ]]; then
|
||
|
if command -v "feh" >/dev/null 2>&1; then
|
||
|
feh --bg-max --xinerama-index 0 "$WP" 2> /dev/null
|
||
|
elif command -v "nitrogen" >/dev/null 2>&1; then
|
||
|
nitrogen --set-zoom-fill --save "$WP" 2> /dev/null
|
||
|
fi
|
||
|
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
|
||
|
|
||
|
# 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
|