#!/bin/bash export PATH="$HOME/.local/share/omarchy/bin:$PATH" menu() { local prompt="$1" local options="$2" local extra="$3" local preselect="$4" read -r -a args <<<"$extra" if [[ -n "$preselect" ]]; then local index index=$(echo -e "$options" | grep -nxF "$preselect" | cut -d: -f1) if [[ -n "$index" ]]; then args+=("-a" "$index") fi fi echo -e "$options" | walker --dmenu --theme dmenu_250 -p "$prompt…" "${args[@]}" } terminal() { alacritty --class Omarchy -e $1 } present_terminal() { alacritty --class Omarchy -e bash -c "omarchy-show-logo; eval \"$1\"; omarchy-show-done;" } edit_in_nvim() { notify-send "Editing config file" "$1" alacritty -e nvim "$1" } open_web() { setsid chromium --new-window --app="$1" & } install() { present_terminal "echo 'Installing $1...'; yay -Sy --noconfirm $2" } install_and_launch() { present_terminal "echo 'Installing $1...'; yay -Sy --noconfirm $2 && setsid gtk-launch $3" } install_font() { present_terminal "echo 'Installing $1...'; yay -Sy --noconfirm --needed $2 && sleep 2 && omarchy-font-set '$3'" } show_learn_menu() { case $(menu "Learn" " Keybindings\n Omarchy\n Hyprland\n󰣇 Arch\n Neovim\n󱆃 Bash") in *Keybindings*) omarchy-menu-keybindings ;; *Omarchy*) open_web "https://manuals.omamix.org/2/the-omarchy-manual" ;; *Hyprland*) open_web "https://wiki.hypr.land/" ;; *Arch*) open_web "https://wiki.archlinux.org/title/Main_page" ;; *Bash*) open_web "https://devhints.io/bash" ;; *Neovim*) open_web "https://www.lazyvim.org/keymaps" ;; *) show_main_menu ;; esac } show_style_menu() { case $(menu "Style" "󰸌 Theme\n Font\n Background") in *Theme*) show_theme_menu ;; *Font*) show_font_menu ;; *Background*) omarchy-theme-bg-next ;; *) show_main_menu ;; esac } show_theme_menu() { theme=$(menu "Theme" "$(omarchy-theme-list)" "" "$(omarchy-theme-current)") if [[ "$theme" == "CNCLD" || -z "$theme" ]]; then show_main_menu else omarchy-theme-set "$theme" fi } show_font_menu() { theme=$(menu "Font" "$(omarchy-font-list)" "-w 350" "$(omarchy-font-current)") if [[ "$theme" == "CNCLD" || -z "$theme" ]]; then show_main_menu else omarchy-font-set "$theme" fi } show_capture_menu() { case $(menu "Capture" " Screenshot\n Screenrecord\n󰃉 Color") in *Screenshot*) show_screenshot_menu ;; *Screenrecord*) show_screenrecord_menu ;; *Color*) pkill hyprpicker || hyprpicker -a ;; *) show_main_menu ;; esac } show_screenshot_menu() { case $(menu "Screenshot" " Region\n Window\n Display") in *Region*) omarchy-cmd-screenshot ;; *Window*) omarchy-cmd-screenshot window ;; *Display*) omarchy-cmd-screenshot output ;; *) show_capture_menu ;; esac } show_screenrecord_menu() { case $(menu "Screenrecord" " Region\n Display") in *Region*) omarchy-cmd-screenrecord ;; *Display*) omarchy-cmd-screenrecord output ;; *) show_capture_menu ;; esac } show_toggle_menu() { case $(menu "Toggle" "󱄄 Screensaver\n󰔎 Nightlight\n󱫖 Idle Lock\n󰍜 Top Bar") in *Screensaver*) omarchy-launch-screensaver ;; *Nightlight*) omarchy-toggle-nightlight ;; *Idle*) omarchy-toggle-idle ;; *Bar*) pkill -SIGUSR1 waybar ;; *) show_main_menu ;; esac } show_setup_menu() { local options=" Audio\n Wifi\n󰂯 Bluetooth\n󱐋 Power Profile\n󰍹 Monitors" [ -f ~/.config/hypr/bindings.conf ] && options="$options\n Keybindings" [ -f ~/.config/hypr/input.conf ] && options="$options\n Input" options="$options\n Config\n󰈷 Fingerprint\n Fido2" case $(menu "Setup" "$options") in *Audio*) alacritty --class=Wiremix -e wiremix ;; *Wifi*) alacritty --class=Impala -e impala ;; *Bluetooth*) blueberry ;; *Power*) show_setup_power_menu ;; *Monitors*) edit_in_nvim ~/.config/hypr/monitors.conf ;; *Keybindings*) edit_in_nvim ~/.config/hypr/bindings.conf ;; *Input*) edit_in_nvim ~/.config/hypr/input.conf ;; *Config*) show_setup_config_menu ;; *Fingerprint*) present_terminal omarchy-setup-fingerprint ;; *Fido2*) present_terminal omarchy-setup-fido2 ;; *) show_main_menu ;; esac } show_setup_power_menu() { profile=$(menu "Power Profile" "$(omarchy-powerprofiles-list)" "" "$(powerprofilesctl get)") if [[ "$profile" == "CNCLD" || -z "$profile" ]]; then show_main_menu else powerprofilesctl set "$profile" fi } show_setup_config_menu() { case $(menu "Setup" " Hyprland\n Hypridle\n Hyprlock\n Hyprsunset\n Swayosd\n󰌧 Walker\n󰍜 Waybar\n󰞅 XCompose") in *Hyprland*) edit_in_nvim ~/.config/hypr/hyprland.conf ;; *Hypridle*) edit_in_nvim ~/.config/hypr/hypridle.conf && omarchy-restart-hypridle ;; *Hyprlock*) edit_in_nvim ~/.config/hypr/hyprlock.conf ;; *Hyprsunset*) edit_in_nvim ~/.config/hypr/hyprsunset.conf && omarchy-restart-hyprsunset ;; *Swayosd*) edit_in_nvim ~/.config/swayosd/config.toml && omarchy-restart-swayosd ;; *Walker*) edit_in_nvim ~/.config/walker/config.toml && omarchy-restart-walker ;; *Waybar*) edit_in_nvim ~/.config/waybar/config.jsonc && omarchy-restart-waybar ;; *XCompose*) edit_in_nvim ~/.XCompose && omarchy-restart-xcompose ;; *) show_main_menu ;; esac } show_install_menu() { case $(menu "Install" "󰣇 Package\n Web App\n Service\n Style\n󰵮 Development\n Editor\n󱚤 AI\n Gaming") in *Package*) terminal omarchy-pkg-install ;; *Web*) present_terminal omarchy-webapp-install ;; *Service*) show_install_service_menu ;; *Style*) show_install_style_menu ;; *Development*) show_install_development_menu ;; *Editor*) show_install_editor_menu ;; *AI*) show_install_ai_menu ;; *Gaming*) show_install_gaming_menu ;; *) show_main_menu ;; esac } show_install_service_menu() { case $(menu "Install" " Dropbox\n Tailscale") in *Dropbox*) present_terminal omarchy-install-dropbox ;; *Tailscale*) present_terminal omarchy-install-tailscale ;; *) show_install_menu ;; esac } show_install_editor_menu() { case $(menu "Install" " VSCode\n Cursor\n Zed\n Sublime Text\n Helix") in *VSCode*) install_and_launch "VSCode" "visual-studio-code-bin" "code" ;; *Cursor*) install_and_launch "Cursor" "cursor-bin" "cursor" ;; *Zed*) install_and_launch "Zed" "zed" "dev.zed.Zed" ;; *Sublime*) install_and_launch "Sublime Text" "sublime-text-4" "sublime_text" ;; *Helix*) install "Helix" "helix" ;; *) show_install_menu ;; esac } show_install_ai_menu() { case $(menu "Install" "󱚤 Claude Code\n󱚤 Gemini\n󱚤 LM Studio\n󱚤 Ollama\n󱚤 Crush\n󱚤 opencode") in *Claude*) install "Claude Code" "claude-code" ;; *Gemini*) install "Gemini" "gemini-cli-bin" ;; *Studio*) install "LM Studio" "lmstudio" ;; *Ollama*) install "Ollama" "ollama" ;; *Crush*) install "Crush" "crush-bin" ;; *opencode*) install "opencode" "opencode-bin" ;; *) show_install_menu ;; esac } show_install_gaming_menu() { case $(menu "Install" " Steam\n RetroArch\n󰍳 Minecraft") in *Steam*) present_terminal omarchy-install-steam ;; *RetroArch*) install_and_launch "RetroArch" "retroarch retroarch-assets libretro libretro-fbneo" "com.libretro.RetroArch.desktop" ;; *Minecraft*) install_and_launch "Minecraft" "minecraft-launcher" "minecraft-launcher" ;; *) show_install_menu ;; esac } show_install_style_menu() { case $(menu "Install" "󰸌 Theme\n Background\n Font") in *Theme*) present_terminal omarchy-theme-install ;; *Background*) nautilus ~/.config/omarchy/current/theme/backgrounds ;; *Font*) show_install_font_menu ;; *) show_install_menu ;; esac } show_install_font_menu() { case $(menu "Install" " Meslo LG Mono\n Fira Code\n Victor Code\n Bistream Vera Mono" "-w 350") in *Meslo*) install_font "Meslo LG Mono" "ttf-meslo-nerd" "MesloLGL Nerd Font" ;; *Fira*) install_font "Fira Code" "ttf-firacode-nerd" "FiraCode Nerd Font" ;; *Victor*) install_font "Victor Code" "ttf-victor-mono-nerd" "VictorMono Nerd Font" ;; *Bistream*) install_font "Bistream Vera Code" "ttf-bitstream-vera-mono-nerd" "BitstromWera Nerd Font" ;; *) show_install_menu ;; esac } show_install_development_menu() { case $(menu "Install" "󰫏 Ruby on Rails\n Docker DB\n JavaScript\n Go\n PHP\n Python\n Elixir\n Zig\n Rust\n Java\n .NET\n OCaml") in *Rails*) present_terminal "omarchy-install-dev-env ruby" ;; *Docker*) present_terminal omarchy-install-docker-dbs ;; *JavaScript*) show_install_javascript_menu ;; *Go*) present_terminal "omarchy-install-dev-env go" ;; *PHP*) show_install_php_menu ;; *Python*) present_terminal "omarchy-install-dev-env python" ;; *Elixir*) present_terminal "omarchy-install-dev-env elixir" ;; *Zig*) present_terminal "omarchy-install-dev-env zig" ;; *Rust*) present_terminal "omarchy-install-dev-env rust" ;; *Java*) present_terminal "omarchy-install-dev-env java" ;; *NET*) present_terminal "omarchy-install-dev-env dotnet" ;; *OCaml*) present_terminal "omarchy-install-dev-env ocaml" ;; *) show_install_menu ;; esac } show_install_javascript_menu() { case $(menu "Install" " Node.js\n Bun\n Deno") in *Node*) present_terminal "omarchy-install-dev-env node" ;; *Bun*) present_terminal "omarchy-install-dev-env bun" ;; *Deno*) present_terminal "omarchy-install-dev-env deno" ;; *) show_install_development_menu ;; esac } show_install_php_menu() { case $(menu "Install" " PHP\n Laravel\n Symfony") in *PHP*) present_terminal "omarchy-install-dev-env php" ;; *Laravel*) present_terminal "omarchy-install-dev-env laravel" ;; *Symfony*) present_terminal "omarchy-install-dev-env symfony" ;; *) show_install_development_menu ;; esac } show_remove_menu() { case $(menu "Remove" "󰣇 Package\n Web App\n󰸌 Theme\n󰈷 Fingerprint\n Fido2") in *Package*) terminal omarchy-pkg-remove ;; *Web*) present_terminal omarchy-webapp-remove ;; *Theme*) present_terminal omarchy-theme-remove ;; *Fingerprint*) present_terminal "omarchy-setup-fingerprint --remove" ;; *Fido2*) present_terminal "omarchy-setup-fido2 --remove" ;; *) show_main_menu ;; esac } show_update_menu() { case $(menu "Update" "󰣇 Omarchy\n Config\n󰸌 Themes\n Process\n Timezone") in *Omarchy*) present_terminal omarchy-update ;; *Config*) show_update_config_menu ;; *Themes*) present_terminal omarchy-theme-update ;; *Process*) show_update_process_menu ;; *Timezone*) omarchy-cmd-tzupdate ;; *) show_main_menu ;; esac } show_update_process_menu() { case $(menu "Restart" " Hypridle\n Hyprsunset\n Swayosd\n󰌧 Walker\n󰍜 Waybar") in *Hypridle*) omarchy-restart-hypridle ;; *Hyprsunset*) omarchy-restart-hyprsunset ;; *Swayosd*) omarchy-restart-swayosd ;; *Walker*) omarchy-restart-walker ;; *Waybar*) omarchy-restart-waybar ;; *) show_main_menu ;; esac } show_update_config_menu() { case $(menu "Use default config" " Hyprland\n Hypridle\n Hyprlock\n Hyprsunset\n󱣴 Plymouth\n Swayosd\n󰌧 Walker\n󰍜 Waybar") in *Hyprland*) present_terminal omarchy-refresh-hyprland ;; *Hypridle*) present_terminal omarchy-refresh-hypridle ;; *Hyprlock*) present_terminal omarchy-refresh-hyprlock ;; *Hyprsunset*) present_terminal omarchy-refresh-hyprsunset ;; *Plymouth*) present_terminal omarchy-refresh-plymouth ;; *Swayosd*) present_terminal omarchy-refresh-swayosd ;; *Walker*) present_terminal omarchy-refresh-walker ;; *Waybar*) present_terminal omarchy-refresh-waybar ;; *) show_main_menu ;; esac } show_system_menu() { case $(menu "System" " Lock\n󰤄 Suspend\n Relaunch\n󰜉 Restart\n󰐥 Shutdown") in *Lock*) omarchy-lock-screen ;; *Suspend*) systemctl suspend ;; *Relaunch*) uwsm stop ;; *Restart*) systemctl reboot ;; *Shutdown*) systemctl poweroff ;; *) show_main_menu ;; esac } show_main_menu() { go_to_menu "$(menu "Go" "󰀻 Apps\n󰧑 Learn\n Capture\n󰔎 Toggle\n Style\n Setup\n󰉉 Install\n󰭌 Remove\n Update\n About\n System")" } go_to_menu() { case "${1,,}" in *apps*) walker -p "Launch…" ;; *learn*) show_learn_menu ;; *style*) show_style_menu ;; *theme*) show_theme_menu ;; *capture*) show_capture_menu ;; *screenshot*) show_screenshot_menu ;; *screenrecord*) show_screenrecord_menu ;; *toggle*) show_toggle_menu ;; *setup*) show_setup_menu ;; *install*) show_install_menu ;; *remove*) show_remove_menu ;; *update*) show_update_menu ;; *system*) show_system_menu ;; *about*) gtk-launch About.desktop ;; esac } if [[ -n "$1" ]]; then go_to_menu "$1" else show_main_menu fi