Add Centralized omarchy CLI with Version Flag and Help Menu (#116)

* Add main CLI interface for Omarchy

Introduces the omarchy script, providing a command-line interface with options for current version, update, and waybar configuration refresh. Includes help documentation.

* Add really cool Omarchy ASCII art to help menu in cli

* Refactor Omarchy CLI to include a TUI menu with system, theme, and tools options.

* Add .desktop for Omarchy TUI

* Make omarchy script executable

* Refactor omarchy cli and add new theme tools

* Add help menu
This commit is contained in:
Noah Penza
2025-07-16 10:29:00 +10:00
committed by GitHub
parent a649779d81
commit 11406ecc79
2 changed files with 209 additions and 0 deletions

View File

@ -0,0 +1,10 @@
[Desktop Entry]
Version=1.0
Type=Application
Name=Omarchy
Comment=Omarchy TUI
Exec=alacritty --class=Omarchy --title=Omarchy -e bash -c '$HOME/.local/share/omarchy/bin/omarchy'
Icon=Arch
Terminal=false
Categories=System;Utility;
StartupNotify=false

199
bin/omarchy Executable file
View File

@ -0,0 +1,199 @@
#!/bin/bash
# omarchy: Main TUI menu for Omarchy tools
# Usage: omarchy
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
NC='\033[0m'
BIN_DIR="$(dirname "$0")"
OMARCHY_ASCII_SHOWN=0
show_ascii_art() {
cat <<'EOF'
▄██████▄ ▄▄▄▄███▄▄▄▄ ▄████████ ▄████████ ▄████████ ▄█ █▄ ▄██ ▄
███ ███ ▄██▀▀▀███▀▀▀██▄ ███ ███ ███ ███ ███ ███ ███ ███ ███ ██▄
███ ███ ███ ███ ███ ███ ███ ███ ███ ███ █▀ ███ ███ ███▄▄▄███
███ ███ ███ ███ ███ ███ ███ ▄███▄▄▄▄██▀ ███ ▄███▄▄▄▄███▄▄ ▀▀▀▀▀▀███
███ ███ ███ ███ ███ ▀███████████ ▀▀███▀▀▀▀▀ ███ ▀▀███▀▀▀▀███▀ ▄██ ███
███ ███ ███ ███ ███ ███ ███ ▀███████████ ███ █▄ ███ ███ ███ ███
███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███
▀██████▀ ▀█ ███ █▀ ███ █▀ ███ ███ ████████▀ ███ █▀ ▀█████▀
███ ███
EOF
}
show_help() {
cat <<EOF
Omarchy CLI - Usage:
omarchy [command]
Available commands:
omarchy Launch the Omarchy TUI menu
-v, --version, version Show Omarchy version
-h, --help, help Show this help menu
update Update Omarchy
refresh-waybar Refresh waybar
theme-install <git-url> Install a theme from a git repo
theme-remove <theme-name> Remove a theme by name
EOF
}
show_version() {
BLUE='\033[0;34m'
NC='\033[0m'
(
cd ~/.local/share/omarchy 2>/dev/null
tag=$(git describe --tags --abbrev=0 2>/dev/null)
echo -e "${BLUE}Omarchy Version:${NC} $tag"
)
}
install_theme_prompt() {
local url
url=$(gum input --placeholder="Git repo URL for theme" --header="Enter theme git repo URL:") || theme_menu
if [[ -n "$url" ]]; then
"$BIN_DIR/omarchy-theme-install" "$url"
fi
theme_menu
}
remove_theme_prompt() {
local theme
theme=$(gum input --placeholder="Theme name" --header="Enter the theme name to remove:") || theme_menu
if [[ -n "$theme" ]]; then
"$BIN_DIR/omarchy-theme-remove" "$theme"
fi
theme_menu
}
# Menu functions
show_tui_menu() {
local columns choice
columns=$(tput cols 2>/dev/null || echo 80)
if [[ $OMARCHY_ASCII_SHOWN -eq 0 ]]; then
if [[ $columns -ge 100 ]]; then
echo
show_ascii_art
else
echo "Omarchy"
fi
echo
OMARCHY_ASCII_SHOWN=1
fi
local main_menu=("System" "Theme" "Tools" "Exit")
choice=$(printf "%s\n" "${main_menu[@]}" | gum choose --header="Select a category:") || exit 0
case "$choice" in
System) system_menu ;;
Theme) theme_menu ;;
Tools) tools_menu ;;
Exit) exit 0 ;;
esac
}
system_menu() {
local menu=("Version" "Update" "Refresh Waybar" "Back")
local commands=(
"show_version"
"$BIN_DIR/omarchy-update"
"$BIN_DIR/omarchy-refresh-waybar"
"show_tui_menu"
)
local choice
choice=$(printf "%s\n" "${menu[@]}" | gum choose --header="System:") || show_tui_menu
for i in "${!menu[@]}"; do
if [[ "${menu[$i]}" == "$choice" ]]; then
if [[ "$choice" == "Back" ]]; then
show_tui_menu
else
if [[ "${commands[$i]}" == "show_version" ]]; then
show_version
else
eval "${commands[$i]}"
fi
fi
break
fi
done
}
theme_menu() {
local menu=("Switch Theme" "Install Theme" "Remove Theme" "Back")
local commands=(
"$BIN_DIR/omarchy-theme-menu"
"install_theme_prompt"
"remove_theme_prompt"
"show_tui_menu"
)
local choice
choice=$(printf "%s\n" "${menu[@]}" | gum choose --header="Theme:") || show_tui_menu
for i in "${!menu[@]}"; do
if [[ "${menu[$i]}" == "$choice" ]]; then
if [[ "$choice" == "Back" ]]; then
show_tui_menu
else
eval "${commands[$i]}"
fi
break
fi
done
}
tools_menu() {
local menu=("Setup Fingerprint" "Sync Applications" "Back")
local commands=(
"$BIN_DIR/omarchy-fingerprint-setup"
"$BIN_DIR/omarchy-sync-applications"
"show_tui_menu"
)
local choice
choice=$(printf "%s\n" "${menu[@]}" | gum choose --header="Tools:") || show_tui_menu
for i in "${!menu[@]}"; do
if [[ "${menu[$i]}" == "$choice" ]]; then
if [[ "$choice" == "Back" ]]; then
show_tui_menu
else
eval "${commands[$i]}"
fi
break
fi
done
}
if [[ $# -eq 0 ]]; then
show_tui_menu
exit 0
fi
case "$1" in
-v|--version|version)
show_version
;;
-h|--help|help)
show_help
;;
update)
echo -e "${BLUE}🔄 Updating Omarchy...${NC}"
"$BIN_DIR/omarchy-update"
;;
refresh-waybar)
echo -e "${BLUE}🔄 Refreshing waybar...${NC}"
"$BIN_DIR/omarchy-refresh-waybar"
;;
theme-install)
"$BIN_DIR/omarchy-theme-install" "${@:2}"
;;
theme-remove)
"$BIN_DIR/omarchy-theme-remove" "${@:2}"
;;
*)
echo -e "${RED}Unknown command: $1${NC}"
show_help
exit 1
;;
esac