mabox-colorizer/bin/colorizer-ob

440 lines
17 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/>.
MBCOLORSDIR="$HOME"/.themes/MBcolors/openbox-3/
GRADIENT_FILE="$HOME"/.config/colorizer/gradients_all.inc
MORE_GRADIENT_FILE="$HOME"/.config/colorizer/gradients_menu.inc
if [ ! -f "$GRADIENT_FILE" ]; then
cp /usr/share/mabox-colorizer/gradients.inc "$GRADIENT_FILE"
fi
if [ ! -d "$MBCOLORSDIR" ]; then
mkdir -p ${MBCOLORSDIR}
rsync -a /usr/share/mabox-colorizer/themes/MBcolors/openbox-3/* ${MBCOLORSDIR}/
fi
OBTHEME=$(awk '/<theme>/ {while (getline n) {if (match(n, /<name>/))
{l=n; exit}}} END {split(l, a, "[<>]"); print a[3]}' "$HOME/.config/openbox/rc.xml")
THEMERC="$HOME/.themes/$OBTHEME/openbox-3/themerc"
me="colorizer-ob -s"
case "$LANG" in
pl*)
OBTHEME_LBL="Motyw OpenBox"
GENERATEFROMWP="Generuj z kolorów tapety..."
LIGHTBG="Jasne"
DARKBG="Ciemne"
TITLEBAR="Pasek tytułowy"
ACTIVE_BG="Tło aktywnego okna"
INACTIVE_BG="Tło nieaktywnego okna"
TITLEBAR_TEXT="Tekst paska tytułowego"
FONT="Czcionka"
TEXTALIGN="Wyrównanie tekstu"
LEFT="do lewej"
CENTER="po środku"
RIGHT="do prawej"
SHADOW="Cień"
NOSHADOW="bez cienia"
DARK="Ciemny"
LIGHT="Jasny"
TEXT="Tekst"
ACTIVE_FG="w aktywnym oknie"
INACTIVE_FG="w nieaktywnym oknie"
PADDING="Odstęp"
VERTICAL="W pionie"
HORIZONTAL="W poziomie"
RAISED_OR_FLAT="Płaski, Uniesiony, Wklęsły"
FLAT="płaski - <b>flat</b>"
RAISED="uniesiony - <b>raised</b>"
SUNKEN="wklęsły - <b>sunken</b>"
BUTTONS="Przyciski"
GRADIENT_TYPE="Typ Gradientu"
SOLID_COLOR="Jednolity kolor (brak gradientu)"
PRE_GRADIENTS="Gotowe gradienty"
GRADIENT_REVERSE="Odwróć kolory Gradientu"
SPLITVERTICAL="Podział w pionie"
MIRRORHORIZONTAL="LustroPoziome"
DIAGONAL="Przekątna"
CROSSDIAGONAL="Przekątna krzyżowa"
PYRAMID="Piramida"
ACTIVE_BG_TO="Tło aktywnego okna 2"
INACTIVE_BG_TO="Tło nieaktywnego okna 2"
BORDER="Obramowanie okna"
BORDER_PX="Obramowanie (px)"
ACTIVE_BORDER="Obramowanie akt. okna"
INACTIVE_BORDER="Obramowanie nieakt. okna"
HANDLEWIDTH="Uchwyt - rozmiar"
ACTIVEHANDLE="Aktywny Uchwyt"
YES="Tak"
NO="Nie"
GRIPONLY="Tylko chwyt (po bokach)"
RESET="Resetuj"
RESET_THEME="Resetuj motyw"
AREYOUSURE="Czy aby na pewno?"
NOT_SUPORTED_OBTHEME="Nie wspierany motyw"
SWITCH_TO_MBCOLORS="Przełącz na MBColors"
;;
*)
OBTHEME_LBL="OpenBox theme"
GENERATEFROMWP="Generate from wallpaper colors..."
LIGHTBG="Light"
DARKBG="Dark"
TITLEBAR="Title Bar"
ACTIVE_BG="Active Background"
INACTIVE_BG="Inactive Background"
TITLEBAR_TEXT="Title Bar Text"
FONT="Font"
TEXTALIGN="Text align"
LEFT="left"
CENTER="center"
RIGHT="right"
SHADOW="Shadow"
NOSHADOW="no shadow"
DARK="Dark"
LIGHT="Light"
TEXT="Text"
ACTIVE_FG="in active window"
INACTIVE_FG="in inactive window"
PADDING="Padding"
VERTICAL="Vertical"
HORIZONTAL="Horizontal"
RAISED_OR_FLAT="Flat, Raised or Sunken"
FLAT="flat"
RAISED="raised"
SUNKEN="sunken"
BUTTONS="Buttons"
GRADIENT_TYPE="Gradient type"
SPLITVERTICAL="SplitVertical"
MIRRORHORIZONTAL="MirrorHorizontal"
DIAGONAL="Diagonal"
CROSSDIAGONAL="CrossDiagonal"
PYRAMID="Pyramid"
SOLID_COLOR="Solid color (no gradient)"
PRE_GRADIENTS="Predefined gradients"
GRADIENT_REVERSE="Reverse Gradient"
ACTIVE_BG_TO="Active Background to"
INACTIVE_BG_TO="Inactive Background to"
BORDER="Window Border"
BORDER_PX="Border (px)"
ACTIVE_BORDER="Active Border"
INACTIVE_BORDER="Inactiva Border"
HANDLEWIDTH="Handle Width"
ACTIVEHANDLE="Active Handle"
YES="Yes"
NO="No"
GRIPONLY="Grip only"
RESET="Reset"
RESET_THEME="Reset theme to default"
AREYOUSURE="Are you sure?"
NOT_SUPORTED_OBTHEME="OpenBox theme not supported"
SWITCH_TO_MBCOLORS="Switch to MBColors"
;;
esac
if [ -f "$THEMERC" ]; then
if [ ! -f "${THEMERC}.bak" ]; then
cp ${THEMERC} ${THEMERC}.bak
#check if lines, and add missing
# colorTo
# handle
# grip
# text.justify
# window.active.label.text.font:shadow=n:shadowtint=70:shadowoffset=1
#grep -qF -- "$LINE" "$FILE" || echo "$LINE" >> "$FILE"
grep ^[^#] "$THEMERC" | grep -qiF -- .active.title.bg.colorTo || echo "window.active.title.bg.colorTo: #222222" >> "$THEMERC"
grep ^[^#] "$THEMERC" | grep -qiF -- .inactive.title.bg.colorTo || echo "window.inactive.title.bg.colorTo: #222222" >> "$THEMERC"
grep ^[^#] "$THEMERC" | grep -qiF -- handle.width: || echo "window.handle.width: 0" >> "$THEMERC"
grep ^[^#] "$THEMERC" | grep -qiF -- .handle.bg: || echo "window.*.handle.bg: parentrelative" >> "$THEMERC"
################################################################################################################################## Kolory poniżej obliczyć
grep ^[^#] "$THEMERC" | grep -qiF -- .active.handle.bg.color: || echo "window.active.handle.bg.color: #222222" >> "$THEMERC"
grep ^[^#] "$THEMERC" | grep -qiF -- .active.handle.bg.colorTo: || echo "window.active.handle.bg.colorTo: #222222" >> "$THEMERC"
grep ^[^#] "$THEMERC" | grep -qiF -- .inactive.handle.bg.color: || echo "window.inactive.handle.bg.color: #222222" >> "$THEMERC"
grep ^[^#] "$THEMERC" | grep -qiF -- .inactive.handle.bg.colorTo: || echo "window.inactive.handle.bg.colorTo: #222222" >> "$THEMERC"
grep ^[^#] "$THEMERC" | grep -qiF -- .grip.bg: || echo "window.*.grip.bg: parentrelative" >> "$THEMERC"
grep ^[^#] "$THEMERC" | grep -qiF -- .active.grip.bg.color: || echo "window.active.grip.bg.color: #222222" >> "$THEMERC"
grep ^[^#] "$THEMERC" | grep -qiF -- .active.grip.bg.colorTo: || echo "window.active.grip.bg.colorTo: #222222" >> "$THEMERC"
grep ^[^#] "$THEMERC" | grep -qiF -- .inactive.grip.bg.color: || echo "window.inactive.grip.bg.color: #222222" >> "$THEMERC"
grep ^[^#] "$THEMERC" | grep -qiF -- .inactive.grip.bg.colorTo: || echo "window.inactive.grip.bg.colorTo: #222222" >> "$THEMERC"
grep ^[^#] "$THEMERC" | grep -qiF -- .text.justify: || echo "window.*.text.justify: center" >> "$THEMERC"
grep ^[^#] "$THEMERC" | grep -qiF -- .text.font: || echo "window.*.text.font: shadow=n:shadowtint=70:shadowoffset=1" >> "$THEMERC"
fi
getvalues () {
read ABG <<< "$(grep .active.title.bg.color: ${THEMERC} | cut -d':' -f2)"
read ABGTO <<< "$(grep .active.title.bg.colorTo ${THEMERC} | cut -d':' -f2)"
read NBG <<< "$(grep .inactive.title.bg.color: ${THEMERC} | cut -d':' -f2)"
read NBGTO <<< "$(grep .inactive.title.bg.colorTo ${THEMERC} | cut -d':' -f2)"
read AFG <<< "$(grep .active.label.text.color ${THEMERC} | cut -d':' -f2)"
read NFG <<< "$(grep .inactive.label.text.color ${THEMERC} | cut -d':' -f2)"
read ALINE <<< "$(grep .active.border.color ${THEMERC} | cut -d':' -f2)"
read NLINE <<< "$(grep inactive.border.color ${THEMERC} | cut -d':' -f2)"
read PHEIGHT <<< "$(grep ^padding.height: ${THEMERC} | cut -d':' -f2)"
read PWIDTH <<< "$(grep ^padding.width: ${THEMERC} | cut -d':' -f2)"
read TXTJUST <<< "$(grep text.justify ${THEMERC} | cut -d':' -f2)"
read HANDLE <<< "$(grep handle.width ${THEMERC} | cut -d':' -f2)"
read BORD <<< "$(grep border.width ${THEMERC} | cut -d':' -f2)"
read WINRAISED REST <<< "$(grep .title.bg: ${THEMERC} | cut -d':' -f2)"
read AHBG <<< "$(grep .active.handle.bg.color: ${THEMERC} | cut -d':' -f2)"
if [ "$ABG" == "$AHBG" ];then
AHANDLE="yes"
else
AHANDLE="no"
fi
}
getvalues
out+=("^sep($OBTHEME_LBL: <i>$OBTHEME</i>)")
out+=("^sep(<i>$GENERATEFROMWP</i>)")
out+=("$LIGHTBG,w2theme ob light;$me")
out+=("$DARKBG,w2theme ob dark;$me")
out+=("^sep($TITLEBAR)")
out+=("<tt><span bgcolor='$ABG'> </span></tt> $ACTIVE_BG,^pipe(mbclr '$ABG' obtctl clractivebg_only '${ACTIVE_BG}' '$me')")
[[ ! -z "$ABGTO" ]] && out+=("<tt><span bgcolor='$ABG'> </span><span bgcolor='$ABGTO'> </span></tt> $ACTIVE_BG_TO,^pipe(mbclr '$ABGTO' obtctl clractivebgto '${ACTIVE_BG_TO}' '$me')")
out+=("<tt><span bgcolor='$ABG' fgcolor='$AFG'> <b>AbCd</b> </span></tt> $TITLEBAR_TEXT,^checkout(titletext)")
out+=("^sep()")
out+=("<tt><span bgcolor='$NBG'> </span></tt> $INACTIVE_BG,^pipe(mbclr '$NBG' obtctl clrnormalbg_only '${INACTIVE_BG}' '$me')")
[[ ! -z "$ABGTO" ]] && out+=("<tt><span bgcolor='$NBG'> </span><span bgcolor='$NBGTO'> </span></tt> $INACTIVE_BG_TO,^pipe(mbclr '$NBGTO' obtctl clrnormalbgto '${INACTIVE_BG_TO}' '$me')")
out+=("^sep()")
out+=("$PADDING [ <b>$PHEIGHT $PWIDTH</b> ],^checkout(padding)")
out+=("\"\"\"$RAISED_OR_FLAT? [ <b>$WINRAISED</b> ]\"\"\",^checkout(raised)")
out+=("^sep()")
out+=("$BUTTONS,^checkout(tbuttons)")
out+=("^sep(Gradient)")
out+=("$GRADIENT_TYPE [ <b>${REST##* }</b> ],^checkout(gradient)")
out+=("<tt><span bgcolor='#16a084'> </span><span bgcolor='#43a480'> </span><span bgcolor='#5da97b'> </span><span bgcolor='#72ad77'> </span><span bgcolor='#84b171'> </span><span bgcolor='#95b66c'> </span><span bgcolor='#a5ba66'> </span><span bgcolor='#b5be61'> </span><span bgcolor='#c3c15a'> </span><span bgcolor='#d1c753'> </span><span bgcolor='#dfc94c'> </span><span bgcolor='#edce44'> </span><span bgcolor='#f4d03f'> </span></tt> $PRE_GRADIENTS,^pipe(mbgrad ob)")
out+=("$GRADIENT_REVERSE,obtctl activegradient '${ABGTO}' '${ABG}';$me")
out+=("^sep($BORDER)")
out+=("<tt><span bgcolor='$ALINE'> </span></tt> $ACTIVE_BORDER,^pipe(mbclr '$ALINE' obtctl activeborderColor '${ACTIVE_BORDER_COLOR}' '$me')")
out+=("<tt><span bgcolor='$NLINE'> </span></tt> $INACTIVE_BORDER,^pipe(mbclr '$NLINE' obtctl inactiveborderColor '${INACTIVE_BORDER_COLOR}' '$me')")
out+=("$BORDER [ <b>$BORD</b> ],^checkout(border)")
out+=("$HANDLEWIDTH [ <b>$HANDLE</b> ],^checkout(handlewidth)")
out+=("$ACTIVEHANDLE? [ <b>$AHANDLE</b> ],^checkout(handle)")
if [ -f "${THEMERC}.bak" ]; then
out+=("^sep($RESET)")
out+=("$RESET_THEME,^checkout(resettheme)")
out2+=("^tag(resettheme)")
out2+=("^sep($AREYOUSURE)")
out2+=("$YES,obtctl reset;$me")
fi
#out+=("Edit...,xdg-open ${THEMERC}")
#out2+=("^tag(themes)")
#out2+=("^sep(themes)")
#for i in $(ls $HOME/.themes);do
# if [ -f "$HOME/.themes/${i}/openbox-3/themerc" ]; then
# out2+=("$i,obtctl theme $i;$me")
# fi
#done
#TBUTTONS
out2+=("^tag(tbuttons)")
out2+=("^sep($BUTTONS)")
out2+=("Tiny,obtctl buttons tiny;$me")
out2+=("Normal,obtctl buttons normal;$me")
out2+=("Bold,obtctl buttons bold;$me")
out2+=("Dots,obtctl buttons dots;$me")
#TEXT
out2+=("^tag(titletext)")
out2+=("^sep($TITLEBAR_TEXT)")
out2+=("$FONT...,mb-setfont obtitle;$me")
out2+=("$TEXTALIGN [ <b>$TXTJUST</b> ],^checkout(talign)")
out2+=("$SHADOW,^checkout(shadow)")
out2+=("^sep()")
out2+=("<tt><span bgcolor='$AFG'> </span></tt> $ACTIVE_FG,^pipe(mbclr '$AFG' obtctl activetextcolor '${TEXT} ${ACTIVE_FG}' '$me')")
out2+=("<tt><span bgcolor='$NFG'> </span></tt> $INACTIVE_FG,^pipe(mbclr '$NFG' obtctl inactivetextcolor '${TEXT} ${INACTIVE_FG}' '$me')")
#TEXTALIGN
out2+=("^tag(talign)")
out2+=("^sep($TEXTALIGN)")
out2+=("$LEFT,obtctl textjustify left;$me")
out2+=("$CENTER,obtctl textjustify center;$me")
out2+=("$RIGHT,obtctl textjustify right;$me")
out2+=("^tag(shadow)")
out2+=("^sep($SHADOW)")
out2+=("$NOSHADOW,obtctl shadow 0;$me")
out2+=("^sep()")
out2+=("$DARK,obtctl shadow 1;$me")
out2+=("$LIGHT,obtctl shadow 2;$me")
#PADDING
out2+=("^tag(padding)")
out2+=("^sep($VERTICAL)")
out2+=("0,obtctl paddingHeight 0;$me")
out2+=("^sep()")
out2+=("1,obtctl paddingHeight 1;$me")
out2+=("2,obtctl paddingHeight 2;$me")
out2+=("3,obtctl paddingHeight 3;$me")
out2+=("4,obtctl paddingHeight 4;$me")
out2+=("5,obtctl paddingHeight 5;$me")
out2+=("6,obtctl paddingHeight 6;$me")
out2+=("8,obtctl paddingHeight 8;$me")
out2+=("10,obtctl paddingHeight 10;$me")
out2+=("12,obtctl paddingHeight 12;$me")
out2+=("16,obtctl paddingHeight 16;$me")
out2+=("20,obtctl paddingHeight 20;$me")
out2+=("^sep($HORIZONTAL)")
out2+=("0,obtctl paddingWidth 0;$me")
out2+=("^sep()")
out2+=("1,obtctl paddingWidth 1;$me")
out2+=("2,obtctl paddingWidth 2;$me")
out2+=("3,obtctl paddingWidth 3;$me")
out2+=("4,obtctl paddingWidth 4;$me")
out2+=("5,obtctl paddingWidth 5;$me")
out2+=("6,obtctl paddingWidth 6;$me")
out2+=("8,obtctl paddingWidth 8;$me")
out2+=("10,obtctl paddingWidth 10;$me")
out2+=("12,obtctl paddingWidth 12;$me")
out2+=("16,obtctl paddingWidth 16;$me")
out2+=("20,obtctl paddingWidth 20;$me")
#BORDER
out2+=("^tag(border)")
out2+=("^sep($BORDER)")
out2+=("0,obtctl borderWidth 0;$me")
out2+=("^sep()")
out2+=("1,obtctl borderWidth 1;$me")
out2+=("2,obtctl borderWidth 2;$me")
out2+=("3,obtctl borderWidth 3;$me")
out2+=("4,obtctl borderWidth 4;$me")
out2+=("5,obtctl borderWidth 5;$me")
out2+=("6,obtctl borderWidth 6;$me")
out2+=("8,obtctl borderWidth 8;$me")
out2+=("10,obtctl borderWidth 10;$me")
out2+=("12,obtctl borderWidth 12;$me")
out2+=("16,obtctl borderWidth 16;$me")
out2+=("20,obtctl borderWidth 20;$me")
#RAISED
out2+=("^tag(raised)")
out2+=("\"\"\"^sep($RAISED_OR_FLAT?)\"\"\"")
out2+=("$FLAT,obtctl raised 0;$me")
out2+=("$RAISED,obtctl raised 1;$me")
out2+=("$SUNKEN,obtctl raised 2;$me")
#GRADIENT
out2+=("^tag(gradient)")
out2+=("^sep($GRADIENT_TYPE)")
out2+=("$SOLID_COLOR,obtctl gradient_type solid;$me")
out2+=("^sep()")
out2+=("$VERTICAL,obtctl gradient_type vertical;$me")
out2+=("$HORIZONTAL,obtctl gradient_type horizontal;$me")
out2+=("$MIRRORHORIZONTAL,obtctl gradient_type mirrorhorizontal;$me")
out2+=("$SPLITVERTICAL,obtctl gradient_type splitvertical;$me")
out2+=("$DIAGONAL,obtctl gradient_type diagonal;$me")
out2+=("$CROSSDIAGONAL,obtctl gradient_type crossdiagonal;$me")
out2+=("$PYRAMID,obtctl gradient_type pyramid;$me")
#HANDLE
out2+=("^tag(handle)")
out2+=("^sep($ACTIVEHANDLE)")
out2+=("$NO,obtctl activehandle no;$me")
out2+=("$YES,obtctl activehandle yes;$me")
out2+=("$GRIPONLY,obtctl activehandle grip;$me")
#HANDLE
out2+=("^tag(handlewidth)")
out2+=("^sep($HANDLEWIDTH)")
out2+=("0,obtctl handlewidth 0;$me")
out2+=("^sep()")
out2+=("2,obtctl handlewidth 2;$me")
out2+=("3,obtctl handlewidth 3;$me")
out2+=("4,obtctl handlewidth 4;$me")
out2+=("6,obtctl handlewidth 6;$me")
out2+=("8,obtctl handlewidth 8;$me")
out2+=("10,obtctl handlewidth 10;$me")
else
out+=("^sep($NOT_SUPORTED_OBTHEME)")
out+=("$SWITCH_TO_MBCOLORS,obtctl theme MBcolors;$me")
#for i in $(ls $HOME/.themes);do
#if [ -f "$HOME/.themes/${i}/openbox-3/themerc" ]; then
#out+=("$i,obtctl theme $i;$me")
#fi
#done
fi
### RUN
if [[ "$1" == "-s" ]]; then
. /usr/share/mb-jgtools/pipemenu-standalone.cfg
. $HOME/.config/mabox/mabox.conf
source $HOME/.config/colorizer/colorizer.conf
out+=("^sep()")
out+=(" ⮜⮜⮜ Colorizer,colorizer -s")
if [[ "$colorizer_size" == "full" ]];then
eval $(xdotool getdisplaygeometry --shell)
MENU_HEIGHT_MIN="$HEIGHT"
MENU_HEIGHT_MAX=$MENU_HEIGHT_MIN
jgtools_radius=0
menu_margin_x="0"
else
MENU_VALIGN="center"
menu_margin_x=${submenu_spacing:-0}
fi
MENU_PADDING_TOP=${jgtools_padding:-0}
MENU_HALIGN="left"
jgmenu_icon_size=0
JGWIDTH=40
[ $(pidof picom) ] && MENU_RADIUS=$jgtools_radius
[ -z $jgmenu_use_borders ] && menu_border=0
JGWIDTH=$((jgtools_padding + 278 + jgtools_padding))
MENU_PADDING_TOP=$((jgtools_padding + 158))
# WALLPAPER IMAGE
read WALLPATH<<< $(grep file "$HOME"/.config/nitrogen/bg-saved.cfg | cut -d'=' -f2)
THUMBDIR="$HOME/.cache/colorizer/thumbs"
mkdir -p ${THUMBDIR}
NAME=${WALLPATH////_}
if [[ "${NAME}" =~ ^_home_.* ]]; then
n=${#HOME}
((n++))
NAME=${NAME:${n}}
fi
THUMB="${THUMBDIR}/${NAME}.png"
if [[ ! -f "$THUMB" ]]
then
convert ${WALLPATH} -resize 270x150^ -gravity center -extent 270x150 ${THUMB}
fi
mkconfigfile
cat <<EOF > ${MENU_ITEMS}
@icon,,$((jgtools_padding + 4)),$((jgtools_padding + 4)),270,150,4,left,top,,,${THUMB}
@icon,,$((jgtools_padding + 4)),$((jgtools_padding + 4)),270,150,4,left,top,,,/usr/share/mabox-colorizer/img/colorizer-ob.png
@rect,,$((jgtools_padding + 4)),$((jgtools_padding + 128)),270,22,0,left,top,#222222 20,#222222 70,
@text,,$((jgtools_padding + 138)),$((jgtools_padding + 124)),130,30,0,left,top,#FFFFFF ,${WINCLR},<span size='10400' font_family='Ubuntu'><b>Colorizer</b> Openbox</span>
$(printf '%s\n' "${out[@]}")
$(printf '%s\n' "${out2[@]}")
EOF
jgmenu --config-file=${CONFIG_FILE} --csv-file=${MENU_ITEMS} 2>/dev/null
exit 0
fi
printf '%s\n' "${out[@]}"
printf '%s\n' "${out2[@]}"