diff --git a/install.sh b/install.sh index 54b6971a..a6539833 100755 --- a/install.sh +++ b/install.sh @@ -142,17 +142,24 @@ install() { ln -sf status status@2x ) - # Only the folder icons (apps, places) change with the accent color, so the - # other directories are identical to the default theme of the same scheme and - # color. Link them instead of keeping a full copy per accent variant. This is - # skipped when the default theme isn't installed (e.g. a single -t variant). - if [[ "${theme}" != '' && "${color}" != '' ]]; then - local BASE_DIR="${dest}/${name}${scheme}${color}" - if [[ -d "${BASE_DIR}" ]]; then + # Only the folder icons (apps, places) change with the scheme and accent + # color. Every other directory is identical for all variants of the same + # light/dark color, so link them to the default theme instead of keeping a + # full copy per variant. Prefer the global default (covers -s all), fall back + # to the scheme default (covers a single scheme), and skip linking when no + # default is present so a standalone -t variant still installs in full. + if [[ "${color}" != '' ]]; then + local base= + if [[ ( "${theme}" != '' || "${scheme}" != '' ) && -d "${dest}/${name}${color}" ]]; then + base="${name}${color}" + elif [[ "${theme}" != '' && -d "${dest}/${name}${scheme}${color}" ]]; then + base="${name}${scheme}${color}" + fi + if [[ -n "${base}" ]]; then for dir in actions categories devices emblems mimetypes status; do if [[ -d "${THEME_DIR}/${dir}" && ! -L "${THEME_DIR}/${dir}" ]]; then rm -rf "${THEME_DIR}/${dir}" - ln -sf "../${name}${scheme}${color}/${dir}" "${THEME_DIR}/${dir}" + ln -sf "../${base}/${dir}" "${THEME_DIR}/${dir}" fi done fi