mabox-colorizer/bin/w2theme
2024-08-13 22:44:32 +02:00

416 lines
12 KiB
Bash
Executable File

#!/bin/bash
#
# colorizer - set of tools for Mabox (auto)theming
# Copyright (C) 2022-2023 Daniel Napora <napcok@gmail.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# w2theme - generate themes from wallpaper colors
WALLPALDIR="$HOME/.cache/colorizer/palettes"
mkdir -p "$WALLPALDIR"
read WALLPATH<<< $(grep file "$HOME"/.config/nitrogen/bg-saved.cfg | tail -1 | cut -d'=' -f2)
NAME=${WALLPATH////_}
if [[ "${NAME}" =~ ^_home_.* ]]; then
n=${#HOME}
((n++))
NAME=${NAME:${n}}
fi
if [ ! -f "$WALLPALDIR/$NAME.clr" ]; then
magick ${WALLPATH} -resize 25% -colors 16 -unique-colors txt:- |grep -v '^#'| awk '{print substr($3,1,7)}' |pastel sort-by brightness |pastel format hex > "$WALLPALDIR/$NAME.clr"
fi
mapfile -t w < "$WALLPALDIR/$NAME.clr"
if [[ "${#w[@]}" -lt 8 ]]; then
w+=("#2e3440" "#4c566a" "#5e81ac" "#bf616b" "#b48ead" "#a3be8c" "#ebcb8b" "#d8dee9" "#eceff4")
fi
accents=("#e93d57" "#c7162b" "#e9633a" "#e95620" "#f4a300" "#e8cc2d" "#3cd425" "#0e8420" "#00d3b7" "#18b0b0" "#3dade9" "#686b6f" "#3584e4" "#916ee4" "#b875dc" "#77216e" "#c748ba" "#e93a9a")
menu_theme () {
jgctl theme MBcolors
case "$1" in
dark) #dark bg
jgctl color_menu_bg "${w[2]}"
jgctl color_menu_bg_to "${w[1]}"
jgctl color_menu_border "${w[3]}"
jgctl color_norm_fg "${w[-2]}"
jgctl color_title_bg "${w[1]}"
jgctl color_title_fg "${w[-3]}"
jgctl color_title_border "${w[0]}"
jgctl color_sel_bg "${w[4]}"
jgctl color_sel_fg "${w[-1]}"
jgctl color_sel_border "${w[3]}"
jgctl color_sep_fg "${w[3]}"
#sleep 1
;;
*) #light bg
jgctl color_menu_bg "${w[-1]}"
jgctl color_menu_bg_to "${w[-2]}"
jgctl color_menu_border "${w[-3]}"
jgctl color_norm_fg "${w[1]}"
jgctl color_title_bg "${w[-3]}"
jgctl color_title_fg "${w[1]}"
jgctl color_title_border "${w[-4]}"
jgctl color_sel_bg "${w[-5]}"
jgctl color_sel_fg "${w[0]}"
jgctl color_sel_border "${w[-4]}"
jgctl color_sep_fg "${w[-5]}"
#sleep 1
;;
esac
case "$2" in
show)
colorizer-menus -s
;;
*):;;
esac
}
conky_colors() {
source ~/.config/colorizer/colorizer.conf
case "$1" in
dark) #dark bg
conkyctl win_bgcolor_all "${w[0]}"
conkyctl default_color_all "${w[-1]}"
conkyctl color0_all "${w[-4]}"
conkyctl color1_all "${w[-5]}"
#conkyctl color2_all "${w[-5]}"
;;
*) #light bg
conkyctl win_bgcolor_all "${w[-1]}"
conkyctl default_color_all "${w[0]}"
conkyctl color0_all "${w[4]}"
conkyctl color1_all "${w[5]}"
#conkyctl color2_all "${w[6]}"
;;
esac
#bars/graphs color
#random
conkyctl color2_all "${accents[ $RANDOM % ${#accents[@]} ]}"
}
conky_colorsone () {
source ~/.config/colorizer/colorizer.conf
case "$1" in
dark) #dark bg
conkyctl win_bgcolor "${w[0]}" "${2}"
conkyctl default_color "${w[-1]}" "${2}"
conkyctl color0 "${w[-4]}" "${2}"
conkyctl color1 "${w[-5]}" "${2}"
;;
*) #light bg
conkyctl win_bgcolor "${w[-1]}" "${2}"
conkyctl default_color "${w[0]}" "${2}"
conkyctl color0 "${w[4]}" "${2}"
conkyctl color1 "${w[5]}" "${2}"
;;
esac
conkyctl color2_all "${accents[ $RANDOM % ${#accents[@]} ]}" "${2}"
}
pyradio_theme() {
case "$1" in
dark) #dark bg
prtctl stations "${w[-3]}" "${w[0]}"
prtctl active_station "${w[-1]}"
prtctl status_bar "${w[0]}" "${w[-3]}"
prtctl normal_cursor "${w[1]}" "${w[-4]}"
prtctl active_cursor "${w[2]}" "${w[-3]}"
prtctl edit_cursor "${w[2]}" "${w[-3]}"
prtctl extra_func "${w[6]}"
prtctl pyradio_url "${w[2]}"
prtctl messages_border "${w[2]}"
;;
*) # light bg
prtctl stations "${w[4]}" "${w[-1]}"
prtctl active_station "${w[0]}"
prtctl status_bar "${w[0]}" "${w[-3]}"
prtctl normal_cursor "${w[4]}" "${w[-3]}"
prtctl active_cursor "${w[2]}" "${w[-3]}"
prtctl edit_cursor "${w[2]}" "${w[-3]}"
prtctl extra_func "${w[6]}"
prtctl pyradio_url "${w[2]}"
prtctl messages_border "${w[4]}"
;;
esac
}
cava () {
case "$1" in
light) #light bottom
cavactl gradientcolors "${w[-3]}" "${w[3]}"
cavactl foregroundcolor "${w[-3]}"
cavactl reload_colors
;;
*) #dark bottom
cavactl gradientcolors "${w[3]}" "${w[-3]}"
cavactl foregroundcolor "${w[3]}"
cavactl reload_colors
;;
esac
}
accent () {
#obtctl clractivebg ${1}
#colorTo=$(pastel darken 0.2 "${1}"|pastel format hex)
#obtctl clractivebgto ${colorTo}
# JGMENU based menus, sidepanels and tools
#jgctl color_title_bg ${1}
#TITLE_FG=$(pastel textcolor ${colorTo}|pastel format hex)
#TITLE_FG=$(pastel textcolor ${1}|pastel format hex)
#notify-send.sh "title_fg $TITLE_FG" "${w[1]} ${w[-1]}"
#if [[ "${TITLE_FG}" == *"ffffff"* ]];then
#FG=${w[-2]}
#BBG=${w[1]}
#else
#FG=${w[2]}
#BBG=${w[1]}
#fi
SEL_FG=$(pastel textcolor ${1}|pastel format hex)
#jgctl color_title_fg ${FG}
#jgctl color_title_border ${BBG}
jgctl color_sel_bg ${1}
jgctl color_sel_bg 100
jgctl color_sel_fg ${SEL_FG}
}
gradient () {
source ~/.config/colorizer/colorizer.conf
#notify-send.sh "zmiennne" "${1} ${2}"
if [ "$gradient_obtheme" = "yes" ]; then
obtctl activegradient "${1}" "${2}"
fi
if [ "$gradient_menu" = "yes" ]; then
jgctl gradient "${1}" "${2}"
fi
if [ "$gradient_conkies" = "yes" ]; then
conkygradient "${1}" "${2}"
fi
}
conkygradient () {
CONKYDIR="$HOME"/.config/conky
for i in "$CONKYDIR"/*_mbcolor*; do
if [[ "$i" = *"sysinfo_graph"* ]];then
conkyctl win_bgcolor ${1} ${i}
FG_COLOR=$(pastel textcolor ${1}|pastel format hex)
if [[ "${FG_COLOR}" == *"ffffff"* ]]; then
conkyctl default_color ${w[-1]} ${i}
conkyctl color0 ${w[-2]} ${i}
conkyctl color1 ${w[-3]} ${i}
else
conkyctl default_color ${w[0]} ${i}
conkyctl color0 ${w[1]} ${i}
conkyctl color1 ${w[2]} ${i}
fi
conkyctl color2 ${2} ${i}
elif [[ "$i" = *"sysinfo_mb"* ]];then
conkyctl win_bgcolor ${2} ${i}
FG_COLOR=$(pastel textcolor ${2}|pastel format hex)
if [[ "${FG_COLOR}" == *"ffffff"* ]]; then
conkyctl default_color ${w[-1]} ${i}
conkyctl color0 ${w[-2]} ${i}
conkyctl color1 ${w[-3]} ${i}
else
conkyctl default_color ${w[0]} ${i}
conkyctl color0 ${w[1]} ${i}
conkyctl color1 ${w[2]} ${i}
fi
conkyctl color2 ${1} ${i}
elif [[ "$i" == *"logo"* ]];then
:
else
ran="$((RANDOM % 8))"
rand=$((ran + 1))
BG=$(pastel mix -f 0.${rand} ${1} ${2}|pastel format hex)
conkyctl win_bgcolor ${BG} ${i}
FG_COLOR=$(pastel textcolor ${BG}|pastel format hex)
if [[ "${FG_COLOR}" == *"ffffff"* ]]; then
conkyctl default_color ${w[-1]} ${i}
conkyctl color0 ${w[-2]} ${i}
conkyctl color1 ${w[-3]} ${i}
else
conkyctl default_color ${w[0]} ${i}
conkyctl color0 ${w[1]} ${i}
conkyctl color1 ${w[2]} ${i}
fi
fi
done
}
obtheme () {
case "$1" in
dark)
obtctl clractivebg ${w[2]}
TITLE_FG=$(pastel textcolor ${w[2]}|pastel format hex)
if [[ "$TITLE_FG" == *"ffffff"* ]];then
obtctl activetextcolor "#E5E5E5"
#obtctl activetextcolor ${w[-1]}
#obtctl activebuttonscolors ${w[-1]}
else
obtctl activetextcolor "#222222"
#obtctl activetextcolor ${w[0]}
#obtctl activebuttonscolors ${w[0]}
fi
obtctl clractivebgto ${w[4]}
obtctl clrnormalbg ${w[0]}
obtctl clrnormalbgto "$(pastel darken 0.1 "${w[0]}"|pastel format hex)"
;;
light)
obtctl clractivebg ${w[-2]}
TITLE_FG=$(pastel textcolor ${w[-2]}|pastel format hex)
if [[ "$TITLE_FG" == *"ffffff"* ]];then
obtctl activetextcolor "#E5E5E5"
#obtctl activetextcolor ${w[-1]}
#obtctl activebuttonscolors ${w[-1]}
else
obtctl activetextcolor "#222222"
#obtctl activetextcolor ${w[0]}
#obtctl activebuttonscolors ${w[0]}
fi
obtctl clractivebgto ${w[-4]}
obtctl clrnormalbg ${w[1]}
obtctl clrnormalbgto "$(pastel darken 0.1 "${w[1]}"|pastel format hex)"
;;
esac
obtctl shadow 0
}
colorize () {
source ~/.config/colorizer/colorizer.conf
# CONKY
case "$wall2themes_conky" in
dark) conky_colors dark;;
light) conky_colors light;;
*) : ;;
esac
# ACCENT_COLOR
case "$wall2themes_accent" in
dark)
obtctl theme MBcolors
accent ${w[1]}
;;
light)
obtctl theme MBcolors
accent ${w[-1]}
;;
*) : ;;
esac
# MENUS
case "$wall2themes_menu" in
dark) menu_theme dark;;
light) menu_theme light;;
*) : ;;
esac
# Openbox (TUTAJ WARUNEK)
case "$wall2themes_ob" in
dark) obtheme dark;;
light) obtheme light;;
*) : ;;
esac
# PYRADIO THEME
case "$wall2themes_pyradio" in
dark) pyradio_theme dark;;
light) pyradio_theme light;;
*) : ;;
esac
}
reverse () {
source ~/.config/colorizer/colorizer.conf
# CONKY
case "$wall2themes_conky" in
dark) conky_colors light
;;
light) conky_colors dark
;;
*) : ;;
esac
# ACCENT_COLOR
case "$wall2themes_accent" in
dark)
obtctl theme MBcolors
accent ${w[-1]}
;;
light)
obtctl theme MBcolors
accent ${w[1]}
;;
*) : ;;
esac
# MENUS
case "$wall2themes_menu" in
dark) menu_theme light;;
light) menu_theme dark;;
*) : ;;
esac
# Openbox (TUTAJ WARUNEK)
case "$wall2themes_ob" in
dark) obtheme light;;
light) obtheme dark;;
*) : ;;
esac
# PYRADIO THEME
case "$wall2themes_pyradio" in
dark) pyradio_theme light;;
light) pyradio_theme dark;;
*) : ;;
esac
}
genthumb () {
#$1 - filename with full path
NAME=${1////_}
if [[ "${NAME}" =~ ^_home_.* ]]; then
n=${#HOME}
((n++))
NAME=${NAME:${n}}
fi
# GENERATE THUMBNAIL
THUMBDIR="$HOME/.cache/colorizer/thumbs"
mkdir -p ${THUMBDIR}
THUMB="${THUMBDIR}/${NAME}.png"
if [[ ! -f "$THUMB" ]]; then
magick ${1} -resize 270x150^ -gravity center -extent 270x150 ${THUMB}
fi
}
pin () {
#get wallpaper path and filename without ext
# mkdir for colorscheme
mkdir -p ~/.config/colorizer/pinned/$WALLNAME
# if dir exist then action is update so remove old content
rm -rf ~/.config/colorizer/pinned/$WALLNAME
# get menu themename jgmenu_theme= ( it is always MBcolors ????)
. ~/.config/mabox/mabox.conf
}
case "$1" in
ob) obtheme "$2";;
menu) menu_theme "$2" "$3";;
conky) conky_colors "$2";;
conkyone) conky_colorsone "$2" "$3";;
pyradio) pyradio_theme "$2";;
cava) cava "$2";;
accent) accent "$2";;
gradient) gradient "$2" "$3";;
colorize) colorize;;
reverse) reverse;;
genthumb)genthumb "$2";;
pin) pin;;
*) ;;
esac