#!/bin/bash # This file is part of IconToaster # and it's AGPLv3 licensed. desktopsearch () { cat /usr/share/applications/*.desktop | perl -ne '/^Icon=(?:-|\w|\.)+$/ and print' | sed s/Icon=// } iconsearch () { local icon_pack=$1 if [ -z $icon_pack ]; then echo "IconToaster requires an icon pack as an argument." 1>&2 exit 1; fi for icon in $(find ~/.icons/$icon_pack -name '*.png'); do if [[ -f "${icon}" ]]; then icon=$(basename ${icon} .png) echo ${icon} fi done } compare_desktop_and_icons() { local icon_pack=$1 if [ -z $icon_pack ]; then echo "IconToaster requires an icon pack as an argument." 1>&2 exit 1; fi perl <(cat <<'EOF' use v5.30.0; use strict; use warnings; use Term::ANSIColor; $SIG{INT} = sub { color_wrapper('reset'); }; sub color_wrapper { print color(shift) if -t STDOUT || $ENV{TOASTER_COLOR}; } color_wrapper('yellow'); say 'This is IconToaster'; color_wrapper('reset'); my $desktop_search_file = $ARGV[0]; my $icon_search_file = $ARGV[1]; my %desktop_relation; open my $desktop_filehandle, '<', $desktop_search_file; while (my $line = <$desktop_filehandle>) { chomp $line; $desktop_relation{$line} = 0; } close $desktop_filehandle; open my $icon_filehandle, '<', $icon_search_file; color_wrapper('blue'); say << 'EOS'; In both your icon pack and system: ------------- EOS color_wrapper('reset'); while (my $line = <$icon_filehandle>) { chomp $line; say $line; $desktop_relation{$line} = 1; } close $icon_filehandle; color_wrapper('red'); say << 'EOS'; Missing (In your system and not in your icon pack): ------------- EOS color_wrapper('reset'); for my $key (keys %desktop_relation) { unless ($desktop_relation{$key}) { say $key; } } color_wrapper('green'); say << 'EOS'; Unused icons from your icon pack: ------------- EOS color_wrapper('reset'); for my $key (keys %desktop_relation) { if ($desktop_relation{$key}) { say $key; } } EOF ) <(desktopsearch) <(iconsearch $icon_pack | sort | uniq) }