55 lines
1.7 KiB
Bash
Executable File
55 lines
1.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
WAYBAR_CSS_DIR="$HOME/.config/waybar/themes/css"
|
|
WAYBAR_CSS_FILE="$HOME/.config/waybar/theme.css"
|
|
WAYBAR_JSONC_DIR="$HOME/.config/waybar/themes/jsonc"
|
|
WAYBAR_JSONC_FILE="$HOME/.config/waybar/config.jsonc"
|
|
ROFI_THEMES_DIR="$HOME/.config/rofi/themes"
|
|
ROFI_THEME_FILE="$HOME/.config/rofi/theme.rasi"
|
|
CURRENT_THEME_FILE="$HOME/.config/waybar/themes/current-theme"
|
|
|
|
for dir in "$WAYBAR_CSS_DIR" "$WAYBAR_JSONC_DIR" "$ROFI_THEMES_DIR"; do
|
|
[[ ! -d "$dir" ]] && echo "Error: $dir not found" && exit 1
|
|
done
|
|
|
|
# Get all themes
|
|
waybar_css=("$WAYBAR_CSS_DIR"/*.css)
|
|
waybar_jsonc=("$WAYBAR_JSONC_DIR"/*.jsonc)
|
|
rofi_themes=("$ROFI_THEMES_DIR"/*.rasi)
|
|
|
|
if [[ ${#waybar_css[@]} -eq 0 || ${#waybar_jsonc[@]} -eq 0 || ${#rofi_themes[@]} -eq 0 ]]; then
|
|
echo "Error: No themes found in one of the directories"
|
|
exit 1
|
|
fi
|
|
|
|
# Get the current theme
|
|
current_theme=$(cat "$CURRENT_THEME_FILE" 2>/dev/null || echo "")
|
|
|
|
# Find the index of the current theme
|
|
next_theme_index=0
|
|
for i in "${!waybar_css[@]}"; do
|
|
[[ "${waybar_css[$i]}" == "$current_theme" ]] && next_theme_index=$(((i + 1) % ${#waybar_css[@]})) && break
|
|
done
|
|
|
|
# Get the new theme
|
|
new_waybar_css="${waybar_css[$next_theme_index]}"
|
|
new_waybar_jsonc="${waybar_jsonc[$next_theme_index]}"
|
|
new_rofi_theme="${rofi_themes[$next_theme_index]}"
|
|
|
|
# Save the new theme
|
|
echo "$new_waybar_css" >"$CURRENT_THEME_FILE"
|
|
|
|
declare -A theme_files=(
|
|
["$new_waybar_css"]="$WAYBAR_CSS_FILE"
|
|
["$new_waybar_jsonc"]="$WAYBAR_JSONC_FILE"
|
|
["$new_rofi_theme"]="$ROFI_THEME_FILE"
|
|
)
|
|
|
|
for src in "${!theme_files[@]}"; do
|
|
cp "$src" "${theme_files[$src]}"
|
|
done
|
|
|
|
# Restart Waybar to apply changes
|
|
killall waybar || true
|
|
nohup waybar --config "$HOME/.config/waybar/config.jsonc" --style "$HOME/.config/waybar/style.css" >/dev/null 2>&1 &
|