diff --git a/.config/hypr/hyprland.conf b/.config/hypr/hyprland.conf index ea22f9b..029f2ab 100644 --- a/.config/hypr/hyprland.conf +++ b/.config/hypr/hyprland.conf @@ -8,8 +8,7 @@ $browser = brave exec-once = /usr/lib/xdg-desktop-portal-hyprland & exec-once = /usr/lib/xdg-desktop-portal & -exec-once = swww-daemon -exec-once = swww img ~/.wallpapers/liminal.png +exec-once = hyprpaper exec = gsettings set org.gnome.desktop.interface color-scheme "prefer-dark" # for GTK4 apps exec = gsettings set org.gnome.desktop.interface gtk-theme "adw-gtk3-dark" # for GTK3 apps @@ -82,7 +81,7 @@ input { accel_profile = flat force_no_accel=2 - sensitivity = 0 # -1.0 - 1.0, 0 means no modification. + sensitivity = 1 # -1.0 - 1.0, 0 means no modification. touchpad { natural_scroll = true @@ -102,3 +101,4 @@ source = ~/.config/hypr/keybinds.conf source = ~/.config/hypr/applications.conf source = ~/.config/hypr/decoration.conf source = ~/.config/hypr/workspaces.conf +source = ~/.config/hypr/hyprpaper.conf diff --git a/.config/hypr/keybinds.conf b/.config/hypr/keybinds.conf index a2a717f..6145c3c 100644 --- a/.config/hypr/keybinds.conf +++ b/.config/hypr/keybinds.conf @@ -40,6 +40,9 @@ bind = $mainMod, mouse_up, workspace, e-1 bindm = $mainMod, mouse:272, movewindow bindm = $mainMod, mouse:273, resizewindow +# Change wallpaper +bind = $mainMod, W, exec, ~/.config/wofi/scripts/wallpaper.sh + # Laptop multimedia keys for volume and LCD brightness bindel = $mainMod, P, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+ bindel = $mainMod, O, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- diff --git a/.config/wofi/scripts/wallpaper.sh b/.config/wofi/scripts/wallpaper.sh new file mode 100755 index 0000000..66ebc7c --- /dev/null +++ b/.config/wofi/scripts/wallpaper.sh @@ -0,0 +1,91 @@ +#!/usr/bin/env bash +# Configuration +WALLPAPER_DIR="$HOME/.wallpapers" # Change this to your wallpaper directory +CACHE_DIR="$HOME/.cache/wallpaper-selector" +THUMBNAIL_WIDTH="250" # Size of thumbnails in pixels (16:9) +THUMBNAIL_HEIGHT="141" +# Create cache directory if it doesn't exist +mkdir -p "$CACHE_DIR" + +# Function to generate thumbnail +generate_thumbnail() { + local input="$1" + local output="$2" + magick "$input" -thumbnail "${THUMBNAIL_WIDTH}x${THUMBNAIL_HEIGHT}^" -gravity center -extent "${THUMBNAIL_WIDTH}x${THUMBNAIL_HEIGHT}" "$output" +} + +# Create shuffle icon thumbnail on the fly +SHUFFLE_ICON="$CACHE_DIR/shuffle_thumbnail.png" +# Create a properly sized shuffle icon thumbnail +# magick -size "${THUMBNAIL_WIDTH}x${THUMBNAIL_HEIGHT}" xc:#1e1e2e \ +# "$HOME/Repos/wallpaper-selector/assets/shuffle.png" -resize "120x120" -gravity center -composite \ +# "$SHUFFLE_ICON" +magick -size "${THUMBNAIL_WIDTH}x${THUMBNAIL_HEIGHT}" xc:#1e1e2e \ + \( "$HOME/Repos/wallpaper-selector/assets/shuffle.png" -resize "80x80" \) \ + -gravity center -composite "$SHUFFLE_ICON" + +# Generate thumbnails and create menu items +generate_menu() { + # Add random/shuffle option with a name that sorts first (using ! prefix) + echo -en "img:$SHUFFLE_ICON\x00info:!Random Wallpaper\x1fRANDOM\n" + + # Then add all wallpapers + for img in "$WALLPAPER_DIR"/*.{jpg,jpeg,png}; do + # Skip if no matches found + [[ -f "$img" ]] || continue + + # Generate thumbnail filename + thumbnail="$CACHE_DIR/$(basename "${img%.*}").png" + + # Generate thumbnail if it doesn't exist or is older than source + if [[ ! -f "$thumbnail" ]] || [[ "$img" -nt "$thumbnail" ]]; then + generate_thumbnail "$img" "$thumbnail" + fi + + # Output menu item (filename and path) + echo -en "img:$thumbnail\x00info:$(basename "$img")\x1f$img\n" + done +} + +# Use wofi to display grid of wallpapers - IMPORTANT: added --sort-order=default +selected=$(generate_menu | wofi --show dmenu \ + --cache-file /dev/null \ + --define "image-size=${THUMBNAIL_WIDTH}x${THUMBNAIL_HEIGHT}" \ + --columns 3 \ + --allow-images \ + --insensitive \ + --sort-order=default \ + --prompt "Select Wallpaper" \ + --conf ~/.config/wofi/wallpaper.conf \ + ) + +# Set wallpaper if one was selected +if [ -n "$selected" ]; then + # Remove the img: prefix to get the cached thumbnail path + thumbnail_path="${selected#img:}" + + # Check if random wallpaper was selected + if [[ "$thumbnail_path" == "$SHUFFLE_ICON" ]]; then + # Select a random wallpaper from the directory + original_path=$(find "$WALLPAPER_DIR" -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" \) | shuf -n 1) + else + # Get the original filename from the thumbnail path + original_filename=$(basename "${thumbnail_path%.*}") + + # Find the corresponding original file in the wallpaper directory + original_path=$(find "$WALLPAPER_DIR" -type f -name "${original_filename}.*" | head -n1) + fi + + # Ensure a valid wallpaper was found before proceeding + if [ -n "$original_path" ]; then + hyprctl hyprpaper wallpaper ",$original_path" + + # Save the selection for persistence + echo "$original_path" > "$HOME/.cache/current_wallpaper" + + # Optional: Notify user + notify-send "Wallpaper" "Wallpaper has been updated" -i "$original_path" + else + notify-send "Wallpaper Error" "Could not find the original wallpaper file." + fi +fi diff --git a/.config/wofi/wallpaper.conf b/.config/wofi/wallpaper.conf new file mode 100644 index 0000000..84cb599 --- /dev/null +++ b/.config/wofi/wallpaper.conf @@ -0,0 +1,18 @@ +# Window settings +width=800 +height=600 +location=center +show=dmenu +prompt=Select Wallpaper +layer=overlay + +# Layout +columns=3 +image_size=250x141 # 16:9 +allow_images=true +insensitive=true +hide_scroll=true +sort_order=alphabetical + +# Style +style_path=~/.config/wofi/wallpaper.css diff --git a/.config/wofi/wallpaper.css b/.config/wofi/wallpaper.css new file mode 100644 index 0000000..449bfa0 --- /dev/null +++ b/.config/wofi/wallpaper.css @@ -0,0 +1,47 @@ +window { + background-color: #1e1e2e; + border-radius: 8px; + border: 2px solid #313244; +} + +#input { + margin: 2px; + padding: 4px; + border-radius: 4px; + border: none; + background-color: #313244; + color: #cdd6f4; +} + +#inner-box { + margin: 0px; +} + +#outer-box { + margin: 0px; +} + +#scroll { + margin: 0px; +} + +#text { + margin: 2px; + color: #cdd6f4; +} + +#entry { + padding: 2px; + margin: 0px; + border-radius: 4px; +} + +#entry:selected { + background-color: #313244; +} + +#img { + margin: 2px; + padding-left: 4px; + border-radius: 4px; +} diff --git a/.wallpapers/Balcony-ja.png b/.wallpapers/Balcony-ja.png new file mode 100644 index 0000000..0e45505 Binary files /dev/null and b/.wallpapers/Balcony-ja.png differ diff --git a/.wallpapers/Night monochrome.jpg b/.wallpapers/Night monochrome.jpg new file mode 100644 index 0000000..e523669 Binary files /dev/null and b/.wallpapers/Night monochrome.jpg differ diff --git a/.wallpapers/liminal.png b/.wallpapers/liminal.png new file mode 100644 index 0000000..f8c9e94 Binary files /dev/null and b/.wallpapers/liminal.png differ