267 lines
9.8 KiB
Bash
Executable File
267 lines
9.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
## Copyright (C) 2020-2023 Aditya Shakya <adi1090x@gmail.com>
|
|
##
|
|
## Openbox Pipemenu For Picom Compositor
|
|
|
|
# Variables and functions
|
|
MENUS_LIBDIR='/usr/share/archcraft/openbox/menulib'
|
|
if ! . "$MENUS_LIBDIR/archcraft.cfg" 2> /dev/null; then
|
|
echo "Error: Failed to locate archcraft.cfg in $MENUS_LIBDIR" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# User's config dir
|
|
dir="$HOME/.config"
|
|
|
|
readonly EXECXCOMP='picom'
|
|
readonly RESTART_ATTEMPTS=20
|
|
readonly HELP='
|
|
ac-compositor an openbox pipe menu for use with picom
|
|
It should normally be called from an openbox menu.
|
|
|
|
Options (passed from the menu):
|
|
-h --help show this message
|
|
--start start the compositor and restart tint2, if running
|
|
--restart restart the compositor, if running
|
|
--stop stop the compositor
|
|
--edit open the picom config file in a text editor
|
|
--watch restart picom when the config is modified (useful for debugging)
|
|
|
|
If ac-compositor is called with no options (the usual method),
|
|
it will output an xml openbox pipemenu for handling compositing.
|
|
|
|
See ~/.config/picom.conf and "man picom" for configuration options.'
|
|
|
|
for i in "$@"; do
|
|
case "$i" in
|
|
-h|--help) echo "$HELP" ; exit 0
|
|
esac
|
|
done
|
|
|
|
declareDependencies picom
|
|
|
|
##-- various checks ---------------------
|
|
check_backend=$(cat $dir/picom.conf | grep 'backend = ' | head -n1 | cut -d'=' -f2 | tr -d ';,[:blank:],"')
|
|
check_corners=$(cat $dir/picom.conf | grep 'corner-radius =' | cut -d'=' -f2 | tr -d ';,[:blank:]')
|
|
check_border=$(cat $dir/picom.conf | grep 'round-borders =' | cut -d'=' -f2 | tr -d ';,[:blank:]')
|
|
check_shadow=$(cat $dir/picom.conf | grep 'shadow =' | head -n1 | cut -d'=' -f2 | tr -d ';,[:blank:]')
|
|
check_fading=$(cat $dir/picom.conf | grep 'fading =' | head -n1 | cut -d'=' -f2 | tr -d ';,[:blank:]')
|
|
check_blur=$(cat $dir/picom.conf | grep 'method =' | head -n1 | cut -d'=' -f2 | tr -d ';,[:blank:],"')
|
|
|
|
## Kill picom
|
|
forcekill_picom() {
|
|
killall -q picom
|
|
for ((i=0; i<RESTART_ATTEMPTS; i++)); do
|
|
[[ $(pidof picom) ]] || break
|
|
killall -q -S KILL picom
|
|
sleep 0.25
|
|
done
|
|
}
|
|
|
|
##-- Edit config ---------------------
|
|
if [[ $1 = '--edit' ]]; then # Edit picom settings
|
|
if ! [ -e "$HOME/.config/picom.conf" ]; then
|
|
cp '/etc/skel/.config/picom.conf' "$HOME/.config/picom.conf"
|
|
fi
|
|
if hash exo-open &>/dev/null; then
|
|
exo-open "$HOME/.config/picom.conf"
|
|
else
|
|
geany "$HOME/.config/picom.conf"
|
|
fi
|
|
|
|
elif [[ $1 = '--start' ]]; then
|
|
if ! [[ $(pidof picom) ]]; then
|
|
$EXECXCOMP
|
|
else
|
|
echo "$0 --start: picom already running" && exit 1
|
|
fi
|
|
|
|
elif [[ $1 = '--stop' ]]; then
|
|
forcekill_picom
|
|
|
|
elif [[ $1 = '--restart' ]]; then
|
|
if [[ $(pidof picom) ]]; then
|
|
forcekill_picom
|
|
"$0" --start
|
|
else # nothing to restart
|
|
echo "$0 --restart: picom is not running" && exit 1
|
|
fi
|
|
|
|
elif [[ $1 = '--watch' ]]; then
|
|
while inotifywait -e close_write "$HOME/.config/picom.conf"; do
|
|
"$0" --restart
|
|
done
|
|
|
|
##-- backend ------------------
|
|
|
|
elif [[ $1 = '--use-glx' ]]; then
|
|
sed -i -e "s/backend = .*/backend = \"glx\";/g" $dir/picom.conf
|
|
|
|
elif [[ $1 = '--use-xrender' ]]; then
|
|
sed -i -e "s/backend = .*/backend = \"xrender\";/g" $dir/picom.conf
|
|
|
|
##-- corners ---------------------
|
|
|
|
elif [[ $1 = '--corner-radius' ]]; then
|
|
cradius=$(yad --borders=10 --width='300' --title='Corner Radius' --button=Cancel:1 --button=Okay:0 --scale --value=6 --min-value=0 --max-value=40)
|
|
if [[ "$cradius" ]]; then
|
|
sed -i -e "s/backend = .*/backend = \"glx\";/g" $dir/picom.conf
|
|
sed -i -e "s/corner-radius = .*/corner-radius = $cradius;/g" $dir/picom.conf
|
|
fi
|
|
|
|
elif [[ $1 = '--disable-corners' ]]; then
|
|
sed -i -e "s/corner-radius = .*/corner-radius = 0;/g" $dir/picom.conf
|
|
|
|
##-- borders ---------------------
|
|
|
|
elif [[ $1 = '--border-size' ]]; then
|
|
cborder=$(yad --borders=10 --width='300' --title='Border Size' --button=Cancel:1 --button=Okay:0 --scale --value=4 --min-value=0 --max-value=100)
|
|
if [[ "$cborder" ]]; then
|
|
sed -i -e "s/round-borders = .*/round-borders = $cborder;/g" $dir/picom.conf
|
|
fi
|
|
|
|
elif [[ $1 = '--disable-borders' ]]; then
|
|
sed -i -e "s/round-borders = .*/round-borders = 0;/g" $dir/picom.conf
|
|
|
|
##-- shadows ---------------------
|
|
|
|
elif [[ $1 = '--update-shadows' ]]; then
|
|
get_shadows=$(yad --borders=10 --width='350' --height='200' --title='Client Shadows' --button=Cancel:1 --button=Okay:0 --form --field="Radius:NUM" 14\!0..50\!1 --field="Opacity:NUM" 0.30\!0..1\!0.1\!2 --field="X-Offset:NUM" 12\!-30..30\!1 --field="Y-Offset:NUM" 12\!-30..30\!1)
|
|
shadow_r=$(echo $get_shadows | cut -d'|' -f1)
|
|
shadow_o=$(echo $get_shadows | cut -d'|' -f2)
|
|
shadow_x=$(echo $get_shadows | cut -d'|' -f3)
|
|
shadow_y=$(echo $get_shadows | cut -d'|' -f4)
|
|
if [[ "$get_shadows" ]]; then
|
|
sed -i -e "s/shadow-radius = .*/shadow-radius = $shadow_r;/g" $dir/picom.conf
|
|
sed -i -e "s/shadow-opacity = .*/shadow-opacity = $shadow_o;/g" $dir/picom.conf
|
|
sed -i -e "s/shadow-offset-x = .*/shadow-offset-x = $shadow_x;/g" $dir/picom.conf
|
|
sed -i -e "s/shadow-offset-y = .*/shadow-offset-y = $shadow_y;/g" $dir/picom.conf
|
|
fi
|
|
|
|
elif [[ $1 = '--disable-shadows' ]]; then
|
|
sed -i -e "s/shadow = .*/shadow = false;/g" $dir/picom.conf
|
|
|
|
elif [[ $1 = '--enable-shadows' ]]; then
|
|
sed -i -e "s/shadow = .*/shadow = true;/g" $dir/picom.conf
|
|
|
|
elif [[ $1 = '--reset-shadows' ]]; then
|
|
sed -i -e "s/shadow-radius = .*/shadow-radius = 14;/g" $dir/picom.conf
|
|
sed -i -e "s/shadow-opacity = .*/shadow-opacity = 0.35;/g" $dir/picom.conf
|
|
sed -i -e "s/shadow-offset-x = .*/shadow-offset-x = -12;/g" $dir/picom.conf
|
|
sed -i -e "s/shadow-offset-y = .*/shadow-offset-y = -12;/g" $dir/picom.conf
|
|
|
|
##-- fading ---------------------
|
|
|
|
elif [[ $1 = '--update-fading' ]]; then
|
|
get_fading=$(yad --borders=10 --width='350' --height='160' --title='Fading' --button=Cancel:1 --button=Okay:0 --form --field="Fade-in-step:NUM" 0.03\!0.01..1\!0.01\!2 --field="Fade-out-step:NUM" 0.03\!0.01..1\!0.01\!2 --field="Fade-delta:NUM" 5\!0..10\!1)
|
|
fading_in=$(echo $get_fading | cut -d'|' -f1)
|
|
fading_out=$(echo $get_fading | cut -d'|' -f2)
|
|
fading_delta=$(echo $get_fading | cut -d'|' -f3)
|
|
if [[ "$get_fading" ]]; then
|
|
sed -i -e "s/fade-in-step = .*/fade-in-step = $fading_in;/g" $dir/picom.conf
|
|
sed -i -e "s/fade-out-step = .*/fade-out-step = $fading_out;/g" $dir/picom.conf
|
|
sed -i -e "s/fade-delta = .*/fade-delta = $fading_delta;/g" $dir/picom.conf
|
|
fi
|
|
|
|
elif [[ $1 = '--disable-fading' ]]; then
|
|
sed -i -e "s/fading = .*/fading = false;/g" $dir/picom.conf
|
|
|
|
elif [[ $1 = '--enable-fading' ]]; then
|
|
sed -i -e "s/fading = .*/fading = true;/g" $dir/picom.conf
|
|
|
|
elif [[ $1 = '--reset-fading' ]]; then
|
|
sed -i -e "s/fade-in-step = .*/fade-in-step = 0.03;/g" $dir/picom.conf
|
|
sed -i -e "s/fade-out-step = .*/fade-out-step = 0.03;/g" $dir/picom.conf
|
|
sed -i -e "s/fade-delta = .*/fade-delta = 5;/g" $dir/picom.conf
|
|
|
|
##-- blur ---------------------
|
|
|
|
elif [[ $1 = '--enable-blur' ]]; then
|
|
sed -i -e "s/backend = .*/backend = \"glx\";/g" $dir/picom.conf
|
|
sed -i -e "s/method = .*/method = \"dual_kawase\";/g" $dir/picom.conf
|
|
sed -i -e "s/strength = .*/strength = 7;/g" $dir/picom.conf
|
|
|
|
elif [[ $1 = '--disable-blur' ]]; then
|
|
sed -i -e "s/method = .*/method = \"none\";/g" $dir/picom.conf
|
|
sed -i -e "s/strength = .*/strength = 0;/g" $dir/picom.conf
|
|
|
|
elif [[ $1 = '--update-blur' ]]; then
|
|
bstrength=$(yad --borders=10 --width='300' --title='Blur Strength' --button=Cancel:1 --button=Okay:0 --scale --value=7 --min-value=1 --max-value=20)
|
|
if [[ "$bstrength" ]]; then
|
|
sed -i -e "s/strength = .*/strength = $bstrength;/g" $dir/picom.conf
|
|
fi
|
|
|
|
##-- menu ---------------------
|
|
|
|
else
|
|
menuStart
|
|
if ! [[ $(pidof picom) ]]; then
|
|
menuItem 'Enable Compositor' "$0 --start"
|
|
else
|
|
menuSeparator 'Current Compositor'
|
|
if [[ `pacman -Q picom-jonaburg-git` ]]; then
|
|
menuItem "Jonaburg's fork of picom" "echo"
|
|
elif [[ `pacman -Q picom-ibhagwan-git` ]]; then
|
|
menuItem "ibhagwan's fork of picom" "echo"
|
|
elif [[ `pacman -Q picom` ]]; then
|
|
menuItem "Original picom from Arch Repo" "echo"
|
|
fi
|
|
menuSeparator 'Backend'
|
|
if [[ "$check_backend" != "glx" ]]; then
|
|
menuItem "Use 'glx' backend" "$0 --use-glx"
|
|
else
|
|
menuItem "Use 'xrender' backend" "$0 --use-xrender"
|
|
fi
|
|
menuSeparator 'Corners'
|
|
if [[ "$check_corners" != "0" ]]; then
|
|
menuItem 'Change Corner Radius' "$0 --corner-radius"
|
|
menuItem 'Disable Rounded Corners' "$0 --disable-corners"
|
|
else
|
|
menuItem 'Enable Rounded Corners' "$0 --corner-radius"
|
|
fi
|
|
if [[ `pacman -Q picom-jonaburg-git` || `pacman -Q picom-ibhagwan-git` ]]; then
|
|
menuSeparator 'Border'
|
|
if [[ "$check_border" != "0" ]]; then
|
|
menuItem 'Change Border Size' "$0 --border-size"
|
|
menuItem 'Disable Borders' "$0 --disable-borders"
|
|
else
|
|
menuItem 'Enable Borders' "$0 --border-size"
|
|
fi
|
|
fi
|
|
menuSeparator 'Shadow'
|
|
if [[ "$check_shadow" == "true" ]]; then
|
|
menuItem 'Modify Shadow Settings' "$0 --update-shadows"
|
|
menuItem 'Reset Shadow Settings' "$0 --reset-shadows"
|
|
menuItem 'Disable Client Shadows' "$0 --disable-shadows"
|
|
else
|
|
menuItem 'Enable Client Shadows' "$0 --enable-shadows"
|
|
fi
|
|
menuSeparator 'Fading'
|
|
if [[ "$check_fading" == "true" ]]; then
|
|
menuItem 'Modify Fading Settings' "$0 --update-fading"
|
|
menuItem 'Reset Fading Settings' "$0 --reset-fading"
|
|
menuItem 'Disable Fading' "$0 --disable-fading"
|
|
else
|
|
menuItem 'Enable Fading' "$0 --enable-fading"
|
|
fi
|
|
if [[ `pacman -Q picom-jonaburg-git` || `pacman -Q picom-ibhagwan-git` ]]; then
|
|
menuSeparator 'Blur'
|
|
if [[ "$check_blur" != "dual_kawase" ]]; then
|
|
menuItem 'Enable Blur Effect' "$0 --enable-blur"
|
|
else
|
|
menuItem 'Set Blur Strength' "$0 --update-blur"
|
|
menuItem 'Disable Blur Effect' "$0 --disable-blur"
|
|
fi
|
|
fi
|
|
menuSeparator 'Settings'
|
|
menuItem 'Restart Compositor' "$0 --restart"
|
|
menuItem 'Disable Compositor' "$0 --stop"
|
|
fi
|
|
menuSeparator
|
|
menuItem 'Edit Configuration File' "$0 --edit"
|
|
menuEnd
|
|
fi
|
|
|
|
exit 0
|