feat: add hyprland sound system with event-triggered audio feedback;

feat: implement new hyprland plugins (hyprfocus, hyprbars, dynamic-cursors);
refactor: reorganize hyprland autostart with delay staging and plugin configuration;
feat: add notification urgency-based sound system to swaync;
feat: enhance waybar with battery module, mpd controls, and dock bar;
refactor: update waybar taskbar with active window indicators and sorting;
feat: add hyprland shutdown sound and login audio greeting;
fix: adjust cava sleep timer and mpd sticker database configuration;
feat: update rmpc keybindings for improved playlist management;
fix: modify rofi keybindings for better navigation;
chore: add zsh aliases and misspell corrections;
refactor: update styling across swaync, waybar, and hyprland with new border radii and accent colors.
This commit is contained in:
2025-12-29 20:47:57 +03:00
parent b453f9efd7
commit f30e7d0085
36 changed files with 387 additions and 129 deletions

View File

@@ -25,37 +25,32 @@ $privateBrowser = env GTK_THEME=Adwaita:light zen-browser --private-window
$notificationCenter = pkill rofi & swaync-client -t -sw || notify-send --hint int:transient:1 "Error SwayNC is down"
$mpdpass = kapuchinamusica
$startDelay = sleep 2
#################
### AUTOSTART ###
#################
exec = sh -c '[[ $(cat "$HOME/.config/waybar/goal.txt") != "." ]] && swaync-client -C && notify-send -u critical -i "$HOME/Pictures/Fetch/atheism_paint.png" "Reminder" "$(cat $HOME/.config/waybar/goal.txt)"'
exec-once = gsettings set org.gnome.desktop.interface color-scheme "prefer-dark"
# Autostart necessary processes (like notifications daemons, status bars, etc.)
# Or execute your favorite apps at launch like this:
# Le essential hyprland crap
# exec-once = hyprpaper
exec-once = sh -c '[[ $(cat "$HOME/.config/waybar/goal.txt") != "." ]] && swaync-client -C && notify-send -u critical -i "$HOME/Pictures/Fetch/atheism_paint.png" "Reminder" "$(cat $HOME/.config/waybar/goal.txt)"'
exec-once = swww-daemon
exec-once = ~/.config/hypr/scripts/autofreeze_swww.sh
exec-once = wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 50% && play -v 0.7 ~/.config/hypr/sound/login.ogg
exec-once = ~/.config/waybar/run.sh
exec-once = swaync
exec-once = hypridle
exec-once = hyprsunset
exec-once = eww daemon
exec-once = mullvad-vpn
exec-once = ~/.config/hypr/scripts/random_wallpaper.sh
exec-once = ~/.config/hypr/scripts/autofreezer.sh
exec-once = ~/.config/fastfetch/scripts/fetch_update_count.sh
exec-once = copyq --start-server
exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
exec-once = thunar --daemon
exec-once = touch /tmp/toggle_ssocks
exec-once = ~/.config/hypr/scripts/toggle_proxy.sh
exec-once = nextcloud --background &
exec-once = [workspace 8 silent] AyuGram
exec-once = $startDelay && hypridle
exec-once = $startDelay && hyprsunset
exec-once = $startDelay && /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
exec-once = $startDelay && thunar --daemon
exec-once = $startDelay && [workspace 8 silent] AyuGram
exec-once = $startDelay && swaync
exec-once = $startDelay && mullvad-vpn
exec-once = $startDelay && touch /tmp/toggle_ssocks
exec-once = $startDelay && ~/.config/hypr/scripts/autofreeze_swww.sh
exec-once = $startDelay && ~/.config/fastfetch/scripts/fetch_update_count.sh
exec-once = $startDelay && ~/.config/hypr/scripts/toggle_proxy.sh
exec-once = $startDelay && ~/.config/hypr/scripts/sounds.sh
exec-once = $startDelay && ~/.config/hypr/scripts/random_wallpaper.sh
exec-once = $startDelay && ~/.config/hypr/scripts/autofreezer.sh
exec-shutdown = play -v 0.7 $HOME/Templates/Sounds/teleport.mp3
#############################
### ENVIRONMENT VARIABLES ###
@@ -92,8 +87,8 @@ env = HYPRCURSOR_SIZE,24
# https://wiki.hyprland.org/Configuring/Variables/#general
general {
gaps_in = 12.5
gaps_out = 12
gaps_in = 15
gaps_out = 25
border_size = 1
@@ -115,12 +110,11 @@ general {
snap {
enabled = true
}
}
# https://wiki.hyprland.org/Configuring/Variables/#decoration
decoration {
rounding = 10
rounding = 15
rounding_power = 2
border_part_of_window = 0
@@ -164,7 +158,7 @@ group {
col.active = rgba(F8859Eff)
col.inactive = rgba(32323264) rgba(32323264) 45deg
gaps_in = 5
gaps_out = 5
gaps_out = 2
}
}
@@ -246,16 +240,22 @@ master {
new_status = master
}
render {
direct_scanout = 1
}
# https://wiki.hyprland.org/Configuring/Variables/#misc
misc {
force_default_wallpaper = 1 # Set to 0 or 1 to disable the anime mascot wallpapers
disable_hyprland_logo = true # If true disables the random hyprland logo / anime girl background. :(
force_default_wallpaper = 1
disable_hyprland_logo = true
vfr = true
animate_manual_resizes = true
enable_swallow = true
swallow_regex = ^(kitty)$
middle_click_paste = false
enable_anr_dialog = false
render_unfocused_fps = 1
size_limits_tiled = true
}
##############
@@ -303,7 +303,8 @@ gestures {
# Workspaces
gesture = 4, horizontal, scale: 2, workspace
workspace_swipe_forever = true
workspace_swipe_direction_lock = false
workspace_swipe_touch = true
gesture = 3, vertical, dispatcher, exec, pkill rofi || $menu
# Notification center
@@ -723,7 +724,7 @@ workspace = 9, gapsin:15, gapsout:40
###############
### PLUGINS ###
###############
# exec-once = hyprpm reload -n
exec-once = hyprpm reload
# # Easymotion
# bind = SUPER, x, easymotion, action:hyprctl dispatch focuswindow address:{}
@@ -731,15 +732,56 @@ workspace = 9, gapsin:15, gapsout:40
# Close unfocused
# bind = $mainMod SHIFT, x, plugin:xtd:closeunfocused
# plugin {
#
# hyprfocus {
# animation = hyprfocusIn, 1, 3, quick
# animation = hyprfocusOut, 1, 3, quick
# fade_opacity = 0.94
# mode = flash
# }
#
plugin {
hyprfocus {
animation = hyprfocusIn, 1, 3, quick
animation = hyprfocusOut, 1, 3, quick
fade_opacity = 0.94
mode = flash
}
hyprbars {
enabled = true
bar_height = 18
bar_color = rgba(1c1c1cce)
bar_title_enabled = false
bar_buttons_alignment = right
bar_blur = true
icon_on_hover = true
bar_part_of_window = false
bar_precedence_over_border = true
bar_text_font = "Iosevka Nerd Font Propo"
bar_text_size = 10
hyprbars-button = rgba(ff4040ff), 12, X, hyprctl dispatch killactive
hyprbars-button = rgba(11ee11ff), 12, F, hyprctl dispatch togglefloating && hyprctl dispatch resizeactive exact 1280 700 && hyprctl dispatch centerwindow
hyprbars-button = rgba(eeee11ff), 12, Z, hyprctl dispatch tagwindow zawarudo
inactive_button_color = rgba(D583995c)
on_double_click =
windowrule = plugin:hyprbars:bar_color rgb(261B1E), class:^(com.ayugram.desktop)
windowrule = plugin:hyprbars:bar_color rgb(121214), class:^(vesktop)
windowrule = plugin:hyprbars:bar_color rgb(131313), class:^(zen)
windowrule = plugin:hyprbars:bar_color rgb(F1F3F4), class:^(draw.io)
windowrule = plugin:hyprbars:bar_color rgb(1C1C1C), class:^(thunar)
windowrule = plugin:hyprbars:bar_color rgb(1C1C1C), floating:1
}
hyprexpo {
}
dynamic-cursors {
shake {
threshold = 3
limit = 15
timeout = 1
effects = true
nearest = true
}
}
# easymotion {
# #font size of the text
# textsize=72
@@ -791,7 +833,7 @@ workspace = 9, gapsin:15, gapsout:40
# #if a monitor has a focused special workspace, only put easymotion labels on the windows in the special workspace
# only_special = true
# }
# }
}
debug {
disable_logs = false

View File

@@ -14,14 +14,14 @@ if [ "$HYPRGAMEMODE" = 1 ] ; then
if pgrep waybar > /dev/null; then
pkill waybar
# TODO: lite waybar version
waybar -c "$HOME/.config/waybar/config_top.jsonc" -s "$HOME/.config/waybar/style_top.css" &
$HOME/.config/waybar/run.sh
fi
exit
fi
if pgrep waybar > /dev/null; then
pkill waybar
waybar -c "$HOME/.config/waybar/config_top.jsonc" -s "$HOME/.config/waybar/style_top.css" &
$HOME/.config/waybar/run.sh
fi
hyprctl reload

150
hypr/scripts/sounds.sh Executable file
View File

@@ -0,0 +1,150 @@
#!/usr/bin/env bash
SOUND_DIR="$HOME/.config/hypr/sound"
PLAYER="play"
VOLUME="0.1"
declare -A SOUND_MAP=(
["workspace"]="futuristic-click.wav"
["activewindow"]="popup.wav"
["activelayout"]="popup.wav"
["fullscreen"]="fullscreen.wav"
["openwindow"]="open.mp3"
["closewindow"]="popup.wav"
["movewindow"]="popup.wav"
["changefloatingmode"]="float.wav"
)
declare -A EVENT_ENABLED=(
["workspace"]=1
["activewindow"]=1
["activelayout"]=0
["fullscreen"]=1
["openwindow"]=1
["closewindow"]=1
["movewindow"]=1
["changefloatingmode"]=1
)
declare -A EVENT_COOLDOWN=(
["activewindow"]=0.1
["movewindow"]=0.2
["changefloatingmode"]=0.3
)
DEBUG=1
declare -a SOUND_QUEUE=()
declare -A COOLDOWN_TIMERS=()
mkdir -p "$SOUND_DIR"
log() {
if [ $DEBUG -eq 1 ]; then
echo "[$(date '+%H:%M:%S')] $1" >&2
fi
}
play_sound() {
local event="$1"
local sound_file="$2"
local full_path="$SOUND_DIR/$sound_file"
if [ ! -f "$full_path" ]; then
log "Sound file not found: $full_path"
return 1
fi
log "Playing: $event -> $sound_file"
play -v $VOLUME "$full_path" &
return 0
}
handle_event() {
local raw_event="$1"
local event_type=""
local event_data=""
if [[ "$raw_event" == *">>"* ]]; then
event_type="${raw_event%%>>*}"
event_data="${raw_event#*>>}"
else
event_type="$raw_event"
fi
log "Received event: $event_type (data: $event_data)"
case "$event_type" in
"workspace"*)
if [[ "$event_data" == *,* ]]; then
trigger_event "workspace" "$event_data"
fi
;;
"activelayout"*)
trigger_event "activelayout" "$event_data"
;;
"fullscreen"*)
trigger_event "fullscreen" "$event_data"
;;
"openwindow"*)
trigger_event "openwindow" "$event_data"
;;
"closewindow"*)
trigger_event "closewindow" "$event_data"
;;
"movewindow"*)
if [[ "$event_data" == *,*,* ]]; then
trigger_event "movewindow" "$event_data"
fi
;;
"changefloating"*)
trigger_event "changefloatingmode" "$event_data"
;;
*)
log "Unknown event: $event_type"
;;
esac
}
trigger_event() {
local event="$1"
local data="$2"
if [ "${EVENT_ENABLED[$event]:-0}" -ne 1 ]; then
log "Event $event is disabled"
return
fi
local sound_file="${SOUND_MAP[$event]}"
if [ -z "$sound_file" ]; then
log "No sound mapped for event: $event"
return
fi
if [ "$event" = "changefloatingmode" ]; then
local state="${data#*,}"
if [ "$state" -eq 1 ]; then
sound_file="float.wav"
else
sound_file="tile.wav"
fi
fi
play_sound "$event" "$sound_file"
}
echo "Sound directory: $SOUND_DIR"
echo "Enabled events:"
for event in "${!EVENT_ENABLED[@]}"; do
if [ "${EVENT_ENABLED[$event]}" -eq 1 ]; then
echo " - $event: ${SOUND_MAP[$event]}"
fi
done
socat - "UNIX-CONNECT:$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock" | \
while read -r line; do
handle_event "$line"
done

BIN
hypr/sound/add.wav Normal file

Binary file not shown.

Binary file not shown.

BIN
hypr/sound/float.wav Normal file

Binary file not shown.

BIN
hypr/sound/fullscreen.wav Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
hypr/sound/login.ogg Normal file

Binary file not shown.

BIN
hypr/sound/open.mp3 Normal file

Binary file not shown.

BIN
hypr/sound/popup.wav Normal file

Binary file not shown.

BIN
hypr/sound/remove.wav Normal file

Binary file not shown.

Binary file not shown.

BIN
hypr/sound/tile.wav Normal file

Binary file not shown.

BIN
hypr/sound/volume_notif.wav Normal file

Binary file not shown.