Files
illogical-impulse/early/.config/eww/scripts/appsearch_bash
T
2024-02-22 15:35:06 +07:00

146 lines
4.8 KiB
Bash
Executable File

#!/usr/bin/bash
IFS=$'\n'
entrynames=( $(cat 'scripts/cache/entrynames.txt' | fzf --filter="$1" | head -n 10) )
entries=( $(cat 'scripts/cache/entries.txt') )
addedNewActions=false
geticonof() {
clientclass=''
clientclass=$1
iconpath=''
# Get app icon
if [ -f "scripts/cache/$clientclass" ]; then
iconpath=$(cat scripts/cache/$clientclass)
if [ ! -f "${iconpath}" ]; then # Cache refresh if icon doesnt exist
iconpath=$(geticons -t "$(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g")" "$clientclass" | head -n 1)
echo "${iconpath}" > "scripts/cache/$clientclass"
fi
else
iconpath=$(geticons -t "$(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g")" "$clientclass" | head -n 1)
echo "${iconpath}" > "scripts/cache/$clientclass"
fi
if [[ ${iconpath} == "" ]]; then
# Retry with lowercase if icon not found
iconpath=$(geticons -t "$(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g")" $(echo "$clientclass" | tr '[:upper:]' '[:lower:]' | sed 's/\ /-/g') | head -n 1)
if [[ ! ${iconpath} = "" ]]; then
rm "scripts/cache/$clientclass"
echo "${iconpath}" > "scripts/cache/$clientclass"
else
newname=$(scripts/iconpatch $clientclass)
iconpath=$(geticons -t "$(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g")" "$newname" | head -n 1)
if [[ ! ${iconpath} = "" ]]; then
rm "scripts/cache/$clientclass"
echo "${iconpath}" > "scripts/cache/$clientclass"
else
# Fallback app icon, replace the path below to the fallback icon of your choice
# iconpath="/usr/share/icons/Win11-dark/mimes/48/application-x-executable.svg"
iconpath=$(geticons -t "$(gsettings get org.gnome.desktop.interface icon-theme | sed "s/'//g")" "application-x-executable" | head -n 1)
rm "scripts/cache/$clientclass"
echo "${iconpath}" > "scripts/cache/$clientclass"
fi
fi
fi
echo "$iconpath"
}
quiteSureNotMath() {
if [[ ${1:0:1} != "0" \
&& ${1:0:1} != "1" \
&& ${1:0:1} != "2" \
&& ${1:0:1} != "3" \
&& ${1:0:1} != "4" \
&& ${1:0:1} != "5" \
&& ${1:0:1} != "6" \
&& ${1:0:1} != "7" \
&& ${1:0:1} != "8" \
&& ${1:0:1} != "9" \
&& ${1:0:1} != "(" \
&& ${1:0:1} != ")" \
]]; then
echo 'true'
else
echo 'false'
fi
}
# Search inits: math
if [[ "$1" == "--calculator" ]]; then
echo -n '[{"name":"Calculator - Type something!","icon":"images/svg/dark/calculator.svg","exec":"wl-copy \"Clipboard contents ;)\""}]'
eww update winsearch_actions='{"name":"Calculator - Type something!","icon":"images/svg/dark/calculator.svg","exec":"wl-copy \"Clipboard contents ;)\""}'
eww update winsearch_actions_type='Math result'
addedNewActions=true
exit 0
fi
# Quick commands
if [[ "$1" == ">"* ]]; then
cd ~/.config/eww
if [[ "$1" == ">load"* ]]; then
searching=$(echo "$1" | sed 's/>load //g' | sed 's/>load//g')
profilenames=( $(ls css/savedcolors/ | grep .txt | sed 's/_iconcolor_//g' | sed 's/.txt//g' | fzf --filter="$searching") )
echo -n '['
for x in "${!profilenames[@]}"; do
if [ "$x" != "0" ]; then
printf ','
fi
profilejson='{"name": "'"${profilenames[x]}"'", "exec": ">load '"${profilenames[x]}"'"}'
if (( x == 0 )); then
eww update winsearch_actions="$profilejson"
eww update winsearch_actions_type='Color theme'
addedNewActions=true
fi
echo -n "$profilejson"
done
echo -n ']'
else
echo '[]'
fi
exit 0
fi
# Do math
if [[ $(quiteSureNotMath "$1") == "false" ]]; then
mathAns=$(qalc $1 | head -n 1)
mathAns="${mathAns#*= }"
mathAns="${mathAns#*≈ }"
if [[ "$mathAns" == *"error"* || "$mathAns" == *"warning"* ]]; then
echo '[{"name":"Invalid math","icon":"images/svg/dark/calculator.svg","exec":"wl-copy \"Clipboard contents ;)\""}]'
exit 0
else
ansjson='{"name": "'"$mathAns"'","icon":"images/svg/dark/calculator.svg","exec": "wl-copy \"'"$mathAns"'\""}'
eww update winsearch_actions="$ansjson"
eww update winsearch_actions_type='Math result'
addedNewActions=true
echo '['"$ansjson"']'
fi
exit 0
fi
# Application search
printf '['
for x in "${!entrynames[@]}"; do
if [ "$x" != "0" ]; then
printf ','
fi
appjson=$(echo $entries | gojq -c -M '."'"${entrynames[x]}"'"')
if (( x == 0 )); then
eww update winsearch_actions="$appjson"
eww update winsearch_actions_type='Application'
addedNewActions=true
fi
# iconname=$(echo "$appjson" | gojq -r -c -M '.icon')
# appjson=$(echo "$appjson" | gojq '.icon = "'$(geticonof "$iconname")'"')
echo -n "$appjson"
done
printf ']'
if [[ "$addedNewActions" == "false" ]]; then
eww update winsearch_actions='{"name":"'"$1"'","icon":"images/svg/dark/protocol.svg","exec":"wl-copy \"Clipboard contents ;)\""}'
eww update winsearch_actions_type='Run command'
fi