#!/bin/bash
## SparkyBonsai JWM Menu Maker bash script v 2.1
## published under GPLv2
## author mauros
## for SparkyBonsai GNU/Linux https://github.com/maurosh/SparkyBonsai
## Usage: save and chmod +x or register this script on your system and put into .jwmrc file
## the xml tag: "exec: menumaker"
## modules icon
icomod="user-bookmarks";
## modules name
namemod="DDog Tools";
## localization
lc="${LANG%_*}";
## Creating apps array
IFS=$'\n';
apparray=($(find /usr/share/applications/ -maxdepth 1 -name "*.desktop"));
## Fixing array
for i in "${!apparray[@]}"; do
NoDisplay=$(grep '^NoDisplay' ${apparray[$i]} | sed 's/^NoDisplay=//')
Terminal=$(grep '^Terminal' ${apparray[$i]} | sed 's/^Terminal=//')
if [[ "$NoDisplay" = "true" || "$Terminal" = "true" ]]; then
unset -v 'apparray[$i]';
fi
done
IFS=$'\n' appsorted=($(sort <<<"${apparray[*]}"))
apparray=("${appsorted[@]}");
unset appsorted;
unset IFS;
## Creating categories array
IFS=$'\n';
apparraylc=($(find /usr/share/desktop-directories -maxdepth 1 -name "*.directory"));
## Getting categories data
catarraylc=(hoo);
icoarraylc=();
for i in "${!apparraylc[@]}"; do
namarraylc="$(grep '^Name=' ${apparraylc[$i]} | head -1 | sed 's/^Name=//' | tail -1)";
devnamelc="$(grep 'Name\['$lc'\]=' ${apparraylc[$i]})";
devnamelc="${devnamelc##*=}";
icolc=( "$(grep '^Icon=' ${apparraylc[$i]} | sed 's/^Icon=//' | head -1)" );
if [[ -z "$devnamelc" ]]; then
devnamelc="$namarraylc";
fi
if [[ "$namarraylc" == *"Accessories"* ]]; then
catarraylc[1]="$devnamelc";
icoarraylc[1]="$icolc";
fi
if [[ "$namarraylc" == *"Education"* ]]; then
catarraylc[2]="$devnamelc";
icoarraylc[2]="$icolc";
fi
if [[ "$namarraylc" == *"Game"* ]]; then
catarraylc[3]="$devnamelc";
icoarraylc[3]="$icolc";
fi
if [[ "$namarraylc" == *"Graphics"* ]]; then
catarraylc[4]="$devnamelc";
icoarraylc[4]="$icolc";
fi
if [[ "$namarraylc" == *"Internet"* ]]; then
catarraylc[5]="$devnamelc";
icoarraylc[5]="$icolc";
fi
if [[ "$namarraylc" == *"Office"* ]]; then
catarraylc[6]="$devnamelc";
icoarraylc[6]="$icolc";
fi
if [[ "$namarraylc" == *"Other"* ]]; then
catarraylc[7]="$devnamelc";
icoarraylc[7]="$icolc";
fi
if [[ "$namarraylc" == *"Development"* || "$namarraylc" == *"Programming"* ]]; then
catarraylc[8]="$devnamelc";
icoarraylc[8]="$icolc";
fi
if [[ "$namarraylc" == *"Audio"* || "$namarraylc" == *"Video"* || "$namarraylc" == *"Player"* ]]; then
catarraylc[9]="$devnamelc";
icoarraylc[9]="$icolc";
fi
if [[ "$namarraylc" == *"System"* ]]; then
catarraylc[10]="$devnamelc";
icoarraylc[10]="$icolc";
fi
if [[ "$namarraylc" == *"Preferences"* ]]; then
catarraylc[11]="$devnamelc";
icoarraylc[11]="$icolc";
fi
if [[ "$namarraylc" == *"Science"* ]]; then
catarraylc[12]="$devnamelc";
icoarraylc[12]="$icolc";
fi
if [[ "$namarraylc" == *"Universal"* ]]; then
catarraylc[13]="$devnamelc";
icoarraylc[13]="$icolc";
fi
done
## Getting apps data
catarray=();
namarray=();
icoarray=();
exearray=();
for i in "${!apparray[@]}"; do
catarray+=( "$(grep '^Categories' ${apparray[$i]} | sed 's/^Categories=//')" );
devname="$(grep 'Name\['$lc'\]=' ${apparray[$i]})";
devname="${devname##*=}";
if [[ -z "$devname" ]]; then
namarray+=( "$(grep '^Name=' ${apparray[$i]} | head -1 | sed 's/^Name=//' | tail -1)" );
else
namarray+=( "$devname" );
fi
icoarray+=( "$(grep '^Icon=' ${apparray[$i]} | sed 's/^Icon=//' | head -1)" );
exearray+=( "$(grep '^Exec' ${apparray[$i]} | head -1 | sed 's/^Exec=//' | tail -1 | sed 's/%.//')" );
done
## Categories
for i in "${!apparray[@]}"; do
Categories=${catarray[$i]};
if [[ "$Categories" == *"Utility"* && "$Categories" != *"System"* && "$Categories" != *"Modul"* ]]; then
cacc="yes";
fi
if [[ "$Categories" == *"Education"* ]]; then
cedu="yes";
fi
if [[ "$Categories" == *"Game"* ]]; then
cgam="yes";
fi
if [[ "$Categories" == *"Graphics"* ]]; then
cgra="yes";
fi
if [[ "$Categories" == *"Network"* ]]; then
cnet="yes";
fi
if [[ "$Categories" == *"Office"* ]]; then
coff="yes";
fi
if [[ "$Categories" == *"Other"* ]]; then
coth="yes";
fi
if [[ "$Categories" == *"Development"* ]]; then
cdev="yes";
fi
if [[ "$Categories" == *"Audio"* || "$Categories" == *"Video"* || "$Categories" == *"Player"* ]]; then
caud="yes";
fi
if [[ "$Categories" == *"System"* || "$Categories" == *"Settings"* && "$Categories" != *"Modul"* ]]; then
csys="yes";
fi
if [[ "$Categories" == *"Preferences"* && "$Categories" != *"System"* ]]; then
cpre="yes";
fi
if [[ "$Categories" == *"Modul"* ]]; then
cmod="yes";
fi
if [[ "$Categories" == *"Universal"* && "$Categories" != *"System"* ]]; then
cuni="yes";
fi
if [[ "$Categories" == *"Science"* && "$Categories" != *"System"* ]]; then
csci="yes";
fi
done
## XML header
echo '';
echo '';
## Accessories Menu
if [[ "$cacc" = "yes" ]]; then
echo '';
fi
## Education Menu
if [[ "$cedu" = "yes" ]]; then
echo '';
fi
## Games Menu
if [[ "$cgam" = "yes" ]]; then
echo '';
fi
## Graphics Menu
if [[ "$cgra" = "yes" ]]; then
echo '';
fi
## Network Menu
if [[ "$cnet" = "yes" ]]; then
echo '';
fi
## Office Menu
if [[ "$coff" = "yes" ]]; then
echo '';
fi
## Other Menu
if [[ "$coth" = "yes" ]]; then
echo '';
fi
## Development Menu
if [[ "$cdev" = "yes" ]]; then
echo '';
fi
## AudioVideo Menu
if [[ "$caud" = "yes" ]]; then
echo '';
fi
## System Menu
if [[ "$csys" = "yes" ]]; then
echo '';
fi
## Preferences Menu
if [[ "$cpre" = "yes" ]]; then
echo '';
fi
## Modules Menu
if [[ "$cmod" = "yes" ]]; then
echo '';
fi
## Science Menu
if [[ "$cpre" = "yes" ]]; then
echo '';
fi
## Universal Menu
if [[ "$cpre" = "yes" ]]; then
echo '';
fi
## XML footer
unset apparray;
unset catarray;
unset namarray;
unset icoarray;
unset exearray;
unset catarraylc;
unset icoarraylc;
unset IFS;
echo '';