#!/usr/bin/env bash
#
# Author: Dmitry Razumov <asmeron@ublinux.com>
# Copyright (c) 2021-2025 UBLinux <support@ublinux.com>
#

ENABLED=yes
[[ ${ENABLED} != yes ]] && exit 0

SOURCE=/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0
SOURCE=${SYSCONF}/config; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null
SOURCE=${SYSCONF}/desktop; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
SOURCE=${SYSCONF}/theme; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null

    [[ ${DISPLAYMANAGER} == @(none|no|disable) ]] && exit

xfce4_background(){
    [[ -x /usr/bin/startxfce4 ]] || return 0
    #Получить типы мониторов без xrandr: xfconf-query -c xfce4-desktop -l | grep "/backdrop/screen0/monitor.*/workspace0/last-image
    #Глобально заменить фон: install -Dm0644 ${BACKGROUND_DE} /usr/share/backgrounds/background.jpg
    case ${BACKGROUND_DE_MODE} in
	0) BACKGROUND_DE_MODE_XFCE4=5 ;;
	1) BACKGROUND_DE_MODE_XFCE4=4 ;;
	2) BACKGROUND_DE_MODE_XFCE4=1 ;;
	*) BACKGROUND_DE_MODE_XFCE4=5 ;;
    esac
    #[[ -z ${BACKGROUND_DE_MODE_XFCE4} && ${BACKGROUND_DE_MODE} == 0 ]] && BACKGROUND_DE_MODE_XFCE4=5
    #[[ -z ${BACKGROUND_DE_MODE_XFCE4} && ${BACKGROUND_DE_MODE} == 1 ]] && BACKGROUND_DE_MODE_XFCE4=4
    #[[ -z ${BACKGROUND_DE_MODE_XFCE4} && ${BACKGROUND_DE_MODE} == 2 ]] && BACKGROUND_DE_MODE_XFCE4=1
    #[[ -z ${BACKGROUND_DE_MODE_XFCE4} ]] && BACKGROUND_DE_MODE_XFCE4=5
    while read MONITOR_TYPE; do
	xfconf-query --channel xfce4-desktop --property /backdrop/screen0/monitor${MONITOR_TYPE}/workspace0/image-style --create --type int --set "${BACKGROUND_DE_MODE_XFCE4}"
	xfconf-query --channel xfce4-desktop --property /backdrop/screen0/monitor${MONITOR_TYPE}/workspace0/last-image --create --type string --set "${BACKGROUND_DE}"
    done < <(xrandr | grep -w connected | cut -d" " -f1)
}
plasma_background(){
    [[ -x /usr/bin/plasmashell ]] || return 0
    case ${BACKGROUND_DE_MODE} in
	0) BACKGROUND_DE_MODE_PLASMA=- ;;
	1) BACKGROUND_DE_MODE_PLASMA=1 ;;
	2) BACKGROUND_DE_MODE_PLASMA=0 ;;
	*) BACKGROUND_DE_MODE_PLASMA=- ;;
    esac
    #[[ -z ${BACKGROUND_DE_MODE_PLASMA} && ${BACKGROUND_DE_MODE} == 0 ]] && BACKGROUND_DE_MODE_PLASMA=-
    #[[ -z ${BACKGROUND_DE_MODE_PLASMA} && ${BACKGROUND_DE_MODE} == 1 ]] && BACKGROUND_DE_MODE_PLASMA=1
    #[[ -z ${BACKGROUND_DE_MODE_PLASMA} && ${BACKGROUND_DE_MODE} == 2 ]] && BACKGROUND_DE_MODE_PLASMA=0
    #[[ -z ${BACKGROUND_DE_MODE_PLASMA} ]] && BACKGROUND_DE_MODE_PLASMA=-
    if [[ ${BACKGROUND_DE_MODE_PLASMA} == "-" ]]; then
	kwriteconfig5 --file plasma-org.kde.plasma.desktop-appletsrc --group 'Containments' --group '1' --group 'Wallpaper' --group 'org.kde.image' --group 'General' --key 'FillMode' --delete
    else
        kwriteconfig5 --file plasma-org.kde.plasma.desktop-appletsrc --group 'Containments' --group '1' --group 'Wallpaper' --group 'org.kde.image' --group 'General' --key 'FillMode' "${BACKGROUND_DE_MODE_PLASMA}"
    fi
    kwriteconfig5 --file plasma-org.kde.plasma.desktop-appletsrc --group 'Containments' --group '1' --key 'wallpaperplugin' "org.kde.image"
    kwriteconfig5 --file plasma-org.kde.plasma.desktop-appletsrc --group 'Containments' --group '1' --group 'Wallpaper' --group 'org.kde.image' --group 'General' --key 'Image' "file://${BACKGROUND_DE}"
}
gnome_background(){
    [[ -f /usr/share/xsessions/gnome.desktop ]] || return 0
    # Определяет способ отрисовки изображения для фона рабочего стола. Возможные значения: «none», «wallpaper», «centered», «scaled», «stretched», «zoom», «spanned».
    case ${BACKGROUND_DE_MODE} in
	0) BACKGROUND_DE_MODE_PANTHEON="zoom" ;;
	1) BACKGROUND_DE_MODE_PANTHEON="scaled" ;;
	2) BACKGROUND_DE_MODE_PANTHEON="stretched" ;;
	*) BACKGROUND_DE_MODE_PANTHEON="zoom" ;;
    esac
    gsettings set org.gnome.desktop.background picture-uri "file://${BACKGROUND_DE}"
    gsettings set org.gnome.desktop.background picture-options "${BACKGROUND_DE_MODE_PANTHEON}"
}
pantheon_background(){
    [[ -f /usr/share/xsessions/pantheon.desktop ]] || return 0
    # Определяет способ отрисовки изображения для фона рабочего стола. Возможные значения: «none», «wallpaper», «centered», «scaled», «stretched», «zoom», «spanned».
    case ${BACKGROUND_DE_MODE} in
	0) BACKGROUND_DE_MODE_PANTHEON="zoom" ;;
	1) BACKGROUND_DE_MODE_PANTHEON="scaled" ;;
	2) BACKGROUND_DE_MODE_PANTHEON="stretched" ;;
	*) BACKGROUND_DE_MODE_PANTHEON="zoom" ;;
    esac
    gsettings set org.gnome.desktop.background picture-uri "file://${BACKGROUND_DE}"
    gsettings set org.gnome.desktop.background picture-options "${BACKGROUND_DE_MODE_PANTHEON}"
}
lxde_background(){
    [[ -x /usr/bin/startlxde ]] || return 0
}
lxqt_background(){
    [[ -x /usr/bin/startlxqt ]] || return 0
}
mate_background(){
    [[ -x /usr/bin/startmate ]] || return 0
}
cinammon_background(){
    [[ -x /usr/bin/startmate ]] || return 0
}

    if [[ -n ${BACKGROUND_DE} && ${BACKGROUND_DE} != @(none|no|disable) ]]; then
	if [[ -d ${BACKGROUND_DE} ]]; then
	    BACKGROUND_DE=$(ls -p ${BACKGROUND_DE} | grep -v / | shuf -n 1)
	elif [[ ${BACKGROUND_DE} =~ ^'#'......$ ]]; then
	    BACKGROUND_HEX=${BACKGROUND_DE}
	    BACKGROUND_DE="/tmp/background-${USER}/${BACKGROUND_DE//#/}.png"
	    install -dm755 ${BACKGROUND_DE%/*} 2>/dev/null
	    convert -size 128x128 xc:"${BACKGROUND_HEX}" "${BACKGROUND_DE}" 2>/dev/null
	fi
	[[ -f ${BACKGROUND_DE} ]] && file "${BACKGROUND_DE}" 2>/dev/null | grep -qE 'image|bitmap' || BACKGROUND_DE=/usr/share/backgrounds/background.jpg
	xfce4_background
	plasma_background
	gnome_background
	pantheon_background
	lxde_background
	lxqt_background
	mate_background
	cinammon_background
    fi

exit 0



# Для фоновой картинки устанавливаемой feh

FEHOPTIONS="-B black -x -Z --scale-down"
WPDEFFILE=/usr/share/ublinux/wallpapers/default.jpg
FEHKILLSWITCH="while ! ps -A | grep -Eq 'splash|panel|xbindkeys|lightdm-gtk-gr|polybar' ;do sleep 1 ;done ; sleep 7 ; killall feh"
[ "$BACKGROUND_DE_MODE" = "2" ] && FEHOPTIONS="-F --zoom fill"

# get resolution of primary (or first) monitor
XORG_RES=$(LC_ALL=C /usr/bin/xrandr | awk -F" connected primary " '{print $2}' | sed s/+.*// | grep -m1 .)
[ -z "$XORG_RES" ] && XORG_RES=$(LC_ALL=C /usr/bin/xrandr | awk -F" connected " '{print $2}' | sed s/+.*// | grep -m1 .)
[ -z "$XORG_RES" ] && XORG_RES=1920x1080

# show wallpaper
[ -x /usr/bin/feh ] && /usr/bin/feh $FEHOPTIONS -g "$XORG_RES" $(dirname $WPDEFFILE)/default.orig.jpg &
# killswitch for feh
[ -x /usr/bin/feh ] && bash -c "$FEHKILLSWITCH" &

if [ -x /usr/bin/convert ] ;then
  # resizing wallpaper for monitor resolution (default is proportional on black background)
  RESIZEOPT="-resize $XORG_RES -background black -gravity center -extent $XORG_RES"
  [ "$BACKGROUND_DE_MODE" = "1" ] && RESIZEOPT="-resize $XORG_RES!"
  [ "$BACKGROUND_DE_MODE" = "2" ] && RESIZEOPT="-resize $XORG_RES^ -gravity center -extent $XORG_RES"
  convert $RESIZEOPT $(dirname $WPDEFFILE)/default.orig.jpg /tmp/background.jpg
  # Graffiti effects
  if [ "$GRAFFITI" = "yes" ] ;then
     [ "$(cmdline_value changes)$(cmdline_value ub.changes)" ] && LABEL=ublinux.png || LABEL=clean.png
     convert -resize x$(expr $(echo $XORG_RES | awk -Fx '{ print $2 }') / 10) /usr/share/ublinux/graffiti/$LABEL /tmp/logo.png
     composite -gravity SouthWest  /tmp/logo.png /tmp/background.jpg /tmp/background2.jpg
     mv -f /tmp/background2.jpg /tmp/background.jpg
     rm -f /tmp/logo.png
  fi
  # placing warning about default passwords
  if [ "$GRAFFITI" != "no" -a -x /usr/bin/composite ] ;then
     . /usr/lib/ublinux/default
     A=0
     [[ -n ${DM_HINT_PASSWORD} ]] && A=1
     [ "$A" = "1" ] && composite -gravity NorthWest /usr/share/ublinux/graffiti/warning.png /tmp/background.jpg /tmp/background2.jpg
     [ -f /tmp/background2.jpg  ] && mv -f /tmp/background2.jpg /tmp/background.jpg
  fi
  # replacing default wallpaper
  [ -f /tmp/background.jpg  ] && mv -f /tmp/background.jpg "$WPDEFFILE"
  [ -d /usr/share/apps/ksplash ] && mkdir -p "/usr/share/apps/ksplash/Themes/Default/$XORG_RES"
  [ -d /usr/share/apps/ksplash ] && convert "$WPDEFFILE" "/usr/share/apps/ksplash/Themes/Default/$XORG_RES/background.png"
fi

