#!/bin/bash OBTHEME=$(awk '// {while (getline n) {if (match(n, //)) {l=n; exit}}} END {split(l, a, "[<>]"); print a[3]}' "$HOME/.config/openbox/rc.xml") #echo "$OBTHEME" THEMEDIR="$HOME/.themes/$OBTHEME/openbox-3" THEMERC="$HOME/.themes/$OBTHEME/openbox-3/themerc" #if [[ $OBTHEME = MBcolor* ]];then #switch to MBcolors theme # THEMEDIR="$HOME/.themes/$OBTHEME/openbox-3" # THEMERC="$HOME/.themes/$OBTHEME/openbox-3/themerc" # else # xmlstarlet ed -L -N o="http://openbox.org/3.4/rc" -u '/o:openbox_config/o:theme/o:name' -v "MBcolors" "$HOME/.config/openbox/rc.xml" # THEMEDIR="$HOME/.themes/MBcolors/openbox-3" # THEMERC="$HOME/.themes/MBcolors/openbox-3/themerc" #fi MBCOLORSDIR="$HOME"/.themes/MBcolors/openbox-3/ if [ ! -d "$MBCOLORSDIR" ]; then mkdir -p ${MBCOLORSDIR} rsync -a /usr/share/mabox-colorizer/themes/MBcolors/openbox-3/* ${MBCOLORSDIR}/ fi if [ ! -f "${THEMERC}.bak" ]; then cp ${THEMERC} ${THEMERC}.bak fi theme () { xmlstarlet ed -L -N o="http://openbox.org/3.4/rc" -u '/o:openbox_config/o:theme/o:name' -v "$1" "$HOME/.config/openbox/rc.xml" } reset () { rm ${THEMERC} mv ${THEMERC}.bak ${THEMERC} } resetonlycolors () { theme MBcolors clractivebg "#579c8e" clractivebgto "#41756a" } resetMBcolors() { theme MBcolors rsync -a /usr/share/mabox-colorizer/themes/MBcolors/openbox-3/* ${MBCOLORSDIR}/ #set font nspace="http://openbox.org/3.4/rc" cfg="$HOME/.config/openbox/rc.xml" xmlstarlet ed -L -N a="$nspace" -u '/a:openbox_config/a:theme/a:font[@place="ActiveWindow"]/a:name' -v "Ubuntu" "$cfg" xmlstarlet ed -L -N a="$nspace" -u '/a:openbox_config/a:theme/a:font[@place="ActiveWindow"]/a:size' -v "9" "$cfg" xmlstarlet ed -L -N a="$nspace" -u '/a:openbox_config/a:theme/a:font[@place="ActiveWindow"]/a:weight' -v "Bold" "$cfg" xmlstarlet ed -L -N a="$nspace" -u '/a:openbox_config/a:theme/a:font[@place="ActiveWindow"]/a:slant' -v "Normal" "$cfg" xmlstarlet ed -L -N a="$nspace" -u '/a:openbox_config/a:theme/a:font[@place="InactiveWindow"]/a:name' -v "Ubuntu" "$cfg" xmlstarlet ed -L -N a="$nspace" -u '/a:openbox_config/a:theme/a:font[@place="InactiveWindow"]/a:size' -v "9" "$cfg" xmlstarlet ed -L -N a="$nspace" -u '/a:openbox_config/a:theme/a:font[@place="InactiveWindow"]/a:weight' -v "Bold" "$cfg" xmlstarlet ed -L -N a="$nspace" -u '/a:openbox_config/a:theme/a:font[@place="InactiveWindow"]/a:slant' -v "Normal" "$cfg" } borderWidth () { case "$1" in increase) read BWIDTH <<< "$(grep border.width: ${THEMERC} | cut -d':' -f2)" BWIDTH=$((BWIDTH+1)) sd "^border.width:.*$" "border.width: ${BWIDTH}" ${THEMERC} ;; decrease) read BWIDTH <<< "$(grep border.width: ${THEMERC} | cut -d':' -f2)" if [ "$BWIDTH" -gt "0" ];then BWIDTH=$((BWIDTH-1)) sd "^border.width:.*$" "border.width: ${BWIDTH}" ${THEMERC} fi ;; *) sd "^border.width:.*$" "border.width: $1" ${THEMERC} ;; esac } activeborderColor () { sd "\.active.border.color:.*$" ".active.border.color: $1" ${THEMERC} } inactiveborderColor () { sd "\.inactive.border.color:.*$" ".inactive.border.color: $1" ${THEMERC} } paddingHeight () { case "$1" in increase) read PHEIGHT <<< "$(grep ^padding.height: ${THEMERC} | cut -d':' -f2)" PHEIGHT=$((PHEIGHT+1)) sd "^padding.height:.*$" "padding.height: ${PHEIGHT}" ${THEMERC} sd "^padding.width:.*$" "padding.width: ${PHEIGHT}" ${THEMERC} ;; decrease) read PHEIGHT <<< "$(grep ^padding.height: ${THEMERC} | cut -d':' -f2)" if [ "$PHEIGHT" -gt "0" ];then PHEIGHT=$((PHEIGHT-1)) sd "^padding.height:.*$" "padding.height: ${PHEIGHT}" ${THEMERC} sd "^padding.width:.*$" "padding.width: ${PHEIGHT}" ${THEMERC} fi ;; 0|1|2|3|4|5|6|8|10|12|16|20) sd "^padding.height:.*$" "padding.height: $1" ${THEMERC} sd "^padding.width:.*$" "padding.width: $1" ${THEMERC} ;; esac } paddingWidth () { sd "^padding.width:.*$" "padding.width: $1" ${THEMERC} } textjustify () { sd "\.text.justify:.*$" ".text.justify: $1" ${THEMERC} } shadow () { case "$1" in 0|no) sd "\.active.label.text.font:.*$" ".active.label.text.font: shadow=n:shadowtint=70:shadowoffset=1" ${THEMERC} sd "\.inactive.label.text.font:.*$" ".inactive.label.text.font: shadow=n:shadowtint=20:shadowoffset=1" ${THEMERC} ;; 1|dark) sd "\.active.label.text.font:.*$" ".active.label.text.font: shadow=y:shadowtint=70:shadowoffset=1" ${THEMERC} #sd "\.inactive.label.text.font:.*$" ".inactive.label.text.font: shadow=y:shadowtint=20:shadowoffset=1" ${THEMERC} ;; 2|light) sd "\.active.label.text.font:.*$" ".active.label.text.font: shadow=y:shadowtint=-40:shadowoffset=1" ${THEMERC} #sd "\.inactive.label.text.font:.*$" ".inactive.label.text.font: shadow=y:shadowtint=-20:shadowoffset=1" ${THEMERC} ;; esac } handlewidth () { sd "\.handle.width:.*$" ".handle.width: $1" ${THEMERC} } raised () { #flat 0 or raised 1 or sunken 2 read WINRAISED REST <<< "$(grep .title.bg: ${THEMERC} | cut -d':' -f2)" case "$1" in 0|flat) sd "\.title.bg:.*$" ".title.bg: flat ${REST}" ${THEMERC} sd "\.handle.bg:.*$" ".handle.bg: flat ${REST}" ${THEMERC} sd "\.grip.bg:.*$" ".grip.bg: flat ${REST}" ${THEMERC} ;; 1|raised) sd "\.title.bg:.*$" ".title.bg: raised ${REST}" ${THEMERC} sd "\.handle.bg:.*$" ".handle.bg: raised ${REST}" ${THEMERC} sd "\.grip.bg:.*$" ".grip.bg: raised ${REST}" ${THEMERC} ;; 2|sunken) sd "\.title.bg:.*$" ".title.bg: sunken ${REST}" ${THEMERC} sd "\.handle.bg:.*$" ".handle.bg: sunken ${REST}" ${THEMERC} sd "\.grip.bg:.*$" ".grip.bg: sunken ${REST}" ${THEMERC} ;; esac } gradient_type () { #solid or gradient gradient-type read WINRAISED REST <<< "$(grep .title.bg: ${THEMERC} | cut -d':' -f2)" case "$1" in solid) sd "\.title.bg:.*$" ".title.bg: ${WINRAISED} solid" ${THEMERC} sd "\.handle.bg:.*$" ".handle.bg: ${WINRAISED} solid" ${THEMERC} sd "\.grip.bg:.*$" ".grip.bg: ${WINRAISED} solid" ${THEMERC} ;; *) sd "\.title.bg:.*$" ".title.bg: ${WINRAISED} gradient ${1}" ${THEMERC} sd "\.handle.bg:.*$" ".handle.bg: ${WINRAISED} gradient ${1}" ${THEMERC} sd "\.grip.bg:.*$" ".grip.bg: ${WINRAISED} gradient ${1}" ${THEMERC} ;; esac } random_gradient () { GRADIENT_FILE="$HOME"/.config/colorizer/gradients_all.inc if [ ! -f $GRADIENT_FILE ]; then cp -a /usr/share/mabox-colorizer/gradients_all.inc $GRADIENT_FILE fi read CLR CLRTO REST <<< "$(shuf -n 1 $GRADIENT_FILE)" activegradient "$CLR" "$CLRTO" } activegradient () { # ACTIVE # ACTIVE GRIP and HANDLE colorTo=$(pastel darken 0.1 "${1}"|pastel format hex) #activehandle? ###read ABG <<< "$(grep .active.title.bg.color: ${THEMERC} | cut -d':' -f2)" ###read AHBG <<< "$(grep .active.handle.bg.color: ${THEMERC} | cut -d':' -f2)" ###if [ "$ABG" == "$AHBG" ];then ###fi sd "\.active.grip.bg.color:.*$" ".active.grip.bg.color: ${1}" ${THEMERC} sd "\.active.grip.bg.colorTo:.*$" ".active.grip.bg.colorTo: ${colorTo}" ${THEMERC} sd "^window.active.title.bg.color:.*$" "window.active.title.bg.color: ${1}" ${THEMERC} sd "\.active.border.color:.*$" ".active.border.color: ${1}" ${THEMERC} sd "^window.active.title.bg.colorTo:.*$" "window.active.title.bg.colorTo: ${colorTo}" ${THEMERC} #sd "\.active.handle.bg.color:.*$" ".active.handle.bg.color: ${1}" ${THEMERC} sd "^window.active.title.bg.color:.*$" "window.active.title.bg.color: ${1}" ${THEMERC} sd "^window.active.title.bg.colorTo:.*$" "window.active.title.bg.colorTo: ${2}" ${THEMERC} # Border color = active.title.bg.color (gradient start color) sd "\.active.border.color:.*$" ".active.border.color: $1" ${THEMERC} #### INACTIVE icolor=$(pastel mix -s RGB -f 0.3 ${1} '#000000' |pastel format hex) icolorTo=$(pastel mix -s RGB -f 0.3 ${2} '#000000' |pastel format hex) sd "^window.inactive.title.bg.color:.*$" "window.inactive.title.bg.color: ${icolor}" ${THEMERC} sd "^window.inactive.title.bg.colorTo:.*$" "window.inactive.title.bg.colorTo: ${icolorTo}" ${THEMERC} # Border color = active.title.bg.color (gradient start color) sd "\.inactive.border.color:.*$" ".inactive.border.color: ${icolor}" ${THEMERC} ## INACTIVE GRIP and HANDLE #normalhandle? ###read IBG <<< "$(grep .inactive.title.bg.color: ${THEMERC} | cut -d':' -f2)" ###read IHBG <<< "$(grep .inactive.handle.bg.color: ${THEMERC} | cut -d':' -f2)" ###if [ "$IBG" == "$IHBG" ];then sd "\.inactive.handle.bg.color:.*$" ".inactive.handle.bg.color: ${icolor}" ${THEMERC} sd "\.inactive.handle.bg.colorTo:.*$" ".inactive.handle.bg.colorTo: ${icolorTo}" ${THEMERC} ###fi sd "\.inactive.grip.bg.color:.*$" ".inactive.grip.bg.color: ${icolor}" ${THEMERC} sd "\.inactive.grip.bg.colorTo:.*$" ".inactive.grip.bg.colorTo: ${icolorTo}" ${THEMERC} sd "^window.inactive.title.bg.color:.*$" "window.inactive.title.bg.color: ${icolor}" ${THEMERC} sd "\.inactive.border.color:.*$" ".inactive.border.color: ${icolor}" ${THEMERC} sd "^window.inactive.title.bg.colorTo:.*$" "window.inactive.title.bg.colorTo: ${icolorTo}" ${THEMERC} ## Active handle always have inactive colors sd "\.active.handle.bg.color:.*$" ".active.handle.bg.color: ${icolor}" ${THEMERC} sd "\.active.handle.bg.colorTo:.*$" ".active.handle.bg.colorTo: ${icolorTo}" ${THEMERC} # calculate color for title.fg and buttons TITLE_FG=$(pastel textcolor ${2}|pastel format hex) if [[ "${TITLE_FG}" == *"ffffff"* ]];then TITLE_FG="#E5E5E5" else TITLE_FG="#222222" fi sd "\.active.label.text.color:.*$" ".active.label.text.color: ${TITLE_FG}" ${THEMERC} # Button colors activebuttonscolors "${TITLE_FG}" # Shadow read SHADOW <<< "$(grep .active.label.text.font: ${THEMERC} | cut -d':' -f2| cut -d'=' -f2)" if [ "$SHADOW" == "y" ];then if [ "$TITLE_FG" == "#E5E5E5" ];then shadow dark else shadow light fi fi } gradient () { sd "^window.active.title.bg.color:.*$" "window.active.title.bg.color: ${1}" ${THEMERC} sd "^window.active.title.bg.colorTo:.*$" "window.active.title.bg.colorTo: ${2}" ${THEMERC} # Border color = active.title.bg.color (gradient start color) sd "\.active.border.color:.*$" ".active.border.color: $1" ${THEMERC} #### INACTIVE icolor=$(pastel darken 0.5 ${1}|pastel format hex) icolorTo=$(pastel darken 0.5 ${2}|pastel format hex) sd "^window.inactive.title.bg.color:.*$" "window.inactive.title.bg.color: ${icolor}" ${THEMERC} sd "^window.inactive.title.bg.colorTo:.*$" "window.inactive.title.bg.colorTo: ${icolorTo}" ${THEMERC} # Border color = active.title.bg.color (gradient start color) sd "\.inactive.border.color:.*$" ".inactive.border.color: ${icolor}" ${THEMERC} # calculate color for title.fg and buttons TITLE_FG=$(pastel textcolor ${2}|pastel format hex) if [[ "${TITLE_FG}" == *"ffffff"* ]];then TITLE_FG="#E5E5E5" else TITLE_FG="#222222" fi sd "\.active.label.text.color:.*$" ".active.label.text.color: ${TITLE_FG}" ${THEMERC} # Button colors activebuttonscolors "${TITLE_FG}" # Shadow read SHADOW <<< "$(grep .active.label.text.font: ${THEMERC} | cut -d':' -f2| cut -d'=' -f2)" if [ "$SHADOW" == "y" ];then if [ "$TITLE_FG" == "#E5E5E5" ];then shadow dark else shadow light fi fi } gradient_reverse () { : } activehandle () { case "$1" in no) #no read NBG <<< "$(grep inactive.title.bg.color: ${THEMERC} | cut -d':' -f2)" read NBGTO <<< "$(grep inactive.title.bg.colorTo: ${THEMERC} | cut -d':' -f2)" #notify-send.sh "Normal" "${NBG} ${NBGTO}" sd "\.active.handle.bg.color:.*$" ".active.handle.bg.color: ${NBG}" ${THEMERC} sd "\.active.handle.bg.colorTo:.*$" ".active.handle.bg.colorTo: ${NBGTO}" ${THEMERC} sd "\.active.grip.bg:.*$" ".active.grip.bg: parentrelative" ${THEMERC} sd "\.active.grip.bg.color:.*$" ".active.grip.bg.color: ${NBG}" ${THEMERC} sd "\.active.grip.bg.colorTo:.*$" ".active.grip.bg.colorTo: ${NBGTO}" ${THEMERC} ;; yes) #yes read ABG <<< "$(grep window.active.title.bg.color: ${THEMERC} | cut -d':' -f2)" read ABGTO <<< "$(grep window.active.title.bg.colorTo: ${THEMERC} | cut -d':' -f2)" #notify-send.sh "Active" "${ABG} ${ABGTO}" sd "\.active.handle.bg.color:.*$" ".active.handle.bg.color: ${ABG}" ${THEMERC} sd "\.active.handle.bg.colorTo:.*$" ".active.handle.bg.colorTo: ${ABGTO}" ${THEMERC} sd "\.active.grip.bg:.*$" ".active.grip.bg: parentrelative" ${THEMERC} sd "\.active.grip.bg.color:.*$" ".active.grip.bg.color: ${ABG}" ${THEMERC} sd "\.active.grip.bg.colorTo:.*$" ".active.grip.bg.colorTo: ${ABGTO}" ${THEMERC} ;; grip) read GRAD <<< "$(grep .title.bg: ${THEMERC} | cut -d':' -f2)" read ABG <<< "$(grep window.active.title.bg.color: ${THEMERC} | cut -d':' -f2)" read ABGTO <<< "$(grep window.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)" sd "\.active.grip.bg:.*$" ".active.grip.bg: ${GRAD}" ${THEMERC} sd "\.active.grip.bg.color:.*$" ".active.grip.bg.color: ${ABG}" ${THEMERC} sd "\.active.grip.bg.colorTo:.*$" ".active.grip.bg.colorTo: ${ABGTO}" ${THEMERC} sd "\.active.handle.bg.color:.*$" ".active.handle.bg.color: ${NBG}" ${THEMERC} sd "\.active.handle.bg.colorTo:.*$" ".active.handle.bg.colorTo: ${NBGTO}" ${THEMERC} ;; esac } clractivebg_only () { sd "^window.active.title.bg.color:.*$" "window.active.title.bg.color: ${1}" ${THEMERC} # calculate color for title.fg and buttons TITLE_FG=$(pastel textcolor ${1}|pastel format hex) if [[ "${TITLE_FG}" == *"ffffff"* ]];then TITLE_FG="#E5E5E5" else TITLE_FG="#222222" fi sd "\.active.label.text.color:.*$" ".active.label.text.color: ${TITLE_FG}" ${THEMERC} # Button colors activebuttonscolors "${TITLE_FG}" } clractivebg () { colorTo=$(pastel darken 0.1 "${1}"|pastel format hex) #activehandle? read ABG <<< "$(grep .active.title.bg.color: ${THEMERC} | cut -d':' -f2)" read AHBG <<< "$(grep .active.handle.bg.color: ${THEMERC} | cut -d':' -f2)" if [ "$ABG" == "$AHBG" ];then sd "\.active.handle.bg.color:.*$" ".active.handle.bg.color: ${1}" ${THEMERC} sd "\.active.handle.bg.colorTo:.*$" ".active.handle.bg.colorTo: ${colorTo}" ${THEMERC} fi sd "\.active.grip.bg.color:.*$" ".active.grip.bg.color: ${1}" ${THEMERC} sd "\.active.grip.bg.colorTo:.*$" ".active.grip.bg.colorTo: ${colorTo}" ${THEMERC} sd "^window.active.title.bg.color:.*$" "window.active.title.bg.color: ${1}" ${THEMERC} sd "\.active.border.color:.*$" ".active.border.color: ${1}" ${THEMERC} sd "^window.active.title.bg.colorTo:.*$" "window.active.title.bg.colorTo: ${colorTo}" ${THEMERC} #menu (Openbox menu - not really used in Mabox) sd "menu.title.bg.color:.*$" "menu.title.bg.color: ${1}" ${THEMERC} sd "menu.title.bg.colorTo:.*$" "menu.title.bg.colorTo: ${colorTo}" ${THEMERC} sd "menu.items.active.bg.color:.*$" "menu.items.active.bg.color: ${1}" ${THEMERC} sd "menu.items.active.bg.colorTo:.*$" "menu.items.active.bg.colorTo: ${colorTo}" ${THEMERC} # calculate color for title.fg and buttons TITLE_FG=$(pastel textcolor ${colorTo}|pastel format hex) if [[ "${TITLE_FG}" == *"ffffff"* ]];then TITLE_FG="#E5E5E5" else TITLE_FG="#222222" fi sd "\.active.label.text.color:.*$" ".active.label.text.color: ${TITLE_FG}" ${THEMERC} # Button colors activebuttonscolors "${TITLE_FG}" } clrnormalbg_only () { sd "^window.inactive.title.bg.color:.*$" "window.inactive.title.bg.color: ${1}" ${THEMERC} } clrnormalbg () { colorTo=$(pastel darken 0.1 "${1}"|pastel format hex) ###sd "\.inactive.handle.bg.color:.*$" ".inactive.handle.bg.color: ${1}" ${THEMERC} ###sd "\.inactive.handle.bg.colorTo:.*$" ".inactive.handle.bg.colorTo: ${colorTo}" ${THEMERC} sd "\.handle.bg.color:.*$" ".handle.bg.color: ${1}" ${THEMERC} sd "\.handle.bg.colorTo:.*$" ".handle.bg.colorTo: ${colorTo}" ${THEMERC} sd "\.inactive.grip.bg.color:.*$" ".inactive.grip.bg.color: ${1}" ${THEMERC} sd "\.inactive.grip.bg.colorTo:.*$" ".inactive.grip.bg.colorTo: ${colorTo}" ${THEMERC} sd "^window.inactive.title.bg.color:.*$" "window.inactive.title.bg.color: ${1}" ${THEMERC} sd "^window.inactive.title.bg.colorTo:.*$" "window.inactive.title.bg.colorTo: ${colorTo}" ${THEMERC} sd "\.inactive.border.color:.*$" ".inactive.border.color: ${1}" ${THEMERC} } clractivebgto () { sd "^window.active.title.bg.colorTo:.*$" "window.active.title.bg.colorTo: ${1}" ${THEMERC} #activehandle? ###read ABG <<< "$(grep .active.title.bg.color: ${THEMERC} | cut -d':' -f2)" ###read AHBG <<< "$(grep .active.handle.bg.color: ${THEMERC} | cut -d':' -f2)" ###if [ "$ABG" == "$AHBG" ];then sd "\.active.handle.bg.colorTo:.*$" ".active.handle.bg.colorTo: ${1}" ${THEMERC} ###fi sd "\.active.grip.bg.colorTo:.*$" ".active.grip.bg.colorTo: ${1}" ${THEMERC} } clrnormalbgto () { sd "^window.inactive.title.bg.colorTo:.*$" "window.inactive.title.bg.colorTo: ${1}" ${THEMERC} sd "\.inactive.handle.bg.colorTo:.*$" ".inactive.handle.bg.colorTo: ${1}" ${THEMERC} sd "\.inactive.grip.bg.colorTo:.*$" ".inactive.grip.bg.colorTo: ${1}" ${THEMERC} } activetextcolor () { sd "\.active.label.text.color:.*$" ".active.label.text.color: ${1}" ${THEMERC} activebuttonscolors ${1} } inactivetextcolor () { sd "\.inactive.label.text.color:.*$" ".inactive.label.text.color: ${1}" ${THEMERC} } buttons () { rm $THEMEDIR/*.xbm cp -a /usr/share/mabox-colorizer/themes/obbuttons/${1}/*.xbm $THEMEDIR/ #save buttons name to file echo "${1}" > $THEMEDIR/.buttons #if buttons big check font size also case "$1" in big-12) nspace="http://openbox.org/3.4/rc" cfg="$HOME/.config/openbox/rc.xml" SIZE=$(xmlstarlet sel -N a="$nspace" -t -v '/a:openbox_config/a:theme/a:font[@place="ActiveWindow"]/a:size' "$cfg") if [ "$SIZE" -lt "12" ]; then xmlstarlet ed -L -N a="$nspace" -u '/a:openbox_config/a:theme/a:font[@place="ActiveWindow"]/a:size' -v "12" "$cfg" xmlstarlet ed -L -N a="$nspace" -u '/a:openbox_config/a:theme/a:font[@place="InactiveWindow"]/a:size' -v "12" "$cfg" fi ;; big-14) nspace="http://openbox.org/3.4/rc" cfg="$HOME/.config/openbox/rc.xml" SIZE=$(xmlstarlet sel -N a="$nspace" -t -v '/a:openbox_config/a:theme/a:font[@place="ActiveWindow"]/a:size' "$cfg") if [ "$SIZE" -lt "14" ]; then xmlstarlet ed -L -N a="$nspace" -u '/a:openbox_config/a:theme/a:font[@place="ActiveWindow"]/a:size' -v "14" "$cfg" xmlstarlet ed -L -N a="$nspace" -u '/a:openbox_config/a:theme/a:font[@place="InactiveWindow"]/a:size' -v "14" "$cfg" fi ;; *) : ;; esac } ndslimc() { xmlstarlet ed -L -N o="http://openbox.org/3.4/rc" -u '/o:openbox_config/o:theme/o:titleLayout' -v "$1" "$HOME/.config/openbox/rc.xml" } activebuttonscolors () { sd "^window.active.button.*.unpressed.image.color:.*$" "window.active.button.*.unpressed.image.color: ${1}" ${THEMERC} # Calculate colors for other button states (mix of ${1} and clractivebg #read ABG <<< "$(grep .active.title.bg.color: ${THEMERC} | cut -d':' -f2)" #hover=$(pastel mix -f 0.2 "${1}" "${ABG}"|pastel format hex) #pressed=$() #disabled=$() if [[ "${1}" == *"E5E5E5"* ]];then hover="#FFFFFF" else hover="#000000" fi #notify-send.sh "${1}" "${hover}" sd "^window.active.button.*.hover.image.color:.*$" "window.active.button.*.hover.image.color: ${hover}" ${THEMERC} } fontfamily () { nspace="http://openbox.org/3.4/rc" cfg="$HOME/.config/openbox/rc.xml" xmlstarlet ed -L -N a="$nspace" -u '/a:openbox_config/a:theme/a:font[@place="ActiveWindow"]/a:name' -v "${1}" "$cfg" xmlstarlet ed -L -N a="$nspace" -u '/a:openbox_config/a:theme/a:font[@place="InactiveWindow"]/a:name' -v "${1}" "$cfg" } fontsize () { nspace="http://openbox.org/3.4/rc" cfg="$HOME/.config/openbox/rc.xml" case "$1" in inc|increase) SIZE=$(xmlstarlet sel -N a="$nspace" -t -v '/a:openbox_config/a:theme/a:font[@place="ActiveWindow"]/a:size' "$cfg") if [ "$SIZE" -lt "21" ];then ((SIZE=SIZE+1)) xmlstarlet ed -L -N a="$nspace" -u '/a:openbox_config/a:theme/a:font[@place="ActiveWindow"]/a:size' -v "$SIZE" "$cfg" xmlstarlet ed -L -N a="$nspace" -u '/a:openbox_config/a:theme/a:font[@place="InactiveWindow"]/a:size' -v "$SIZE" "$cfg" fi ;; dec|decrease) SIZE=$(xmlstarlet sel -N a="$nspace" -t -v '/a:openbox_config/a:theme/a:font[@place="ActiveWindow"]/a:size' "$cfg") if [ "$SIZE" -gt "7" ];then ((SIZE=SIZE-1)) xmlstarlet ed -L -N a="$nspace" -u '/a:openbox_config/a:theme/a:font[@place="ActiveWindow"]/a:size' -v "$SIZE" "$cfg" xmlstarlet ed -L -N a="$nspace" -u '/a:openbox_config/a:theme/a:font[@place="InactiveWindow"]/a:size' -v "$SIZE" "$cfg" fi ;; *) xmlstarlet ed -L -N a="$nspace" -u '/a:openbox_config/a:theme/a:font[@place="ActiveWindow"]/a:size' -v "$1" "$cfg" xmlstarlet ed -L -N a="$nspace" -u '/a:openbox_config/a:theme/a:font[@place="InactiveWindow"]/a:size' -v "$1" "$cfg" ;; esac } fontweight () { nspace="http://openbox.org/3.4/rc" cfg="$HOME/.config/openbox/rc.xml" xmlstarlet ed -L -N a="$nspace" -u '/a:openbox_config/a:theme/a:font[@place="ActiveWindow"]/a:weight' -v "${1}" "$cfg" xmlstarlet ed -L -N a="$nspace" -u '/a:openbox_config/a:theme/a:font[@place="InactiveWindow"]/a:weight' -v "${1}" "$cfg" } fontweight_inactive () { nspace="http://openbox.org/3.4/rc" cfg="$HOME/.config/openbox/rc.xml" xmlstarlet ed -L -N a="$nspace" -u '/a:openbox_config/a:theme/a:font[@place="InactiveWindow"]/a:weight' -v "${1}" "$cfg" } fontweighttoggle (){ nspace="http://openbox.org/3.4/rc" cfg="$HOME/.config/openbox/rc.xml" WEIGHT=$(xmlstarlet sel -N a="$nspace" -t -v '/a:openbox_config/a:theme/a:font[@place="ActiveWindow"]/a:weight' "$cfg") if [ "$WEIGHT" = "Normal" ];then xmlstarlet ed -L -N a="$nspace" -u '/a:openbox_config/a:theme/a:font[@place="ActiveWindow"]/a:weight' -v "Bold" "$cfg" else xmlstarlet ed -L -N a="$nspace" -u '/a:openbox_config/a:theme/a:font[@place="ActiveWindow"]/a:weight' -v "Normal" "$cfg" fi } fontslant (){ nspace="http://openbox.org/3.4/rc" cfg="$HOME/.config/openbox/rc.xml" xmlstarlet ed -L -N a="$nspace" -u '/a:openbox_config/a:theme/a:font[@place="ActiveWindow"]/a:slant' -v "${1}" "$cfg" xmlstarlet ed -L -N a="$nspace" -u '/a:openbox_config/a:theme/a:font[@place="InactiveWindow"]/a:slant' -v "${1}" "$cfg" } fontslant_inactive (){ nspace="http://openbox.org/3.4/rc" cfg="$HOME/.config/openbox/rc.xml" xmlstarlet ed -L -N a="$nspace" -u '/a:openbox_config/a:theme/a:font[@place="InactiveWindow"]/a:slant' -v "${1}" "$cfg" } fontslanttoggle (){ nspace="http://openbox.org/3.4/rc" cfg="$HOME/.config/openbox/rc.xml" SLANT=$(xmlstarlet sel -N a="$nspace" -t -v '/a:openbox_config/a:theme/a:font[@place="ActiveWindow"]/a:slant' "$cfg") if [ "$SLANT" = "Normal" ];then xmlstarlet ed -L -N a="$nspace" -u '/a:openbox_config/a:theme/a:font[@place="ActiveWindow"]/a:slant' -v "Italic" "$cfg" else xmlstarlet ed -L -N a="$nspace" -u '/a:openbox_config/a:theme/a:font[@place="ActiveWindow"]/a:slant' -v "Normal" "$cfg" fi } randomizer () { # TODO: - maybe put all options to cnf file and let users customize options??? ### ensure we use MBColors at the moment theme MBcolors ### SHADOW (here, because we must know if is set later when title font color is calculated) ### Maybe better is not to change shadow? for now #SHADOWS=(no dark light) #rand=$((RANDOM%3)) #SHADOW="${SHADOWS[$rand]}" #shadow "${SHADOW}" shadow no ### RANDOM GRADIENT COLORS GRADIENT_FILE="$HOME"/.config/colorizer/gradients_all.inc if [ ! -f $GRADIENT_FILE ]; then cp -a /usr/share/mabox-colorizer/gradients_all.inc $GRADIENT_FILE fi read CLR CLRTO GRAD_NAME <<< "$(shuf -n 1 $GRADIENT_FILE)" #obtctl random_gradient activegradient "$CLR" "$CLRTO" ### rand gradient type TYPES=(solid vertical horizontal mirrorhorizontal diagonal mirrorhorizontal) rand=$((RANDOM%6)) G_TYPE="${TYPES[$rand]}" gradient_type "${G_TYPE}" #rand ### Random border BORDERS=(0 0 1 2 4 6) rand=$((RANDOM%5)) BORDER="${BORDERS[$rand]}" borderWidth "${BORDER}" HANDLES=(0 0 2 4) rand=$((RANDOM%4)) HANDLE="${HANDLES[$rand]}" handlewidth "${HANDLE}" ### Random padding PADDINGS=(2 4 8 12) rand=$((RANDOM%4)) PADDING="${PADDINGS[$rand]}" paddingHeight "${PADDING}" ### TITLEBAR STYLE STYLES=(flat raised raised sunken) rand=$((RANDOM%4)) STYLE="${STYLES[$rand]}" raised "${STYLE}" ### TEXT ALIGN ALIGNS=(left center right) rand=$((RANDOM%3)) ALIGN="${ALIGNS[$rand]}" textjustify "${ALIGN}" ### FONT FAMILY FAMILIES=(Ubuntu "Noto Sans" "Roboto Condensed" "GE Inspira" "JetBrains Mono") rand=$((RANDOM%5)) FAMILY="${FAMILIES[$rand]}" fontfamily "${FAMILY}" ### FONT WEIGHT WEIGHTS=(Bold Normal) rand=$((RANDOM%2)) WEIGHT="${WEIGHTS[$rand]}" fontweight "${WEIGHT}" ### FONT SLANT SLANTS=(Italic Normal) rand=$((RANDOM%2)) SLANT="${SLANTS[$rand]}" fontslant "${SLANT}" ### FONT SIZE FONTSIZES=(8 10 11 12 14 16) rand=$((RANDOM%6)) FONTSIZE="${FONTSIZES[$rand]}" fontsize "${FONTSIZE}" ### Buttons BUTTONS=(tiny normal bold dots big-12 big-14) rand=$((RANDOM%6)) BUTTON="${BUTTONS[$rand]}" buttons "${BUTTON}" ### Buttons layout LAYOUTS=(NDSLIMC NDSLIMC NLIMC LIMC) rand=$((RANDOM%4)) LAYOUT="${LAYOUTS[$rand]}" ndslimc "${LAYOUT}" #MSG=" #Openbox Window Decoration settings #Gradient #name: ${GRAD_NAME} #colors: ${CLR} to ${CLRTO} #type: $G_TYPE #Border: ${BORDER} #Padding: ${PADDING} #Titlebar style: ${STYLE} #Buttons: ${BUTTON} #Title align: ${ALIGN} #Font: ${FAMILY} ${WEIGHT} ${SLANT} ${FONTSIZE} #" # notify-send.sh -R /tmp/randomizer_notify -t 10000 -i mbcc "Mabox Colorizer" "${MSG}" \ # -o "Regenerate:randomizer ob" -o "Customize:colorizer-ob -s" } tweak() { case "$1" in large) fontsize 14 paddingHeight 8 buttons big-14 borderWidth 6 handlewidth 6 ;; big) fontsize 12 paddingHeight 6 buttons big-12 borderWidth 4 handlewidth 4 ;; normal) fontsize 11 paddingHeight 4 buttons tiny borderWidth 1 handlewidth 3 ;; small) fontsize 10 paddingHeight 2 buttons dots borderWidth 0 handlewidth 2 ;; tiny) fontsize 9 paddingHeight 1 buttons normal borderWidth 0 handlewidth 0 ;; *):;; esac } savetheme () { case "$LANG" in pl*)SAVE_AS="Nowy motyw Openbox" DESC="Zapisz obecne ustawionia Openbox jako nowy motyw..." LABEL="Nazwa:" NAME="nazwa";; *) SAVE_AS="New Openbox theme" DESC="Save current Openbox window decoration setup as theme..." LABEL="Name:" NAME="theme-name";; esac # ask for scheme name schemename=$(yad --center --width=300 --borders=20 --window-icon=mbcc --title "$SAVE_AS" --text="$DESC" --entry --entry-label="$LABEL" --entry-text="$NAME") || exit 1 echo "${1}${schemename}" >> "$HOME/.config/colorizer/openbox/userthemes.csv" } applyscheme () { theme MBcolors case "$1" in sys) SCHEMEFILE="/usr/share/mabox-colorizer/colorschemes/ob.csv";; usr) SCHEMEFILE="$HOME/.config/colorizer/openbox/userthemes.csv";; esac while IFS="|" read -r abg abgto afg aline nbg nbgto nfg nline grad txtjust pheight pwidth handle bord bevel button fsize fname ndslim weight slant scheme_name do clractivebg "${abg}" clractivebgto "${abgto}" activetextcolor "${afg}" activeborderColor "${aline}" clrnormalbg "${nbg}" clrnormalbgto "${nbgto}" inactivetextcolor "${nfg}" inactiveborderColor "${nline}" gradient_type "${grad}" done < <(awk 'NR == n' n=$2 "$SCHEMEFILE") } applytheme() { case "$1" in sys) SCHEMEFILE="/usr/share/mabox-colorizer/colorschemes/ob.csv";; usr) SCHEMEFILE="$HOME/.config/colorizer/openbox/userthemes.csv";; esac applyscheme "$1" "$2" while IFS="|" read -r abg abgto afg aline nbg nbgto nfg nline grad txtjust pheight pwidth handle bord bevel button fsize fname ndslim weight slant scheme_name do textjustify "${txtjust}" paddingHeight "${pheight}" paddingWidth "${pwidth}" handlewidth "${handle}" borderWidth "${bord}" raised "${bevel}" buttons "${button}" fontsize "${fsize}" fontfamily "${fname}" ndslimc "${ndslim}" fontweight "${weight}" fontslant "${slant}" done < <(awk 'NR == n' n=$2 "$SCHEMEFILE") } delscheme() { sed -i ${1}d "$HOME/.config/colorizer/openbox/userthemes.csv" } mono() { lighten=(0.92 0.8 0.65 0.45 0.28) darken=(0.9 0.74 0.54 0.38 0.18) if [ "${1}" == pick ];then color=$(gpick -pso 2>/dev/null) else color="${1}" fi if [ "${#color}" == 7 ];then for i in "${lighten[@]}" do pal+=("$(pastel mix -f $i "#ffffff" "$color"|pastel format hex)") done pal+=("$color") for i in "${darken[@]}" do pal+=("$(pastel mix -f $i "$color" "#000000"|pastel format hex)") done else exit 0 fi #colorize OB if [ "$2" == "dark" ];then clractivebg "${pal[4]}" clractivebgto "${pal[6]}" activeborderColor "${pal[2]}" activetextcolor "${pal[1]}" clrnormalbg "${pal[9]}" clrnormalbgto "${pal[10]}" inactiveborderColor "${pal[8]}" inactivetextcolor "${pal[4]}" else #light clractivebg "${pal[2]}" clractivebgto "${pal[4]}" activeborderColor "${pal[0]}" activetextcolor "${pal[9]}" clrnormalbg "${pal[9]}" clrnormalbgto "${pal[10]}" inactiveborderColor "${pal[7]}" inactivetextcolor "${pal[5]}" fi openbox --reconfigure colorizer-ob -s 2>/dev/null } case "$1" in theme) theme "$2";; reset) reset;; resetonlycolors) resetonlycolors;; resetMBcolors) resetMBcolors;; borderWidth) borderWidth "$2";; activeborderColor) activeborderColor "$2";; inactiveborderColor) inactiveborderColor "$2";; paddingHeight) paddingHeight "$2";; paddingWidth) paddingWidth "$2";; textjustify) textjustify "$2";; shadow) shadow "$2";; handlewidth) handlewidth "$2";; raised) raised "$2";; gradient_type) gradient_type "$2";; random_gradient) random_gradient;; activegradient) activegradient "$2" "$3";; gradient_reverse) gradient_reverse;; activehandle) activehandle "$2";; clractivebg_only) clractivebg_only "$2";; #ADVANCED - do not calculate colorTo clractivebg) clractivebg "$2";; clractivebgto) clractivebgto "$2";; clrnormalbg_only) clrnormalbg_only "$2";; clrnormalbg) clrnormalbg "$2";; clrnormalbgto) clrnormalbgto "$2";; activetextcolor) activetextcolor "$2";; inactivetextcolor) inactivetextcolor "$2";; buttons) buttons "$2";; ndslimc) ndslimc "$2";; activebuttonscolors) activebuttonscolors "$2";; fontfamily) fontfamily "$2";; fontweight) fontweight "$2";; fontweight_inactive) fontweight_inactive "$2";; fontslant) fontslant "$2";; fontslant_inactive) fontslant_inactive "$2";; fontsize) fontsize "$2";; fontweighttoggle) fontweighttoggle;; fontslanttoggle) fontslanttoggle;; randomizer) randomizer;; tweak) tweak "$2";; mono) mono "$2" "$3";; savetheme) savetheme "$2";; applyscheme) applyscheme "$2" "$3";; applytheme) applytheme "$2" "$3";; delscheme) delscheme "$2";; *) : ;; esac openbox --reconfigure