Implemented TUI control center using gum. Added to systemPackages and rofi System menu. Verified: V1. Pending: V3 visual check.
168 lines
5.6 KiB
Bash
168 lines
5.6 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# Nomarchy Control Center — TUI frontend over nomarchy-theme-sync and tools
|
|
# Uses charmbracelet/gum for rendering.
|
|
|
|
trap 'exit 0' SIGINT
|
|
|
|
function get_state() {
|
|
nomarchy-theme-sync get "$1" 2>/dev/null || echo ""
|
|
}
|
|
|
|
function set_state() {
|
|
nomarchy-theme-sync --quiet set "$1" "$2" --no-switch
|
|
}
|
|
|
|
function first_boot() {
|
|
gum style --border normal --margin "1" --padding "1 2" --border-foreground 212 "Welcome to Nomarchy!"
|
|
|
|
echo "Pick a Theme Preset:"
|
|
themes=$(nomarchy-theme-sync list)
|
|
chosen_theme=$(printf "%s" "$themes" | gum choose)
|
|
if [ -n "$chosen_theme" ]; then
|
|
echo "Applying theme $chosen_theme..."
|
|
nomarchy-theme-sync apply "$chosen_theme"
|
|
fi
|
|
|
|
if gum confirm "Enable auto-commit for settings?"; then
|
|
set_state "settings.autoCommit" "true"
|
|
else
|
|
set_state "settings.autoCommit" "false"
|
|
fi
|
|
|
|
if command -v nomarchy-autotimezone >/dev/null 2>&1; then
|
|
if gum confirm "Enable automatic timezone detection?"; then
|
|
set_state "settings.autoTimezone" "true"
|
|
else
|
|
set_state "settings.autoTimezone" "false"
|
|
fi
|
|
fi
|
|
|
|
gum style --foreground 212 "First boot configuration complete!"
|
|
echo "You can always change these later in the Control Center."
|
|
read -r -n 1 -s -p "Press any key to exit..."
|
|
echo
|
|
}
|
|
|
|
function main_menu() {
|
|
while true; do
|
|
choice=$(gum choose "Appearance" "System Toggles" "Health (Doctor)" "Rollback" "Exit")
|
|
case "$choice" in
|
|
"Appearance") appearance_menu ;;
|
|
"System Toggles") toggles_menu ;;
|
|
"Health (Doctor)")
|
|
if command -v nomarchy-doctor >/dev/null 2>&1; then
|
|
nomarchy-doctor || true
|
|
else
|
|
echo "nomarchy-doctor not found."
|
|
fi
|
|
echo
|
|
read -r -n 1 -s -p "Press any key to return..."
|
|
echo
|
|
;;
|
|
"Rollback")
|
|
gens=$(home-manager generations 2>/dev/null | head -10)
|
|
if [ -z "$gens" ]; then
|
|
echo "No Home Manager generations found."
|
|
else
|
|
printf "%s\n" "$gens" | awk '{ printf "Desktop gen %s — %s %s%s\n", $5, $1, $2, (NR==1 ? " (current)" : "") }' > /tmp/nomarchy-gens
|
|
sel=$(gum choose < /tmp/nomarchy-gens || true)
|
|
if [ -n "$sel" ]; then
|
|
num=${sel#Desktop gen }
|
|
num=${num%% *}
|
|
path=$(printf "%s\n" "$gens" | awk -v n="$num" '$5 == n { print $7 }')
|
|
if [ -x "$path/activate" ]; then
|
|
echo "Activating Home Manager generation $num..."
|
|
"$path/activate"
|
|
echo "Desktop rolled back to generation $num."
|
|
else
|
|
echo "Generation $num not found."
|
|
fi
|
|
fi
|
|
fi
|
|
echo
|
|
read -r -n 1 -s -p "Press any key to return..."
|
|
echo
|
|
;;
|
|
"Exit"|*) break ;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
function appearance_menu() {
|
|
while true; do
|
|
choice=$(gum choose "Pick Theme" "Toggle Blur" "Set Gaps" "Back")
|
|
case "$choice" in
|
|
"Pick Theme")
|
|
themes=$(nomarchy-theme-sync list)
|
|
chosen=$(printf "%s" "$themes" | gum choose)
|
|
if [ -n "$chosen" ]; then
|
|
nomarchy-theme-sync apply "$chosen"
|
|
fi
|
|
;;
|
|
"Toggle Blur")
|
|
blur=$(get_state "ui.blur")
|
|
if [ "$blur" = "true" ]; then
|
|
set_state "ui.blur" "false"
|
|
else
|
|
set_state "ui.blur" "true"
|
|
fi
|
|
;;
|
|
"Set Gaps")
|
|
gaps=$(gum input --prompt "Enter gaps in pixels: " --placeholder "$(get_state ui.gapsOut)")
|
|
if [ -n "$gaps" ]; then
|
|
set_state "ui.gapsOut" "$gaps"
|
|
fi
|
|
;;
|
|
"Back"|*) break ;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
function toggles_menu() {
|
|
while true; do
|
|
choice=$(gum choose "Auto-commit" "Auto-timezone" "Night Light" "Back")
|
|
case "$choice" in
|
|
"Auto-commit")
|
|
cur=$(get_state "settings.autoCommit")
|
|
if [ "$cur" = "true" ]; then
|
|
set_state "settings.autoCommit" "false"
|
|
echo "Auto-commit disabled."
|
|
else
|
|
set_state "settings.autoCommit" "true"
|
|
echo "Auto-commit enabled."
|
|
fi
|
|
sleep 1
|
|
;;
|
|
"Auto-timezone")
|
|
cur=$(get_state "settings.autoTimezone")
|
|
if [ "$cur" = "true" ]; then
|
|
set_state "settings.autoTimezone" "false"
|
|
echo "Auto-timezone disabled."
|
|
else
|
|
set_state "settings.autoTimezone" "true"
|
|
echo "Auto-timezone enabled."
|
|
fi
|
|
sleep 1
|
|
;;
|
|
"Night Light")
|
|
if command -v nomarchy-nightlight >/dev/null 2>&1; then
|
|
nomarchy-nightlight toggle
|
|
sleep 1
|
|
else
|
|
echo "nomarchy-nightlight not found."
|
|
sleep 1
|
|
fi
|
|
;;
|
|
"Back"|*) break ;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
if [ "${1:-}" = "--first-boot" ]; then
|
|
first_boot
|
|
else
|
|
main_menu
|
|
fi
|