IconToaster/functions.sh

106 lines
2.0 KiB
Bash

#!/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)
}