12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- cat /usr/local/bin/directory-thumbnailer
- #!/bin/bash
- IFS=$'\n\t'
- # not enough args
- if [ $# -lt 3 ]; then
- exit 1
- fi
- # extract args for execution
- size="$1"
- in="$2"
- out="$3"
- # pre-flight check that $in is not a home user folder (we don't want to modify those)
- if [ "$HOME" = "$(dirname $in)" ]; then
- exit 0
- fi
- # fine image files that we can extract
- # @todo: add support for video files
- files=()
- for f in "$(find "$in" -maxdepth 1 -type f -exec file {} \; | grep -o -P '^.+: \w+ image' | sort -n | head -4 | cut -d':' -f1)"; do
- files+=($f)
- done
- [ ${#files[*]} -gt 0 ] || exit 1
- # extract theme or use gnome as default
- config="${XDG_CONFIG_HOME:-$HOME/.config}/gtk-3.0/settings.ini"
- icon_theme="$(grep 'gtk-icon-theme-name' "$config" | sed 's/.*\s*=\s*//')"
- icon_theme="${icon_theme:-gnome}"
- # @todo: add behavior to try to get appropriate size first, else fallback to assumed largest/last
- folder_icon=$(find "/usr/share/icons/$icon_theme" -name "folder.*" | sort -d | tail -1)
- # check if folder icon exists
- # @todo: consider using known gnome folder icon as fallback
- if [ ! -f "$folder_icon" ]; then
- exit 1
- fi
- # generate the thumbnail
- convert -background none "$folder_icon" -resize $size <(montage -geometry "$(($size * 60 / 200))x$(($size * 60 / 300))+2+2" -alpha on -background none -tile 2 ${files[*]} png:-) -gravity center -composite "$out" 2>/dev/null
|