diff --git a/.config/waybar/config.jsonc b/.config/waybar/config.jsonc new file mode 100644 index 0000000..b473cde --- /dev/null +++ b/.config/waybar/config.jsonc @@ -0,0 +1,136 @@ +{ + "reload_style_on_change": true, + "layer": "top", + "position": "top", + "margin-top": 6, + "margin-right": 8, + "margin-left": 8, + "spacing": 6, + + "modules-left": ["custom/power-menu", "niri/workspaces", "group/player"], + "modules-center": ["clock"], + "modules-right": [ + "tray", + "niri/language", + "cpu", + "memory", + "group/system-indicators" + ], + + "custom/power-menu": { + "format": " ", + "tooltip": false + }, + + "niri/workspaces": { + "on-click": "activate", + "format": "{icon}", + "format-icons": { + "default": "" + } + }, + + // Player + "group/player": { + "orientation": "horizontal", + "modules": [ + "custom/player-icon", + "mpris", + "custom/player-prev", + "custom/player-play-pause", + "custom/player-next" + ] + }, + "custom/player-icon": { + "format": " " + }, + "custom/player-prev": { + "format": "󰒮", + "on-click": "playerctl previous", + "tooltip": false, + "interval": 0 + }, + "custom/player-play-pause": { + "exec": "~/.config/waybar/player-play-pause.sh", + "on-click": "playerctl play-pause", + "tooltip": false, + "interval": 0, + "return-type": "json" + }, + "custom/player-next": { + "format": "󰒭", + "on-click": "playerctl next", + "tooltip": false, + "interval": 0 + }, + "mpris": { + "format": "{artist} 󰧞 {title}", + "max-length": 32, + "tooltip": false + }, + + + + "clock": { + "format": "{:L%R 󰧞 %a %d}", + "tooltip-format": "{calendar}", + "calendar": { + "mode" : "month", + "weeks-pos" : "", + "on-scroll" : 1, + "format": { + "months": "{}", + "days": "{}", + "weekdays": "{}", + "today": "{}" + } + } + }, + + "tray": { + "icon-size": 14, + "spacing": 10 + }, + "niri/language": { + "format": "󰌌 {short}" + }, + "cpu": { + "format": " {usage}%", + "on-click": "alacritty -e btop", + "tooltip": false + }, + "memory": { + "format": " {percentage}%", + "on-click": "alacritty -e btop", + "tooltip": false + }, + + // System Indicators + "group/system-indicators": { + "orientation": "horizontal", + "modules": ["network", "wireplumber"] + }, + "network": { + "format-icons": ["󰤯", "󰤟", "󰤢", "󰤥", "󰤨"], + "format": "{icon}", + "format-wifi": "{icon}", + "tooltip-format-wifi": "{essid}\n⇣{bandwidthDownBytes}\n⇡{bandwidthUpBytes}", + "format-ethernet": "󰌗", + "tooltip-format-ethernet": "{ifname}: {ipaddr}/{cidr}", + "format-disconnected": "󰤮", + "tooltip-format-disconnected": "Нет подключения", + "interval": 3, + "on-click": "kitty --class waybar -e impala -m station" + }, + "wireplumber": { + "scroll-step": 5, + "format": "{icon}", + "format-muted": "", + "format-icons": { + "default": ["", "", ""] + }, + "tooltip": false, + "on-click": "kitty --class waybar -e wiremix" + } + +} diff --git a/.config/waybar/config.jsonc.save b/.config/waybar/config.jsonc.save new file mode 100644 index 0000000..387f610 --- /dev/null +++ b/.config/waybar/config.jsonc.save @@ -0,0 +1,78 @@ +// -*- mode: jsonc -*- +{ + "layer": "top", + "position": "top", + "height": 30, + "width": "auto", + "spacing": 4, + "modules-left": [ + "hyprland/workspaces" + ], + "modules-right": [ + "custom/spotify", + "tray", + "hyprland/language", + "network", + "wireplumber", + "clock" + ], + "hyprland/workspaces": { + "disable-scroll": true, + "all-outputs": true, + "warp-on-scroll": false, + "format": "{icon}", + "format-icons": { + "1": "󰞷", + "2": "󰈹", + "3": "󰅴", + "4": "󰓇", + "5": "󰍡", + "urgent": "", + "focused": "", + "default": "󰧞" + } + }, + "tray": { + // "icon-size": 20, + "spacing": 10, + // "icons": { + // "blueman": "bluetooth", + // "TelegramDesktop": "$HOME/.local/share/icons/hicolor/16x16/apps/telegram.png" + // } + }, + "clock": { + "format": "{:%H:%M}", + "tooltip-format": "{:%Y %B}\n{calendar}", + "format-alt": "{:%d.%m.%Y}" + }, + "hyprland/language": { + "format-en": "EN", + "format-ru": "RU" + }, + "network": { + "format-wifi": "󰖩", + "format-ethernet": "󰌘", + "tooltip-format": "{ifname} via {gwaddr} ", + "format-linked": "{ifname} (No IP) ", + "format-disconnected": "󰌙", + "format-alt": "{ifname}: {ipaddr}/{cidr}" + }, + "wireplumber": { + "max-volume": 100, + "" + "scroll-step": 2, + "format": "{icon} {volume}%", + "format-muted": "󰝟", + "format-icons": ["󰕿", "󰖀", "󰕾"], + "on-click": "helvum" + }, + "custom/spotify": { + "exec": "/usr/bin/python3 ~/.config/waybar/mediaplayer.py --player spotify", + "format": "{}", + "return-type": "json", + "on-click": "playerctl --player=spotify play-pause", + "on-scroll-up": "playerctl previous", + "on-scroll-down": "playerctl next", + "smooth-scrolling-threshold": 4.0 + } + } diff --git a/.config/waybar/player-play-pause.sh b/.config/waybar/player-play-pause.sh new file mode 100644 index 0000000..67f916f --- /dev/null +++ b/.config/waybar/player-play-pause.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +# Получаем статус плеера +status=$(playerctl status 2>/dev/null) + +if [ "$status" == "Playing" ]; then + icon="" # Pause +elif [ "$status" == "Paused" ]; then + icon="" # Play +else + icon="󰦢" # Нет плеера / stopped (можешь другой значок) +fi + +# Выводим JSON для Waybar +echo "{\"text\": \"$icon\", \"class\": \"$status\"}" diff --git a/.config/waybar/style.css b/.config/waybar/style.css new file mode 100644 index 0000000..18c757f --- /dev/null +++ b/.config/waybar/style.css @@ -0,0 +1,130 @@ +* { + margin: 0; + padding: 0; +} + +window#waybar { + color: #c0caf5; + background: alpha(#24283b, .85); + border-radius: 24px; + font-family: "JetBrainsMono Nerd Font"; + font-size: 16px; + font-weight: 600; +} + +.modules-left { margin-left: 4px; } +.modules-right { margin-right: 4px; } + +#workspaces, +#player, +#clock, +#tray, +#language, +#cpu, +#memory, +#system-indicators { + background-color: #414868; + border-radius: 16px; + padding: 0 12px; + margin: 3px 0; +} + +#workspaces button { + all: unset; + min-width: 12px; + margin: 10px 6px; + border-radius: 999px; + background-color: #c0caf5; + transition: all .2s ease; +} + +#workspaces button label { font-size: 0; } + +#workspaces button.active { + min-width: 36px; + background-color: #7C86FF; +} + +#workspaces button.empty { + color: #565f89; + background-color: #565f89; +} + +tooltip { + font-size: 16px; + background-color: #414868; + color: @text; + border: 3px solid #565f89; + outline: none; + box-shadow: none; +} + +tooltip * { + outline: none; + box-shadow: none; + border: none; +} + +tooltip label { margin: 12px; } + +#custom-player-icon { + color: #7C86FF; + margin-right: 6px; +} + +#mpris { margin-right: 16px; } + +#custom-player-play-pause { + margin: 2px 8px; + padding: 0 9px; + color: #24283b; + background-color: #7C86FF; + border-radius: 999px; + transition: all .1s ease; +} + +#custom-player-play-pause:hover { background-color: #c0caf5; } +#custom-player-prev:hover { color: #7aa2f7; } +#custom-player-next:hover { color: #7aa2f7; } + +#clock { padding: 5px 12px; } + +#network { + margin: 3px 3px 3px 0; + min-width: 16px; + border-radius: 16px; + padding-left: 4px; + padding-right: 6px; +} + +#network.disabled { color: #565f89; } +#network.disconnected { color: #f7768e; } +#network.linked { color: #c0caf5; } +#network.wifi, +#network.ethernet { color: #7C86FF; } + +#wireplumber { + min-width: 16px; + margin: 3px 0; + border-radius: 16px; + padding: 0 6px 0 3px; +} + +#custom-power-menu { + min-width: 32px; + margin: 3px 0; + padding-left: 7px; + border-radius: 16px; + background-color: #414868; + color: #7C86FF; +} + +#network:hover, +#wireplumber:hover, +#language:hover, +#cpu:hover, +#memory:hover, +#clock:hover, +#custom-power-menu:hover{ + background-color: #565f89; +}