first commit
This commit is contained in:
30
waybar/scripts/cava.sh
Executable file
30
waybar/scripts/cava.sh
Executable file
@@ -0,0 +1,30 @@
|
||||
#! /bin/bash
|
||||
|
||||
bar="▁▂▃▄▅▆▇█"
|
||||
dict="s/;//g;"
|
||||
|
||||
# creating "dictionary" to replace char with bar
|
||||
i=0
|
||||
while [ $i -lt ${#bar} ]
|
||||
do
|
||||
dict="${dict}s/$i/${bar:$i:1}/g;"
|
||||
i=$((i=i+1))
|
||||
done
|
||||
|
||||
# write cava config
|
||||
config_file="/tmp/polybar_cava_config"
|
||||
echo "
|
||||
[general]
|
||||
bars = 18
|
||||
|
||||
[output]
|
||||
method = raw
|
||||
raw_target = /dev/stdout
|
||||
data_format = ascii
|
||||
ascii_max_range = 7
|
||||
" > $config_file
|
||||
|
||||
# read stdout from cava
|
||||
cava -p $config_file | while read -r line; do
|
||||
echo $line | sed $dict
|
||||
done
|
||||
26
waybar/scripts/niri-window.sh
Executable file
26
waybar/scripts/niri-window.sh
Executable file
@@ -0,0 +1,26 @@
|
||||
#!/bin/bash
|
||||
NIRI_SOCKET=$(find "$XDG_RUNTIME_DIR" -maxdepth 1 -name "niri*.sock" | head -n 1)
|
||||
|
||||
# Проверяем, был ли сокет найден и является ли он действительно файлом сокета
|
||||
if [ -z "$NIRI_SOCKET" ] || [ ! -S "$NIRI_SOCKET" ]; then
|
||||
echo '{"text": "Niri socket not found"}'
|
||||
# Выходим, чтобы Waybar не перезапускал скрипт каждую секунду
|
||||
sleep 5
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Используем socat для подписки на события
|
||||
socat -u UNIX-CONNECT:"$NIRI_SOCKET" - | while read -r line; do
|
||||
# Запрашиваем состояние при каждом событии
|
||||
TITLE=$(echo 'get-state' | socat - UNIX-CONNECT:"$NIRI_SOCKET" | jq -r '
|
||||
.outputs[] | .workspaces[] | .columns[] | .windows[] | select(.focused) | .title
|
||||
')
|
||||
|
||||
# Обрезаем заголовок, если он слишком длинный
|
||||
if [ ${#TITLE} -gt 50 ]; then
|
||||
TITLE="$(echo "$TITLE" | cut -c 1-50)..."
|
||||
fi
|
||||
|
||||
# Выводим в формате JSON для Waybar
|
||||
echo "{\"text\": \"$TITLE\", \"tooltip\": \"$TITLE\"}"
|
||||
done
|
||||
33
waybar/scripts/niri-workspaces.sh
Executable file
33
waybar/scripts/niri-workspaces.sh
Executable file
@@ -0,0 +1,33 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Скрипт для Niri, который динамически находит IPC-сокет
|
||||
|
||||
# Находим сокет в $XDG_RUNTIME_DIR, имя которого соответствует шаблону niri*.sock
|
||||
# head -n 1 используется на случай, если по ошибке найдется несколько сокетов
|
||||
NIRI_SOCKET=$(find "$XDG_RUNTIME_DIR" -maxdepth 1 -name "niri*.sock" | head -n 1)
|
||||
|
||||
# Проверяем, был ли сокет найден и является ли он действительно файлом сокета
|
||||
if [ -z "$NIRI_SOCKET" ] || [ ! -S "$NIRI_SOCKET" ]; then
|
||||
echo '{"text": "Niri socket not found"}'
|
||||
# Выходим, чтобы Waybar не перезапускал скрипт каждую секунду
|
||||
sleep 5
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Используем socat для подписки на события и вывода состояния
|
||||
# -u отключает буферизацию для немедленного вывода
|
||||
socat -u UNIX-CONNECT:"$NIRI_SOCKET" - | while read -r line; do
|
||||
# Запрос текущего состояния при каждом изменении
|
||||
STATE=$(echo 'get-state' | socat - UNIX-CONNECT:"$NIRI_SOCKET")
|
||||
|
||||
# Форматируем вывод в JSON для Waybar
|
||||
echo "$STATE" | jq -c '
|
||||
.outputs | map(.workspaces) | flatten | map(
|
||||
{
|
||||
"id": .name,
|
||||
"name": .name,
|
||||
"class": (if .focused then "focused" else (if .urgent then "urgent" else "default") end)
|
||||
}
|
||||
)
|
||||
'
|
||||
done
|
||||
Reference in New Issue
Block a user