mirror of
https://github.com/femtofox/femtofox.git
synced 2026-10-26 19:02:00 -04:00
update menu system
This commit is contained in:
parent
d9a55bb579
commit
f73673dc5e
2 changed files with 163 additions and 133 deletions
|
|
@ -0,0 +1,163 @@
|
|||
#!/bin/bash
|
||||
|
||||
export NCURSES_NO_UTF8_ACS=1 # prevents weirdness over tty
|
||||
|
||||
if [[ $EUID -ne 0 ]]; then
|
||||
echo "This script must be run as root."
|
||||
echo "Try \`sudo femto-config\`."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
# Function to handle Wi-Fi settings
|
||||
wifi_settings() {
|
||||
wpa_supplicant_conf="/etc/wpa_supplicant/wpa_supplicant.conf"
|
||||
while true; do
|
||||
local option=""
|
||||
option=$(dialog --menu "Wifi settings" 15 40 4 \
|
||||
1 "View wifi settings" \
|
||||
2 "Change wifi settings" \
|
||||
3 "Restart wifi" \
|
||||
4 "Back to Main Menu" 3>&1 1>&2 2>&3)
|
||||
|
||||
exit_status=$? # This line checks the exit status of the dialog command
|
||||
if [ $exit_status -ne 0 ]; then # Exit the loop if the user selects "Cancel" or closes the dialog
|
||||
break
|
||||
fi
|
||||
|
||||
case $option in
|
||||
1)
|
||||
wifi_country=$(grep -m 1 "^country=" "$wpa_supplicant_conf" | cut -d '=' -f 2)
|
||||
wifi_ssid=$(grep -m 1 '^\s*ssid=' "$wpa_supplicant_conf" | cut -d '"' -f 2)
|
||||
wifi_psk=$(grep -m 1 '^\s*psk=' "$wpa_supplicant_conf" | cut -d '"' -f 2)
|
||||
if [ "$(cat /root/.portduino/default/prefs/config.proto | protoc --decode_raw | awk '/4 {/, /}/ {if ($1 == "1:") print $2}')" -eq 1 ]; then
|
||||
mesh_wifi_status="on"
|
||||
else
|
||||
mesh_wifi_status="off"
|
||||
fi
|
||||
dialog --title "Wifi settings" --msgbox "SSID: $wifi_ssid\nPassword: $wifi_psk\nCountry: $wifi_country\nMeshtastic wifi setting: $mesh_wifi_status" 10 40
|
||||
;;
|
||||
2)
|
||||
local wifi_ssid=""
|
||||
local wifi_psk=""
|
||||
local wifi_country=""
|
||||
wifi_ssid=$(dialog --title "Wifi settings" --inputbox "Enter Wi-Fi SSID:" 8 40 3>&1 1>&2 2>&3)
|
||||
wifi_psk=$(dialog --title "Wifi settings" --inputbox "Enter Wi-Fi Password:" 8 40 3>&1 1>&2 2>&3)
|
||||
wifi_country=$(dialog --title "Wifi settings" --inputbox "Enter Country Code (e.g., US, DE) - optional:" 8 40 3>&1 1>&2 2>&3)
|
||||
cmd="femto-wifi-config.sh -s \"$wifi_ssid\" -p \"$wifi_psk\""
|
||||
[ -n "$wifi_country" ] && cmd="$cmd -c \"$wifi_country\""
|
||||
echo $cmd
|
||||
exit
|
||||
eval $cmd
|
||||
dialog --title "Wifi settings" --msgbox "Wi-Fi Settings Saved:\nSSID: $wifi_ssid\nPassword: $wifi_psk\nCountry: $wifi_country\nMeshtastic wifi setting set to ON" 10 40
|
||||
;;
|
||||
3)
|
||||
femto-wifi-config.sh -r
|
||||
;;
|
||||
4)
|
||||
return
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
# Function to handle timezone settings
|
||||
|
||||
# Function to select and set the time zone
|
||||
set_timezone() {
|
||||
local selected_timezone
|
||||
local timezones
|
||||
|
||||
# Fetch available time zones
|
||||
timezones=$(timedatectl list-timezones)
|
||||
if [[ -z "$timezones" ]]; then
|
||||
dialog --msgbox "Failed to retrieve time zones. Ensure 'timedatectl' is installed and functional." 8 50
|
||||
return
|
||||
fi
|
||||
|
||||
# Build options for dialog menu
|
||||
local options=()
|
||||
while IFS= read -r timezone; do
|
||||
options+=("$timezone" "$timezone")
|
||||
done <<< "$timezones"
|
||||
|
||||
# Convert options array to string
|
||||
options_str=$(printf '%s\n' "${options[@]}")
|
||||
|
||||
# Show timezone selection menu
|
||||
selected_timezone=$(dialog --title "Select Time Zone" --menu "Choose a time zone:" 20 60 10 $(printf "%s " "${options[@]}") 3>&1 1>&2 2>&3)
|
||||
exit_status=$?
|
||||
if [[ $exit_status -eq 0 && -n "$selected_timezone" ]]; then
|
||||
# Set the selected time zone
|
||||
if timedatectl set-timezone "$selected_timezone"; then
|
||||
dialog --msgbox "Time zone set to $selected_timezone successfully." 8 40
|
||||
else
|
||||
dialog --msgbox "Failed to set the time zone. Please try again." 8 40
|
||||
fi
|
||||
else
|
||||
dialog --msgbox "No time zone selected. Returning to menu." 8 40
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to handle Meshtastic CLI settings
|
||||
misc_settings() {
|
||||
local option=""
|
||||
option=$(dialog --menu "Meshtastic CLI Options" 15 40 4 \
|
||||
1 "Set system timezone" \
|
||||
2 "blah" \
|
||||
3 "blah" \
|
||||
4 "Back to Main Menu" 3>&1 1>&2 2>&3)
|
||||
|
||||
exit_status=$? # This line checks the exit status of the dialog command
|
||||
if [ $exit_status -ne 0 ]; then # Exit the loop if the user selects "Cancel" or closes the dialog
|
||||
break
|
||||
fi
|
||||
|
||||
case $option in
|
||||
1)
|
||||
set_timezone
|
||||
;;
|
||||
2)
|
||||
local channel=""
|
||||
channel=$(dialog --inputbox "Enter channel ID:" 8 40 3>&1 1>&2 2>&3)
|
||||
dialog --msgbox "Channel ID set to: $channel" 8 40
|
||||
;;
|
||||
3)
|
||||
dialog --msgbox "Node info retrieved successfully!" 8 40
|
||||
;;
|
||||
4)
|
||||
return
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
# Main menu
|
||||
while true; do
|
||||
choice=$(dialog --menu "Femtofox Config" 15 40 5 \
|
||||
1 "Wi-Fi" \
|
||||
2 "Meshtasticd" \
|
||||
3 "Misc" \
|
||||
4 "Install third party apps" \
|
||||
5 "Run OEM luckfox-config" \
|
||||
6 "Help" \
|
||||
7 "Exit" 3>&1 1>&2 2>&3)
|
||||
|
||||
exit_status=$? # This line checks the exit status of the dialog command
|
||||
|
||||
if [ $exit_status -ne 0 ]; then # Exit the loop if the user selects "Cancel" or closes the dialog
|
||||
break
|
||||
fi
|
||||
|
||||
case $choice in
|
||||
1) wifi_settings ;;
|
||||
2) meshtasticd_settings ;;
|
||||
3) misc_settings ;;
|
||||
4) 3rd_party ;;
|
||||
5) luckfox-config ;;
|
||||
6) femto_help ;;
|
||||
7) break ;;
|
||||
*) dialog --msgbox "Invalid choice, please try again." 8 40 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
|
|
@ -1,133 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Function to handle Wi-Fi settings
|
||||
wifi_settings() {
|
||||
|
||||
local option=""
|
||||
option=$(dialog --menu "Wifi settings" 15 40 4 \
|
||||
1 "View wifi settings" \
|
||||
2 "Change wifi settings" \
|
||||
3 "Back to Main Menu" 3>&1 1>&2 2>&3)
|
||||
|
||||
case $option in
|
||||
1)
|
||||
local name=""
|
||||
name=$(dialog --inputbox "Enter device name:" 8 40 3>&1 1>&2 2>&3)
|
||||
dialog --msgbox "Device name set to: $name" 8 40
|
||||
;;
|
||||
2)
|
||||
local wpa_supplicant_conf="/etc/wpa_supplicant/wpa_supplicant.conf"
|
||||
local wifi_ssid=""
|
||||
local wifi_psk=""
|
||||
local wifi_country=""
|
||||
wifi_ssid=$(dialog --title "Wifi settings" --inputbox "Enter Wi-Fi SSID:" 8 40 3>&1 1>&2 2>&3)
|
||||
wifi_psk=$(dialog --title "Wifi settings" --passwordbox "Enter Wi-Fi Password:" 8 40 3>&1 1>&2 2>&3)
|
||||
wifi_country=$(dialog --title "Wifi settings" --inputbox "Enter Country Code (e.g., US, DE):" 8 40 3>&1 1>&2 2>&3)
|
||||
sed -i "/country=/s/\".*\"/\"$wifi_country\"/" "$wpa_supplicant_conf"
|
||||
sed -i "/ssid=/s/\".*\"/\"$wifi_ssid\"/" "$wpa_supplicant_conf"
|
||||
sed -i "/psk=/s/\".*\"/\"$wifi_psk\"/" "$wpa_supplicant_conf"
|
||||
systemctl restart wpa_supplicant
|
||||
wpa_cli -i wlan0 reconfigure
|
||||
echo "wpa_supplicant.conf updated and wifi restarted. Enabling Meshtastic wifi setting."
|
||||
timeout 30s dhclient -v
|
||||
updatemeshtastic.sh "--set network.wifi_enabled true" 10 "USB config" #| tee -a /tmp/femtofox-config.log
|
||||
if [ $? -eq 1 ]; then
|
||||
echo "Update of Meshtastic FAILED."
|
||||
else
|
||||
echo "Updated Meshtastic successfully."
|
||||
fi
|
||||
dialog --title "Wifi settings" --msgbox "Wi-Fi Settings Saved:\nSSID: $wifi_ssid\nPassword: (hidden)\nCountry: $wifi_country\nMeshtastic wifi setting set to ON" 10 40
|
||||
;;
|
||||
3)
|
||||
return
|
||||
;;
|
||||
esac
|
||||
|
||||
}
|
||||
|
||||
# Function to handle region settings
|
||||
region_settings() {
|
||||
local region=""
|
||||
region=$(dialog --inputbox "Enter Region Code (e.g., US, EU):" 8 40 3>&1 1>&2 2>&3)
|
||||
|
||||
dialog --msgbox "Region set to: $region" 8 40
|
||||
}
|
||||
|
||||
# Function to handle timezone settings
|
||||
timezone_settings() {
|
||||
local timezone=""
|
||||
timezone=$(dialog --inputbox "Enter Timezone (e.g., America/Los_Angeles):" 8 40 3>&1 1>&2 2>&3)
|
||||
|
||||
dialog --msgbox "Timezone set to: $timezone" 8 40
|
||||
}
|
||||
|
||||
# Function to handle Meshtastic CLI settings
|
||||
meshtastic_settings() {
|
||||
local option=""
|
||||
option=$(dialog --menu "Meshtastic CLI Options" 15 40 4 \
|
||||
1 "Set device name" \
|
||||
2 "Configure channel" \
|
||||
3 "Check node info" \
|
||||
4 "Back to Main Menu" 3>&1 1>&2 2>&3)
|
||||
|
||||
case $option in
|
||||
1)
|
||||
local name=""
|
||||
name=$(dialog --inputbox "Enter device name:" 8 40 3>&1 1>&2 2>&3)
|
||||
dialog --msgbox "Device name set to: $name" 8 40
|
||||
;;
|
||||
2)
|
||||
local channel=""
|
||||
channel=$(dialog --inputbox "Enter channel ID:" 8 40 3>&1 1>&2 2>&3)
|
||||
dialog --msgbox "Channel ID set to: $channel" 8 40
|
||||
;;
|
||||
3)
|
||||
dialog --msgbox "Node info retrieved successfully!" 8 40
|
||||
;;
|
||||
4)
|
||||
return
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
export NCURSES_NO_UTF8_ACS=1 # prevents weirdness over tty
|
||||
|
||||
if [[ $EUID -ne 0 ]]; then
|
||||
echo "This script must be run as root."
|
||||
echo "Try \`sudo femto-config\`."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
# Main menu
|
||||
while true; do
|
||||
choice=$(dialog --menu "Femtofox Config" 15 40 5 \
|
||||
1 "Wi-Fi" \
|
||||
2 "Meshtasticd" \
|
||||
3 "Misc" \
|
||||
4 "Install third party apps" \
|
||||
5 "Run OEM luckfox-config" \
|
||||
6 "Help" \
|
||||
7 "Exit" 3>&1 1>&2 2>&3)
|
||||
|
||||
exit_status=$? # This line checks the exit status of the dialog command
|
||||
|
||||
if [ $exit_status -ne 0 ]; then # Exit the loop if the user selects "Cancel" or closes the dialog
|
||||
break
|
||||
fi
|
||||
|
||||
case $choice in
|
||||
1) wifi_settings ;;
|
||||
2) meshtasticd_settings ;;
|
||||
3) misc_settings ;;
|
||||
4) 3rd_party ;;
|
||||
5) luckfox-config ;;
|
||||
6) femto_help ;;
|
||||
7) break ;;
|
||||
*) dialog --msgbox "Invalid choice, please try again." 8 40 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
clear
|
||||
echo "Goodbye!"
|
||||
Loading…
Add table
Add a link
Reference in a new issue