#!/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 ''; for i in "${!apparray[@]}"; do Categories=${catarray[$i]}; if [[ "$Categories" == *"Utility"* && "$Categories" != *"System"* && "$Categories" != *"Modul"* ]]; then echo ''${exearray[$i]}''; fi done echo ''; fi ## Education Menu if [[ "$cedu" = "yes" ]]; then echo ''; for i in "${!apparray[@]}"; do Categories=${catarray[$i]}; if [[ "$Categories" == *"Education"* ]]; then echo ''${exearray[$i]}''; fi done echo ''; fi ## Games Menu if [[ "$cgam" = "yes" ]]; then echo ''; for i in "${!apparray[@]}"; do Categories=${catarray[$i]}; if [[ "$Categories" == *"Game"* ]]; then echo ''${exearray[$i]}''; fi done echo ''; fi ## Graphics Menu if [[ "$cgra" = "yes" ]]; then echo ''; for i in "${!apparray[@]}"; do Categories=${catarray[$i]}; if [[ "$Categories" == *"Graphics"* ]]; then echo ''${exearray[$i]}''; fi done echo ''; fi ## Network Menu if [[ "$cnet" = "yes" ]]; then echo ''; for i in "${!apparray[@]}"; do Categories=${catarray[$i]}; if [[ "$Categories" == *"Network"* ]]; then echo ''${exearray[$i]}''; fi done echo ''; fi ## Office Menu if [[ "$coff" = "yes" ]]; then echo ''; for i in "${!apparray[@]}"; do Categories=${catarray[$i]}; if [[ "$Categories" == *"ffice"* ]]; then echo ''${exearray[$i]}''; fi done echo ''; fi ## Other Menu if [[ "$coth" = "yes" ]]; then echo ''; for i in "${!apparray[@]}"; do Categories=${catarray[$i]}; if [[ "$Categories" == *"Other"* ]]; then echo ''${exearray[$i]}''; fi done echo ''; fi ## Development Menu if [[ "$cdev" = "yes" ]]; then echo ''; for i in "${!apparray[@]}"; do Categories=${catarray[$i]}; if [[ "$Categories" == *"Development"* ]]; then echo ''${exearray[$i]}''; fi done echo ''; fi ## AudioVideo Menu if [[ "$caud" = "yes" ]]; then echo ''; for i in "${!apparray[@]}"; do Categories=${catarray[$i]}; if [[ "$Categories" == *"Audio"* || "$Categories" == *"Video"* || "$Categories" == *"Player"* ]]; then echo ''${exearray[$i]}''; fi done echo ''; fi ## System Menu if [[ "$csys" = "yes" ]]; then echo ''; for i in "${!apparray[@]}"; do Categories=${catarray[$i]}; if [[ "$Categories" == *"System"* && "$Categories" != *"Modul"* || "$Categories" == *"Settings"* && "$Categories" != *"Modul"* ]]; then echo ''${exearray[$i]}''; fi done echo ''; fi ## Preferences Menu if [[ "$cpre" = "yes" ]]; then echo ''; for i in "${!apparray[@]}"; do Categories=${catarray[$i]}; if [[ "$Categories" == *"System"* && "$Categories" != *"Modul"* || "$Categories" == *"Settings"* && "$Categories" != *"Modul"* ]]; then echo ''${exearray[$i]}''; fi done echo ''; fi ## Modules Menu if [[ "$cmod" = "yes" ]]; then echo ''; for i in "${!apparray[@]}"; do Categories=${catarray[$i]}; if [[ "$Categories" == *"Modul"* ]]; then echo ''${exearray[$i]}''; fi done echo ''; fi ## Science Menu if [[ "$cpre" = "yes" ]]; then echo ''; for i in "${!apparray[@]}"; do Categories=${catarray[$i]}; if [[ "$Categories" == *"System"* && "$Categories" != *"Modul"* || "$Categories" == *"Settings"* && "$Categories" != *"Modul"* ]]; then echo ''${exearray[$i]}''; fi done echo ''; fi ## Universal Menu if [[ "$cpre" = "yes" ]]; then echo ''; for i in "${!apparray[@]}"; do Categories=${catarray[$i]}; if [[ "$Categories" == *"System"* && "$Categories" != *"Modul"* || "$Categories" == *"Settings"* && "$Categories" != *"Modul"* ]]; then echo ''${exearray[$i]}''; fi done echo ''; fi ## XML footer unset apparray; unset catarray; unset namarray; unset icoarray; unset exearray; unset catarraylc; unset icoarraylc; unset IFS; echo '';