cf713cb0b4
If weeb mode is off, swaylock will display the default Hyprland wallpaper instead of the randomly chosen one when using the base swaylock (no effects).
356 lines
9.4 KiB
Bash
Executable file
356 lines
9.4 KiB
Bash
Executable file
#!/bin/bash
|
||
|
||
wp_base_dir="$HOME/Images/Wallpapers/Desktop"
|
||
declare -A wp_dirs=([SFW]="$wp_base_dir/SFW"
|
||
[NSFW]="$wp_base_dir/( ͡° ͜ʖ ͡°)"
|
||
[BONK]="$wp_base_dir/Bonk")
|
||
|
||
|
||
|
||
function pick_random_wallpaper {
|
||
if [[ ${#wp_opts[@]} -eq 0 ]]; then
|
||
target_wp_dirs=("${wp_dirs[SFW]}")
|
||
else
|
||
for opt in "${!wp_opts[@]}"; do
|
||
opt_value=${wp_opts[$opt]}
|
||
if [[ $opt_value -eq 1 ]]; then
|
||
target_wp_dirs+=("${wp_dirs[$opt]}")
|
||
fi
|
||
done
|
||
fi
|
||
|
||
echo "Picking a random wallpaper from ${target_wp_dirs[@]}."
|
||
|
||
wallpaper="$(find "${target_wp_dirs[@]}" -type f | shuf -n 1)"
|
||
wallpaper="$wallpaper"
|
||
}
|
||
|
||
|
||
|
||
function help {
|
||
cat <<- EOF
|
||
Usage: $(basename "$0") [options...]
|
||
|
||
-h, --help Show this message and quit.
|
||
-r, --random Change the theme by picking a random wallpaper.
|
||
-w, --wallpaper <path> Change the theme using this wallpaper.
|
||
-s, --sfw Pick a wallpaper from SFW folder (default).
|
||
-n, --nsfw Pick a wallpaper from NSFW folder.
|
||
-b, --bonk U horny dog ¬‿¬.
|
||
|
||
Options -s and -n can be used together.
|
||
If no option is specified, reloads the current theme.
|
||
EOF
|
||
}
|
||
|
||
|
||
|
||
declare -A wp_opts
|
||
while getopts "hrw:snb" opt; do
|
||
case $opt in
|
||
h)
|
||
help
|
||
exit
|
||
;;
|
||
r)
|
||
opt_random=1
|
||
;;
|
||
w)
|
||
opt_wallpaper=1
|
||
opt_wallpaper_arg="$OPTARG"
|
||
;;
|
||
s)
|
||
wp_opts[SFW]=1
|
||
;;
|
||
n)
|
||
wp_opts[NSFW]=1
|
||
;;
|
||
b)
|
||
wp_opts[BONK]=1
|
||
;;
|
||
\?)
|
||
echo "Invalid option: $opt."
|
||
exit 1
|
||
;;
|
||
esac
|
||
done
|
||
|
||
|
||
|
||
# Set/pick wallpaper accordingly to arguments passed
|
||
if [[ $opt_random -eq 1 && $opt_wallpaper -eq 1 ]]; then
|
||
echo "Option -r and -w can't be used together."
|
||
exit 1
|
||
elif [[ $opt_random -eq 1 ]]; then
|
||
pick_random_wallpaper
|
||
elif [[ $opt_wallpaper -eq 1 ]]; then
|
||
if [[ -f "$opt_wallpaper_arg" ]]; then
|
||
wallpaper="$opt_wallpaper_arg"
|
||
else
|
||
echo "Error: $opt_wallpaper_arg is not a valid path."
|
||
exit 1
|
||
fi
|
||
else
|
||
if [[ $# -gt 0 ]]; then
|
||
echo "Warning: Neither -r or -w were specified, ignoring option(s): $*."
|
||
fi
|
||
# To get the current wallpaper
|
||
source "$HOME/.cache/wal/colors.sh"
|
||
fi
|
||
|
||
echo "Selected wallpaper: $wallpaper"
|
||
|
||
|
||
|
||
# Create the colors scheme
|
||
echo "Generating color scheme using pywal."
|
||
wal -qni "$wallpaper" --saturate 0.75
|
||
|
||
# Replace apostrophes around the wallpaper path with quotes
|
||
# in case there is an apostrophe in the file name
|
||
sed -iE "/^wallpaper=/,/#/ s/='/=\"/" "$HOME/.cache/wal/colors.sh"
|
||
sed -iE "/^wallpaper=/,/#/ s/'$/\"/" "$HOME/.cache/wal/colors.sh"
|
||
|
||
|
||
|
||
# Source colors scheme generated
|
||
source "$HOME/.cache/wal/colors.sh"
|
||
|
||
|
||
|
||
# Set additional colors
|
||
accent1_dark_hsl="$(pastel darken 1 "$color5" | pastel format hsl)"
|
||
accent2_dark_hsl="$(pastel darken 1 "$color6" | pastel format hsl)"
|
||
declare -A colors=(
|
||
[foreground]="$foreground"
|
||
[good]="#00BB66"
|
||
[bad]="#AA2222"
|
||
[urgent]="$color4"
|
||
[accent1]="$color5"
|
||
[accent2]="$color6"
|
||
[background1]="$(pastel lighten 0.2 "$accent1_dark_hsl" | pastel format hex)"
|
||
[background2]="$(pastel lighten 0.2 "$accent2_dark_hsl" | pastel format hex)"
|
||
[hovered]="$(pastel lighten 0.25 "$accent1_dark_hsl" | pastel format hex)"
|
||
[selected]="$(pastel lighten 0.35 "$accent1_dark_hsl" | pastel format hex)"
|
||
[disabled]="$(pastel lighten 0.35 "$accent1_dark_hsl" | pastel format hex)"
|
||
[disabled2]="$(pastel lighten 0.35 "$accent2_dark_hsl" | pastel format hex)"
|
||
)
|
||
|
||
declare -A params=(
|
||
[border_radius]=4
|
||
[border_size]=2
|
||
[gaps_out]=15
|
||
[gaps_in]=8
|
||
[font]="'JetBrainsMono NF'"
|
||
)
|
||
|
||
# Display accent colors
|
||
# pastel color "${colors[accent1]}"
|
||
# pastel color "${colors[accent2]}"
|
||
|
||
|
||
|
||
# Clear colors/params files
|
||
echo -n '' > "$HOME/.config/gtk-3.0/colors-gtk.css"
|
||
echo -n '' > "$HOME/.config/hypr/colors.conf"
|
||
echo "wallpaper=\"$wallpaper\"" > "$HOME/.cache/colors.sh"
|
||
|
||
|
||
|
||
# Set colors variables in files
|
||
echo "Writing theme colors in files."
|
||
for key in "${!colors[@]}"; do
|
||
value="${colors[$key]}"
|
||
# Hyprland
|
||
echo '$'"$key=rgb(${value:1})" >> "$HOME/.config/hypr/colors.conf"
|
||
# GTK
|
||
echo "@define-color $key $value;" >> "$HOME/.config/gtk-3.0/colors-gtk.css"
|
||
# Shell
|
||
echo "${key}=$value" >> "$HOME/.cache/colors.sh"
|
||
# i3
|
||
sed -i "s/^set \$$key.*/set \$$key $value/" "$HOME/.config/i3/config"
|
||
done
|
||
|
||
# Add Hyprland/i3 params
|
||
echo "Writing parameters to Hyprland & i3 files."
|
||
for key in "${!params[@]}"; do
|
||
value="${params[$key]}"
|
||
# Hyprland
|
||
echo '$'"$key=$value" >> "$HOME/.config/hypr/colors.conf"
|
||
# i3
|
||
sed -i "s/^set \$$key.*/set \$$key $value/" "$HOME/.config/i3/config"
|
||
done
|
||
|
||
|
||
|
||
# Set Kitty params
|
||
echo "Changing colors/params in Kitty config file."
|
||
declare -A kitty_vars=(
|
||
[font_family]="${params[font]}"
|
||
[url_color]="${colors[accent1]}"
|
||
[tab_bar_background]="${colors[background1]}"
|
||
[active_tab_background]="${colors[selected]}"
|
||
[inactive_tab_background]="${colors[hovered]}"
|
||
[active_tab_foreground]="${colors[foreground]}"
|
||
[inactive_tab_foreground]="${colors[foreground]}"
|
||
)
|
||
for key in "${!kitty_vars[@]}"; do
|
||
value="${kitty_vars[$key]}"
|
||
sed -i "s/^$key.*/$key $value/" "$HOME/.config/kitty/kitty.conf"
|
||
done
|
||
|
||
|
||
|
||
# Set Waybar params
|
||
echo "Changing params in Waybar styling file."
|
||
declare -A waybar_vars=(
|
||
[font-family]="${params[font]}"
|
||
[border-bottom]="${params[border_size]}px solid transparent"
|
||
[margin-bottom]="${params[border_size]}px"
|
||
)
|
||
for key in "${!waybar_vars[@]}"; do
|
||
value="${waybar_vars[$key]}"
|
||
sed -i "s~$key:[^;]*~$key: $value~" "$HOME/.config/waybar/style.css"
|
||
done
|
||
|
||
|
||
|
||
# Set Wofi params
|
||
echo "Changing params in Wofi styling file."
|
||
declare -A wofi_vars_window=(
|
||
[font-family]="${params[font]}"
|
||
[border]="${params[border_size]}px solid transparent"
|
||
[border-radius]="${params[border_radius]}px"
|
||
)
|
||
for key in "${!wofi_vars_window[@]}"; do
|
||
value="${wofi_vars_window[$key]}"
|
||
sed -i "/^window/,/$key:/ s~$key:[^;]*~$key: $value~" "$HOME/.config/wofi/style.css"
|
||
done
|
||
|
||
declare -A wofi_vars_input=(
|
||
[margin]="${params[border_size]}px"
|
||
[border-radius]="${params[border_radius]}px ${params[border_radius]}px 0 0"
|
||
)
|
||
for key in "${!wofi_vars_input[@]}"; do
|
||
value="${wofi_vars_input[$key]}"
|
||
sed -i "/^#input/,/$key:/ s~$key:[^;]*~$key: $value~" "$HOME/.config/wofi/style.css"
|
||
done
|
||
|
||
# Set entry:selected border-radius
|
||
sed -i "/^#entry:selected/,/border-radius:/ s/border-radius:[^;]*/border-radius: $(( params[border_radius]/2 ))px/" "$HOME/.config/wofi/style.css"
|
||
|
||
|
||
|
||
# Set Mako params
|
||
echo "Changing colors/params in Mako config file."
|
||
declare -A mako_vars=(
|
||
[font]="${params[font]} 11"
|
||
[border-radius]="${params[border_radius]}"
|
||
[border-size]="${params[border_size]}"
|
||
[outer-margin]="$((params[gaps_out]*2)),$((params[gaps_out]*2)),0,0"
|
||
[text-color]="${colors[foreground]}"
|
||
[background-color]="${colors[background1]}"
|
||
[border-color]="${colors[accent1]}"
|
||
)
|
||
for key in "${!mako_vars[@]}"; do
|
||
value="${mako_vars[$key]}"
|
||
sed -i "s/$key=.*/$key=$value/" "$HOME/.config/mako/config"
|
||
done
|
||
|
||
|
||
|
||
# BetterDiscord
|
||
if [[ -x /bin/betterdiscordctl ]]; then
|
||
echo "Executable found for betterdiscordctl."
|
||
if [[ ! -f "$HOME/.config/BetterDiscord/data/stable/custom.css" ]]; then
|
||
echo "Downloading ClearVision theme for BetterDiscord."
|
||
mkdir -p "$HOME/.config/BetterDiscord/data/stable"
|
||
wget -O "$HOME/.config/BetterDiscord/data/stable/custom.css" "https://betterdiscord.app/Download?id=23"
|
||
fi
|
||
|
||
echo "Changing BetterDiscord theme colors."
|
||
declare -A bd_vars=(
|
||
[main-color]="${colors[accent1]}"
|
||
[hover-color]="${colors[accent2]}"
|
||
[text-normal]="${colors[foreground]}"
|
||
[background-shading]='0%'
|
||
[background-overlay]='rgba(0, 0, 0, 0)'
|
||
[background-image]="linear-gradient(160deg, ${colors[background1]}, ${colors[background2]})"
|
||
)
|
||
for key in "${!bd_vars[@]}"; do
|
||
value="${bd_vars[$key]}"
|
||
sed -i "s~--$key:[^;]*~--$key: $value~" "$HOME/.config/BetterDiscord/data/stable/custom.css"
|
||
done
|
||
else
|
||
echo "No executable found for betterdiscordctl, skipping."
|
||
fi
|
||
|
||
|
||
|
||
# Change Wlogout icons color
|
||
echo "Changing wlogout icons colors."
|
||
wlogout_img=('lock' 'reboot' 'shutdown' 'logout')
|
||
for img in "${wlogout_img[@]}"; do
|
||
convert "$HOME/.config/wlogout/$img.png" -fill "${colors[accent1]}" -colorize 100 "$HOME/.config/wlogout/$img.png"
|
||
convert "$HOME/.config/wlogout/$img-focus.png" -fill "${colors[accent2]}" -colorize 100 "$HOME/.config/wlogout/$img-focus.png"
|
||
done
|
||
|
||
|
||
|
||
# Reload/restart stuff
|
||
if [[ -z "$WAYLAND_DISPLAY" ]]; then
|
||
echo "Reloading i3."
|
||
i3-msg reload > /dev/null &
|
||
|
||
echo "Changing wallpaper using feh."
|
||
feh --no-fehbg --bg-fill "$wallpaper" &
|
||
else
|
||
echo "Reloading Hyprland."
|
||
hyprctl reload > /dev/null &
|
||
|
||
if grep -q 1 "$HOME/.cache/weeb-mode"; then
|
||
echo "Changing wallpaper using swaybg."
|
||
pkill -u "$USER" swaybg &> /dev/null
|
||
hyprctl dispatch exec "swaybg -i \"$wallpaper\"" > /dev/null &
|
||
fi
|
||
|
||
if pgrep -u "$USER" waybar > /dev/null; then
|
||
echo "Reloading Waybar."
|
||
killall -SIGUSR2 waybar &
|
||
else
|
||
echo "Starting Waybar."
|
||
hyprctl dispatch exec waybar > /dev/null &
|
||
fi
|
||
|
||
if pgrep -u "$USER" mako > /dev/null; then
|
||
echo "Reloading Mako."
|
||
makoctl reload &
|
||
else
|
||
echo "Starting mako."
|
||
hyprctl dispatch exec mako > /dev/null &
|
||
fi
|
||
fi
|
||
|
||
|
||
# Reload Kitty
|
||
echo "Reloading opened Kitty windows."
|
||
killall -SIGUSR1 kitty &> /dev/null &
|
||
|
||
|
||
# Reload pywalfox
|
||
#if pgrep -u "$USER" firefox &> /dev/null; then
|
||
# echo "Reloading pywalfox."
|
||
# pywalfox update &
|
||
#fi
|
||
|
||
|
||
# OpenRGB
|
||
if [[ -x /bin/openrgb ]]; then
|
||
echo "Changing OpenRGB colors."
|
||
openrgb --noautoconnect -c "${colors[accent1]:1}" > /dev/null &
|
||
fi
|
||
|
||
|
||
# Generate blurred wallpaper to use with swaylock/i3lock
|
||
convert "$wallpaper" -blur 0x5 -resize 1920x1080 "$HOME/.cache/wallpaper-blurred.jpg" &
|
||
[[ -f "$HOME/.cache/wallpaper-hypr-blurred.jpg" ]] || convert /usr/share/hyprland/wall_2K.png -blur 0x5 -resize 1920x1080 "$HOME/.cache/wallpaper-hypr-blurred.jpg" &
|