From 7e84755c75f540ddd0fc39fc58ae00115a55413c Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Mon, 4 Aug 2025 19:44:42 +0200 Subject: [PATCH] Extract theme-list and theme-set so they can be used more easily in any menu --- bin/omarchy-theme-list | 21 +++++++++++++++++++++ bin/omarchy-theme-menu | 31 ++----------------------------- bin/omarchy-theme-set | 4 ++-- 3 files changed, 25 insertions(+), 31 deletions(-) create mode 100755 bin/omarchy-theme-list diff --git a/bin/omarchy-theme-list b/bin/omarchy-theme-list new file mode 100755 index 00000000..91f5252c --- /dev/null +++ b/bin/omarchy-theme-list @@ -0,0 +1,21 @@ +#!/bin/bash + +THEMES_DIR="$HOME/.config/omarchy/themes/" +CURRENT_THEME_DIR="$HOME/.config/omarchy/current/theme" +CURRENT_THEME_NAME=$(basename "$(realpath "$CURRENT_THEME_DIR")") + +# Build themes list with pretty display names +mapfile -t themes < <( + find "$THEMES_DIR" -mindepth 1 -maxdepth 1 \( -type d -o -type l \) | sort | while read -r path; do + filename=$(basename "$path") + display_name=$(echo "$filename" | sed -E 's/(^|-)([a-z])/\1\u\2/g; s/-/ /g') + + if [[ "$filename" == "$CURRENT_THEME_NAME" ]]; then + echo "$display_name" + else + echo "$display_name" + fi + done +) + +printf '%s\n' "${themes[@]}" diff --git a/bin/omarchy-theme-menu b/bin/omarchy-theme-menu index 9f3801a9..4a19f1c5 100755 --- a/bin/omarchy-theme-menu +++ b/bin/omarchy-theme-menu @@ -1,31 +1,4 @@ #!/bin/bash -THEMES_DIR="$HOME/.config/omarchy/themes/" -CURRENT_THEME_DIR="$HOME/.config/omarchy/current/theme" -CURRENT_THEME_NAME=$(basename "$(realpath "$CURRENT_THEME_DIR")") - -# Build themes list with pretty display names -mapfile -t themes < <( - find "$THEMES_DIR" -mindepth 1 -maxdepth 1 \( -type d -o -type l \) | sort | while read -r path; do - filename=$(basename "$path") - display_name=$(echo "$filename" | sed -E 's/(^|-)([a-z])/\1\u\2/g; s/-/ /g') - - if [[ "$filename" == "$CURRENT_THEME_NAME" ]]; then - echo "$display_name" - else - echo "$display_name" - fi - done -) - -# Show Walker menu -selection=$(printf '%s\n' "${themes[@]}" | walker --dmenu --theme dmenu_250 -p "Choose Theme" 2>/dev/null) - -# Remove any Pango markup before converting back to filename -clean_selection=$(echo "$selection" | sed -E 's/<[^>]+>//g') - -# Convert to lowercase and dash-separated: "Tokyo Night" -> "tokyo-night" -selected_theme=$(echo "$clean_selection" | tr '[:upper:]' '[:lower:]' | tr ' ' '-') - -# Apply the selected theme -"$HOME/.local/share/omarchy/bin/omarchy-theme-set" "$selected_theme" +"$HOME/.local/share/omarchy/bin/omarchy-theme-set" \ + "$(~/.local/share/omarchy/bin/omarchy-theme-list | walker --dmenu --theme dmenu_250 -p "Choose Theme" 2>/dev/null)" diff --git a/bin/omarchy-theme-set b/bin/omarchy-theme-set index 791fc0d5..3f0551b2 100755 --- a/bin/omarchy-theme-set +++ b/bin/omarchy-theme-set @@ -3,7 +3,7 @@ # omarchy-theme-set: Set a theme, specified by its name. # Usage: omarchy-theme-set -if [[ -z "$1" ]]; then +if [[ -z "$1" && "$1" != "CNCLD" ]]; then echo "Usage: omarchy-theme-set " >&2 exit 1 fi @@ -11,7 +11,7 @@ fi THEMES_DIR="$HOME/.config/omarchy/themes/" CURRENT_THEME_DIR="$HOME/.config/omarchy/current/theme" -THEME_NAME="$1" +THEME_NAME=$(echo "$1" | sed -E 's/<[^>]+>//g' | tr '[:upper:]' '[:lower:]' | tr ' ' '-') THEME_PATH="$THEMES_DIR/$THEME_NAME" # Check if the theme entered exists