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

1
.gitignore vendored
View File

@@ -42,6 +42,7 @@ Thunar/renamerrc
!xss-lock/ !xss-lock/
!zsh/ !zsh/
!zsh/aliases.sh !zsh/aliases.sh
!zsh/misspell.sh
!bluetuith/** !bluetuith/**
!bspwm/** !bspwm/**

View File

@@ -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 # 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. # only check for input once per second. Cava will wake up once input is detected. 0 = disable.
; sleep_timer = 0 ; sleep_timer = 5
[input] [input]

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" $notificationCenter = pkill rofi & swaync-client -t -sw || notify-send --hint int:transient:1 "Error SwayNC is down"
$mpdpass = kapuchinamusica $mpdpass = kapuchinamusica
$startDelay = sleep 2
################# #################
### AUTOSTART ### ### 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 = 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 = swww-daemon 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 = ~/.config/waybar/run.sh
exec-once = swaync exec-once = $startDelay && hypridle
exec-once = hypridle exec-once = $startDelay && hyprsunset
exec-once = hyprsunset exec-once = $startDelay && /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
exec-once = eww daemon exec-once = $startDelay && thunar --daemon
exec-once = mullvad-vpn exec-once = $startDelay && [workspace 8 silent] AyuGram
exec-once = ~/.config/hypr/scripts/random_wallpaper.sh exec-once = $startDelay && swaync
exec-once = ~/.config/hypr/scripts/autofreezer.sh exec-once = $startDelay && mullvad-vpn
exec-once = ~/.config/fastfetch/scripts/fetch_update_count.sh exec-once = $startDelay && touch /tmp/toggle_ssocks
exec-once = copyq --start-server exec-once = $startDelay && ~/.config/hypr/scripts/autofreeze_swww.sh
exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 exec-once = $startDelay && ~/.config/fastfetch/scripts/fetch_update_count.sh
exec-once = thunar --daemon exec-once = $startDelay && ~/.config/hypr/scripts/toggle_proxy.sh
exec-once = touch /tmp/toggle_ssocks exec-once = $startDelay && ~/.config/hypr/scripts/sounds.sh
exec-once = ~/.config/hypr/scripts/toggle_proxy.sh exec-once = $startDelay && ~/.config/hypr/scripts/random_wallpaper.sh
exec-once = nextcloud --background & exec-once = $startDelay && ~/.config/hypr/scripts/autofreezer.sh
exec-once = [workspace 8 silent] AyuGram
exec-shutdown = play -v 0.7 $HOME/Templates/Sounds/teleport.mp3
############################# #############################
### ENVIRONMENT VARIABLES ### ### ENVIRONMENT VARIABLES ###
@@ -92,8 +87,8 @@ env = HYPRCURSOR_SIZE,24
# https://wiki.hyprland.org/Configuring/Variables/#general # https://wiki.hyprland.org/Configuring/Variables/#general
general { general {
gaps_in = 12.5 gaps_in = 15
gaps_out = 12 gaps_out = 25
border_size = 1 border_size = 1
@@ -115,12 +110,11 @@ general {
snap { snap {
enabled = true enabled = true
} }
} }
# https://wiki.hyprland.org/Configuring/Variables/#decoration # https://wiki.hyprland.org/Configuring/Variables/#decoration
decoration { decoration {
rounding = 10 rounding = 15
rounding_power = 2 rounding_power = 2
border_part_of_window = 0 border_part_of_window = 0
@@ -164,7 +158,7 @@ group {
col.active = rgba(F8859Eff) col.active = rgba(F8859Eff)
col.inactive = rgba(32323264) rgba(32323264) 45deg col.inactive = rgba(32323264) rgba(32323264) 45deg
gaps_in = 5 gaps_in = 5
gaps_out = 5 gaps_out = 2
} }
} }
@@ -246,16 +240,22 @@ master {
new_status = master new_status = master
} }
render {
direct_scanout = 1
}
# https://wiki.hyprland.org/Configuring/Variables/#misc # https://wiki.hyprland.org/Configuring/Variables/#misc
misc { misc {
force_default_wallpaper = 1 # Set to 0 or 1 to disable the anime mascot wallpapers force_default_wallpaper = 1
disable_hyprland_logo = true # If true disables the random hyprland logo / anime girl background. :( disable_hyprland_logo = true
vfr = true vfr = true
animate_manual_resizes = true animate_manual_resizes = true
enable_swallow = true enable_swallow = true
swallow_regex = ^(kitty)$ swallow_regex = ^(kitty)$
middle_click_paste = false middle_click_paste = false
enable_anr_dialog = false enable_anr_dialog = false
render_unfocused_fps = 1
size_limits_tiled = true
} }
############## ##############
@@ -303,7 +303,8 @@ gestures {
# Workspaces # Workspaces
gesture = 4, horizontal, scale: 2, workspace gesture = 4, horizontal, scale: 2, workspace
workspace_swipe_forever = true workspace_swipe_forever = true
workspace_swipe_direction_lock = false
workspace_swipe_touch = true
gesture = 3, vertical, dispatcher, exec, pkill rofi || $menu gesture = 3, vertical, dispatcher, exec, pkill rofi || $menu
# Notification center # Notification center
@@ -723,7 +724,7 @@ workspace = 9, gapsin:15, gapsout:40
############### ###############
### PLUGINS ### ### PLUGINS ###
############### ###############
# exec-once = hyprpm reload -n exec-once = hyprpm reload
# # Easymotion # # Easymotion
# bind = SUPER, x, easymotion, action:hyprctl dispatch focuswindow address:{} # bind = SUPER, x, easymotion, action:hyprctl dispatch focuswindow address:{}
@@ -731,15 +732,56 @@ workspace = 9, gapsin:15, gapsout:40
# Close unfocused # Close unfocused
# bind = $mainMod SHIFT, x, plugin:xtd:closeunfocused # bind = $mainMod SHIFT, x, plugin:xtd:closeunfocused
# plugin { plugin {
#
# hyprfocus { hyprfocus {
# animation = hyprfocusIn, 1, 3, quick animation = hyprfocusIn, 1, 3, quick
# animation = hyprfocusOut, 1, 3, quick animation = hyprfocusOut, 1, 3, quick
# fade_opacity = 0.94 fade_opacity = 0.94
# mode = flash 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 { # easymotion {
# #font size of the text # #font size of the text
# textsize=72 # 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 # #if a monitor has a focused special workspace, only put easymotion labels on the windows in the special workspace
# only_special = true # only_special = true
# } # }
# } }
debug { debug {
disable_logs = false disable_logs = false

View File

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

View File

@@ -55,7 +55,7 @@ state_file "~/.mpd/state"
# The location of the sticker database. This is a database which # The location of the sticker database. This is a database which
# manages dynamic information attached to songs. # manages dynamic information attached to songs.
# #
#sticker_file "~/.mpd/sticker.sql" sticker_file "~/.mpd/sticker.sql"
# #
############################################################################### ###############################################################################

View File

@@ -65,15 +65,16 @@
"<C-l>": PaneRight, "<C-l>": PaneRight,
"<C-u>": UpHalf, "<C-u>": UpHalf,
"N": PreviousResult, "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, "<C-Space>": AddAll,
"r": Rename, "r": Rename,
"n": NextResult, "n": NextResult,
"g": Top, "g": Top,
"m": Select, "m": Select,
"M": InvertSelection, "M": InvertSelection,
"G": Bottom, "G": Bottom,
"<CR>": Confirm,
"i": FocusInput, "i": FocusInput,
"J": MoveDown, "J": MoveDown,
"<C-d>": DownHalf, "<C-d>": DownHalf,
@@ -144,6 +145,7 @@
autosens: true, // default true autosens: true, // default true
sensitivity: 100, // default 100 sensitivity: 100, // default 100
bar_width: 1, bar_width: 1,
channels: 2,
bar_spacing: 0, bar_spacing: 0,
lower_cutoff_freq: 50, // not passed to cava if not provided lower_cutoff_freq: 50, // not passed to cava if not provided
higher_cutoff_freq: 10000, // not passed to cava if not provided higher_cutoff_freq: 10000, // not passed to cava if not provided

View File

@@ -226,8 +226,8 @@ error-message {
configuration { configuration {
kb-mode-next: "Shift+Right,Control+Tab,L"; kb-mode-next: "Shift+Right,Control+Tab,L";
kb-mode-previous: "Shift+Left,H"; kb-mode-previous: "Shift+Left,H";
kb-page-prev: "K"; kb-row-up: "K";
kb-page-next: "J"; kb-row-down: "J";
me-select-entry: ""; me-select-entry: "";
me-accept-entry: "!MousePrimary"; me-accept-entry: "!MousePrimary";
kb-cancel: "MousePrimary,Escape"; kb-cancel: "MousePrimary,Escape";

View File

@@ -27,15 +27,27 @@
"keyboard-shortcuts": true, "keyboard-shortcuts": true,
"notification-grouping": false, "notification-grouping": false,
"image-visibility": "when-available", "image-visibility": "when-available",
"show-per-app-icon": true,
"transition-time": 100, "transition-time": 100,
"hide-on-clear": false, "hide-on-clear": false,
"hide-on-action": true, "hide-on-action": true,
"text-empty": "No nothing", "text-empty": "No disturbances",
"script-fail-notify": true, "script-fail-notify": true,
"scripts": { "scripts": {
"notification-sound": { "notification-sound-low": {
"exec": "sh $HOME/.config/swaync/scripts/sound.sh", "exec": "sh $HOME/.config/swaync/scripts/sound.sh low",
"app-name": "^(?!.*AyuGram).*$" "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": { "notification-visibility": {
@@ -48,8 +60,6 @@
"widgets": [ "widgets": [
"menubar", "menubar",
"buttons-grid", "buttons-grid",
"volume",
"slider#brightness",
"inhibitors", "inhibitors",
"title", "title",
"notifications", "notifications",

View File

@@ -5,29 +5,42 @@ if [ $(swaync-client --get-dnd) == "true" ]; then
exit 0 exit 0
fi fi
# Directory containing your notification sounds SOUND_LOW_DIR="$HOME/.config/swaync/scripts/sounds/low"
SOUND_DIR="$HOME/.config/swaync/scripts/sounds" 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 # Enable nullglob to prevent literal interpretation when no files match
shopt -s nullglob shopt -s nullglob
# Get a list of audio files in the directory (simpler approach)
SOUND_FILES=() SOUND_FILES=()
for ext in wav mp3 ogg flac; do for ext in wav mp3 ogg flac; do
SOUND_FILES+=("$SOUND_DIR"/*."$ext") SOUND_FILES+=("$DIR"/*."$ext")
done done
# Check if any sound files exist
if [ ${#SOUND_FILES[@]} -eq 0 ]; then if [ ${#SOUND_FILES[@]} -eq 0 ]; then
echo "No sound files found in $SOUND_DIR" echo "No sound files found in $SOUND_NORMAL_DIR"
exit 0 # Exit with success so notifications still work exit 0
fi fi
# Select a random sound file
RANDOM_INDEX=$((RANDOM % ${#SOUND_FILES[@]})) RANDOM_INDEX=$((RANDOM % ${#SOUND_FILES[@]}))
RANDOM_SOUND="${SOUND_FILES[$RANDOM_INDEX]}" RANDOM_SOUND="${SOUND_FILES[$RANDOM_INDEX]}"
# Play the random sound
play -v 0.5 "$RANDOM_SOUND" 2>/dev/null || { play -v 0.5 "$RANDOM_SOUND" 2>/dev/null || {
echo "Failed to play $RANDOM_SOUND" echo "Failed to play $RANDOM_SOUND"
} }

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -20,6 +20,8 @@
--button-top: #505050; --button-top: #505050;
--button-on-top: #CE5268; --button-on-top: #CE5268;
--button-off: #2e2d31; --button-off: #2e2d31;
--accent: #E83C82;
} }
* { * {
@@ -66,12 +68,12 @@ button:hover {
} }
.notification-row .notification-background { .notification-row .notification-background {
padding: 6px 12px; padding: 6px 15px;
} }
.notification-row .notification-background .notification { .notification-row .notification-background .notification {
/* The actual notification */ /* The actual notification */
border-radius: 12px; border-radius: 15px;
border: 1px solid var(--noti-border-color); border: 1px solid var(--noti-border-color);
padding: 0; padding: 0;
transition: background 0.15s ease-in-out; transition: background 0.15s ease-in-out;
@@ -88,18 +90,35 @@ button:hover {
.notification-row .notification-background .notification.critical { .notification-row .notification-background .notification.critical {
/* Critical Priority Notification */ /* 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 { .notification-row .notification-background .notification .notification-default-action {
/* The large action that also displays the notification summary and body */ /* The large action that also displays the notification summary and body */
padding: 4px; padding: 10px;
margin: 0; margin: 0;
box-shadow: none; box-shadow: none;
background: transparent; background: transparent;
border: none; border: none;
color: var(--text-color); color: var(--text-color);
transition: background 0.15s ease-in-out; transition: background 0.15s ease-in-out;
border-radius: 12px; border-radius: 15px;
} }
.notification-row:focus .notification-background .notification .notification-default-action { .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 { .notification-row .notification-background .notification .notification-default-action .notification-content {
background: transparent; background: transparent;
border-radius: 12px; border-radius: 15px;
padding: 0; padding: 0;
} }
@@ -194,14 +213,14 @@ button:hover {
color: var(--text-color); color: var(--text-color);
caret-color: var(--text-color); caret-color: var(--text-color);
border: 1px solid var(--noti-border-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 { .notification-row .notification-background .notification .notification-default-action .notification-content .inline-reply .inline-reply-button {
margin-left: 4px; margin-left: 4px;
background: rgba(var(--noti-bg), var(--noti-bg-alpha)); background: rgba(var(--noti-bg), var(--noti-bg-alpha));
border: 1px solid var(--noti-border-color); border: 1px solid var(--noti-border-color);
border-radius: 12px; border-radius: 15px;
color: var(--text-color); color: var(--text-color);
} }
@@ -218,8 +237,8 @@ button:hover {
.notification-row .notification-background .notification .notification-alt-actions { .notification-row .notification-background .notification .notification-alt-actions {
background: none; background: none;
border-bottom-left-radius: 12px; border-bottom-left-radius: 15px;
border-bottom-right-radius: 12px; border-bottom-right-radius: 15px;
padding: 4px; padding: 4px;
} }
@@ -230,7 +249,7 @@ button:hover {
} }
.notification-row .notification-background .notification .notification-action > button { .notification-row .notification-background .notification .notification-action > button {
border-radius: 12px; border-radius: 15px;
} }
.notification-group { .notification-group {
@@ -256,7 +275,7 @@ button:hover {
} }
.notification-group .notification-group-close-button .close-button { .notification-group .notification-group-close-button .close-button {
margin: 12px 20px; margin: 15px 20px;
} }
.notification-group .notification-group-buttons, .notification-group .notification-group-headers { .notification-group .notification-group-buttons, .notification-group .notification-group-headers {
@@ -363,7 +382,7 @@ button:hover {
.widget-title > button { .widget-title > button {
margin: 0px; margin: 0px;
border-radius: 12px; border-radius: 15px;
} }
/* DND widget */ /* DND widget */
@@ -374,7 +393,7 @@ button:hover {
} }
.widget-dnd switch { .widget-dnd switch {
border-radius: 12px; border-radius: 15px;
margin: 8px; margin: 8px;
} }
@@ -384,7 +403,7 @@ button:hover {
.widget-dnd switch slider { .widget-dnd switch slider {
border-radius: 12px; border-radius: 15px;
} }
/* Label widget */ /* Label widget */
@@ -410,7 +429,7 @@ button:hover {
.widget-mpris .widget-mpris-player { .widget-mpris .widget-mpris-player {
margin: 16px 20px; margin: 16px 20px;
border-radius: 12px; border-radius: 15px;
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.75); 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 { .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); box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.75);
-gtk-icon-size: var(--mpris-album-art-icon-size); -gtk-icon-size: var(--mpris-album-art-icon-size);
} }
@@ -464,11 +483,11 @@ button:hover {
min-height: 50px; min-height: 50px;
padding: 8px; padding: 8px;
margin: 8px; margin: 8px;
border-radius: 12px; border-radius: 15px;
} }
.widget-buttons-grid flowboxchild > button { .widget-buttons-grid flowboxchild > button {
border-radius: 12px; border-radius: 15px;
height: auto; height: auto;
} }
@@ -513,7 +532,7 @@ button:hover {
} }
.widget-menubar > .menu-button-bar > .widget-menubar-container button { .widget-menubar > .menu-button-bar > .widget-menubar-container button {
border-radius: 12px; border-radius: 15px;
padding: 0px 15px; padding: 0px 15px;
margin: 0 4px; margin: 0 4px;
background-color: var(--noti-bg-selection); background-color: var(--noti-bg-selection);
@@ -536,7 +555,7 @@ button:hover {
} }
.widget-menubar > revealer button { .widget-menubar > revealer button {
border-radius: 12px; border-radius: 15px;
margin: 8px; margin: 8px;
margin-top: 0; margin-top: 0;
} }
@@ -553,7 +572,7 @@ button:hover {
.widget-volume { .widget-volume {
padding: 8px; padding: 8px;
margin: 8px; margin: 8px;
border-radius: 12px; border-radius: 15px;
} }
.widget-volume label:first-child { .widget-volume label:first-child {
@@ -573,14 +592,14 @@ button:hover {
background-color: var(--noti-bg-alt); background-color: var(--noti-bg-alt);
padding: 4px 8px 8px 8px; padding: 4px 8px 8px 8px;
margin: 0px 8px 8px 8px; margin: 0px 8px 8px 8px;
border-radius: 12px; border-radius: 15px;
} }
/* Slider widget */ /* Slider widget */
.widget-slider { .widget-slider {
padding: 8px; padding: 8px;
margin: 8px; margin: 8px;
border-radius: 12px; border-radius: 15px;
} }
.widget-slider trough highlight { .widget-slider trough highlight {
@@ -595,7 +614,7 @@ button:hover {
.widget-backlight { .widget-backlight {
padding: 8px; padding: 8px;
margin: 8px; margin: 8px;
border-radius: 12px; border-radius: 15px;
} }
/* Inhibitors widget */ /* Inhibitors widget */
@@ -606,7 +625,7 @@ button:hover {
.widget-inhibitors > button { .widget-inhibitors > button {
margin: 8px; margin: 8px;
border-radius: 12px; border-radius: 15px;
} }
.notification-row:parent { .notification-row:parent {

View File

@@ -21,11 +21,12 @@
"custom/launcher" "custom/launcher"
], ],
"modules-right": [ "modules-right": [
"battery",
"cpu", "cpu",
"memory", "memory",
"temperature" "temperature"
], ],
"custom/separator_invisible": { "custom/separator": {
"format": " ", "format": " ",
"interval": "once", "interval": "once",
"tooltip": false "tooltip": false
@@ -53,6 +54,7 @@
"on-click": "activate", "on-click": "activate",
"on-click-middle": "close", "on-click-middle": "close",
"active-first": false, "active-first": false,
"sort-by-app-id": true,
"ignore-list": [ "ignore-list": [
"Alacritty" "Alacritty"
], ],
@@ -60,11 +62,14 @@
"firefoxdeveloperedition": "firefox-developer-edition" "firefoxdeveloperedition": "firefox-developer-edition"
}, },
"rewrite": { "rewrite": {
"Firefox Web Browser": "Firefox",
"Foot Server": "Terminal",
".*(steam_app_[0-9]+).*": "Game" ".*(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": { "cpu": {
"format": "{icon}", "format": "{icon}",
"tooltip": true, "tooltip": true,

View File

@@ -76,10 +76,14 @@
"paused": "", "paused": "",
"playing": "" "playing": ""
}, },
"tooltip-format": "MPD (connected)", "tooltip-format": "MPD (connected) | MMB - toggle, LMB/RMB - next/prev, scroll - volume",
"tooltip-format-disconnected": "MPD (disconnected)", "tooltip-format-disconnected": "MPD (disconnected) | MMB - toggle, LMB/RMB - next/prev, scroll - volume",
"format-stopped": " Stopping player...", "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": { "clock": {
"timezone": "Europe/Moscow", "timezone": "Europe/Moscow",

View File

@@ -8,6 +8,9 @@ TOP_STYLE="$DIR/style/style_top.css"
BOTTOM_CONFIG="$DIR/config_bottom.jsonc" BOTTOM_CONFIG="$DIR/config_bottom.jsonc"
BOTTOM_STYLE="$DIR/style/style_bottom.css" BOTTOM_STYLE="$DIR/style/style_bottom.css"
DOCK_CONFIG="$DIR/config_dock.jsonc"
DOCK_STYLE="$DIR/style/style_dock.css"
kill_bars() { kill_bars() {
if pgrep waybar > /dev/null; then if pgrep waybar > /dev/null; then
pkill waybar pkill waybar
@@ -19,6 +22,7 @@ kill_bars() {
run_bars() { run_bars() {
waybar -c "$TOP_CONFIG" -s "$TOP_STYLE" & waybar -c "$TOP_CONFIG" -s "$TOP_STYLE" &
waybar -c "$BOTTOM_CONFIG" -s "$BOTTOM_STYLE" & waybar -c "$BOTTOM_CONFIG" -s "$BOTTOM_STYLE" &
waybar -c "$DOCK_CONFIG" -s "$DOCK_STYLE" &
return 0 return 0
} }

View File

@@ -126,6 +126,13 @@ window#waybar.chromium {
padding: 0; padding: 0;
} }
/* --------------------------------------------------------------------------
BATTERY
-------------------------------------------------------------------------- */
#battery {
padding-right: 0;
}
/* -------------------------------------------------------------------------- /* --------------------------------------------------------------------------
CPU CPU
-------------------------------------------------------------------------- */ -------------------------------------------------------------------------- */
@@ -154,7 +161,7 @@ window#waybar.chromium {
.modules-left, .modules-right { .modules-left, .modules-right {
/* Layout & Box Model */ /* Layout & Box Model */
border: 1px solid @border-color; border: 1px solid @border-color;
border-radius: 12px; border-radius: 15px;
/* Colors */ /* Colors */
background-color: @bg-panel; background-color: @bg-panel;
@@ -166,13 +173,30 @@ window#waybar.chromium {
} }
.modules-center { .modules-center {
background: linear-gradient(to right, background:
alpha(#000000, 0) 0%, /* Top border gradient */
alpha(@bg-panel, 1) 20%, linear-gradient(to right,
alpha(@bg-panel, 1) 80%, transparent 0%,
alpha(#000000, 0) 100% @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; padding: 0 20px;
} }
@@ -234,14 +258,14 @@ window#waybar.chromium {
} }
#taskbar button.active { #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; transition: color 0.3s, box-shadow 0.3s, background 0.3s;
} }
#taskbar button.active image { #taskbar button.active image {
min-width: 24px; min-width: 24px;
min-height: 24px; min-height: 24px;
padding: 0 5px; /* padding: 0 5px; */
} }
/* POMODORO STATES */ /* POMODORO STATES */
@@ -280,26 +304,6 @@ window#waybar.chromium {
color: @text-secondary; 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 && MEMORY STATES */
#cpu.s1, #memory.s1, #temperature.s1 { #cpu.s1, #memory.s1, #temperature.s1 {
color: @text-primary; color: @text-primary;

View File

@@ -105,7 +105,7 @@ window#waybar.chromium {
#mpd, .modules-center, .modules-right { #mpd, .modules-center, .modules-right {
/* Layout & Box Model */ /* Layout & Box Model */
border: 1px solid @border-color; border: 1px solid @border-color;
border-radius: 12px; border-radius: 15px;
/* Colors */ /* Colors */
background-color: @bg-panel; background-color: @bg-panel;
@@ -181,12 +181,13 @@ window#waybar.chromium {
/* MPD STATES */ /* MPD STATES */
#mpd { #mpd {
font-weight: 700;
transition: color 2s, background 2s; transition: color 2s, background 2s;
} }
#mpd.playing { #mpd.playing {
color: @accent; color: @accent;
font-weight: 700;
/* color: @text-primary; */
} }
#mpd.stopped { #mpd.stopped {

View File

@@ -10,6 +10,7 @@ alias cl="clear"
alias pi="source ~/.venv/bin/activate" alias pi="source ~/.venv/bin/activate"
alias pivenv="source ~/.venv312/bin/activate" alias pivenv="source ~/.venv312/bin/activate"
alias nvim="http_proxy='' nvim" alias nvim="http_proxy='' nvim"
alias n="nvim"
alias updatew="sudo pacman -Syuw --noconfirm" alias updatew="sudo pacman -Syuw --noconfirm"
alias insta="sudo pacman -S" alias insta="sudo pacman -S"
alias detdom="sudo pacman -Qdtq | sudo pacman -Rns -" alias detdom="sudo pacman -Qdtq | sudo pacman -Rns -"

2
zsh/misspell.sh Normal file
View File

@@ -0,0 +1,2 @@
alias hyrpm="hyprpm"
alias hyrppm="hyprpm"