270 lines
6.7 KiB
Bash
270 lines
6.7 KiB
Bash
# Settings Library
|
|
|
|
# Load module
|
|
_getModules() {
|
|
clear
|
|
|
|
# Get path to parent folder to go back
|
|
back="$(dirname "$1")"
|
|
|
|
# Load module config
|
|
if [ -f $1/init.sh ]; then
|
|
source $1/init.sh
|
|
fi
|
|
|
|
# Load module config
|
|
if [ -f $1/config.sh ]; then
|
|
source $1/config.sh
|
|
else
|
|
echo "ERROR: config.sh doesn't exists in $1"
|
|
exit
|
|
fi
|
|
|
|
clickArr+=("/")
|
|
clickArr+=("$name")
|
|
echo "You are here:" ${clickArr[@]}
|
|
|
|
# Load module
|
|
if [ -f $1/module.sh ]; then
|
|
source $1/module.sh
|
|
else
|
|
echo "ERROR: module.sh doesn't exists in $1"
|
|
# exit 0
|
|
fi
|
|
|
|
# Read folder
|
|
modules=$(find $1 -maxdepth 1 -type d)
|
|
count=0
|
|
|
|
# Check if subfolders exists
|
|
for value in $modules
|
|
do
|
|
if [[ ! "$value" == "$1" ]]; then
|
|
# Check if custom version of module exists and skip original module
|
|
if [ ! -d "$value-custom" ]; then
|
|
((count++))
|
|
fi
|
|
fi
|
|
done
|
|
|
|
# Create Navigation
|
|
unset modulesArr
|
|
if [[ ! $count == 0 ]]; then
|
|
|
|
# Get modules folders
|
|
for value in $modules
|
|
do
|
|
if [[ ! "$value" == "$1" ]]; then
|
|
if [[ ! $value == *"-custom" ]]; then
|
|
if [ ! -d "$value-custom" ]; then
|
|
if [ -f $value/config.sh ]; then
|
|
source $value/config.sh
|
|
modulesArr+=("$order:$name:$value")
|
|
else
|
|
echo "ERROR: config.sh doesn't exists in $value"
|
|
exit
|
|
fi
|
|
else
|
|
if [ -f $value-custom/config.sh ]; then
|
|
source $value-custom/config.sh
|
|
modulesArr+=("$order:$name:$value-custom")
|
|
else
|
|
echo "ERROR: config.sh doesn't exists in $value-custom"
|
|
exit
|
|
fi
|
|
fi
|
|
fi
|
|
fi
|
|
done
|
|
# Sort array by order
|
|
IFS=$'\n' modulesArr=($(sort <<<"${modulesArr[*]}"))
|
|
unset nameList
|
|
unset pathList
|
|
|
|
# Output
|
|
for value in "${modulesArr[@]}"
|
|
do
|
|
name="$(cut -d':' -f2 <<<"$value")"
|
|
path="$(cut -d':' -f3 <<<"$value")"
|
|
nameList+=("$name")
|
|
pathList+=("$path")
|
|
done
|
|
if [[ "$back" == "$installFolder/settings" ]]; then
|
|
nameList+=("EXIT")
|
|
else
|
|
nameList+=("BACK")
|
|
fi
|
|
echo ""
|
|
selected=$(gum choose ${nameList[@]})
|
|
case $selected in
|
|
BACK)
|
|
_goBack
|
|
break;;
|
|
EXIT)
|
|
clear
|
|
exit
|
|
break;;
|
|
* )
|
|
|
|
;;
|
|
esac
|
|
if [ ! -z $selected ] ;then
|
|
for i in "${!nameList[@]}"; do
|
|
if [[ "${nameList[$i]}" = "${selected}" ]]; then
|
|
nameIndex="${i}"
|
|
fi
|
|
done
|
|
current="${pathList[$nameIndex]}"
|
|
_getModules "$current"
|
|
else
|
|
if [[ "$back" == "$installFolder/settings" ]]; then
|
|
clear
|
|
exit
|
|
else
|
|
_goBack
|
|
fi
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# _getConfSelector conf/monitor.conf conf/monitors/
|
|
_getConfSelector() {
|
|
cur=$(cat $installFolder/conf/$1)
|
|
echo "Folder: $installFolder/conf/$2"
|
|
echo "In use: ${cur##*/}"
|
|
echo ""
|
|
echo "Select a file to load (RETURN = Confirm, ESC = Cancel/Back):"
|
|
sel=$(gum file $installFolder/conf/$2)
|
|
if [ -z $sel ] ;then
|
|
_goBack
|
|
fi
|
|
echo "File ${sel##*/} selected."
|
|
echo ""
|
|
}
|
|
|
|
_getConfEditor() {
|
|
selected=$(gum choose "EXECUTE" "EDIT" "COPY" "DELETE" "CANCEL")
|
|
case $selected in
|
|
EXECUTE)
|
|
_writeConf $1 $2
|
|
break;;
|
|
EDIT)
|
|
vim $sel
|
|
sleep 1
|
|
_reloadModule
|
|
break;;
|
|
COPY)
|
|
echo "Define the new file name. Please use [a-zA-Z1-9_-]+.conf"
|
|
filename=$(gum input --value="custom-${sel##*/}" --placeholder "Enter your filename")
|
|
if [ -z $filename ] ;then
|
|
echo "ERROR: No filename specified."
|
|
else
|
|
if ! [[ $filename =~ ^[a-zA-Z1-9_-]+.conf ]]; then
|
|
echo "ERROR: Wrong filename format. Please use [a-zA-Z1-9_-]+.conf"
|
|
else
|
|
if [ -f $(dirname $sel)/$filename ] ;then
|
|
echo "ERROR: File already exists."
|
|
else
|
|
cp $sel $(dirname $sel)/$filename
|
|
_reloadModule
|
|
fi
|
|
fi
|
|
fi
|
|
_getConfEditor $1 $2
|
|
break;;
|
|
DELETE)
|
|
if gum confirm "Do you really want to delete the file ${sel##*/}?" ;then
|
|
rm $sel
|
|
_reloadModule
|
|
else
|
|
_getConfEditor $1 $2
|
|
fi
|
|
break;;
|
|
* )
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# _writeConf conf/monitor.conf $sel
|
|
_writeConf() {
|
|
if [ ! -z $2 ] ;then
|
|
sel=$(echo "$2" | sed "s+"\/home\/$USER"+~+")
|
|
echo "source = $sel" > $installFolder/conf/$1
|
|
fi
|
|
}
|
|
|
|
# _replaceInFile $startMarket $endMarker $customtext $targetFile
|
|
_replaceInFile() {
|
|
if grep -s "$1" $4 && grep -s "$2" $4 ;then
|
|
sed -i '/'"$1"'/,/'"$2"'/ {
|
|
//!d
|
|
/'"$1"'/a\
|
|
'"$3"'
|
|
}' $4
|
|
else
|
|
echo "ERROR: $1 and/or $2 not found in $4"
|
|
sleep 2
|
|
_goBack
|
|
fi
|
|
}
|
|
|
|
# Return the version of the hyprland-settings script
|
|
_getVersion() {
|
|
echo $version
|
|
}
|
|
|
|
# Write the header to a page
|
|
_getHeader() {
|
|
figlet "$1"
|
|
if [ ! -z "$2" ]; then
|
|
echo "by $2"
|
|
fi
|
|
echo ""
|
|
}
|
|
|
|
# Update the breadcrumb and opens parent page
|
|
_goBack() {
|
|
unset clickArr[-1]
|
|
unset clickArr[-1]
|
|
unset clickArr[-1]
|
|
unset clickArr[-1]
|
|
_getModules "$back"
|
|
}
|
|
|
|
_reloadModule() {
|
|
unset clickArr[-1]
|
|
unset clickArr[-1]
|
|
_getModules "$current"
|
|
}
|
|
|
|
# Replace the variables in a template and publish to location
|
|
_replaceByTemplate() {
|
|
template=$1
|
|
variables=$2
|
|
values=$3
|
|
publishto=$4
|
|
}
|
|
|
|
# Back Button
|
|
_getBackBtn() {
|
|
echo ""
|
|
gum choose "Back"
|
|
_goBack
|
|
}
|
|
|
|
_getBackRepeatBtn() {
|
|
echo ""
|
|
selected=$(gum choose "REPEAT" "BACK")
|
|
case $selected in
|
|
BACK)
|
|
_goBack
|
|
break;;
|
|
REPEAT)
|
|
_getModules "$current"
|
|
break;;
|
|
* )
|
|
|
|
;;
|
|
esac
|
|
}
|