diff options
Diffstat (limited to 'config/hypr/scripts/Ghostty_themes.sh')
| -rwxr-xr-x | config/hypr/scripts/Ghostty_themes.sh | 120 |
1 files changed, 110 insertions, 10 deletions
diff --git a/config/hypr/scripts/Ghostty_themes.sh b/config/hypr/scripts/Ghostty_themes.sh index a69f246e..c3fcd792 100755 --- a/config/hypr/scripts/Ghostty_themes.sh +++ b/config/hypr/scripts/Ghostty_themes.sh @@ -11,6 +11,10 @@ config_file="$HOME/.config/ghostty/config" iDIR="$HOME/.config/swaync/images" rofi_theme_primary="$HOME/.config/rofi/config-ghostty-theme.rasi" rofi_theme_fallback="$HOME/.config/rofi/config-edit.rasi" +wallust_include_path="$HOME/.config/ghostty/wallust.conf" +wallust_option_label="Set by wallpaper" +default_option_label="Default - no color" +wallust_refresh_script="$HOME/.config/hypr/scripts/WallustSwww.sh" notify_user() { local icon="$1" @@ -23,6 +27,13 @@ notify_user() { fi } +refresh_wallpaper_theme() { + if [[ -x "$wallust_refresh_script" ]]; then + "$wallust_refresh_script" >/dev/null 2>&1 || true + fi + pkill -SIGUSR2 ghostty >/dev/null 2>&1 || true +} + if [[ ! -f "$config_file" ]]; then notify_user "$iDIR/error.png" "Ghostty Theme" "Config not found: $config_file" exit 1 @@ -46,6 +57,11 @@ current_theme=$( }' "$config_file" ) +wallust_enabled=$( + awk '/^[[:space:]]*config-file[[:space:]]*=/ && $0 !~ /^[[:space:]]*#/ && /wallust\.conf/ {print "1"; exit}' "$config_file" +) +[[ "$wallust_enabled" != "1" ]] && wallust_enabled="0" + mapfile -t available_theme_names < <( awk -F'=' '/^[[:space:]]*#[[:space:]]*theme[[:space:]]*=/ { val=$2 @@ -60,29 +76,103 @@ if [[ ${#available_theme_names[@]} -eq 0 ]]; then notify_user "$iDIR/error.png" "Ghostty Theme" "No commented themes found in $config_file" exit 1 fi - -menu_entries=() -if [[ -n "$current_theme" ]]; then - menu_entries+=("Current: $current_theme") -fi +menu_entries=("$wallust_option_label" "$default_option_label") for t in "${available_theme_names[@]}"; do menu_entries+=("$t") done +current_selection_index=0 +if [[ "$wallust_enabled" == "1" ]]; then + current_selection_index=0 +elif [[ -z "$current_theme" ]]; then + current_selection_index=1 +else + current_selection_index=1 + for i in "${!available_theme_names[@]}"; do + if [[ "${available_theme_names[$i]}" == "$current_theme" ]]; then + current_selection_index=$((i + 2)) + break + fi + done +fi choice=$( printf "%s\n" "${menu_entries[@]}" | - rofi -i -dmenu -p "Ghostty Theme" "${rofi_config_args[@]}" -mesg "Select a theme to apply" + rofi -i -dmenu -p "Ghostty Theme" "${rofi_config_args[@]}" -mesg "Select a theme to apply" -selected-row "$current_selection_index" ) [[ -z "$choice" ]] && exit 0 -if [[ "$choice" == "Current: "* ]]; then + +selected_theme="$choice" + +if [[ "$selected_theme" == "$wallust_option_label" ]]; then + if [[ "$wallust_enabled" == "1" ]]; then + exit 0 + fi + + tmp_file=$(mktemp) + awk -v wallust_include_path="$wallust_include_path" ' +function trim(s) { sub(/^[[:space:]]+/, "", s); sub(/[[:space:]]+$/, "", s); return s } +{ + line=$0 + if ($0 ~ /^[[:space:]]*theme[[:space:]]*=/) { + sub(/^[[:space:]]*theme[[:space:]]*=/, "#theme =", line) + print line + next + } + if ($0 ~ /^[[:space:]]*#?[[:space:]]*config-file[[:space:]]*=/ && $0 ~ /wallust\.conf/) { + print "config-file = " wallust_include_path + wallust_set=1 + next + } + print $0 +} +END { + if (!wallust_set) { + print "config-file = " wallust_include_path + } +} +' "$config_file" > "$tmp_file" + mv "$tmp_file" "$config_file" + refresh_wallpaper_theme + notify_user "$iDIR/ja.png" "Ghostty Theme Applied" "$wallust_option_label" exit 0 fi +if [[ "$selected_theme" == "$default_option_label" ]]; then + if [[ "$wallust_enabled" != "1" && -z "$current_theme" ]]; then + exit 0 + fi -selected_theme="$choice" + tmp_file=$(mktemp) + awk -v wallust_include_path="$wallust_include_path" ' +{ + line=$0 + if ($0 ~ /^[[:space:]]*theme[[:space:]]*=/) { + sub(/^[[:space:]]*theme[[:space:]]*=/, "#theme =", line) + print line + next + } + if ($0 ~ /^[[:space:]]*#?[[:space:]]*config-file[[:space:]]*=/ && $0 ~ /wallust\.conf/) { + print "#config-file = " wallust_include_path + wallust_seen=1 + next + } + print $0 +} +END { + if (!wallust_seen) { + print "#config-file = " wallust_include_path + } +} +' "$config_file" > "$tmp_file" + mv "$tmp_file" "$config_file" + + pkill -SIGUSR2 ghostty >/dev/null 2>&1 || true + notify_user "$iDIR/ja.png" "Ghostty Theme Applied" "$default_option_label" + exit 0 +fi -if [[ -n "$current_theme" && "$selected_theme" == "$current_theme" ]]; then +if [[ "$wallust_enabled" != "1" && -n "$current_theme" && "$selected_theme" == "$current_theme" ]]; then exit 0 fi @@ -97,11 +187,16 @@ format_theme_value() { selected_formatted=$(format_theme_value "$selected_theme") tmp_file=$(mktemp) -awk -v selected="$selected_theme" -v selected_formatted="$selected_formatted" ' +awk -v selected="$selected_theme" -v selected_formatted="$selected_formatted" -v wallust_include_path="$wallust_include_path" ' function trim(s) { sub(/^[[:space:]]+/, "", s); sub(/[[:space:]]+$/, "", s); return s } function strip_quotes(s) { gsub(/^"|"$/, "", s); return s } { line=$0 + if ($0 ~ /^[[:space:]]*#?[[:space:]]*config-file[[:space:]]*=/ && $0 ~ /wallust\.conf/) { + print "#config-file = " wallust_include_path + wallust_seen=1 + next + } if ($0 ~ /^[[:space:]]*theme[[:space:]]*=/) { sub(/^[[:space:]]*theme[[:space:]]*=/, "#theme =", line) print line @@ -118,6 +213,11 @@ function strip_quotes(s) { gsub(/^"|"$/, "", s); return s } } } print $0 +} +END { + if (!wallust_seen) { + print "#config-file = " wallust_include_path + } }' "$config_file" > "$tmp_file" mv "$tmp_file" "$config_file" |
