aboutsummaryrefslogtreecommitdiffstats
path: root/config/hypr/scripts/Ghostty_themes.sh
diff options
context:
space:
mode:
Diffstat (limited to 'config/hypr/scripts/Ghostty_themes.sh')
-rwxr-xr-xconfig/hypr/scripts/Ghostty_themes.sh120
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"
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage