mirror of
https://github.com/basecamp/omarchy.git
synced 2025-07-27 12:19:24 +00:00
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:
10
applications/omarchy.desktop
Normal file
10
applications/omarchy.desktop
Normal 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
199
bin/omarchy
Executable 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
|
Reference in New Issue
Block a user