update
This commit is contained in:
@@ -0,0 +1,119 @@
|
||||
$bg: #1e1e2e;
|
||||
$fg: #cdd6f4;
|
||||
$blue: #89b4fa;
|
||||
$surface: #313244;
|
||||
$crust: #11111b;
|
||||
$yellow: #f9e2af;
|
||||
|
||||
* {
|
||||
font-family: "sans-serif";
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
window {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
button {
|
||||
all: unset;
|
||||
}
|
||||
|
||||
.main-container {
|
||||
background-color: $bg;
|
||||
color: $fg;
|
||||
border-radius: 8px;
|
||||
padding: 2px 5px;
|
||||
margin: 1px;
|
||||
}
|
||||
|
||||
.ws-focused {
|
||||
background-color: $blue;
|
||||
color: $crust;
|
||||
padding: 0 8px;
|
||||
border-radius: 6px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.ws-inactive {
|
||||
color: #cdd6f4;
|
||||
padding: 0 8px;
|
||||
border-radius: 6px;
|
||||
border: 1px solid #ffffff;
|
||||
}
|
||||
|
||||
.ws-inactive:hover {
|
||||
background-color: $surface;
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
.date-time {
|
||||
padding: 0 10px;
|
||||
}
|
||||
|
||||
.date-time:hover {
|
||||
background-color: $surface;
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
.volume-widget, .brightness-widget {
|
||||
padding: 0 5px;
|
||||
}
|
||||
|
||||
.volume-widget button:hover, .brightness-widget button:hover {
|
||||
background-color: $surface;
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
.popup-box {
|
||||
background-color: $bg;
|
||||
color: $fg;
|
||||
padding: 15px;
|
||||
border: 1px solid $blue;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.vol-bar trough, .br-bar trough {
|
||||
background-color: $surface;
|
||||
border-radius: 10px;
|
||||
min-height: 4px;
|
||||
}
|
||||
|
||||
.vol-bar highlight {
|
||||
background-color: $blue;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
.br-bar highlight {
|
||||
background-color: $yellow;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
.caffeine {
|
||||
padding: 0 5px;
|
||||
}
|
||||
|
||||
.caffeine-on {
|
||||
color: $yellow;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.caffeine-off {
|
||||
color: $fg;
|
||||
opacity: 0.6;
|
||||
}
|
||||
|
||||
.tray-container {
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
.calendar-box {
|
||||
background-color: $bg;
|
||||
color: $fg;
|
||||
padding: 15px;
|
||||
border: 1px solid $blue;
|
||||
border-radius: 12px;
|
||||
}
|
||||
|
||||
calendar {
|
||||
padding: 5px;
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
(defpoll time :interval "1s" "date '+%Y/%m/%d %H:%M:%S'")
|
||||
(defpoll inhibit_status :interval "1s" "[ -f /tmp/eww-inhibit.pid ] && echo 'on' || echo 'off'")
|
||||
(defpoll vol :interval "1s" :initial "0" "bash ~/.config/eww/scripts/volume.sh get")
|
||||
(defpoll vol_icon :interval "1s" :initial "🔉" "bash ~/.config/eww/scripts/volume.sh icon")
|
||||
(defpoll br :interval "1s" :initial "50" "bash ~/.config/eww/scripts/brightness.sh get")
|
||||
(defpoll br_icon :interval "1s" :initial "☀️" "bash ~/.config/eww/scripts/brightness.sh icon")
|
||||
|
||||
(deflisten workspaces :initial "[]" "bash ~/.config/eww/scripts/get-workspaces.sh")
|
||||
|
||||
(defwidget workspaces_widget []
|
||||
(box :class "workspaces" :orientation "h" :space-evenly false :spacing 5
|
||||
(for ws in workspaces
|
||||
(button :onclick "swaymsg workspace ${ws.name}"
|
||||
:class {ws.focused ? "ws-focused" : "ws-inactive"}
|
||||
"${ws.name}"))))
|
||||
|
||||
(defwidget date_widget []
|
||||
(box :class "date-time"
|
||||
(button :onclick "bash ~/.config/eww/scripts/toggle-window.sh calendar"
|
||||
time)))
|
||||
|
||||
(defwidget volume_widget []
|
||||
(box :class "volume-widget"
|
||||
(button :onclick "bash ~/.config/eww/scripts/toggle-window.sh volume_popup"
|
||||
:onrightclick "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
|
||||
"${vol_icon} ${vol}%")))
|
||||
|
||||
(defwidget brightness_widget []
|
||||
(box :class "brightness-widget"
|
||||
(button :onclick "bash ~/.config/eww/scripts/toggle-window.sh brightness_popup"
|
||||
"${br_icon} ${br}%")))
|
||||
|
||||
(defwidget caffeine_widget []
|
||||
(box :class "caffeine"
|
||||
(button :onclick "bash ~/.config/eww/scripts/toggle-inhibit.sh"
|
||||
:class {inhibit_status == "on" ? "caffeine-on" : "caffeine-off"}
|
||||
{inhibit_status == "on" ? "☕" : "🌙"})))
|
||||
|
||||
(defwidget tray_widget []
|
||||
(box :halign "end" :class "tray-container" :space-evenly false :spacing 10
|
||||
(brightness_widget)
|
||||
(volume_widget)
|
||||
(caffeine_widget)
|
||||
(systray :orientation "h" :spacing 5 :icon-size 20 :prepend-new true)))
|
||||
|
||||
(defwidget bar_layout []
|
||||
(box :class "main-container"
|
||||
(centerbox :orientation "h"
|
||||
(workspaces_widget)
|
||||
(date_widget)
|
||||
(tray_widget))))
|
||||
|
||||
(defwindow bar
|
||||
:monitor "eDP-1"
|
||||
:geometry (geometry :x "0%" :y "0%" :width "99%" :height "30px" :anchor "top center")
|
||||
:stacking "fg"
|
||||
:exclusive true
|
||||
:focusable false
|
||||
(bar_layout))
|
||||
|
||||
(defwindow calendar
|
||||
:monitor "eDP-1"
|
||||
:geometry (geometry :x "0%" :y "15px" :width "250px" :height "250px" :anchor "top center")
|
||||
:stacking "fg"
|
||||
:focusable false
|
||||
(box :class "calendar-box"
|
||||
(calendar)))
|
||||
|
||||
(defwindow volume_popup
|
||||
:monitor "eDP-1"
|
||||
:geometry (geometry :x "15px" :y "15px" :width "300px" :height "60px" :anchor "top right")
|
||||
:stacking "fg"
|
||||
:focusable false
|
||||
(box :class "popup-box" :space-evenly false :spacing 15
|
||||
(button :onclick "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" vol_icon)
|
||||
(scale :class "vol-bar" :min 0 :max 101 :value {vol == "" ? 0 : vol} :width 150 :onchange "wpctl set-volume @DEFAULT_AUDIO_SINK@ {}%")
|
||||
(label :text "${vol}%")))
|
||||
|
||||
(defwindow brightness_popup
|
||||
:monitor "eDP-1"
|
||||
:geometry (geometry :x "15px" :y "15px" :width "300px" :height "60px" :anchor "top right")
|
||||
:stacking "fg"
|
||||
:focusable false
|
||||
(box :class "popup-box" :space-evenly false :spacing 15
|
||||
(label :text br_icon)
|
||||
(scale :class "br-bar" :min 0 :max 101 :value {br == "" ? 0 : br} :width 150 :onchange "brightnessctl s {}%")
|
||||
(label :text "${br}%")))
|
||||
@@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
|
||||
if ! eww ping >/dev/null 2>&1; then
|
||||
eww daemon
|
||||
fi
|
||||
|
||||
eww close-all
|
||||
eww open bar --screen 'eDP-1'
|
||||
@@ -0,0 +1,18 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 獲取目前亮度百分比
|
||||
get_brightness() {
|
||||
brightnessctl -m | awk -F, '{print substr($4, 0, length($4)-1)}'
|
||||
}
|
||||
|
||||
case $1 in
|
||||
get)
|
||||
get_brightness
|
||||
;;
|
||||
icon)
|
||||
BR=$(get_brightness)
|
||||
if [ "$BR" -gt 66 ]; then echo "☀️";
|
||||
elif [ "$BR" -gt 33 ]; then echo "🌤️";
|
||||
else echo "🔅"; fi
|
||||
;;
|
||||
esac
|
||||
@@ -0,0 +1,13 @@
|
||||
#!/bin/bash
|
||||
# 需安裝 jq
|
||||
get_workspaces() {
|
||||
swaymsg -t get_workspaces | jq -c 'sort_by(.num)'
|
||||
}
|
||||
|
||||
# 初始輸出
|
||||
get_workspaces
|
||||
|
||||
# 監聽事件並更新
|
||||
swaymsg -t subscribe '["workspace"]' -m | while read -r line; do
|
||||
get_workspaces
|
||||
done
|
||||
@@ -0,0 +1,15 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 定義 PID 檔案路徑
|
||||
PID_FILE="/tmp/eww-inhibit.pid"
|
||||
|
||||
if [ -f "$PID_FILE" ]; then
|
||||
# 讀取 PID 並殺掉程序
|
||||
PID=$(cat "$PID_FILE")
|
||||
kill "$PID" 2>/dev/null
|
||||
rm "$PID_FILE"
|
||||
else
|
||||
# 啟動並記錄 PID
|
||||
systemd-inhibit --what=idle --mode=block sleep infinity &
|
||||
echo $! > "$PID_FILE"
|
||||
fi
|
||||
@@ -0,0 +1,24 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 目標視窗名稱
|
||||
TARGET=$1
|
||||
|
||||
# 獲取目前所有已開啟的視窗名稱 (提取冒號前文字並去空格)
|
||||
OPENED_WINDOWS=$(eww active-windows | cut -d: -f1 | tr -d ' ')
|
||||
|
||||
# 所有受管理的彈出視窗清單
|
||||
MANAGED_WINDOWS=("calendar" "volume_popup" "brightness_popup")
|
||||
|
||||
# 遍歷目前已開啟的視窗
|
||||
for win in $OPENED_WINDOWS; do
|
||||
# 檢查該視窗是否在受管名單內,且不是目標視窗
|
||||
# 我們不關閉 "bar" 視窗
|
||||
if [[ " ${MANAGED_WINDOWS[@]} " =~ " ${win} " ]] && [ "$win" != "$TARGET" ]; then
|
||||
eww close "$win"
|
||||
fi
|
||||
done
|
||||
|
||||
# 如果有目標視窗,則切換其顯示狀態
|
||||
if [ -n "$TARGET" ]; then
|
||||
eww open --toggle "$TARGET"
|
||||
fi
|
||||
@@ -0,0 +1,21 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 獲取預設輸出裝置的音量資訊 (輸出範例: Volume: 0.50 [MUTED])
|
||||
GET_VOL=$(wpctl get-volume @DEFAULT_AUDIO_SINK@)
|
||||
|
||||
# 提取數值並轉換為百分比 (0-100)
|
||||
# 使用 printf %.0f 將小數四捨五入為整數
|
||||
VOL=$(echo "$GET_VOL" | awk '{print $2 * 100}' | xargs printf "%.0f")
|
||||
|
||||
if [ "$1" == "get" ]; then
|
||||
echo "$VOL"
|
||||
elif [ "$1" == "icon" ]; then
|
||||
# 檢查是否含有 [MUTED] 字樣
|
||||
if echo "$GET_VOL" | grep -q "\[MUTED\]"; then
|
||||
echo "🔇"
|
||||
else
|
||||
if [ "$VOL" -gt 60 ]; then echo "🔊";
|
||||
elif [ "$VOL" -gt 30 ]; then echo "🔉";
|
||||
else echo "🔈"; fi
|
||||
fi
|
||||
fi
|
||||
Reference in New Issue
Block a user