#!/bin/bash # Copyright (c) 2015-2016 Keefer Rourke # # Permission is hereby granted, free of charge, to any person obtaining # a copy of this software and associated documentation files (the "Software"), # to deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # this script will update various icon symlinks based on your machine's # reported distribution and desktop environment # function declarations # formats text to lower and removes whitespace and non-alpha chars format() { name=$(awk '{print tolower($0)}' <<< $1) name=$(sed 's/\s+//g;s/[^a-z]//g'<<< $name) echo $name } # attempts to update distributor logos based on detected distro distromatch() { case $DISTRO in arch) ln -sf distributor-logo-archlinux.svg distributor-logo.svg ;; debian|raspbian) ln -sf distributor-logo-debian.svg distributor-logo.svg ;; elementaryos|elementary) ln -sf distributor-logo-elementaryos.svg distributor-logo.svg ;; fedora) ln -sf distributor-logo-fedora.svg distributor-logo.svg ;; gentoo) ln -sf distributor-logo-gentoo.svg distributor-logo.svg ;; korora) ln -sf distributor-logo-korora.svg distributor-logo.svg ;; linuxmint) ln -sf distributor-logo-linuxmint.svg distributor-logo.svg ;; mageia) ln -sf distributor-logo-mageia.svg distributor-logo.svg ;; manjaro) ln -sf distributor-logo-manjaro.svg distributor-logo.svg ;; nixos) ln -sf distributor-logo-nixos.svg distributor-logo.svg ;; opensuse) ln -sf distributor-logo-opensuse.svg distributor-logo.svg ;; rosa|rosafreshdesktop) ln -sf distributor-logo-rosa.svg distributor-logo.svg ;; solus) ln -sf distributor-logo-solus.svg distributor-logo.svg ;; ubuntu) ln -sf distributor-logo-ubuntu.svg distributor-logo.svg ;; *) return 1 ;; esac } # in case lsb_release detection fails, try /etc/os-release alt_distromatch() { local pattern="ID=arch:ID=opensuse:ID=raspbian:ID=ubuntu:ID=nixos:ID=solus:ID=rosa" local IFS=: distro_error=1 for i in $pattern; do if $(grep -wsq "$i" /etc/os-release); then DISTRO=${i##*=} distromatch distro_error=0 break fi done if [ $distro_error -eq 1 ]; then echo "Could not determine distribution logo." ln -sf distributor-logo-gnome.svg distributor-logo.svg fi } # define variables # set distributor logo based on distro detected through lsb_release DISTRO=$(format "$(lsb_release -si 2>/dev/null)") DE=$(format "$XDG_CURRENT_DESKTOP") distro_error=0 de_error=0 wd=$PWD # update icons for dark/light GTK themes read -p "Use icons for dark GTK+ themes? [y/N] " yn case $yn in [Yy]* ) rm "$wd/actions/22x22" "$wd/devices/scalable" "$wd/panel/16" \ "$wd/panel/24" "$wd/places/16x16" "$wd/status/scalable" ln -sfr "$wd/actions/22x22-dark" "$wd/actions/22x22" ln -sfr "$wd/devices/scalable-dark" "$wd/devices/scalable" ln -sfr "$wd/emblems/scalable/avatar-default-dark.svg" "$wd/emblems/scalable/avatar-default.svg" ln -sfr "$wd/places/16x16-dark" "$wd/places/16x16" echo "Updated theme to use icons for dark GTK+ themes." ;; * ) rm "$wd/actions/22x22" "$wd/devices/scalable" "$wd/panel/16" \ "$wd/panel/24" "$wd/places/16x16" "$wd/status/scalable" ln -sfr "$wd/actions/22x22-light" "$wd/actions/22x22" ln -sfr "$wd/devices/scalable-light" "$wd/devices/scalable" ln -sfr "$wd/emblems/scalable/avatar-default-light.svg" "$wd/emblems/scalable/avatar-default.svg" ln -sfr "$wd/places/16x16-light" "$wd/places/16x16" echo "Updated theme to use icons for light GTK+ themes." ;; esac read -p "Use icons for a dark coloured panel? [y/N] " yn case $yn in [Yy]* ) ln -sfr "$wd/panel/16-dark" "$wd/panel/16" ln -sfr "$wd/panel/24-dark" "$wd/panel/24" ln -sfr "$wd/status/scalable-dark" "$wd/status/scalable" echo "Updated theme to use dark icons for the panel." ;; * ) ln -sfr "$wd/panel/16-light" "$wd/panel/16" ln -sfr "$wd/panel/24-light" "$wd/panel/24" ln -sfr "$wd/status/scalable-light" "$wd/status/scalable" echo "Updated theme to use light icons for the panel." ;; esac # attempt to detect distribution and then update distributor logos cd "$wd/places/scalable" ! distromatch && alt_distromatch # prompt for desktop environment integration instead of distro read -p "Use distributor logo from desktop environment? [y/N] " yn case $yn in [Yy]* ) case $DE in budgie|budgiegnome) ln -sf distributor-logo-budgie.svg distributor-logo.svg ;; gnome) ln -sf distributor-logo-gnome.svg distributor-logo.svg ;; unity) ln -sf distributor-logo-unity.svg distributor-logo.svg ;; xfce) ln -sf distributor-logo-xfce.svg distributor-logo.svg ;; lxde) ln -sf distributor-logo-lxde.svg distributor-logo.svg ;; kde) ln -sf distributor-logo-kde.svg distributor-logo.svg ;; *) echo "Could not determine desktop environment... Using distribution logo." de_error=1 ;; esac ;; * ) if [ $distro_error -eq 0 ]; then echo "Using distribution logo." elif [ $distro_error -eq 1 ] || [ $de_error -eq 1 ]; then echo "Could not determine distributor logo, you may need to set this manually in places/scalable/" fi ;; esac ln -sf distributor-logo.svg start-here.svg # fixes potentially broken link cd "$wd" ln -sfr "$wd"/places/scalable/distributor-logo.svg "$wd"/apps/scalable/cs-desktop.svg ln -sfr "$wd"/places/scalable/distributor-logo.svg "$wd"/apps/scalable/applications-system.svg echo "Updated distributor logo." # update mimetypes based on distro and de cd "$wd"/mimetypes/scalable case $DISTRO in opensuse) ln -sf application-x-rpm-opensuse.svg application-x-rpm.svg ;; fedora) ln -sf application-x-rpm-fedora.svg application-x-rpm.svg ;; debian|raspbian) ln -sf application-x-deb-debian.svg application-x-deb.svg ;; ubuntu) ln -sf application-x-deb-ubuntu.svg application-x-deb.svg ;; linuxmint) ln -sf application-x-deb-linuxmint.svg application-x-deb.svg ln -sf application-x-desktop-linuxmint.svg application-x-desktop.svg ;; * ) ln -sf application-x-deb-debian.svg application-x-deb.svg ln -sf application-x-rpm-redhat.svg application-x-rpm.svg ;; esac echo "Updated package archive icons." case $DE in budgie|budgiegnome) ln -sf application-x-desktop-budgie.svg application-x-desktop.svg ;; gnome) ln -sf application-x-desktop-gnome.svg application-x-desktop.svg ;; unity) ln -sf application-x-desktop-unity.svg application-x-desktop.svg ;; lxde) ln -sf application-x-desktop-lxde.svg application-x-desktop.svg ;; xfce) ln -sf application-x-desktop-xfce.svg application-x-desktop.svg ;; kde) ln -sf application-x-desktop-kde.svg application-x-desktop.svg ;; esac echo "Updated desktop mimetype icons."