blob: 338aab9972b7248306acbffa560cd1cde9b944fc (
plain)
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
|
#!/bin/sh
# Theme switcher for Hyprland desktop
# Usage: set-theme <theme-name>
# set-theme --toggle
# set-theme --current
# Available themes: dupre, hudson
THEME_DIR="$HOME/.config/themes"
CURRENT_FILE="$HOME/.config/current-theme"
# Get current theme
get_current() {
if [ -f "$CURRENT_FILE" ]; then
cat "$CURRENT_FILE"
else
echo "hudson" # default
fi
}
# List available themes
list_themes() {
for dir in "$THEME_DIR"/*/; do
basename "$dir"
done
}
# Apply a theme
apply_theme() {
theme="$1"
if [ ! -d "$THEME_DIR/$theme" ]; then
echo "Error: Theme '$theme' not found in $THEME_DIR"
echo "Available themes: $(list_themes | tr '\n' ' ')"
exit 1
fi
echo "Applying theme: $theme"
# Copy configs that don't support sourcing
cp "$THEME_DIR/$theme/foot.ini" "$HOME/.config/foot/foot.ini"
cp "$THEME_DIR/$theme/fuzzel.ini" "$HOME/.config/fuzzel/fuzzel.ini"
cp "$THEME_DIR/$theme/waybar.css" "$HOME/.config/waybar/style.css"
cp "$THEME_DIR/$theme/dunstrc" "$HOME/.config/dunst/dunstrc"
cp "$THEME_DIR/$theme/hyprlock.conf" "$HOME/.config/hypr/hyprlock.conf"
cp "$THEME_DIR/$theme/Xresources" "$HOME/.Xresources"
# Apply Xresources (for X11 apps and Emacs)
xrdb -merge "$HOME/.Xresources" 2>/dev/null
# Apply Hyprland colors directly via hyprctl
case "$theme" in
dupre)
hyprctl keyword general:col.active_border "rgba(d7af5fff)"
hyprctl keyword general:col.inactive_border "rgba(474544ff)"
;;
hudson)
hyprctl keyword general:col.active_border "rgba(daa520ff)"
hyprctl keyword general:col.inactive_border "rgba(444444ff)"
;;
esac
# Save current theme
echo "$theme" > "$CURRENT_FILE"
# Reload applications
killall -SIGUSR2 waybar 2>/dev/null
pkill dunst && dunst &
# Notify user
notify-send "Theme" "Switched to $theme" -t 2000
echo "Theme '$theme' applied. Open new terminals to see changes."
}
# Toggle between themes
toggle_theme() {
current=$(get_current)
case "$current" in
dupre) apply_theme "hudson" ;;
hudson) apply_theme "dupre" ;;
*) apply_theme "dupre" ;;
esac
}
# Show picker with fuzzel
pick_theme() {
themes=$(list_themes)
current=$(get_current)
selected=$(echo "$themes" | fuzzel --dmenu --prompt "Theme (current: $current): ")
if [ -n "$selected" ]; then
apply_theme "$selected"
fi
}
# Main
case "$1" in
--toggle|-t)
toggle_theme
;;
--current|-c)
get_current
;;
--list|-l)
list_themes
;;
--pick|-p)
pick_theme
;;
--help|-h)
echo "Usage: set-theme <theme-name>"
echo " set-theme --toggle Toggle between themes"
echo " set-theme --current Show current theme"
echo " set-theme --list List available themes"
echo " set-theme --pick Pick theme with fuzzel"
echo ""
echo "Available themes: $(list_themes | tr '\n' ' ')"
;;
"")
pick_theme
;;
*)
apply_theme "$1"
;;
esac
|