Pywal integration with wallpaper-spmenu15 Oct 2023 14:59
Home All

Pywal integration with wallpaper-spmenu

This wiki article goes through Pywal integration with wallpaper-spmenu, a tool used to set wallpapers on X or Wayland using spmenu (hence why it's on this wiki). It also assumes that all your software is set up to use Pywal. It will not be covered here.

Before you can do this, you must run wallpaper-spmenu once, to create the wallpaperrc configuration file. This file is located in ~/.config/wallpaper-spmenu/wallpaperrc by default. If the file exists you can continue.

What we want to do is append some extra lines to the set_wallpaper.sh script. This script is the script that sets the wallpaper, and is usually autostarted by your window manager, if you've set it up to be autostarted.

Creating a post_write_script() hook function

Open the config file up in your favorite text editor. You need to add a post_write_script() function to this file. This function as the name implies executes whenever the set_wallpaper.sh has been changed. A simple example function might look like this:

post_write_script() {
cat << EOF >> "$WALLPAPER_CONFIG_DIR/set_wallpaper.sh"
wal -nqi "$1"
}

This function simply adds wal -nqi "$1" to it. $1 refers to the first argument, which is going to be the path to the wallpaper that was set. I would probably add some other things to this script, such as deleting the Pywal cache before wal -nqi "$1".

If you want to replicate the behaviour of the old speedwm-swal script, you might want your function to look like this:

post_write_script() {
cat << EOF >> "$WALLPAPER_CONFIG_DIR/set_wallpaper.sh"

rm -rf "$HOME/.cache/wal"
xrdb -remove
wal -nqi "$1"

xrdb ~/.cache/wal/colors.Xresources

command -v libspeedwm > /dev/null && \
pidof speedwm > /dev/null && \
libspeedwm --perform core_wm_reload

$WALLPAPER_CONFIG_DIR/postrun.sh
EOF

command -v speedwm > /dev/null && \
    pidof speedwm > /dev/null && \
    speedwm -s "Loading"
}

It should be noted that some of this is speedwm specific, and as such should be deleted if you're using a different window manager/compositor.

startpage integration

If you're using startpage, and wish to copy the wallpaper, you'll need to copy the script for your chosen web browser to ~/.config/wallpaper-spmenu and rename it to postrun.sh.

Then add $WALLPAPER_CONFIG_DIR/postrun.sh to your post_write_script() function before the EOF.

NOTE: The script assumes that the startpage index is located at ~/.config/startpage/index.html. If it isn't, you MUST change the PREFIX variable in the script.

Do note that older versions of the startpage may set CWAL to $HOME/.config/speedwm/swal/CurrentWallpaper. If this is the case then you'll want to change it to $HOME/.config/wallpaper-spmenu/currentwallpaper.

speedwm dynamic reloading integration

To reload colors automatically, you should add xrdb ~/.cache/wal/colors.Xresources and libspeedwm libspeedwm --perform core_wm_reload to the file. The libspeedwm line simply signals to speedwm that it should attempt to reload .Xresources. The xrdb line loads the Pywal colors, and must therefore be added before the libspeedwm line.