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:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -42,6 +42,7 @@ Thunar/renamerrc
|
||||
!xss-lock/
|
||||
!zsh/
|
||||
!zsh/aliases.sh
|
||||
!zsh/misspell.sh
|
||||
|
||||
!bluetuith/**
|
||||
!bspwm/**
|
||||
|
||||
@@ -47,7 +47,7 @@ bar_width = 1
|
||||
|
||||
# Seconds with no input before cava goes to sleep mode. Cava will not perform FFT or drawing and
|
||||
# only check for input once per second. Cava will wake up once input is detected. 0 = disable.
|
||||
; sleep_timer = 0
|
||||
; sleep_timer = 5
|
||||
|
||||
|
||||
[input]
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
150
hypr/scripts/sounds.sh
Executable 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
BIN
hypr/sound/add.wav
Normal file
Binary file not shown.
BIN
hypr/sound/change_workspace.wav
Normal file
BIN
hypr/sound/change_workspace.wav
Normal file
Binary file not shown.
BIN
hypr/sound/float.wav
Normal file
BIN
hypr/sound/float.wav
Normal file
Binary file not shown.
BIN
hypr/sound/fullscreen.wav
Normal file
BIN
hypr/sound/fullscreen.wav
Normal file
Binary file not shown.
BIN
hypr/sound/futuristic-click.mp3
Normal file
BIN
hypr/sound/futuristic-click.mp3
Normal file
Binary file not shown.
BIN
hypr/sound/futuristic-click.wav
Normal file
BIN
hypr/sound/futuristic-click.wav
Normal file
Binary file not shown.
BIN
hypr/sound/login.ogg
Normal file
BIN
hypr/sound/login.ogg
Normal file
Binary file not shown.
BIN
hypr/sound/open.mp3
Normal file
BIN
hypr/sound/open.mp3
Normal file
Binary file not shown.
BIN
hypr/sound/popup.wav
Normal file
BIN
hypr/sound/popup.wav
Normal file
Binary file not shown.
BIN
hypr/sound/remove.wav
Normal file
BIN
hypr/sound/remove.wav
Normal file
Binary file not shown.
BIN
hypr/sound/screenshot_notif.wav
Normal file
BIN
hypr/sound/screenshot_notif.wav
Normal file
Binary file not shown.
BIN
hypr/sound/tile.wav
Normal file
BIN
hypr/sound/tile.wav
Normal file
Binary file not shown.
BIN
hypr/sound/volume_notif.wav
Normal file
BIN
hypr/sound/volume_notif.wav
Normal file
Binary file not shown.
@@ -55,7 +55,7 @@ state_file "~/.mpd/state"
|
||||
# The location of the sticker database. This is a database which
|
||||
# manages dynamic information attached to songs.
|
||||
#
|
||||
#sticker_file "~/.mpd/sticker.sql"
|
||||
sticker_file "~/.mpd/sticker.sql"
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
|
||||
@@ -65,15 +65,16 @@
|
||||
"<C-l>": PaneRight,
|
||||
"<C-u>": UpHalf,
|
||||
"N": PreviousResult,
|
||||
"<Space>": Add,
|
||||
"<Space>": AddOptions(kind: Action(all: false, autoplay: None, position: EndOfQueue)),
|
||||
"<CR>": AddOptions(kind: Action(all: false, autoplay: Hovered, position: EndOfQueue)),
|
||||
"<S-CR>": Confirm,
|
||||
"<C-Space>": AddAll,
|
||||
"r": Rename,
|
||||
"n": NextResult,
|
||||
"g": Top,
|
||||
"m": Select,
|
||||
"M": InvertSelection,
|
||||
"M": InvertSelection,
|
||||
"G": Bottom,
|
||||
"<CR>": Confirm,
|
||||
"i": FocusInput,
|
||||
"J": MoveDown,
|
||||
"<C-d>": DownHalf,
|
||||
@@ -144,6 +145,7 @@
|
||||
autosens: true, // default true
|
||||
sensitivity: 100, // default 100
|
||||
bar_width: 1,
|
||||
channels: 2,
|
||||
bar_spacing: 0,
|
||||
lower_cutoff_freq: 50, // not passed to cava if not provided
|
||||
higher_cutoff_freq: 10000, // not passed to cava if not provided
|
||||
|
||||
@@ -226,8 +226,8 @@ error-message {
|
||||
configuration {
|
||||
kb-mode-next: "Shift+Right,Control+Tab,L";
|
||||
kb-mode-previous: "Shift+Left,H";
|
||||
kb-page-prev: "K";
|
||||
kb-page-next: "J";
|
||||
kb-row-up: "K";
|
||||
kb-row-down: "J";
|
||||
me-select-entry: "";
|
||||
me-accept-entry: "!MousePrimary";
|
||||
kb-cancel: "MousePrimary,Escape";
|
||||
|
||||
@@ -27,15 +27,27 @@
|
||||
"keyboard-shortcuts": true,
|
||||
"notification-grouping": false,
|
||||
"image-visibility": "when-available",
|
||||
"show-per-app-icon": true,
|
||||
"transition-time": 100,
|
||||
"hide-on-clear": false,
|
||||
"hide-on-action": true,
|
||||
"text-empty": "No nothing",
|
||||
"text-empty": "No disturbances",
|
||||
"script-fail-notify": true,
|
||||
"scripts": {
|
||||
"notification-sound": {
|
||||
"exec": "sh $HOME/.config/swaync/scripts/sound.sh",
|
||||
"app-name": "^(?!.*AyuGram).*$"
|
||||
"notification-sound-low": {
|
||||
"exec": "sh $HOME/.config/swaync/scripts/sound.sh low",
|
||||
"app-name": "^(?!.*AyuGram).*$",
|
||||
"urgency": "Low"
|
||||
},
|
||||
"notification-sound-normal": {
|
||||
"exec": "sh $HOME/.config/swaync/scripts/sound.sh normal",
|
||||
"app-name": "^(?!.*AyuGram).*$",
|
||||
"urgency": "Normal"
|
||||
},
|
||||
"notification-sound-critical": {
|
||||
"exec": "sh $HOME/.config/swaync/scripts/sound.sh critical",
|
||||
"app-name": "^(?!.*AyuGram).*$",
|
||||
"urgency": "Critical"
|
||||
}
|
||||
},
|
||||
"notification-visibility": {
|
||||
@@ -48,8 +60,6 @@
|
||||
"widgets": [
|
||||
"menubar",
|
||||
"buttons-grid",
|
||||
"volume",
|
||||
"slider#brightness",
|
||||
"inhibitors",
|
||||
"title",
|
||||
"notifications",
|
||||
|
||||
@@ -5,29 +5,42 @@ if [ $(swaync-client --get-dnd) == "true" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Directory containing your notification sounds
|
||||
SOUND_DIR="$HOME/.config/swaync/scripts/sounds"
|
||||
SOUND_LOW_DIR="$HOME/.config/swaync/scripts/sounds/low"
|
||||
SOUND_NORMAL_DIR="$HOME/.config/swaync/scripts/sounds/normal"
|
||||
SOUND_CRITICAL_DIR="$HOME/.config/swaync/scripts/sounds/critical"
|
||||
|
||||
case $1 in
|
||||
low)
|
||||
DIR=$SOUND_LOW_DIR
|
||||
;;
|
||||
normal)
|
||||
DIR=$SOUND_NORMAL_DIR
|
||||
;;
|
||||
critical)
|
||||
DIR=$SOUND_CRITICAL_DIR
|
||||
;;
|
||||
*)
|
||||
echo "Unknown urgency level '$1'"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# Enable nullglob to prevent literal interpretation when no files match
|
||||
shopt -s nullglob
|
||||
|
||||
# Get a list of audio files in the directory (simpler approach)
|
||||
SOUND_FILES=()
|
||||
for ext in wav mp3 ogg flac; do
|
||||
SOUND_FILES+=("$SOUND_DIR"/*."$ext")
|
||||
SOUND_FILES+=("$DIR"/*."$ext")
|
||||
done
|
||||
|
||||
# Check if any sound files exist
|
||||
if [ ${#SOUND_FILES[@]} -eq 0 ]; then
|
||||
echo "No sound files found in $SOUND_DIR"
|
||||
exit 0 # Exit with success so notifications still work
|
||||
echo "No sound files found in $SOUND_NORMAL_DIR"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Select a random sound file
|
||||
RANDOM_INDEX=$((RANDOM % ${#SOUND_FILES[@]}))
|
||||
RANDOM_SOUND="${SOUND_FILES[$RANDOM_INDEX]}"
|
||||
|
||||
# Play the random sound
|
||||
play -v 0.5 "$RANDOM_SOUND" 2>/dev/null || {
|
||||
echo "Failed to play $RANDOM_SOUND"
|
||||
}
|
||||
|
||||
BIN
swaync/scripts/sounds/critical/sting_instruction3.mp3
Normal file
BIN
swaync/scripts/sounds/critical/sting_instruction3.mp3
Normal file
Binary file not shown.
BIN
swaync/scripts/sounds/critical/sting_instruction4.mp3
Normal file
BIN
swaync/scripts/sounds/critical/sting_instruction4.mp3
Normal file
Binary file not shown.
BIN
swaync/scripts/sounds/low/pc_granted.mp3
Normal file
BIN
swaync/scripts/sounds/low/pc_granted.mp3
Normal file
Binary file not shown.
@@ -20,6 +20,8 @@
|
||||
--button-top: #505050;
|
||||
--button-on-top: #CE5268;
|
||||
--button-off: #2e2d31;
|
||||
|
||||
--accent: #E83C82;
|
||||
}
|
||||
|
||||
* {
|
||||
@@ -66,12 +68,12 @@ button:hover {
|
||||
}
|
||||
|
||||
.notification-row .notification-background {
|
||||
padding: 6px 12px;
|
||||
padding: 6px 15px;
|
||||
}
|
||||
|
||||
.notification-row .notification-background .notification {
|
||||
/* The actual notification */
|
||||
border-radius: 12px;
|
||||
border-radius: 15px;
|
||||
border: 1px solid var(--noti-border-color);
|
||||
padding: 0;
|
||||
transition: background 0.15s ease-in-out;
|
||||
@@ -88,18 +90,35 @@ button:hover {
|
||||
|
||||
.notification-row .notification-background .notification.critical {
|
||||
/* Critical Priority Notification */
|
||||
border-color: var(--accent);
|
||||
}
|
||||
|
||||
/* Critical Priority Notification */
|
||||
.notification-row .notification-background .notification.critical .notification-default-action .notification-content .text-box .summary {
|
||||
color: var(--accent);
|
||||
text-shadow: 0px 0px 8px var(--accent);
|
||||
}
|
||||
|
||||
.notification-row .notification-background .notification.critical .notification-default-action .notification-content .text-box .summary {
|
||||
color: var(--accent);
|
||||
text-shadow: 0px 0px 8px var(--accent);
|
||||
}
|
||||
|
||||
.notification-row .notification-background .notification.critical .notification-default-action .notification-content .text-box .body {
|
||||
color: var(--accent);
|
||||
text-shadow: 0px 0px 8px var(--accent);
|
||||
}
|
||||
|
||||
.notification-row .notification-background .notification .notification-default-action {
|
||||
/* The large action that also displays the notification summary and body */
|
||||
padding: 4px;
|
||||
padding: 10px;
|
||||
margin: 0;
|
||||
box-shadow: none;
|
||||
background: transparent;
|
||||
border: none;
|
||||
color: var(--text-color);
|
||||
transition: background 0.15s ease-in-out;
|
||||
border-radius: 12px;
|
||||
border-radius: 15px;
|
||||
}
|
||||
|
||||
.notification-row:focus .notification-background .notification .notification-default-action {
|
||||
@@ -118,7 +137,7 @@ button:hover {
|
||||
|
||||
.notification-row .notification-background .notification .notification-default-action .notification-content {
|
||||
background: transparent;
|
||||
border-radius: 12px;
|
||||
border-radius: 15px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
@@ -194,14 +213,14 @@ button:hover {
|
||||
color: var(--text-color);
|
||||
caret-color: var(--text-color);
|
||||
border: 1px solid var(--noti-border-color);
|
||||
border-radius: 12px;
|
||||
border-radius: 15px;
|
||||
}
|
||||
|
||||
.notification-row .notification-background .notification .notification-default-action .notification-content .inline-reply .inline-reply-button {
|
||||
margin-left: 4px;
|
||||
background: rgba(var(--noti-bg), var(--noti-bg-alpha));
|
||||
border: 1px solid var(--noti-border-color);
|
||||
border-radius: 12px;
|
||||
border-radius: 15px;
|
||||
color: var(--text-color);
|
||||
}
|
||||
|
||||
@@ -218,8 +237,8 @@ button:hover {
|
||||
|
||||
.notification-row .notification-background .notification .notification-alt-actions {
|
||||
background: none;
|
||||
border-bottom-left-radius: 12px;
|
||||
border-bottom-right-radius: 12px;
|
||||
border-bottom-left-radius: 15px;
|
||||
border-bottom-right-radius: 15px;
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
@@ -230,7 +249,7 @@ button:hover {
|
||||
}
|
||||
|
||||
.notification-row .notification-background .notification .notification-action > button {
|
||||
border-radius: 12px;
|
||||
border-radius: 15px;
|
||||
}
|
||||
|
||||
.notification-group {
|
||||
@@ -256,7 +275,7 @@ button:hover {
|
||||
}
|
||||
|
||||
.notification-group .notification-group-close-button .close-button {
|
||||
margin: 12px 20px;
|
||||
margin: 15px 20px;
|
||||
}
|
||||
|
||||
.notification-group .notification-group-buttons, .notification-group .notification-group-headers {
|
||||
@@ -363,7 +382,7 @@ button:hover {
|
||||
|
||||
.widget-title > button {
|
||||
margin: 0px;
|
||||
border-radius: 12px;
|
||||
border-radius: 15px;
|
||||
}
|
||||
|
||||
/* DND widget */
|
||||
@@ -374,7 +393,7 @@ button:hover {
|
||||
}
|
||||
|
||||
.widget-dnd switch {
|
||||
border-radius: 12px;
|
||||
border-radius: 15px;
|
||||
margin: 8px;
|
||||
}
|
||||
|
||||
@@ -384,7 +403,7 @@ button:hover {
|
||||
|
||||
|
||||
.widget-dnd switch slider {
|
||||
border-radius: 12px;
|
||||
border-radius: 15px;
|
||||
}
|
||||
|
||||
/* Label widget */
|
||||
@@ -410,7 +429,7 @@ button:hover {
|
||||
|
||||
.widget-mpris .widget-mpris-player {
|
||||
margin: 16px 20px;
|
||||
border-radius: 12px;
|
||||
border-radius: 15px;
|
||||
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.75);
|
||||
}
|
||||
|
||||
@@ -429,7 +448,7 @@ button:hover {
|
||||
}
|
||||
|
||||
.widget-mpris .widget-mpris-player .mpris-overlay .widget-mpris-album-art {
|
||||
border-radius: 12px;
|
||||
border-radius: 15px;
|
||||
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.75);
|
||||
-gtk-icon-size: var(--mpris-album-art-icon-size);
|
||||
}
|
||||
@@ -464,11 +483,11 @@ button:hover {
|
||||
min-height: 50px;
|
||||
padding: 8px;
|
||||
margin: 8px;
|
||||
border-radius: 12px;
|
||||
border-radius: 15px;
|
||||
}
|
||||
|
||||
.widget-buttons-grid flowboxchild > button {
|
||||
border-radius: 12px;
|
||||
border-radius: 15px;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
@@ -513,7 +532,7 @@ button:hover {
|
||||
}
|
||||
|
||||
.widget-menubar > .menu-button-bar > .widget-menubar-container button {
|
||||
border-radius: 12px;
|
||||
border-radius: 15px;
|
||||
padding: 0px 15px;
|
||||
margin: 0 4px;
|
||||
background-color: var(--noti-bg-selection);
|
||||
@@ -536,7 +555,7 @@ button:hover {
|
||||
}
|
||||
|
||||
.widget-menubar > revealer button {
|
||||
border-radius: 12px;
|
||||
border-radius: 15px;
|
||||
margin: 8px;
|
||||
margin-top: 0;
|
||||
}
|
||||
@@ -553,7 +572,7 @@ button:hover {
|
||||
.widget-volume {
|
||||
padding: 8px;
|
||||
margin: 8px;
|
||||
border-radius: 12px;
|
||||
border-radius: 15px;
|
||||
}
|
||||
|
||||
.widget-volume label:first-child {
|
||||
@@ -573,14 +592,14 @@ button:hover {
|
||||
background-color: var(--noti-bg-alt);
|
||||
padding: 4px 8px 8px 8px;
|
||||
margin: 0px 8px 8px 8px;
|
||||
border-radius: 12px;
|
||||
border-radius: 15px;
|
||||
}
|
||||
|
||||
/* Slider widget */
|
||||
.widget-slider {
|
||||
padding: 8px;
|
||||
margin: 8px;
|
||||
border-radius: 12px;
|
||||
border-radius: 15px;
|
||||
}
|
||||
|
||||
.widget-slider trough highlight {
|
||||
@@ -595,7 +614,7 @@ button:hover {
|
||||
.widget-backlight {
|
||||
padding: 8px;
|
||||
margin: 8px;
|
||||
border-radius: 12px;
|
||||
border-radius: 15px;
|
||||
}
|
||||
|
||||
/* Inhibitors widget */
|
||||
@@ -606,7 +625,7 @@ button:hover {
|
||||
|
||||
.widget-inhibitors > button {
|
||||
margin: 8px;
|
||||
border-radius: 12px;
|
||||
border-radius: 15px;
|
||||
}
|
||||
|
||||
.notification-row:parent {
|
||||
|
||||
@@ -21,11 +21,12 @@
|
||||
"custom/launcher"
|
||||
],
|
||||
"modules-right": [
|
||||
"battery",
|
||||
"cpu",
|
||||
"memory",
|
||||
"temperature"
|
||||
],
|
||||
"custom/separator_invisible": {
|
||||
"custom/separator": {
|
||||
"format": " ",
|
||||
"interval": "once",
|
||||
"tooltip": false
|
||||
@@ -53,6 +54,7 @@
|
||||
"on-click": "activate",
|
||||
"on-click-middle": "close",
|
||||
"active-first": false,
|
||||
"sort-by-app-id": true,
|
||||
"ignore-list": [
|
||||
"Alacritty"
|
||||
],
|
||||
@@ -60,11 +62,14 @@
|
||||
"firefoxdeveloperedition": "firefox-developer-edition"
|
||||
},
|
||||
"rewrite": {
|
||||
"Firefox Web Browser": "Firefox",
|
||||
"Foot Server": "Terminal",
|
||||
".*(steam_app_[0-9]+).*": "Game"
|
||||
}
|
||||
},
|
||||
"battery": {
|
||||
"interval": 5,
|
||||
"format": "{power:.0f}W |",
|
||||
"on-click": "sh -c 'swaync-client -cp & ~/.config/rofi/scripts/dmenu_powermodemenu.sh'"
|
||||
},
|
||||
"cpu": {
|
||||
"format": "{icon}",
|
||||
"tooltip": true,
|
||||
|
||||
@@ -76,10 +76,14 @@
|
||||
"paused": "",
|
||||
"playing": ""
|
||||
},
|
||||
"tooltip-format": "MPD (connected)",
|
||||
"tooltip-format-disconnected": "MPD (disconnected)",
|
||||
"tooltip-format": "MPD (connected) | MMB - toggle, LMB/RMB - next/prev, scroll - volume",
|
||||
"tooltip-format-disconnected": "MPD (disconnected) | MMB - toggle, LMB/RMB - next/prev, scroll - volume",
|
||||
"format-stopped": " Stopping player...",
|
||||
"on-click": "mpc toggle --password kapuchinamusica"
|
||||
"on-click-right": "mpc --password kapuchinamusica next",
|
||||
"on-click-middle": "mpc --password kapuchinamusica prev",
|
||||
"on-click": "mpc --password kapuchinamusica toggle",
|
||||
"on-scroll-down": "mpc --password kapuchinamusica volume +1",
|
||||
"on-scroll-up": "mpc --password kapuchinamusica volume -1"
|
||||
},
|
||||
"clock": {
|
||||
"timezone": "Europe/Moscow",
|
||||
|
||||
@@ -8,6 +8,9 @@ TOP_STYLE="$DIR/style/style_top.css"
|
||||
BOTTOM_CONFIG="$DIR/config_bottom.jsonc"
|
||||
BOTTOM_STYLE="$DIR/style/style_bottom.css"
|
||||
|
||||
DOCK_CONFIG="$DIR/config_dock.jsonc"
|
||||
DOCK_STYLE="$DIR/style/style_dock.css"
|
||||
|
||||
kill_bars() {
|
||||
if pgrep waybar > /dev/null; then
|
||||
pkill waybar
|
||||
@@ -19,6 +22,7 @@ kill_bars() {
|
||||
run_bars() {
|
||||
waybar -c "$TOP_CONFIG" -s "$TOP_STYLE" &
|
||||
waybar -c "$BOTTOM_CONFIG" -s "$BOTTOM_STYLE" &
|
||||
waybar -c "$DOCK_CONFIG" -s "$DOCK_STYLE" &
|
||||
return 0
|
||||
}
|
||||
|
||||
|
||||
@@ -126,6 +126,13 @@ window#waybar.chromium {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------
|
||||
BATTERY
|
||||
-------------------------------------------------------------------------- */
|
||||
#battery {
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------
|
||||
CPU
|
||||
-------------------------------------------------------------------------- */
|
||||
@@ -154,7 +161,7 @@ window#waybar.chromium {
|
||||
.modules-left, .modules-right {
|
||||
/* Layout & Box Model */
|
||||
border: 1px solid @border-color;
|
||||
border-radius: 12px;
|
||||
border-radius: 15px;
|
||||
|
||||
/* Colors */
|
||||
background-color: @bg-panel;
|
||||
@@ -166,13 +173,30 @@ window#waybar.chromium {
|
||||
}
|
||||
|
||||
.modules-center {
|
||||
background: linear-gradient(to right,
|
||||
alpha(#000000, 0) 0%,
|
||||
alpha(@bg-panel, 1) 20%,
|
||||
alpha(@bg-panel, 1) 80%,
|
||||
alpha(#000000, 0) 100%
|
||||
background:
|
||||
/* Top border gradient */
|
||||
linear-gradient(to right,
|
||||
transparent 0%,
|
||||
@border-color 25%,
|
||||
@border-color 75%,
|
||||
transparent 100%
|
||||
) 0 0 / 100% 1px no-repeat,
|
||||
|
||||
/* Bottom border gradient */
|
||||
linear-gradient(to right,
|
||||
transparent 0%,
|
||||
@border-color 25%,
|
||||
@border-color 75%,
|
||||
transparent 100%
|
||||
) 0 100% / 100% 1px no-repeat,
|
||||
|
||||
/* Main background */
|
||||
linear-gradient(to right,
|
||||
alpha(#000000, 0) 0%,
|
||||
alpha(@bg-panel, 1) 25%,
|
||||
alpha(@bg-panel, 1) 75%,
|
||||
alpha(#000000, 0) 100%
|
||||
);
|
||||
|
||||
padding: 0 20px;
|
||||
}
|
||||
|
||||
@@ -234,14 +258,14 @@ window#waybar.chromium {
|
||||
}
|
||||
|
||||
#taskbar button.active {
|
||||
background: radial-gradient(circle, alpha(@accent, 1) 0%, alpha(@accent, 1) 30%, rgba(0, 0, 0, 0) 80%, rgba(0, 0, 0, 0) 100%);
|
||||
background: radial-gradient(circle, alpha(@text-primary, 1) 0%, alpha(@text-primary, 1) 30%, rgba(0, 0, 0, 0) 70%, rgba(0, 0, 0, 0) 100%);
|
||||
transition: color 0.3s, box-shadow 0.3s, background 0.3s;
|
||||
}
|
||||
|
||||
#taskbar button.active image {
|
||||
min-width: 24px;
|
||||
min-height: 24px;
|
||||
padding: 0 5px;
|
||||
/* padding: 0 5px; */
|
||||
}
|
||||
|
||||
/* POMODORO STATES */
|
||||
@@ -280,26 +304,6 @@ window#waybar.chromium {
|
||||
color: @text-secondary;
|
||||
}
|
||||
|
||||
/* BATTERY STATES */
|
||||
#battery.charging,
|
||||
#battery.plugged {
|
||||
color: @success;
|
||||
text-shadow: 0px 0px 8px @success;
|
||||
transition: color 0.3s, box-shadow 0.3s, background 0.3s;
|
||||
}
|
||||
|
||||
#battery.warning:not(.charging) {
|
||||
color: @warning;
|
||||
text-shadow: 0px 0px 8px @warning;
|
||||
transition: color 0.3s, box-shadow 0.3s, background 0.3s;
|
||||
}
|
||||
|
||||
#battery.critical:not(.charging) {
|
||||
color: @danger;
|
||||
text-shadow: 0px 0px 8px @danger;
|
||||
transition: color 0.3s, box-shadow 0.3s, background 0.3s;
|
||||
}
|
||||
|
||||
/* CPU && MEMORY STATES */
|
||||
#cpu.s1, #memory.s1, #temperature.s1 {
|
||||
color: @text-primary;
|
||||
|
||||
@@ -105,7 +105,7 @@ window#waybar.chromium {
|
||||
#mpd, .modules-center, .modules-right {
|
||||
/* Layout & Box Model */
|
||||
border: 1px solid @border-color;
|
||||
border-radius: 12px;
|
||||
border-radius: 15px;
|
||||
|
||||
/* Colors */
|
||||
background-color: @bg-panel;
|
||||
@@ -181,12 +181,13 @@ window#waybar.chromium {
|
||||
|
||||
/* MPD STATES */
|
||||
#mpd {
|
||||
font-weight: 700;
|
||||
transition: color 2s, background 2s;
|
||||
}
|
||||
|
||||
#mpd.playing {
|
||||
color: @accent;
|
||||
font-weight: 700;
|
||||
/* color: @text-primary; */
|
||||
}
|
||||
|
||||
#mpd.stopped {
|
||||
|
||||
@@ -10,6 +10,7 @@ alias cl="clear"
|
||||
alias pi="source ~/.venv/bin/activate"
|
||||
alias pivenv="source ~/.venv312/bin/activate"
|
||||
alias nvim="http_proxy='' nvim"
|
||||
alias n="nvim"
|
||||
alias updatew="sudo pacman -Syuw --noconfirm"
|
||||
alias insta="sudo pacman -S"
|
||||
alias detdom="sudo pacman -Qdtq | sudo pacman -Rns -"
|
||||
|
||||
2
zsh/misspell.sh
Normal file
2
zsh/misspell.sh
Normal file
@@ -0,0 +1,2 @@
|
||||
alias hyrpm="hyprpm"
|
||||
alias hyrppm="hyprpm"
|
||||
Reference in New Issue
Block a user