2025-11-21 21:47:50 +04:00
|
|
|
|
#!/bin/bash
|
2025-11-24 22:24:25 +04:00
|
|
|
|
# Extended pywal script with system-wide theme support
|
|
|
|
|
|
# Usage: ./pywal.sh [wallpaper_path] [light|dark]
|
|
|
|
|
|
# Examples:
|
|
|
|
|
|
# ./pywal.sh ~/Pictures/wallpaper.jpg # Apply dark theme
|
|
|
|
|
|
# ./pywal.sh ~/Pictures/wallpaper.jpg light # Apply light theme
|
|
|
|
|
|
# ./pywal.sh # Just refresh themes (use existing wallpaper)
|
2025-11-21 21:47:50 +04:00
|
|
|
|
|
2025-11-24 22:24:25 +04:00
|
|
|
|
WALLPAPER="$1"
|
|
|
|
|
|
LIGHT_MODE="$2"
|
2025-11-22 00:00:40 +04:00
|
|
|
|
|
2025-11-24 22:24:25 +04:00
|
|
|
|
echo "Applying pywal colors system-wide..."
|
|
|
|
|
|
|
|
|
|
|
|
# Generate pywal colors
|
|
|
|
|
|
if [ -n "$WALLPAPER" ]; then
|
|
|
|
|
|
# New wallpaper provided
|
|
|
|
|
|
if [ "$LIGHT_MODE" = "-l" ] || [ "$LIGHT_MODE" = "light" ]; then
|
|
|
|
|
|
wal -i "$WALLPAPER" -l
|
|
|
|
|
|
DARK_MODE=0
|
|
|
|
|
|
GTK_THEME="prefer-light"
|
|
|
|
|
|
echo "✓ Generated light theme from wallpaper"
|
|
|
|
|
|
else
|
|
|
|
|
|
wal -i "$WALLPAPER"
|
|
|
|
|
|
DARK_MODE=1
|
|
|
|
|
|
GTK_THEME="prefer-dark"
|
|
|
|
|
|
echo "✓ Generated dark theme from wallpaper"
|
|
|
|
|
|
fi
|
|
|
|
|
|
elif [ "$LIGHT_MODE" = "light" ] || [ "$LIGHT_MODE" = "-l" ]; then
|
|
|
|
|
|
# No wallpaper, just switch to light mode
|
|
|
|
|
|
wal -l
|
|
|
|
|
|
DARK_MODE=0
|
|
|
|
|
|
GTK_THEME="prefer-light"
|
|
|
|
|
|
echo "✓ Switched to light theme"
|
|
|
|
|
|
elif [ "$LIGHT_MODE" = "dark" ]; then
|
|
|
|
|
|
# No wallpaper, just switch to dark mode
|
|
|
|
|
|
wal
|
|
|
|
|
|
DARK_MODE=1
|
|
|
|
|
|
GTK_THEME="prefer-dark"
|
|
|
|
|
|
echo "✓ Switched to dark theme"
|
|
|
|
|
|
else
|
|
|
|
|
|
# No arguments, just refresh with existing colors
|
|
|
|
|
|
if [ -f ~/.cache/wal/wal ]; then
|
|
|
|
|
|
wal -R
|
|
|
|
|
|
# Detect if current theme is light or dark
|
|
|
|
|
|
BG_COLOR=$(grep -oP 'background.*#\K[0-9A-Fa-f]{6}' ~/.cache/wal/colors.json | head -1)
|
|
|
|
|
|
if [ -n "$BG_COLOR" ]; then
|
|
|
|
|
|
# Convert hex to decimal and check brightness
|
|
|
|
|
|
R=$((16#${BG_COLOR:0:2}))
|
|
|
|
|
|
G=$((16#${BG_COLOR:2:2}))
|
|
|
|
|
|
B=$((16#${BG_COLOR:4:2}))
|
|
|
|
|
|
BRIGHTNESS=$(( (R + G + B) / 3 ))
|
|
|
|
|
|
if [ $BRIGHTNESS -gt 128 ]; then
|
|
|
|
|
|
DARK_MODE=0
|
|
|
|
|
|
GTK_THEME="prefer-light"
|
|
|
|
|
|
else
|
|
|
|
|
|
DARK_MODE=1
|
|
|
|
|
|
GTK_THEME="prefer-dark"
|
|
|
|
|
|
fi
|
|
|
|
|
|
fi
|
|
|
|
|
|
echo "✓ Refreshed existing theme"
|
|
|
|
|
|
else
|
|
|
|
|
|
echo "✗ No wallpaper specified and no existing theme found"
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
fi
|
|
|
|
|
|
fi
|
2025-11-21 21:47:50 +04:00
|
|
|
|
|
2025-11-22 00:16:21 +04:00
|
|
|
|
# Update Caelestia's wallpaper reference to match the one pywal used
|
|
|
|
|
|
if [ -f ~/.cache/wal/wal ]; then
|
|
|
|
|
|
WALLPAPER_PATH=$(cat ~/.cache/wal/wal)
|
|
|
|
|
|
mkdir -p ~/.local/state/caelestia/wallpaper
|
|
|
|
|
|
ln -sf "$WALLPAPER_PATH" ~/.local/state/caelestia/wallpaper/current
|
|
|
|
|
|
echo "$WALLPAPER_PATH" > ~/.local/state/caelestia/wallpaper/path.txt
|
|
|
|
|
|
echo "✓ Caelestia wallpaper reference updated"
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
2025-11-22 00:00:40 +04:00
|
|
|
|
# Copy the generated Caelestia scheme to the proper location
|
2025-11-21 21:47:50 +04:00
|
|
|
|
if [ -f ~/.cache/wal/caelestia-scheme.json ]; then
|
|
|
|
|
|
mkdir -p ~/.local/state/caelestia
|
|
|
|
|
|
cp ~/.cache/wal/caelestia-scheme.json ~/.local/state/caelestia/scheme.json
|
|
|
|
|
|
echo "✓ Caelestia colors updated"
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
2025-11-24 22:24:25 +04:00
|
|
|
|
# Generate GTK themes from PyWal colors
|
|
|
|
|
|
if command -v wal-gtk &> /dev/null; then
|
|
|
|
|
|
wal-gtk
|
|
|
|
|
|
echo "✓ GTK themes generated"
|
|
|
|
|
|
else
|
|
|
|
|
|
echo "ℹ wal-gtk not found - install 'wal-gtk-theme-git' for GTK theme support"
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
# Set GNOME/GTK dark mode preference (affects browsers and GTK apps)
|
|
|
|
|
|
if command -v gsettings &> /dev/null; then
|
|
|
|
|
|
gsettings set org.gnome.desktop.interface color-scheme "$GTK_THEME" 2>/dev/null && \
|
|
|
|
|
|
echo "✓ System dark mode preference set to: $GTK_THEME" || \
|
|
|
|
|
|
echo "ℹ Could not set GTK color scheme preference"
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
# Update Firefox theme via pywalfox
|
|
|
|
|
|
if command -v pywalfox &> /dev/null; then
|
|
|
|
|
|
pywalfox update &>/dev/null &
|
|
|
|
|
|
echo "✓ Firefox theme update triggered"
|
|
|
|
|
|
else
|
|
|
|
|
|
echo "ℹ pywalfox not found - install 'python-pywalfox' for Firefox support"
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
2025-11-22 00:00:40 +04:00
|
|
|
|
# Reload Hyprland configuration
|
2025-11-21 21:47:50 +04:00
|
|
|
|
if command -v hyprctl &> /dev/null; then
|
|
|
|
|
|
hyprctl reload
|
|
|
|
|
|
echo "✓ Hyprland configuration reloaded"
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
2025-11-22 00:00:40 +04:00
|
|
|
|
# Restart Caelestia shell to apply new colors
|
2025-11-21 21:47:50 +04:00
|
|
|
|
if pgrep -x "caelestia" > /dev/null; then
|
|
|
|
|
|
pkill caelestia
|
|
|
|
|
|
sleep 0.5
|
|
|
|
|
|
caelestia shell -d &
|
|
|
|
|
|
echo "✓ Caelestia shell restarted"
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
2025-11-22 17:37:45 +04:00
|
|
|
|
# Reload all running Kitty instances
|
|
|
|
|
|
if command -v kitty &> /dev/null; then
|
|
|
|
|
|
if pgrep -x "kitty" > /dev/null; then
|
|
|
|
|
|
killall -SIGUSR1 kitty 2>/dev/null
|
|
|
|
|
|
echo "✓ Kitty terminal colors reloaded"
|
|
|
|
|
|
fi
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
2025-11-24 22:24:25 +04:00
|
|
|
|
echo ""
|
|
|
|
|
|
echo "Done! Theme applied system-wide."
|
|
|
|
|
|
echo "Current mode: $([ "$DARK_MODE" = "1" ] && echo "Dark" || echo "Light")"
|