From f59171268cd27160baf6094e58444d397834df14 Mon Sep 17 00:00:00 2001 From: pika Date: Sun, 4 May 2025 20:29:34 +0200 Subject: [PATCH] wip --- .scripts/init.sh | 2 +- .scripts/refresh.sh | 22 +---- .scripts/wallpaper | 227 +++++++++++++++++++++++++++----------------- .scripts/wlogout.sh | 46 ++++++++- hotkeys.conf | 5 +- hyprland.conf | 3 +- 6 files changed, 190 insertions(+), 115 deletions(-) diff --git a/.scripts/init.sh b/.scripts/init.sh index 320a524..63dc04e 100755 --- a/.scripts/init.sh +++ b/.scripts/init.sh @@ -23,11 +23,11 @@ initialize_modules() { # ─< hyprpanel, waybar, gBar >──────────────────────────────────────────────────────────── # bar="hyprpanel" bash "$HOME/.config/hypr/.scripts/bar" + bash "$HOME/.config/hypr/.scripts/wallpaper" modules=" copyq nwg-look - swww wob redshift " diff --git a/.scripts/refresh.sh b/.scripts/refresh.sh index cbaf41a..3a72b50 100755 --- a/.scripts/refresh.sh +++ b/.scripts/refresh.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # ─< scriptdir declaration >────────────────────────────────────────────────────────────── _scripts="$HOME/.config/hypr/.scripts" @@ -8,18 +8,6 @@ command_exists() { command -v "$@" >/dev/null 2>&1 } -_wallpaper() { - if command -v swww >/dev/null 2>&1; then - if [ -e "$_scripts/random_swww.sh" ]; then - $_scripts/random_swww.sh - else - notify-send -u normal "" "script for initializing wallpaper with swww is missing.." - fi - else - notify-send -u low "" "There may be no wallpaper bc swww is missing!" - fi -} - _kill_() { # ─< Kill already running processes >───────────────────────────────────────────────────── hyprpanel="gjs" # since hyprpanel has so many different wordings, making it clear that this is currently the hyprpanel service name @@ -95,17 +83,17 @@ _bar() { main() { - notify-send "low" "terminating main wm elements" + # notify-send "low" "terminating main wm elements" _kill_ # relaunch swaync sleep 0.3 # swaync >/dev/null 2>&1 & - notify-send "low" "bar" "launching.." - _bar + # notify-send "low" "bar" "launching.." + bash "$scriptdir/bar" notify-send "low" "wallpaper" "loading.." - _wallpaper + bash "$scriptdir/wallpaper" if command_exists redshift; then notify-send "low" "redshift" "protecting your eyes from the blue light.." diff --git a/.scripts/wallpaper b/.scripts/wallpaper index c4376b0..99984c7 100755 --- a/.scripts/wallpaper +++ b/.scripts/wallpaper @@ -12,86 +12,149 @@ export SWWW_TRANSITION=center # │ Nordic, Windoof │ # ╰───────────────────────────────────────────────────────────────────────────╯ -: "${SWWW_EXCLUDED_DIRS:=Anime,Colorful,Gaming,Gifs,Logos,Nordic,Windoof}" - -# ─< checking for swww >────────────────────────────────────────────────────────────────── -if ! command -v swww >/dev/null 2>&1; then - notify-send "ERROR" "swww was not found on the system" - exit 1 -fi - -# ─< Check if swww daemon is running, start if not >───────────────────────────────────── -if ! pgrep -x "swww-daemon" >/dev/null; then - notify-send "SWWW" "swww not running - starting it now" - swww-daemon - sleep 1 # Give the daemon a second to start - if ! pgrep -x "swww-daemon" >/dev/null; then - notify-send "ERROR" "seems like swww didn't start as expected" - return 1 +init() { + # ─< checking for swww >────────────────────────────────────────────────────────────────── + if ! command -v swww >/dev/null 2>&1; then + notify-send "ERROR" "swww was not found on the system" + exit 1 fi - notify-send "SWWW" "started successfully" -fi -_swww() { - if [ -z "$1" ]; then - # ─< random wallpaper selection >───────────────────────────────────────────────────────── - local wall_dir="$HOME/.wallpaper" - - # ─< Create an array of directories to exclude >────────────────────────────────────────── - IFS=',' read -ra EXCLUDED_DIRS <<<"$SWWW_EXCLUDED_DIRS" - - # # ─< Build the find command with exclusions >───────────────────────────────────────────── - # local find_cmd="find \"$wall_dir\" -type f \( -iname \"*.png\" -o -iname \"*.jpg\" -o -iname \"*.jpeg\" -o -iname \"*.gif\" \)" - # - # # Add directory exclusions - # for dir in "${EXCLUDED_DIRS[@]}"; do - # find_cmd+=" -not \( -path \"$wall_dir/$dir/*\" -prune \)" - # done - # - # # Add final exclusions - # find_cmd+=" -not -path \"*/\.git/*\"" - # - # # ─< Select a random picture >──────────────────────────────────────────────────────────── - # local pic=$(eval "$find_cmd" | shuf -n 1) - # Alternative approach using shopt - shopt -s globstar nullglob - local pics=() - for pic in "$wall_dir"/**/*.{png,jpg,jpeg,gif}; do - # Skip excluded directories - for dir in "${EXCLUDED_DIRS[@]}"; do - [[ $pic == "$wall_dir/$dir/"* ]] && continue 2 - done - pics+=("$pic") - done - - local pic=$(printf "%s\n" "${pics[@]}" | shuf -n 1) - # Check if we found any picture - # notify-send "pic" "$pic" - if [ -z "$pic" ]; then - notify-send "ERROR" "No wallpapers found in $wall_dir (excluding: $SWWW_EXCLUDED_DIRS)" + # ─< Check if swww daemon is running, start if not >───────────────────────────────────── + if ! pgrep -x "swww-daemon" >/dev/null; then + notify-send "SWWW" "swww not running - starting it now" + swww-daemon + sleep 1 # Give the daemon a second to start + if ! pgrep -x "swww-daemon" >/dev/null; then + notify-send "ERROR" "seems like swww didn't start as expected" return 1 fi + notify-send "SWWW" "started successfully" + fi +} - # # ─< Check if swww daemon is running, start if not >───────────────────────────────────── - # if ! pgrep -x "swww-daemon" >/dev/null; then - # notify-send "SWWW" "swww not running - starting it now" - # swww-daemon - # sleep 1 # Give the daemon a second to start - # if ! pgrep -x "swww" >/dev/null; then - # notify-send "ERROR" "seems like swww didn't start as expected" - # return 0 - # fi - # notify-send "SWWW" "started successfully" - # fi +randomSwww() { + : "${SWWW_EXCLUDED_DIRS:=Anime,Colorful,Gaming,Gifs,Logos,Nordic,Windoof}" - # ─< checking the wall_dir variable >───────────────────────────────────────────────────── - # if [[ ! -d "$wall_dir" ]]; then - # notify-send "ERROR" "$wall_dir path not found" - # return 1 - # fi + # if [ -z "$1" ]; then + # ─< random wallpaper selection >───────────────────────────────────────────────────────── + local wall_dir="$HOME/.wallpaper" + # ─< Create an array of directories to exclude >────────────────────────────────────────── + IFS=',' read -ra EXCLUDED_DIRS <<<"$SWWW_EXCLUDED_DIRS" + + # # ─< Build the find command with exclusions >───────────────────────────────────────────── + # local find_cmd="find \"$wall_dir\" -type f \( -iname \"*.png\" -o -iname \"*.jpg\" -o -iname \"*.jpeg\" -o -iname \"*.gif\" \)" + # + # # Add directory exclusions + # for dir in "${EXCLUDED_DIRS[@]}"; do + # find_cmd+=" -not \( -path \"$wall_dir/$dir/*\" -prune \)" + # done + # + # # Add final exclusions + # find_cmd+=" -not -path \"*/\.git/*\"" + # + # # ─< Select a random picture >──────────────────────────────────────────────────────────── + # local pic=$(eval "$find_cmd" | shuf -n 1) + # Alternative approach using shopt + shopt -s globstar nullglob + local pics=() + for pic in "$wall_dir"/**/*.{png,jpg,jpeg,gif}; do + # Skip excluded directories + for dir in "${EXCLUDED_DIRS[@]}"; do + [[ $pic == "$wall_dir/$dir/"* ]] && continue 2 + done + pics+=("$pic") + done + + local pic=$(printf "%s\n" "${pics[@]}" | shuf -n 1) + # Check if we found any picture + # notify-send "pic" "$pic" + if [ -z "$pic" ]; then + notify-send "ERROR" "No wallpapers found in $wall_dir (excluding: $SWWW_EXCLUDED_DIRS)" + return 1 + fi + + # # ─< Check if swww daemon is running, start if not >───────────────────────────────────── + # if ! pgrep -x "swww-daemon" >/dev/null; then + # notify-send "SWWW" "swww not running - starting it now" + # swww-daemon + # sleep 1 # Give the daemon a second to start + # if ! pgrep -x "swww" >/dev/null; then + # notify-send "ERROR" "seems like swww didn't start as expected" + # return 0 + # fi + # notify-send "SWWW" "started successfully" + # fi + + # ─< checking the wall_dir variable >───────────────────────────────────────────────────── + # if [[ ! -d "$wall_dir" ]]; then + # notify-send "ERROR" "$wall_dir path not found" + # return 1 + # fi + + # ─< executing swww with the random $pic >──────────────────────────────────────────────── + if swww img "$pic" --transition-fps "$SWWW_TRANSITION_FPS" --transition-step "$SWWW_TRANSITION_STEP" --transition-type "$SWWW_TRANSITION"; then + notify-send "󰸉 " "Changed wallpaper to ${pic##*/}" + notify-send " " "Not sourcing from: $SWWW_EXCLUDED_DIRS" + else + notify-send "ERROR" "Failed to set wallpaper: $pic" + return 1 + fi + # else + # + # # Check if file exists + # if [[ ! -f "$1" ]]; then + # notify-send "ERROR" "File not found: $1" + # return 1 + # fi + # + # # ─< executing swww with the random $pic >──────────────────────────────────────────────── + # if swww img "$1" --transition-fps "$SWWW_TRANSITION_FPS" --transition-step "$SWWW_TRANSITION_STEP" --transition-type "$SWWW_TRANSITION"; then + # notify-send "󰸉 " "Changed wallpaper to ${1##*/}" + # else + # notify-send "ERROR" "Failed to set wallpaper: $1" + # return 1 + # fi + # fi +} + +# Main logic +if [ -z "$1" ]; then + init + # No argument given, use the last wallpaper + # last_wallpaper_file="$HOME/.last_wallpaper" + # if [ -f "$last_wallpaper_file" ]; then + # last_wallpaper=$(cat "$last_wallpaper_file") + # set_wallpaper "$last_wallpaper" + # else + # log_notify "critical" "Error" "No last wallpaper found" + # exit 1 + # fi +elif [ "$1" == "random" ]; then + randomSwww + # Use a random wallpaper + # wall_dir="$HOME/.wallpaper" + # IFS=',' read -ra EXCLUDED_DIRS <<<"$SWWW_EXCLUDED_DIRS" + # shopt -s globstar nullglob + # pics=() + # for pic in "$wall_dir"/**/*.{png,jpg,jpeg,gif}; do + # for dir in "${EXCLUDED_DIRS[@]}"; do + # [[ $pic == "$wall_dir/$dir/"* ]] && continue 2 + # done + # pics+=("$pic") + # done + # random_pic=$(printf "%s\n" "${pics[@]}" | shuf -n 1) + # if [ -z "$random_pic" ]; then + # log_notify "critical" "Error" "No wallpapers found in $wall_dir (excluding: $SWWW_EXCLUDED_DIRS)" + # exit 1 + # fi + # set_wallpaper "$random_pic" + # echo "$random_pic" >"$HOME/.last_wallpaper" +else + # Use the specified path + if [ -f "$1" ]; then # ─< executing swww with the random $pic >──────────────────────────────────────────────── - if swww img "$pic" --transition-fps "$SWWW_TRANSITION_FPS" --transition-step "$SWWW_TRANSITION_STEP" --transition-type "$SWWW_TRANSITION"; then + if swww img "$1" --transition-fps "$SWWW_TRANSITION_FPS" --transition-step "$SWWW_TRANSITION_STEP" --transition-type "$SWWW_TRANSITION"; then notify-send "󰸉 " "Changed wallpaper to ${pic##*/}" notify-send " " "Not sourcing from: $SWWW_EXCLUDED_DIRS" else @@ -99,21 +162,7 @@ _swww() { return 1 fi else - - # Check if file exists - if [[ ! -f "$1" ]]; then - notify-send "ERROR" "File not found: $1" - return 1 - fi - - # ─< executing swww with the random $pic >──────────────────────────────────────────────── - if swww img "$1" --transition-fps "$SWWW_TRANSITION_FPS" --transition-step "$SWWW_TRANSITION_STEP" --transition-type "$SWWW_TRANSITION"; then - notify-send "󰸉 " "Changed wallpaper to ${1##*/}" - else - notify-send "ERROR" "Failed to set wallpaper: $1" - return 1 - fi + log_notify "critical" "Error" "File not found: $1" + exit 1 fi -} - -_swww "$@" +fi diff --git a/.scripts/wlogout.sh b/.scripts/wlogout.sh index fa3d927..d8bc09c 100755 --- a/.scripts/wlogout.sh +++ b/.scripts/wlogout.sh @@ -1,4 +1,42 @@ -#!/bin/bash -grim /tmp/shot.png -magick /tmp/shot.png -blur 0x8 /tmp/shot_blurred.png -wlogout --css $HOME/.config/wlogout/style.css +#!/usr/bin/env bash +# ─< Check if the given command exists silently >───────────────────────────────────────── +command_exists() { + command -v "$@" >/dev/null 2>&1 +} + +if ! command_exists wlogout; then + exit 1 +fi + +# Take a screenshot and blur it using ffmpeg +take_and_blur_screenshot() { + local blurred_path="$HOME/.config/wlogout/tmp.png" + + # Take a screenshot and blur it + grim -t ppm - | ffmpeg -f image2pipe -vcodec ppm -i - -vf "gblur=sigma=8" -vframes 1 "$blurred_path" + # handle_error $? "grim and ffmpeg" +} + +# Main logic +if ! command_exists wlogout; then + # log_notify "critical" "Error" "wlogout not found" + exit 1 +fi + +if command_exists grim && command_exists ffmpeg; then + take_and_blur_screenshot + wlogout --css "$HOME/.config/wlogout/style_blur.css" +else + # log_notify "critical" "Error" "Required tools (grim, ffmpeg) not found" + exit 1 +fi + +# wlogout + +# if command_exists grim && command_exists magick; then +# grim /tmp/shot.png +# magick /tmp/shot.png -blur 0x8 $HOME/.config/wlogout/tmp.png +# wlogout --css $HOME/.config/wlogout/style_blur.css +# else +# wlogout +# fi diff --git a/hotkeys.conf b/hotkeys.conf index 35c050d..5e4a31a 100644 --- a/hotkeys.conf +++ b/hotkeys.conf @@ -47,7 +47,7 @@ $tofi = pkill tofi || tofi-drun -c $HOME/.config/tofi/config # ─< Set programs that you use >────────────────────────────────────────────────────────── $menu = $rofi -$wallpaper = $scripts/wallpaper +$wallpaper = "$scripts/wallpaper random" $screenshotTool = $scripts/screenshot $test = $scripts/a.sh @@ -55,7 +55,8 @@ $terminal = foot # kitty --class="shell" -e zsh # wezterm start --always-new-pro $browser = zen-browser # brave-browser $fileManager = caja # pcmanfm nautilus cosmic-files caja thunar dolphin $lockscreen = swaylock --screenshots --clock --indicator --effect-pixelate 18 --effect-blur 8x8 -$logout = wlogout +# $logout = wlogout +$logout = $scripts/wlogout.sh $notify = swaync-client --open-panel # $screenshotTool = hyprshot --clipboard-only -m region diff --git a/hyprland.conf b/hyprland.conf index b2ba07f..a175682 100644 --- a/hyprland.conf +++ b/hyprland.conf @@ -46,10 +46,9 @@ workspace = 69, monitor:$main, persistent:true, allow-tearing:true, gapsin:0, ga workspace = special:magic, monitor:$main, on-created-empty:$terminal, border:0 # ─< initialisation script >───────────────────────────────────────────────────────────────── +exec-once = systemctl --user start hyprpolkitagent exec-once = $h_conf/.scripts/init.sh - exec-once = hypridle - exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP # See https://wiki.hyprland.org/Configuring/Environment-variables/