some_scripts/cw

95 lines
3.6 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Установщик обоев (change wallpaper):
# исходя из параметров подключенных мониторов устанавливает соответствующие обои.
# (вертикальные изображения на вертикальные мониторы
# горизонтальные изображения на горизонтальные - без пересечений)
#
# TO-DO
# [X] - Определение данных исходного изображения: получение ширины и высоты
# [X] - Определение вертикальности изображения: если ширина больше высоты -> горизонтальное, иначе вертикальное
# [ ] - Определение данных о мониторах: имя, вертикальность
# [X] - Проверка зависимостей: feh, ffmpeg, X11
# [ ] - Определение соответствия изображения параметрам монитора
# [X] - Установка изображний на рабочий стол
# [X] - Получение пути изображения
# Проверка зависимостей
[[ $XDG_SESSION_TYPE -eq 'x11' ]] || { printf "For X.Org\n"; exit 1 ; }
requirements_apps=('feh' 'ffmpeg' 'xdpyinfo' 'awk')
for app in ${requirements_apps[@]}; do
if [ ! $app -version &> /dev/null ] || [ $app --version &> /dev/null ]; then
echo "$app not installed"
exit 1
fi
done
# Директория с изображениями
IMGSTORAGE="$HOME/vault/wallpaper"
# Получить абсолютный путь к изображению
get_path_img() {
find "$IMGSTORAGE" -type f | shuf -n 1
}
# Получить ширину изображения в пикселях
get_width_img() {
ffprobe -v error -select_streams v:0 -show_entries stream=width -of default=nw=1:nk=1 "$1" 2> /dev/null
}
# Получить высоту изображения в пикселях
get_height_img() {
ffprobe -v error -select_streams v:0 -show_entries stream=height -of default=nw=1:nk=1 "$1" 2> /dev/null
}
# Получить ориентацию изображения
# $1 - путь к файлу - get_path_img
get_orientation_img() {
[[ $(get_width_img $1) > $(get_height_img $1) ]] && printf 'horizontal' || printf 'vertical'
}
# Получить вертикальную обоину
get_vertical_wall() {
while true; do
local img=$(get_path_img)
local orientation=$(get_orientation_img $img)
[[ $orientation -eq 'vertical' ]] && { printf $img; break ; }
done
}
# Получить горизонтальную обоину
get_horizontal_wall() {
while true; do
local img=$(get_path_img)
local orientation=$(get_orientation_img $img)
[[ $orientation -eq 'horizontal' ]] && { printf $img; break ; }
done
}
# Получить список подключенных мониторов
get_name_mon() {
for mon in $(xrandr | grep ' connected ' | awk '{print $1}'); do
echo $mon; done
}
# Получить ширину монитора в пикселях
get_width_mon() {
xdpyinfo | awk '/dimensions/{print $2}' | awk -F "x" '{print $1}'
}
# Получить высоту монитора в пикселях
get_height_mon() {
xdpyinfo | awk '/dimensions/{print $2}' | awk -F "x" '{print $2}'
}
# Получить ориентацию монитора
get_orientation_mon() {
echo
}
set_wall() {
feh --bg-fill $(get_horizontal_wall) $(get_vertical_wall)
}
set_wall