200 lines
7.0 KiB
Bash
200 lines
7.0 KiB
Bash
#!/bin/bash
|
|
DIRECTORY="$(readlink -f "$(dirname "$0")")"
|
|
|
|
source "${DIRECTORY}/api" || error "failed to source ${DIRECTORY}/api"
|
|
|
|
function error {
|
|
echo -e "\e[91m$1\e[39m"
|
|
exit 1
|
|
}
|
|
|
|
#ensure settings dir exists
|
|
if [ ! -d "${DIRECTORY}/data/settings" ];then
|
|
echo "creating settings directory"
|
|
mkdir -p "${DIRECTORY}/data/settings"
|
|
#create default files inside
|
|
echo '' > "${DIRECTORY}/data/settings/reinstall-after-update"
|
|
fi
|
|
|
|
#$1 is usually left blank. If it equals 'refresh', then empty settings will be created and then the script will exit.
|
|
if [ "$1" == 'refresh' ];then
|
|
#set default settings, if they don't exist
|
|
settings="$(ls "${DIRECTORY}/etc/setting-params" | tr '\n' '|')"
|
|
PREIFS="$IFS"
|
|
IFS='|'
|
|
for name in $settings
|
|
do
|
|
if [ ! -f "${DIRECTORY}/data/settings/${name}" ] || [ -z "$(cat "${DIRECTORY}/data/settings/${name}")" ];then
|
|
cat "${DIRECTORY}/etc/setting-params/${name}" | grep -v '#' | head -n1 > "${DIRECTORY}/data/settings/${name}"
|
|
fi
|
|
done
|
|
IFS="$PREIFS"
|
|
exit 0
|
|
|
|
elif [ "$1" == 'revert' ];then #If $1 equals 'revert', then overwrite all settings with the defaults and then the script will exit.
|
|
|
|
#overwrite all settings with the defaults
|
|
settings="$(ls "${DIRECTORY}/etc/setting-params" | tr '\n' '|')"
|
|
PREIFS="$IFS"
|
|
IFS='|'
|
|
for name in $settings
|
|
do
|
|
cat "${DIRECTORY}/etc/setting-params/${name}" | grep -v '#' | head -n1 > "${DIRECTORY}/data/settings/${name}"
|
|
done
|
|
IFS="$PREIFS"
|
|
exit 0
|
|
fi
|
|
|
|
if [ ! -f ~/.local/share/applications/Artian-apps-settings.desktop ];then
|
|
echo "Creating Settings menu button"
|
|
echo "[Desktop Entry]
|
|
Name=Artian-Apps Settings
|
|
Comment=Configure Artian-Apps or create an App
|
|
Exec=${DIRECTORY}/settings
|
|
Icon=${DIRECTORY}/icons/settings.png
|
|
Terminal=false
|
|
StartupWMClass=Artian-Apps-Settings
|
|
Type=Application
|
|
Categories=Settings;
|
|
StartupNotify=true" > ~/.local/share/applications/Artian-apps-settings.desktop
|
|
|
|
fi
|
|
|
|
exitloop=''
|
|
while [ -z $exitloop ];do
|
|
|
|
settings="$(ls "${DIRECTORY}/etc/setting-params" | tr '\n' '|')"
|
|
yadparams=()
|
|
tooltips=()
|
|
PREIFS="$IFS"
|
|
IFS='|'
|
|
|
|
# generate yad/xlunch themes based on system installed themes
|
|
# yad is compiled using gtk3 on all distros so only gtk3 themes are valid
|
|
|
|
theme_dirs=( /usr/share/themes ~/.local/share/themes ~/.themes )
|
|
# begin array with yad default theme
|
|
declare gtk3_themes=("default")
|
|
|
|
for td in "${theme_dirs[@]}"; do
|
|
for th in "$td"/*; do
|
|
[[ -d "$th" ]] || continue
|
|
thname=${th##*/}
|
|
[ $(ls "$th/gtk-3."* 2>/dev/null | wc -l ) -gt 0 ] && gtk3_themes+=("$thname")
|
|
done
|
|
done
|
|
gtk3_themes=( "${gtk3_themes[@]/#/yad-}" )
|
|
# add xlunch preset themes to the array
|
|
gtk3_themes+=( "xlunch-dark" )
|
|
gtk3_themes+=( "xlunch-dark-3d" )
|
|
gtk3_themes+=( "xlunch-light-3d" )
|
|
params=$( IFS=$'\n'; echo "${gtk3_themes[*]}" )
|
|
unset gtk3_themes
|
|
|
|
name="App List Style"
|
|
|
|
#create file if necessary
|
|
if [ ! -f "${DIRECTORY}/data/settings/${name}" ] || [ -z "$(cat "${DIRECTORY}/data/settings/${name}")" ];then
|
|
cat "${DIRECTORY}/etc/setting-params/${name}" | grep -v '#' | head -n1 > "${DIRECTORY}/data/settings/${name}"
|
|
fi
|
|
#get current setting
|
|
curval="$(cat "${DIRECTORY}/data/settings/${name}")"
|
|
|
|
#order params, with selected option first
|
|
params="$(echo "$params" | grep -x "$curval")
|
|
$(echo "$params" | grep -vx "$curval")"
|
|
|
|
# remove blank lines (like if the current selected option no longer exists) and format as one line output separated by !
|
|
params="$(echo "$params" | awk NF | tr '\n' '!')"
|
|
params="${params::-1}"
|
|
|
|
tooltip="Artian-Apps can display the apps as a compact list (yad), or as a group of larger icons. (xlunch)"
|
|
|
|
yadparams+=(--field=:CB "${params}")
|
|
tooltips+=(--field="${name}":!!"${tooltip}":BTN '')
|
|
|
|
unset name
|
|
unset tooltip
|
|
unset params
|
|
unset curval
|
|
|
|
for name in $settings
|
|
do
|
|
[ "${name}" == "App List Style" ] && continue
|
|
params="$(cat "${DIRECTORY}/etc/setting-params/${name}" | grep -v '#')"
|
|
|
|
#create file if necessary
|
|
if [ ! -f "${DIRECTORY}/data/settings/${name}" ] || [ -z "$(cat "${DIRECTORY}/data/settings/${name}")" ];then
|
|
cat "${DIRECTORY}/etc/setting-params/${name}" | grep -v '#' | head -n1 > "${DIRECTORY}/data/settings/${name}"
|
|
fi
|
|
#get current setting
|
|
curval="$(cat "${DIRECTORY}/data/settings/${name}")"
|
|
|
|
#order params, with selected option first
|
|
params="$(echo "$params" | grep -x "$curval")
|
|
$(echo "$params" | grep -vx "$curval")"
|
|
|
|
params="$(echo "$params" | tr '\n' '!')"
|
|
params="${params::-1}"
|
|
|
|
tooltip="$(cat "${DIRECTORY}/etc/setting-params/${name}" | grep '^#' | tr -d '#' | tr '\n' '\r')"
|
|
tooltip="${tooltip::-1}"
|
|
#echo "Params of ${name}: ${params}"
|
|
#echo "Tooltip of ${name}: ${tooltip}"
|
|
|
|
yadparams+=(--field=:CB "${params}")
|
|
tooltips+=(--field="${name}":!!"${tooltip}":BTN '')
|
|
done
|
|
IFS="$PREIFS"
|
|
|
|
output="$(yad --class Artian-Apps-Settings --name "Artian-Apps Settings" --center --title='Artian-Apps Settings' --width=310 --height=300 \
|
|
--form --separator='\n' --window-icon="${DIRECTORY}/icons/settings.png" --columns=2 \
|
|
"${tooltips[@]}" \
|
|
--field='Categories'!"${DIRECTORY}/icons/categories.png"!"Does an App belong in Editors instead of Tools? This lets you move it.":FBTN "bash -c '${DIRECTORY}/etc/categoryedit 1>&2'" \
|
|
--field='Log files'!"${DIRECTORY}/icons/log-file.png"!"View past installation logs. Useful for debugging, or to see what you installed yesterday.":FBTN "bash -c '${DIRECTORY}/etc/logviewer 1>&2'" \
|
|
--field='Multi-Install'!"${DIRECTORY}/icons/multi-select.png"!"Install multiple apps at the same time.":FBTN "bash -c '${DIRECTORY}/api multi_install_gui 1>&2'" \
|
|
"${yadparams[@]}" \
|
|
--field='New App'!"${DIRECTORY}/icons/create.png"!"Make your own app! It's pretty easy if you follow the instructions.":FBTN "bash -c '${DIRECTORY}/createapp 1>&2'" \
|
|
--field='Import App'!"${DIRECTORY}/icons/categories/Imported.png"!"Did someone else make an app but it's not on Artian-Apps yet? Import it here.":FBTN "bash -c '${DIRECTORY}/etc/import-app 1>&2'" \
|
|
--field='Multi-Uninstall'!"${DIRECTORY}/icons/multi-select.png"!"Uninstall multiple apps at the same time.":FBTN "bash -c '${DIRECTORY}/api multi_uninstall_gui 1>&2'" \
|
|
--button='Reset'!"${DIRECTORY}/icons/backup.png"!'Reset all settings to their defaults':2 \
|
|
--button=Cancel!"${DIRECTORY}/icons/exit.png":1 \
|
|
--button=Save!"${DIRECTORY}/icons/check.png":0 \
|
|
)"
|
|
|
|
button=$? #get exit code to determine which button was pressed
|
|
#exit if save was not clicked
|
|
[ $button -ne 0 ] && [ $button -ne 2 ] && exit 0
|
|
|
|
if [ $button -eq 2 ];then
|
|
output=''
|
|
"${0}" revert
|
|
else
|
|
exitloop=yes
|
|
fi
|
|
done
|
|
|
|
#remove empty lines from $output
|
|
output="$(echo "$output" | grep .)"
|
|
|
|
echo "Output: ${output}EOO"
|
|
|
|
settings="$(ls "${DIRECTORY}/etc/setting-params" | tr '\n' '|')"
|
|
|
|
settingnumber=1
|
|
|
|
PREIFS="$IFS"
|
|
IFS='|'
|
|
for name in $settings
|
|
do
|
|
curval="$(echo "$output" | sed -n "${settingnumber}p")"
|
|
|
|
echo "Setting '$name' to '$curval'"
|
|
echo "$curval" > "${DIRECTORY}/data/settings/${name}"
|
|
|
|
settingnumber=$((settingnumber + 1))
|
|
done
|
|
IFS="$PREIFS"
|
|
|
|
|