aboutsummaryrefslogtreecommitdiffstats
path: root/config
diff options
context:
space:
mode:
authorLars Müller <lars.lmueller@gmail.com>2025-05-15 14:14:12 +0200
committerLars Müller <lars.lmueller@gmail.com>2025-05-15 14:14:12 +0200
commit1b570eea95188c16efad98980c8a4dfbe86459c6 (patch)
tree7c8847089d709e8455f08ffa5111162614929f84 /config
parent65e06b22bf27d95a7cd4db6569528567046f006a (diff)
add: better kitty theme picker script
Diffstat (limited to 'config')
-rwxr-xr-xconfig/hypr/scripts/Kitty_themes.sh151
1 files changed, 121 insertions, 30 deletions
diff --git a/config/hypr/scripts/Kitty_themes.sh b/config/hypr/scripts/Kitty_themes.sh
index 31c19a1d..f3030d30 100755
--- a/config/hypr/scripts/Kitty_themes.sh
+++ b/config/hypr/scripts/Kitty_themes.sh
@@ -1,45 +1,136 @@
#!/bin/bash
-# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ #
-# Kitty Themes Source https://github.com/dexpota/kitty-themes #
+# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */  #
+# Kitty Themes - Script to preview themes by applying and re-opening Rofi.
# Define directories and variables
kitty_themes_DiR="$HOME/.config/kitty/kitty-themes" # Kitty Themes Directory
-theme_path="$kitty_themes_DiR/$theme.conf"
kitty_config="$HOME/.config/kitty/kitty.conf"
-iDIR="$HOME/.config/swaync/images"
-rofi_theme="$HOME/.config/rofi/config-kitty-theme.rasi"
+iDIR="$HOME/.config/swaync/images" # For notifications
+rofi_theme_for_this_script="$HOME/.config/rofi/config-kitty-theme.rasi"
+
+# --- Helper Functions ---
+notify_user() {
+ notify-send -u low -i "$1" "$2" "$3"
+}
+
+# Function to apply the selected kitty theme
+apply_kitty_theme_to_config() {
+ local theme_name_to_apply="$1"
+ if [ -z "$theme_name_to_apply" ]; then
+ echo "Error: No theme name provided to apply_kitty_theme_to_config." >&2
+ return 1
+ fi
+
+ local theme_file_path_to_apply="$kitty_themes_DiR/$theme_name_to_apply.conf"
+ if [ ! -f "$theme_file_path_to_apply" ]; then
+ notify_user "$iDIR/error.png" "Error" "Theme file not found: $theme_name_to_apply.conf"
+ return 1
+ fi
+
+ local temp_kitty_config_file
+ temp_kitty_config_file=$(mktemp)
+ cp "$kitty_config" "$temp_kitty_config_file"
+
+ if grep -q -E '^[#[:space:]]*include\s+\./kitty-themes/.*\.conf' "$temp_kitty_config_file"; then
+ sed -i -E "s|^([#[:space:]]*include\s+\./kitty-themes/).*\.conf|include ./kitty-themes/$theme_name_to_apply.conf|g" "$temp_kitty_config_file"
+ else
+ if [ -s "$temp_kitty_config_file" ] && [ "$(tail -c1 "$temp_kitty_config_file")" != "" ]; then
+ echo >>"$temp_kitty_config_file"
+ fi
+ echo "include ./kitty-themes/$theme_name_to_apply.conf" >>"$temp_kitty_config_file"
+ fi
+
+ cp "$temp_kitty_config_file" "$kitty_config"
+ rm "$temp_kitty_config_file"
+
+ for pid_kitty in $(pidof kitty); do
+ if [ -n "$pid_kitty" ]; then
+ kill -SIGUSR1 "$pid_kitty"
+ fi
+ done
+ return 0
+}
+
+# --- Main Script Execution ---
-# Check if the Kitty Themes directory exists
if [ ! -d "$kitty_themes_DiR" ]; then
- notify-send -i "$iDIR/error.png" "E-R-R-O-R" "Unable to locate Kitty Themes directory. Exiting....."
+ notify_user "$iDIR/error.png" "E-R-R-O-R" "Kitty Themes directory not found: $kitty_themes_DiR"
+ exit 1
+fi
+
+if [ ! -f "$rofi_theme_for_this_script" ]; then
+ notify_user "$iDIR/error.png" "Rofi Config Missing" "Rofi theme for Kitty selector not found at: $rofi_theme_for_this_script."
exit 1
fi
-# List the kitty-theme files from the themes directory
-theme=$(ls "$kitty_themes_DiR"/*.conf | xargs -n 1 basename | sed 's/\.conf$//' | rofi -dmenu -config $rofi_theme)
+original_kitty_config_content_backup=$(cat "$kitty_config")
+
+mapfile -t available_theme_names < <(find "$kitty_themes_DiR" -maxdepth 1 -name "*.conf" -type f -printf "%f\n" | sed 's/\.conf$//' | sort)
-# Check if no theme was selected, and exit if empty
-if [ -z "$theme" ]; then
- notify-send -u low -i "$iDIR/note.png" "No kitty theme" "selected. Exiting....."
+if [ ${#available_theme_names[@]} -eq 0 ]; then
+ notify_user "$iDIR/error.png" "No Kitty Themes" "No .conf files found in $kitty_themes_DiR."
exit 1
fi
-# Uncomment the line that includes the kitty themes if it's commented
-if grep -q '#include ./kitty-themes/' "$kitty_config"; then
- sed -i "s|#include ./kitty-themes/|include ./kitty-themes/$theme.conf|g" "$kitty_config"
-
- notify-send -u low -i "$iDIR/ja.png" "$theme" "Kitty Theme Loaded"
-
- for pid_kitty in $(pidof kitty); do
- kill -SIGUSR1 "$pid_kitty"
- done
-else
- # If the line is already uncommented, just add the chosen theme
- sed -i "s|include ./kitty-themes/.*|include ./kitty-themes/$theme.conf|g" "$kitty_config"
-
- notify-send -u low -i "$iDIR/ja.png" "$theme" "Kitty Theme Loaded"
-
- for pid_kitty in $(pidof kitty); do
- kill -SIGUSR1 "$pid_kitty"
- done
+current_selection_index=0
+current_active_theme_name=$(awk -F'include ./kitty-themes/|\\.conf' '/^[[:space:]]*include \.\/kitty-themes\/.*\.conf/{print $2; exit}' "$kitty_config")
+
+if [ -n "$current_active_theme_name" ]; then
+ for i in "${!available_theme_names[@]}"; do
+ if [[ "${available_theme_names[$i]}" == "$current_active_theme_name" ]]; then
+ current_selection_index=$i
+ break
+ fi
+ done
fi
+
+while true; do
+ theme_to_preview_now="${available_theme_names[$current_selection_index]}"
+
+ if ! apply_kitty_theme_to_config "$theme_to_preview_now"; then
+ echo "$original_kitty_config_content_backup" >"$kitty_config"
+ for pid_kitty in $(pidof kitty); do if [ -n "$pid_kitty" ]; then kill -SIGUSR1 "$pid_kitty"; fi; done
+ notify_user "$iDIR/error.png" "Preview Error" "Failed to apply $theme_to_preview_now. Reverted."
+ exit 1
+ fi
+
+ rofi_input_list=""
+ for theme_name_in_list in "${available_theme_names[@]}"; do
+ rofi_input_list+="$theme_name_in_list\n"
+ done
+ rofi_input_list_trimmed="${rofi_input_list%\\n}"
+
+ chosen_index_from_rofi=$(echo -e "$rofi_input_list_trimmed" |
+ rofi -dmenu -i \
+ -format 'i' \
+ -p "Kitty Theme" \
+ -mesg "Preview: ${theme_to_preview_now} | Enter: Preview | Ctrl+S: Apply & Exit | Esc: Cancel" \
+ -config "$rofi_theme_for_this_script" \
+ -selected-row "$current_selection_index" \
+ -kb-custom-1 "Control+s") # MODIFIED HERE: Changed to Control+s for custom action 1
+
+ rofi_exit_code=$?
+
+ if [ $rofi_exit_code -eq 0 ]; then
+ if [[ "$chosen_index_from_rofi" =~ ^[0-9]+$ ]] && [ "$chosen_index_from_rofi" -lt "${#available_theme_names[@]}" ]; then
+ current_selection_index="$chosen_index_from_rofi"
+ else
+ :
+ fi
+ elif [ $rofi_exit_code -eq 1 ]; then
+ notify_user "$iDIR/note.png" "Kitty Theme" "Selection cancelled. Reverting to original theme."
+ echo "$original_kitty_config_content_backup" >"$kitty_config"
+ for pid_kitty in $(pidof kitty); do if [ -n "$pid_kitty" ]; then kill -SIGUSR1 "$pid_kitty"; fi; done
+ break
+ elif [ $rofi_exit_code -eq 10 ]; then # This is the exit code for -kb-custom-1
+ notify_user "$iDIR/ja.png" "Kitty Theme Applied" "$theme_to_preview_now"
+ break
+ else
+ notify_user "$iDIR/error.png" "Rofi Error" "Unexpected Rofi exit ($rofi_exit_code). Reverting."
+ echo "$original_kitty_config_content_backup" >"$kitty_config"
+ for pid_kitty in $(pidof kitty); do if [ -n "$pid_kitty" ]; then kill -SIGUSR1 "$pid_kitty"; fi; done
+ break
+ fi
+done
+
+exit 0
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage