Files
hyprduma-config/pywal.sh
T

131 lines
4.2 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# 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)
WALLPAPER="$1"
LIGHT_MODE="$2"
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
# 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
# Copy the generated Caelestia scheme to the proper location
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
# 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
# Reload Hyprland configuration
if command -v hyprctl &> /dev/null; then
hyprctl reload
echo "✓ Hyprland configuration reloaded"
fi
# Restart Caelestia shell to apply new colors
if pgrep -x "caelestia" > /dev/null; then
pkill caelestia
sleep 0.5
caelestia shell -d &
echo "✓ Caelestia shell restarted"
fi
# 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
echo ""
echo "Done! Theme applied system-wide."
echo "Current mode: $([ "$DARK_MODE" = "1" ] && echo "Dark" || echo "Light")"