diff --git a/TARGETS.sh b/TARGETS.sh
index b10e6b1..7d096a6 100644
--- a/TARGETS.sh
+++ b/TARGETS.sh
@@ -13,7 +13,7 @@ git:.config/git .local/bin/ga
ranger:.config/ranger
yazi:.config/yazi
gpg:
-sway:.config/sway .config/i3blocks .config/mako .config/mimeapps.list .config/rofi .local/bin/screenshot .config/swaylock .Xresources .config/kanshi .local/bin/firefox_media %copypasta %pomodoro
+sway:.config/sway .config/waybar .config/mako .config/mimeapps.list .config/rofi .local/bin/screenshot .config/swaylock .Xresources .config/kanshi .local/bin/firefox_media %copypasta %pomodoro
pomodoro:
bat:.config/bat
font:
diff --git a/home/user/.config/sway/bar.conf b/home/user/.config/sway/bar.conf
index bba73fb..4643a8f 100644
--- a/home/user/.config/sway/bar.conf
+++ b/home/user/.config/sway/bar.conf
@@ -1,19 +1,20 @@
# vim: ft=swayconfig
# Sway bar
-bar {
- mode dock
- position bottom
- status_command i3blocks
- wrap_scroll no
- bindsym button4 nop
- bindsym button5 nop
- hidden_state hide
- output *
- tray_output $primary
- strip_workspace_name no
- strip_workspace_numbers no
- modifier $mod
-}
+# bar {
+ # mode dock
+ # position bottom
+ # status_command waybar
+ # wrap_scroll no
+ # bindsym button4 nop
+ # bindsym button5 nop
+ # hidden_state hide
+ # output *
+ # tray_output $primary
+ # strip_workspace_name no
+ # strip_workspace_numbers no
+ # modifier $mod
+# }
-exec ~/.config/i3blocks/scripts/layout_change_handler.sh
+exec waybar -b bar-0
+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..bf75dae 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/diskroot",
+ "custom/diskhome",
+ "custom/memory",
+ "custom/cpu_usage",
+ "custom/cpu_temp",
+ "custom/battery",
+ "custom/language",
+ "custom/pomodoro",
+ "custom/userhost",
+ "custom/volume",
+ "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
diff --git a/home/user/.config/waybar/style.css b/home/user/.config/waybar/style.css
new file mode 100644
index 0000000..37f2292
--- /dev/null
+++ b/home/user/.config/waybar/style.css
@@ -0,0 +1,111 @@
+* {
+ border: none;
+ border-radius: 0;
+ font-family: "JetBrainsMono Nerd Font", "Font Awesome 6 Free", sans-serif;
+ font-size: 14px;
+ min-height: 0;
+}
+
+window#waybar {
+ background: rgba(0, 0, 0, 0);
+ color: #ffffff;
+ transition-property: background-color;
+ transition-duration: .5s;
+}
+
+window#waybar.hidden {
+ opacity: 0.2;
+}
+
+#workspaces button {
+ padding: 0 10px;
+ color: #ffffff;
+ background: transparent;
+ border-bottom: 2px solid transparent;
+}
+
+#workspaces button.focused {
+ color: #ffffff;
+ background: rgba(255, 255, 255, 0.1);
+ border-bottom: 2px solid #ffffff;
+}
+
+#workspaces button.urgent {
+ background-color: #eb4d4b;
+}
+
+#custom-wireless,
+#custom-diskroot,
+#custom-diskhome,
+#custom-memory,
+#custom-cpu_usage,
+#custom-cpu_temp,
+#custom-bluetooth,
+#custom-volume,
+#custom-pomodoro,
+#custom-language,
+#custom-userhost,
+#custom-battery,
+#custom-time {
+ padding: 0 12px;
+ margin: 0 2px;
+ background: rgba(255, 255, 255, 0.05);
+ border-radius: 6px;
+}
+
+#custom-wireless {
+ color: #64B5F6;
+}
+
+#custom-volume {
+ color: #81C784;
+}
+
+#custom-battery {
+ color: #FFD54F;
+}
+
+#custom-battery.warning {
+ color: #FF8A65;
+}
+
+#custom-battery.critical {
+ color: #E57373;
+}
+
+#custom-cpu_usage {
+ color: #A5D6A7;
+}
+
+#custom-cpu_temp {
+ color: #FFAB91;
+}
+
+#custom-memory {
+ color: #90CAF9;
+}
+
+#custom-pomodoro {
+ color: #F48FB1;
+}
+
+#custom-language {
+ color: #CE93D8;
+}
+
+#custom-userhost {
+ color: #80DEEA;
+}
+
+#custom-time {
+ color: #E0E0E0;
+}
+
+#custom-diskroot,
+#custom-diskhome {
+ color: #B39DDB;
+}
+
+#custom-bluetooth {
+ color: #4FC3F7;
+}