diff options
Diffstat (limited to 'config/hypr/scripts/Ghostty_themes.sh')
| -rwxr-xr-x | config/hypr/scripts/Ghostty_themes.sh | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/config/hypr/scripts/Ghostty_themes.sh b/config/hypr/scripts/Ghostty_themes.sh new file mode 100755 index 00000000..a69f246e --- /dev/null +++ b/config/hypr/scripts/Ghostty_themes.sh @@ -0,0 +1,129 @@ +#!/usr/bin/env bash +# ================================================== +# KoolDots (2026) +# Project URL: https://github.com/LinuxBeginnings +# License: GNU GPLv3 +# SPDX-License-Identifier: GPL-3.0-or-later +# ================================================== +# Ghostty theme selector + +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" + +notify_user() { + local icon="$1" + local title="$2" + local body="$3" + if [[ -n "$icon" && -f "$icon" ]]; then + notify-send -u low -i "$icon" "$title" "$body" + else + notify-send -u low "$title" "$body" + fi +} + +if [[ ! -f "$config_file" ]]; then + notify_user "$iDIR/error.png" "Ghostty Theme" "Config not found: $config_file" + exit 1 +fi + +rofi_config_args=() +if [[ -f "$rofi_theme_primary" ]]; then + rofi_config_args=(-config "$rofi_theme_primary") +elif [[ -f "$rofi_theme_fallback" ]]; then + rofi_config_args=(-config "$rofi_theme_fallback") +fi + +current_theme=$( + awk -F'=' '/^[[:space:]]*theme[[:space:]]*=/ { + val=$2 + sub(/^[[:space:]]+/, "", val) + sub(/[[:space:]]+$/, "", val) + gsub(/^"|"$/, "", val) + print val + exit + }' "$config_file" +) + +mapfile -t available_theme_names < <( + awk -F'=' '/^[[:space:]]*#[[:space:]]*theme[[:space:]]*=/ { + val=$2 + sub(/^[[:space:]]+/, "", val) + sub(/[[:space:]]+$/, "", val) + gsub(/^"|"$/, "", val) + print val + }' "$config_file" +) + +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 +for t in "${available_theme_names[@]}"; do + menu_entries+=("$t") +done + +choice=$( + printf "%s\n" "${menu_entries[@]}" | + rofi -i -dmenu -p "Ghostty Theme" "${rofi_config_args[@]}" -mesg "Select a theme to apply" +) + +[[ -z "$choice" ]] && exit 0 + +if [[ "$choice" == "Current: "* ]]; then + exit 0 +fi + +selected_theme="$choice" + +if [[ -n "$current_theme" && "$selected_theme" == "$current_theme" ]]; then + exit 0 +fi + +format_theme_value() { + if [[ "$1" =~ [[:space:]] ]]; then + printf "\"%s\"" "$1" + else + printf "%s" "$1" + fi +} + +selected_formatted=$(format_theme_value "$selected_theme") + +tmp_file=$(mktemp) +awk -v selected="$selected_theme" -v selected_formatted="$selected_formatted" ' +function trim(s) { sub(/^[[:space:]]+/, "", s); sub(/[[:space:]]+$/, "", s); return s } +function strip_quotes(s) { gsub(/^"|"$/, "", s); return s } +{ + line=$0 + if ($0 ~ /^[[:space:]]*theme[[:space:]]*=/) { + sub(/^[[:space:]]*theme[[:space:]]*=/, "#theme =", line) + print line + next + } + if ($0 ~ /^[[:space:]]*#[[:space:]]*theme[[:space:]]*=/) { + val=$0 + sub(/^[[:space:]]*#[[:space:]]*theme[[:space:]]*=[[:space:]]*/, "", val) + val=trim(val) + val=strip_quotes(val) + if (val == selected) { + print "theme = " selected_formatted + next + } + } + print $0 +}' "$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" "$selected_theme" + +exit 0 |
