You can use --no-xinerama, in which case any image you specify will appear across the entirety of all screens. The only question then would be how would you combine all your images together to make one desktop background, in accordance with how you have your monitors setup...
The only thing that came to my mind was using ImageMagick, even though that would be pretty outlandish and convoluted. So, I decided to make it anyway... Here's the whole thing:
#!/bin/sh
AWK_XRANDR_PARSE='/ connected/ {
split($3,sizePos,"+")
split(sizePos[1],size,"x")
print size[1] "," size[2] "," sizePos[2] "," sizePos[3]
}'
# Fetches a wallpaper for the monitor of size $1x$2. $1 is the required width,
# and $2 is the required height.
wallpaper_file() {
# Use a case or string substitution to pick out any image files you fancy on
# your system... They must be printf'd.
printf "$HOME/.desktop"
}
# Writes any line whose $2nth column is equal to that of the first line.
# Columns are split by $1.
matching() {
SENTINEL="$([ "$#" -gt 2 ] && printf '%s' "$3" || printf 'sentinel')"
awk -F"$1" -v first="$SENTINEL" \
"{if (first == \"$SENTINEL\") first = \$$2; if (\$$2 == first) print}"
}
# Writes the value within the variable named "$1".
cat() {
printf '%s' "${!1}"
}
# Writes the $2nth column. Columns are split by $1.
nth() {
awk -F"$1" "{print \$$2}"
}
# This one variable assignment takes xrandr's output, parses it via awk, runs
# the wallpaper_file, takes it's output, and combines all that information into
# a list of tuples. Each item in the list represents a monitor, and the tuple
# is roughly equivalent to 'W,H,X,Y,F', where W is width, H is height, X is the
# X position, Y is the Y position, and F is the file of the image.
DISPLAYS="$(while read X Y REST; do
printf '%s,%s,%s,%s\n' "$X" "$Y" "$REST" "$(wallpaper_file "$X" "$Y")"
done < <(xrandr | awk "$AWK_XRANDR_PARSE" | \
awk -F',' '{print $1 " " $2 " " $3 "," $4}'))"
# This simply finds the monitor that is the farthest out in the X direction,
# and is the widest. It then combines the X position and the width of the
# monitor to find the absolute width of your desktop.
PLACEMENT_WIDTH="$(cat DISPLAYS | sort -rnt, -k3 | matching , 3)"
SIZE_WIDTH="$(cat PLACEMENT_WIDTH | sort -rnt, -k1 | head -n1)"
WIDTH="$(("$(cat SIZE_WIDTH | nth , 1)" + "$(cat SIZE_WIDTH | nth , 3)"))"
# Same goes on as above, but with the height and Y direction.
PLACEMENT_HEIGHT="$(cat DISPLAYS | sort -rnt, -k4 | matching , 4)"
SIZE_HEIGHT="$(cat PLACEMENT_HEIGHT | sort -rnt, -k2 | head -n1)"
HEIGHT="$(("$(cat SIZE_HEIGHT | nth , 2)" + "$(cat SIZE_HEIGHT | nth , 4)"))"
# Take all that information, and make a wallpaper file from it via imagemagick.
magick -size $WIDTH'x'$HEIGHT canvas:black \
$(cat DISPLAYS | awk -F',' '{print $5 " -geometry " $1 "x" $2 "+" $3 "+" $4 " -composite"}') \
/tmp/wallpaper.png
# Then set it as the background.
feh --bg-fill --no-xinerama /tmp/wallpaper.png
I published the whole script as a gist here, if you prefer.
I know I probably shouldn't have done it, but gosh darnit I did it anyway.