From 711f2d7bc27c81a23d60a9cd57732a460bfed28d Mon Sep 17 00:00:00 2001 From: thek4n Date: Sat, 1 Aug 2026 20:18:16 +0300 Subject: [PATCH] migrate to waybar --- home/user/.config/sway/bar.conf | 4 +- home/user/.config/sway/bindings.conf | 8 +- home/user/.config/sway/other.conf | 2 +- home/user/.config/waybar/config | 113 +++++++++++----- home/user/.config/waybar/scripts/builder.sh | 125 ++++++++++++++++++ .../waybar/scripts/layout_change_handler.sh | 8 ++ 6 files changed, 223 insertions(+), 37 deletions(-) create mode 100755 home/user/.config/waybar/scripts/builder.sh create mode 100755 home/user/.config/waybar/scripts/layout_change_handler.sh diff --git a/home/user/.config/sway/bar.conf b/home/user/.config/sway/bar.conf index bba73fb..05aa08e 100644 --- a/home/user/.config/sway/bar.conf +++ b/home/user/.config/sway/bar.conf @@ -4,7 +4,7 @@ bar { mode dock position bottom - status_command i3blocks + status_command waybar wrap_scroll no bindsym button4 nop bindsym button5 nop @@ -16,4 +16,4 @@ bar { modifier $mod } -exec ~/.config/i3blocks/scripts/layout_change_handler.sh +exec ~/.config/waybar/scripts/layout_change_handler.sh diff --git a/home/user/.config/sway/bindings.conf b/home/user/.config/sway/bindings.conf index 506114b..e647fc7 100644 --- a/home/user/.config/sway/bindings.conf +++ b/home/user/.config/sway/bindings.conf @@ -1,9 +1,9 @@ # vim: ft=swayconfig # Sway bindings -bindsym --locked XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +5% && pkill -RTMIN+1 i3blocks -bindsym --locked XF86AudioLowerVolume exec pactl set-sink-volume @DEFAULT_SINK@ -5% && pkill -RTMIN+1 i3blocks -bindsym --locked XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle && pkill -RTMIN+1 i3blocks +bindsym --locked XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +5% && pkill -RTMIN+1 waybar +bindsym --locked XF86AudioLowerVolume exec pactl set-sink-volume @DEFAULT_SINK@ -5% && pkill -RTMIN+1 waybar +bindsym --locked XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle && pkill -RTMIN+1 waybar bindsym --locked XF86AudioPlay exec playerctl play-pause bindsym --locked XF86AudioPause exec playerctl play-pause @@ -14,7 +14,7 @@ bindsym --locked XF86Tools exec pavucontrol bindsym --locked XF86MonBrightnessUp exec brightnessctl set 5%+ bindsym --locked XF86MonBrightnessDown exec brightnessctl set 5%- -bindsym --to-code $mod+p exec pomodoro toggle && pkill -RTMIN+2 i3blocks +bindsym --to-code $mod+p exec pomodoro toggle && pkill -RTMIN+2 waybar bindsym $mod+z exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ 0 ## Hold to talk bindsym --release $mod+z exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ 1 ## Release to mute diff --git a/home/user/.config/sway/other.conf b/home/user/.config/sway/other.conf index 3c76b42..b90e55f 100644 --- a/home/user/.config/sway/other.conf +++ b/home/user/.config/sway/other.conf @@ -78,5 +78,5 @@ layer_effects "waybar" { blur_xray enable; blur_ignore_transparent enable; shadows enable; - corner_radius 20; + corner_radius 10; } diff --git a/home/user/.config/waybar/config b/home/user/.config/waybar/config index 23148c2..6d97af3 100644 --- a/home/user/.config/waybar/config +++ b/home/user/.config/waybar/config @@ -1,42 +1,95 @@ { "layer": "bottom", "position": "bottom", + "height": 30, + "spacing": 4, + "modules-left": [ "sway/workspaces", - "sway/mode", + "sway/mode" ], - "modules-center": [], + "modules-right": [ - "sway/language", - "clock", + "custom/wireless", + "custom/bluetooth", + "custom/volume", + "custom/diskroot", + "custom/diskhome", + "custom/memory", + "custom/cpu_usage", + "custom/cpu_temp", + "custom/battery", + "custom/language", + "custom/pomodoro", + "custom/userhost", + "custom/time", "tray" ], - "sway/workspaces": { - "disable-scroll": true + + "custom/wireless": { + "exec": "~/.config/waybar/scripts/builder.sh wireless", + "interval": 10, + "return-type": "text" }, - "clock": { - "format": " {:%F %a  %H:%M}", - "format-alt": " {:%A, %B %d, %Y (%R)}", - "tooltip-format": "{calendar}", - "calendar": { - "mode" : "year", - "mode-mon-col" : 3, - "weeks-pos" : "right", - "on-scroll" : 1, - "format": { - "months": "{}", - "days": "{}", - "weeks": "W{}", - "weekdays": "{}", - "today": "{}" - } - }, - "actions": { - "on-click-right": "mode", - "on-scroll-up": "tz_up", - "on-scroll-down": "tz_down", - "on-scroll-up": "shift_up", - "on-scroll-down": "shift_down" - } + "custom/diskroot": { + "exec": "~/.config/waybar/scripts/builder.sh disk_root", + "interval": 30, + "return-type": "text" }, + "custom/diskhome": { + "exec": "~/.config/waybar/scripts/builder.sh disk_home", + "interval": 30, + "return-type": "text" + }, + "custom/memory": { + "exec": "~/.config/waybar/scripts/builder.sh memory", + "interval": 5, + "return-type": "text" + }, + "custom/cpu_usage": { + "exec": "~/.config/waybar/scripts/builder.sh cpu_usage", + "interval": 5, + "return-type": "text" + }, + "custom/cpu_temp": { + "exec": "~/.config/waybar/scripts/builder.sh cpu_temp", + "interval": 5, + "return-type": "text" + }, + "custom/bluetooth": { + "exec": "~/.config/waybar/scripts/builder.sh bluetooth_battery", + "interval": 5, + "return-type": "text" + }, + "custom/volume": { + "exec": "~/.config/waybar/scripts/builder.sh volume", + "interval": 1, + "return-type": "text", + "signal": 1 + }, + "custom/pomodoro": { + "exec": "~/.config/waybar/scripts/builder.sh pomodoro", + "interval": 1, + "return-type": "text", + "signal": 2 + }, + "custom/language": { + "exec": "~/.config/waybar/scripts/builder.sh language", + "return-type": "text", + "signal": 3 + }, + "custom/userhost": { + "exec": "~/.config/waybar/scripts/builder.sh userhost", + "return-type": "text", + }, + "custom/battery": { + "exec": "~/.config/waybar/scripts/builder.sh battery", + "interval": 30, + "return-type": "text" + }, + "custom/time": { + "exec": "~/.config/waybar/scripts/builder.sh time", + "interval": 30, + "return-type": "text" + } } diff --git a/home/user/.config/waybar/scripts/builder.sh b/home/user/.config/waybar/scripts/builder.sh new file mode 100755 index 0000000..4430179 --- /dev/null +++ b/home/user/.config/waybar/scripts/builder.sh @@ -0,0 +1,125 @@ +#!/bin/sh + +set -ue + + +readonly EXIT_SUCCESS=0 +readonly EXIT_FAILURE=1 + + +cmd_wireless() { + wifiname="$(LANG=C nmcli -t -f active,ssid dev wifi | grep '^yes' | cut -d: -f2)" + wifi_ip=$(ip -o -4 addr show | grep wlp | awk '{print $4}' | cut -d/ -f1 | head -1) + + if [ -z "${wifiname}" ] || [ -z "${wifi_ip}" ]; then + return 0 + fi + + printf ' %s %s\n' "${wifiname}" "${wifi_ip}" +} + +cmd_battery() { + charging_status="$(cat /sys/class/power_supply/BAT0/status)" + percent="$(cat /sys/class/power_supply/BAT0/capacity)" + + if [ "${percent}" -lt 35 ]; then + emoji_status="🪫" + else + emoji_status="šŸ”‹" + fi + + if [ "${charging_status}" = "Charging" ]; then + emoji_status="šŸ”Œ" + fi + + printf "%s %s%%\n" "${emoji_status}" "${percent}" +} + +cmd_disk_root() { + df -h / | awk '/\// {print "/ "$3"/"$2}' +} + +cmd_disk_home() { + res="$(df -h /home)" + if [ "$(echo "${res}" | awk '/\// {print $6}')" = "/" ]; then + return 1 + fi + df -h /home | awk '/\// {print " "$3"/"$2}' +} + +cmd_memory() { + free -h | awk '/^Mem/ {print "šŸŽŸ "$3"/"$2}' | sed 's/i//g' +} + +cmd_cpu_usage() { + top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print "ļ‹› "100 - $1"%"}' +} + +cmd_cpu_temp() { + temp_mC="$(cat /sys/class/thermal/thermal_zone0/temp)" + temp_C="$((temp_mC / 1000))" + + if [ "${temp_C}" -gt 80 ]; then + printf ' %s°C\n' "${temp_C}" + else + printf ' %s°C\n' "${temp_C}" + fi +} + +cmd_time() { + LC_ALL=C date '+ %d.%m.%y %a  %H:%M' +} + +cmd_volume() { + value="$(pactl --format=json get-sink-volume @DEFAULT_SINK@ | jq --raw-output '.volume."front-left".value_percent')" + printf ' %s\n' "${value}" +} + +cmd_pomodoro() { + pomodoro get +} + +cmd_bluetooth_battery() { + device="$(upower -e | grep headset | head -1)" + upower -i "${device}" | grep percentage | awk '{ print "šŸŽ§"$2"" }' +} + +cmd_language() { + layout="$(swaymsg -t get_inputs | jq -r '.[] | select(.type == "keyboard") | .xkb_active_layout_name' | head -1)" + + case "${layout}" in + "English (US)") + printf 'šŸ‡¬šŸ‡§ En\n' + ;; + Russian) + printf 'šŸ‡·šŸ‡ŗ Ru\n' + ;; + *) + printf '🌐 %s\n' "${layout}" + ;; + esac +} + +cmd_userhost() { + printf "%s@%s\n" "${USER}" "${HOST:-${HOSTNAME:-}}" +} + +case "${1}" in + wireless) shift; cmd_wireless "$@" ;; + ethernet) shift; cmd_ethernet "$@" ;; + battery) shift; cmd_battery "$@" ;; + disk_root) shift; cmd_disk_root "$@" ;; + disk_home) shift; cmd_disk_home "$@" ;; + memory) shift; cmd_memory "$@" ;; + cpu_usage) shift; cmd_cpu_usage "$@" ;; + cpu_temp) shift; cmd_cpu_temp "$@" ;; + time) shift; cmd_time "$@" ;; + volume) shift; cmd_volume "$@" ;; + pomodoro) shift; cmd_pomodoro "$@" ;; + bluetooth_battery) shift; cmd_bluetooth_battery "$@" ;; + language) shift; cmd_language "$@" ;; + userhost) shift; cmd_userhost "$@" ;; + + *) exit "${EXIT_FAILURE}" ;; +esac +exit "${EXIT_SUCCESS}" diff --git a/home/user/.config/waybar/scripts/layout_change_handler.sh b/home/user/.config/waybar/scripts/layout_change_handler.sh new file mode 100755 index 0000000..9dc7f16 --- /dev/null +++ b/home/user/.config/waybar/scripts/layout_change_handler.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +swaymsg -m -t SUBSCRIBE "['input']" | \ +jq --unbuffered -r '.change' | while read -r line; do + if echo "${line}" | grep -q "xkb_layout"; then + pkill -RTMIN+3 waybar + fi +done