summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--themes/random.zsh-theme38
1 files changed, 31 insertions, 7 deletions
diff --git a/themes/random.zsh-theme b/themes/random.zsh-theme
index 739567662..92d2a6847 100644
--- a/themes/random.zsh-theme
+++ b/themes/random.zsh-theme
@@ -1,10 +1,34 @@
-if [[ "${(t)ZSH_THEME_RANDOM_CANDIDATES}" = "array" ]] && [[ "${#ZSH_THEME_RANDOM_CANDIDATES[@]}" -gt 0 ]]; then
- themes=($ZSH/themes/${^ZSH_THEME_RANDOM_CANDIDATES}.zsh-theme)
+# Make themes a unique array
+typeset -Ua themes
+
+if [[ "${(t)ZSH_THEME_RANDOM_CANDIDATES}" = array && ${#ZSH_THEME_RANDOM_CANDIDATES[@]} -gt 0 ]]; then
+ # Use ZSH_THEME_RANDOM_CANDIDATES if properly defined
+ themes=($ZSH_THEME_RANDOM_CANDIDATES)
else
- themes=($ZSH/themes/*zsh-theme)
+ # Look for themes in $ZSH_CUSTOM and $ZSH and add only the theme name (:t)
+ themes=(
+ "$ZSH_CUSTOM"/*.zsh-theme(N:t:r)
+ "$ZSH_CUSTOM"/themes/*.zsh-theme(N:t:r)
+ "$ZSH"/themes/*.zsh-theme(N:t:r)
+ )
fi
+
+# Choose a theme out of the pool of candidates
N=${#themes[@]}
-((N=(RANDOM%N)+1))
-RANDOM_THEME=${themes[$N]}
-source "$RANDOM_THEME"
-echo "[oh-my-zsh] Random theme '$RANDOM_THEME' loaded..."
+(( N = (RANDOM%N) + 1 ))
+RANDOM_THEME="${themes[$N]}"
+unset N themes
+
+# Source theme
+if [[ -f "$ZSH_CUSTOM/$RANDOM_THEME.zsh-theme" ]]; then
+ source "$ZSH_CUSTOM/$RANDOM_THEME.zsh-theme"
+elif [[ -f "$ZSH_CUSTOM/themes/$RANDOM_THEME.zsh-theme" ]]; then
+ source "$ZSH_CUSTOM/themes/$RANDOM_THEME.zsh-theme"
+elif [[ -f "$ZSH/themes/$RANDOM_THEME.zsh-theme" ]]; then
+ source "$ZSH/themes/$RANDOM_THEME.zsh-theme"
+else
+ echo "[oh-my-zsh] Random theme '${RANDOM_THEME}' not found"
+ return 1
+fi
+
+echo "[oh-my-zsh] Random theme '${RANDOM_THEME}' loaded"