blob: 3183b20bbab5771e64ce46dddc2e29209478f25b (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
|
#!/usr/bin/env bash
# ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Kitty Themes Source https://github.com/dexpota/kitty-themes #
# Define directories and variables
kitty_themes_DiR="$HOME/.config/kitty/kitty-themes" # Kitty Themes Directory
kitty_config="$HOME/.config/kitty/kitty.conf"
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"
local apply_mode="${2:-preview}"
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
if [ "$theme_name_to_apply" = "Set by wallpaper" ]; then
theme_file_path_to_apply="$kitty_themes_DiR/01-Wallust.conf"
elif [ "$theme_name_to_apply" = "Default no color" ]; then
theme_file_path_to_apply="$kitty_themes_DiR/00-Default.conf"
else
theme_file_path_to_apply="$kitty_themes_DiR/$theme_name_to_apply.conf"
fi
if [ ! -f "$theme_file_path_to_apply" ]; then
notify_user "$iDIR/error.png" "Error" "Theme file not found: $(basename "$theme_file_path_to_apply")"
return 1
fi
local temp_kitty_config_file
temp_kitty_config_file=$(mktemp)
cp "$kitty_config" "$temp_kitty_config_file"
local include_target
include_target="include ./kitty-themes/$(basename "$theme_file_path_to_apply")"
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_target|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_target" >>"$temp_kitty_config_file"
fi
cp "$temp_kitty_config_file" "$kitty_config"
rm "$temp_kitty_config_file"
if pidof kitty >/dev/null 2>&1; then
if [ "$apply_mode" = "apply" ] && command -v kitty >/dev/null 2>&1; then
kitty @ load-config >/dev/null 2>&1
kitty @ set-colors --all --configured "$theme_file_path_to_apply" >/dev/null 2>&1
fi
for pid_kitty in $(pidof kitty); do
if [ -n "$pid_kitty" ]; then
kill -SIGUSR1 "$pid_kitty"
fi
done
fi
return 0
}
# --- Main Script Execution ---
if [ ! -d "$kitty_themes_DiR" ]; then
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
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$//' | grep -v -E '^(00-Default|01-Wallust)$' | sort)
available_theme_names=("Set by wallpaper" "Default no color" "${available_theme_names[@]}")
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
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 [ "$current_active_theme_name" = "01-Wallust" ]; then
current_active_theme_name="Set by wallpaper"
elif [ "$current_active_theme_name" = "00-Default" ]; then
current_active_theme_name="Default no color"
fi
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
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 "Enter: Preview | Ctrl+S: Apply & Exit | Esc: Cancel" \
-config "$rofi_theme_for_this_script" \
-selected-row "$current_selection_index" \
-kb-custom-1 "Control+s")
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"
theme_to_preview_now="${available_theme_names[$current_selection_index]}"
if ! apply_kitty_theme_to_config "$theme_to_preview_now" "preview"; 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
continue
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
apply_kitty_theme_to_config "$theme_to_preview_now" "apply"
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
|