update
This commit is contained in:
parent
a4faab3db1
commit
35abfa07bc
9
home/dot_config/environment.d/sway.conf
Normal file
9
home/dot_config/environment.d/sway.conf
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# Sway essential session variables
|
||||||
|
XDG_CURRENT_DESKTOP=sway
|
||||||
|
XDG_SESSION_DESKTOP=sway
|
||||||
|
XDG_SESSION_TYPE=wayland
|
||||||
|
|
||||||
|
# Toolkits and Compatibility
|
||||||
|
ELECTRON_OZONE_PLATFORM_HINT=auto
|
||||||
|
_JAVA_AWT_WM_NONREPARENTING=1
|
||||||
|
QT_WAYLAND_DISABLE_WINDOWDECORATION=1
|
||||||
@ -1,5 +1,4 @@
|
|||||||
XIM=fcitx
|
XIM=fcitx
|
||||||
|
|
||||||
GTK_IM_MODULE=fcitx
|
GTK_IM_MODULE=fcitx
|
||||||
QT_IM_MODULE=fcitx
|
QT_IM_MODULE=fcitx
|
||||||
XMODIFIERS=@im=fcitx
|
XMODIFIERS=@im=fcitx
|
||||||
@ -10,7 +9,7 @@ RTC_USE_PIPEWIRE=true
|
|||||||
IM_MODULE_CLASSNAME=fcitx::QFcitxPlatformInputContext
|
IM_MODULE_CLASSNAME=fcitx::QFcitxPlatformInputContext
|
||||||
|
|
||||||
GDK_BACKEND=wayland,x11
|
GDK_BACKEND=wayland,x11
|
||||||
QT_QPA_PLATFORM="wayland;xcb"
|
QT_QPA_PLATFORM=wayland;xcb
|
||||||
CLUTTER_BACKEND=wayland
|
CLUTTER_BACKEND=wayland
|
||||||
SDL_VIDEODRIVER=wayland
|
SDL_VIDEODRIVER=wayland
|
||||||
EDITOR=nvim
|
EDITOR=nvim
|
||||||
|
|||||||
119
home/dot_config/eww/eww.scss
Normal file
119
home/dot_config/eww/eww.scss
Normal file
@ -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;
|
||||||
|
}
|
||||||
87
home/dot_config/eww/eww.yuck
Normal file
87
home/dot_config/eww/eww.yuck
Normal file
@ -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}%")))
|
||||||
8
home/dot_config/eww/executable_open-main.sh
Normal file
8
home/dot_config/eww/executable_open-main.sh
Normal file
@ -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'
|
||||||
18
home/dot_config/eww/scripts/executable_brightness.sh
Normal file
18
home/dot_config/eww/scripts/executable_brightness.sh
Normal file
@ -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
|
||||||
13
home/dot_config/eww/scripts/executable_get-workspaces.sh
Normal file
13
home/dot_config/eww/scripts/executable_get-workspaces.sh
Normal file
@ -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
|
||||||
15
home/dot_config/eww/scripts/executable_toggle-inhibit.sh
Normal file
15
home/dot_config/eww/scripts/executable_toggle-inhibit.sh
Normal file
@ -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
|
||||||
24
home/dot_config/eww/scripts/toggle-window.sh
Normal file
24
home/dot_config/eww/scripts/toggle-window.sh
Normal file
@ -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
|
||||||
21
home/dot_config/eww/scripts/volume.sh
Normal file
21
home/dot_config/eww/scripts/volume.sh
Normal file
@ -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
|
||||||
24
home/dot_config/sway/conf.d/input.conf
Normal file
24
home/dot_config/sway/conf.d/input.conf
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# vim: ft=swayconfig
|
||||||
|
|
||||||
|
### Input configuration
|
||||||
|
#
|
||||||
|
# Example configuration:
|
||||||
|
#
|
||||||
|
# input "2:14:SynPS/2_Synaptics_TouchPad" {
|
||||||
|
# dwt enabled
|
||||||
|
# tap enabled
|
||||||
|
# natural_scroll enabled
|
||||||
|
# middle_emulation enabled
|
||||||
|
# }
|
||||||
|
|
||||||
|
input type:touchpad {
|
||||||
|
drag enabled
|
||||||
|
drag_lock enabled
|
||||||
|
tap enabled
|
||||||
|
scroll_factor 0.6
|
||||||
|
}
|
||||||
|
#
|
||||||
|
# You can get the names of your inputs by running: swaymsg -t get_inputs
|
||||||
|
# Read `man 5 sway-input` for more information about this section.
|
||||||
|
|
||||||
|
|
||||||
170
home/dot_config/sway/conf.d/keybinding.conf
Normal file
170
home/dot_config/sway/conf.d/keybinding.conf
Normal file
@ -0,0 +1,170 @@
|
|||||||
|
# vim: ft=swayconfig
|
||||||
|
### Key bindings
|
||||||
|
#
|
||||||
|
# Basics:
|
||||||
|
#
|
||||||
|
bindsym $alt+Shift+c exec ~/bin/screenshot
|
||||||
|
bindsym $alt+Shift+m exec ~/bin/screenshot-monitor
|
||||||
|
bindsym $alt+Shift+v exec ~/bin/auto-screenshot-monitor
|
||||||
|
# Start a terminal
|
||||||
|
bindsym $mod+Return exec $term
|
||||||
|
|
||||||
|
# Kill focused window
|
||||||
|
bindsym $mod+Shift+q kill
|
||||||
|
|
||||||
|
# Find cursor
|
||||||
|
bindsym $mod+Shift+f exec ~/.config/sway/scripts/scale-cursor.sh $cursor_theme $cursor_big_size $cursor_size
|
||||||
|
|
||||||
|
# Start your launcher
|
||||||
|
bindsym $mod+d exec $menu
|
||||||
|
bindsym $alt+space exec $menu
|
||||||
|
bindsym $mod+Shift+w exec $window_switcher
|
||||||
|
bindsym $mod+w exec $window_workspace_switcher
|
||||||
|
|
||||||
|
# Drag floating windows by holding down $mod and left mouse button.
|
||||||
|
# Resize them with right mouse button + $mod.
|
||||||
|
# Despite the name, also works for non-floating windows.
|
||||||
|
# Change normal to inverse to use left mouse button for resizing and right
|
||||||
|
# mouse button for dragging.
|
||||||
|
floating_modifier $mod normal
|
||||||
|
|
||||||
|
# Reload the configuration file
|
||||||
|
bindsym $mod+Shift+c reload
|
||||||
|
|
||||||
|
bindsym $mod+Shift+x exec swaylock -f -i ~/.config/sway/bg2.png -s fill
|
||||||
|
|
||||||
|
# Exit sway (logs you out of your Wayland session)
|
||||||
|
bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -B 'Yes, exit sway' 'swaymsg exit'
|
||||||
|
|
||||||
|
bindsym $mod+Shift+p exec ~/.config/wofi/wofi-power.sh
|
||||||
|
|
||||||
|
bindsym XF86AudioRaiseVolume exec "pactl set-sink-volume @DEFAULT_SINK@ +5%; pkill -RTMIN+8 waybar"
|
||||||
|
bindsym XF86AudioLowerVolume exec "pactl set-sink-volume @DEFAULT_SINK@ -5%; pkill -RTMIN+8 waybar"
|
||||||
|
bindsym XF86AudioMute exec "pactl set-sink-mute @DEFAULT_SINK@ toggle; pkill -RTMIN+8 waybar"
|
||||||
|
|
||||||
|
bindsym XF86AudioPlay exec playerctl play-pause
|
||||||
|
bindsym XF86AudioNext exec playerctl next
|
||||||
|
bindsym XF86AudioPrev exec playerctl previous
|
||||||
|
|
||||||
|
bindsym XF86MonBrightnessUp exec "brightnessctl set 5%+"
|
||||||
|
bindsym XF86MonBrightnessDown exec "brightnessctl set 5%-"
|
||||||
|
#
|
||||||
|
# Moving around:
|
||||||
|
#
|
||||||
|
# Move your focus around
|
||||||
|
bindsym $mod+$left focus left
|
||||||
|
bindsym $mod+$down focus down
|
||||||
|
bindsym $mod+$up focus up
|
||||||
|
bindsym $mod+$right focus right
|
||||||
|
# Or use $mod+[up|down|left|right]
|
||||||
|
bindsym $mod+Left focus left
|
||||||
|
bindsym $mod+Down focus down
|
||||||
|
bindsym $mod+Up focus up
|
||||||
|
bindsym $mod+Right focus right
|
||||||
|
|
||||||
|
# Move the focused window with the same, but add Shift
|
||||||
|
bindsym $mod+Shift+$left move left
|
||||||
|
bindsym $mod+Shift+$down move down
|
||||||
|
bindsym $mod+Shift+$up move up
|
||||||
|
bindsym $mod+Shift+$right move right
|
||||||
|
# Ditto, with arrow keys
|
||||||
|
bindsym $mod+Shift+Left move left
|
||||||
|
bindsym $mod+Shift+Down move down
|
||||||
|
bindsym $mod+Shift+Up move up
|
||||||
|
bindsym $mod+Shift+Right move right
|
||||||
|
#
|
||||||
|
# Workspaces:
|
||||||
|
#
|
||||||
|
# Switch to workspace
|
||||||
|
bindsym $mod+1 workspace number 1
|
||||||
|
bindsym $mod+2 workspace number 2
|
||||||
|
bindsym $mod+3 workspace number 3
|
||||||
|
bindsym $mod+4 workspace number 4
|
||||||
|
bindsym $mod+5 workspace number 5
|
||||||
|
bindsym $mod+6 workspace number 6
|
||||||
|
bindsym $mod+7 workspace number 7
|
||||||
|
bindsym $mod+8 workspace number 8
|
||||||
|
bindsym $mod+9 workspace number 9
|
||||||
|
bindsym $mod+0 workspace number 10
|
||||||
|
|
||||||
|
# Move focused container to workspace
|
||||||
|
bindsym $mod+Shift+1 move container to workspace number 1
|
||||||
|
bindsym $mod+Shift+2 move container to workspace number 2
|
||||||
|
bindsym $mod+Shift+3 move container to workspace number 3
|
||||||
|
bindsym $mod+Shift+4 move container to workspace number 4
|
||||||
|
bindsym $mod+Shift+5 move container to workspace number 5
|
||||||
|
bindsym $mod+Shift+6 move container to workspace number 6
|
||||||
|
bindsym $mod+Shift+7 move container to workspace number 7
|
||||||
|
bindsym $mod+Shift+8 move container to workspace number 8
|
||||||
|
bindsym $mod+Shift+9 move container to workspace number 9
|
||||||
|
bindsym $mod+Shift+0 move container to workspace number 10
|
||||||
|
# Note: workspaces can have any name you want, not just numbers.
|
||||||
|
# We just use 1-10 as the default.
|
||||||
|
#
|
||||||
|
# Layout stuff:
|
||||||
|
#
|
||||||
|
# You can "split" the current object of your focus with
|
||||||
|
# $mod+b or $mod+v, for horizontal and vertical splits
|
||||||
|
# respectively.
|
||||||
|
bindsym $mod+b splith
|
||||||
|
bindsym $mod+v splitv
|
||||||
|
|
||||||
|
# Switch the current container between different layout styles
|
||||||
|
bindsym $mod+s layout stacking
|
||||||
|
bindsym $mod+t layout tabbed
|
||||||
|
bindsym $mod+e layout toggle split
|
||||||
|
|
||||||
|
# Make the current focus fullscreen
|
||||||
|
bindsym $mod+f fullscreen
|
||||||
|
|
||||||
|
# Toggle the current focus between tiling and floating mode
|
||||||
|
bindsym $mod+Shift+space floating toggle
|
||||||
|
|
||||||
|
# Swap focus between the tiling area and the floating area
|
||||||
|
bindsym $mod+space focus mode_toggle
|
||||||
|
|
||||||
|
# Move focus to the parent container
|
||||||
|
bindsym $mod+a focus parent
|
||||||
|
#
|
||||||
|
# Scratchpad:
|
||||||
|
#
|
||||||
|
# Sway has a "scratchpad", which is a bag of holding for windows.
|
||||||
|
# You can send windows there and get them back later.
|
||||||
|
|
||||||
|
# Move the currently focused window to the scratchpad
|
||||||
|
bindsym $mod+Shift+minus move scratchpad
|
||||||
|
|
||||||
|
# Show the next scratchpad window or hide the focused scratchpad window.
|
||||||
|
# If there are multiple scratchpad windows, this command cycles through them.
|
||||||
|
bindsym $mod+minus scratchpad show
|
||||||
|
#
|
||||||
|
# Resizing containers:
|
||||||
|
#
|
||||||
|
mode "resize" {
|
||||||
|
# left will shrink the containers width
|
||||||
|
# right will grow the containers width
|
||||||
|
# up will shrink the containers height
|
||||||
|
# down will grow the containers height
|
||||||
|
bindsym $left resize shrink width 10px
|
||||||
|
bindsym $down resize grow height 10px
|
||||||
|
bindsym $up resize shrink height 10px
|
||||||
|
bindsym $right resize grow width 10px
|
||||||
|
|
||||||
|
# Ditto, with arrow keys
|
||||||
|
bindsym Left resize shrink width 10px
|
||||||
|
bindsym Down resize grow height 10px
|
||||||
|
bindsym Up resize shrink height 10px
|
||||||
|
bindsym Right resize grow width 10px
|
||||||
|
|
||||||
|
# Return to default mode
|
||||||
|
bindsym Return mode "default"
|
||||||
|
bindsym Escape mode "default"
|
||||||
|
}
|
||||||
|
bindsym $mod+r mode "resize"
|
||||||
|
|
||||||
|
# show sov
|
||||||
|
#bindsym --no-repeat $mod+Shift+w exec "echo 1 > /tmp/sovpipe"
|
||||||
|
#bindsym --release $mod+Shift+w exec "echo 0 > /tmp/sovpipe"
|
||||||
|
|
||||||
|
# show bindsym help
|
||||||
|
bindsym $mod+Ctrl+h exec cat ~/.config/sway/config |grep bindsym |grep -v "#"| sed 's/^[[:space:]]*//'| wofi --dmenu
|
||||||
13
home/dot_config/sway/conf.d/monitor.conf
Normal file
13
home/dot_config/sway/conf.d/monitor.conf
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# vim: ft=swayconfig
|
||||||
|
output eDP-1 scale 1.3
|
||||||
|
# set workspace monitor
|
||||||
|
workspace 1 output eDP-1
|
||||||
|
workspace 2 output eDP-1
|
||||||
|
workspace 3 output eDP-1
|
||||||
|
workspace 4 output HDMI-A-1 DP-9 eDP-1
|
||||||
|
workspace 5 output HDMI-A-1 DP-9 eDP-1
|
||||||
|
workspace 6 output HDMI-A-1 DP-9 eDP-1
|
||||||
|
workspace 7 output HDMI-A-1 DP-9 eDP-1
|
||||||
|
workspace 8 output HDMI-A-1 DP-9 eDP-1
|
||||||
|
workspace 9 output eDP-1
|
||||||
|
workspace 10 output eDP-1
|
||||||
@ -18,7 +18,8 @@ set $up k
|
|||||||
set $right l
|
set $right l
|
||||||
# Your preferred terminal emulator
|
# Your preferred terminal emulator
|
||||||
# set $term env WAYLAND_DISPLAY= WINIT_X11_SCALE_FACTOR=1.0 alacritty
|
# set $term env WAYLAND_DISPLAY= WINIT_X11_SCALE_FACTOR=1.0 alacritty
|
||||||
set $term alacritty
|
# set $term alacritty
|
||||||
|
set $term ghostty
|
||||||
# set $term env WAYLAND_DISPLAY= WINIT_X11_SCALE_FACTOR=1.0 WINIT_UNIX_BACKEND=x11 alacritty
|
# set $term env WAYLAND_DISPLAY= WINIT_X11_SCALE_FACTOR=1.0 WINIT_UNIX_BACKEND=x11 alacritty
|
||||||
# Your preferred application launcher
|
# Your preferred application launcher
|
||||||
# Note: pass the final command to swaymsg so that the resulting window can be opened
|
# Note: pass the final command to swaymsg so that the resulting window can be opened
|
||||||
@ -26,6 +27,11 @@ set $term alacritty
|
|||||||
# set $menu dmenu_path | dmenu | xargs swaymsg exec --
|
# set $menu dmenu_path | dmenu | xargs swaymsg exec --
|
||||||
set $menu wofi --show drun
|
set $menu wofi --show drun
|
||||||
set $window_switcher ~/.config/wofi/wofi-window-switch.sh
|
set $window_switcher ~/.config/wofi/wofi-window-switch.sh
|
||||||
|
set $window_workspace_switcher ~/.config/wofi/wofi-current-workspace.sh
|
||||||
|
|
||||||
|
set $cursor_theme Sweet-cursors
|
||||||
|
set $cursor_size 24
|
||||||
|
set $cursor_big_size 64
|
||||||
|
|
||||||
### Output configuration
|
### Output configuration
|
||||||
#
|
#
|
||||||
@ -39,8 +45,9 @@ output * bg /home/jay/.config/sway/wallpaper.png fill
|
|||||||
#
|
#
|
||||||
# You can get the names of your outputs by running: swaymsg -t get_outputs
|
# You can get the names of your outputs by running: swaymsg -t get_outputs
|
||||||
|
|
||||||
exec systemctl --user import-environment
|
exec systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_TYPE
|
||||||
exec dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=sway
|
exec dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=sway
|
||||||
|
# exec systemctl --user restart xdg-desktop-portal xdg-desktop-portal-wlr
|
||||||
# exec_always xdg-desktop-portal -r
|
# exec_always xdg-desktop-portal -r
|
||||||
# exec_always /usr/libexec/xdg-desktop-portal-wlr
|
# exec_always /usr/libexec/xdg-desktop-portal-wlr
|
||||||
# exec env XDG_CONFIG_HOME=/home/jay/.config gentoo-pipewire-launcher restart &
|
# exec env XDG_CONFIG_HOME=/home/jay/.config gentoo-pipewire-launcher restart &
|
||||||
@ -48,9 +55,11 @@ exec_always kanshi
|
|||||||
exec dex -a -e sway -s /etc/xdg/autostart/:~/.config/autostart/
|
exec dex -a -e sway -s /etc/xdg/autostart/:~/.config/autostart/
|
||||||
exec mako
|
exec mako
|
||||||
exec udiskie --smart-tray
|
exec udiskie --smart-tray
|
||||||
|
exec_always ~/.config/eww/open-main.sh
|
||||||
|
|
||||||
|
|
||||||
# for sway overview
|
# for sway overview
|
||||||
exec_always rm -f /tmp/sovpipe && mkfifo /tmp/sovpipe && tail -f /tmp/sovpipe | sov -t 100
|
#exec_always rm -f /tmp/sovpipe && mkfifo /tmp/sovpipe && tail -f /tmp/sovpipe | sov -t 100
|
||||||
|
|
||||||
### Idle configuration
|
### Idle configuration
|
||||||
#
|
#
|
||||||
@ -65,222 +74,27 @@ exec swayidle -w \
|
|||||||
# your displays after another 300 seconds, and turn your screens back on when
|
# your displays after another 300 seconds, and turn your screens back on when
|
||||||
# resumed. It will also lock your screen before your computer goes to sleep.
|
# resumed. It will also lock your screen before your computer goes to sleep.
|
||||||
|
|
||||||
### Input configuration
|
|
||||||
#
|
|
||||||
# Example configuration:
|
|
||||||
#
|
|
||||||
# input "2:14:SynPS/2_Synaptics_TouchPad" {
|
|
||||||
# dwt enabled
|
|
||||||
# tap enabled
|
|
||||||
# natural_scroll enabled
|
|
||||||
# middle_emulation enabled
|
|
||||||
# }
|
|
||||||
|
|
||||||
input type:touchpad {
|
|
||||||
drag enabled
|
|
||||||
drag_lock enabled
|
|
||||||
tap enabled
|
|
||||||
scroll_factor 0.6
|
|
||||||
}
|
|
||||||
#
|
|
||||||
# You can get the names of your inputs by running: swaymsg -t get_inputs
|
|
||||||
# Read `man 5 sway-input` for more information about this section.
|
|
||||||
|
|
||||||
### Key bindings
|
|
||||||
#
|
|
||||||
# Basics:
|
|
||||||
#
|
|
||||||
bindsym $alt+Shift+c exec ~/bin/screenshot
|
|
||||||
bindsym $alt+Shift+m exec ~/bin/screenshot-monitor
|
|
||||||
bindsym $alt+Shift+v exec ~/bin/auto-screenshot-monitor
|
|
||||||
# Start a terminal
|
|
||||||
bindsym $mod+Return exec $term
|
|
||||||
|
|
||||||
# Kill focused window
|
|
||||||
bindsym $mod+Shift+q kill
|
|
||||||
|
|
||||||
# Start your launcher
|
|
||||||
bindsym $mod+d exec $menu
|
|
||||||
bindsym $mod+w exec $window_switcher
|
|
||||||
|
|
||||||
# Drag floating windows by holding down $mod and left mouse button.
|
|
||||||
# Resize them with right mouse button + $mod.
|
|
||||||
# Despite the name, also works for non-floating windows.
|
|
||||||
# Change normal to inverse to use left mouse button for resizing and right
|
|
||||||
# mouse button for dragging.
|
|
||||||
floating_modifier $mod normal
|
|
||||||
|
|
||||||
# Reload the configuration file
|
|
||||||
bindsym $mod+Shift+c reload
|
|
||||||
|
|
||||||
bindsym $mod+Shift+x exec swaylock -f -i ~/.config/sway/bg2.png -s fill
|
|
||||||
|
|
||||||
# Exit sway (logs you out of your Wayland session)
|
|
||||||
bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -B 'Yes, exit sway' 'swaymsg exit'
|
|
||||||
|
|
||||||
bindsym $mod+Shift+p exec ~/.config/wofi/wofi-power.sh
|
|
||||||
|
|
||||||
bindsym XF86AudioRaiseVolume exec "pactl set-sink-volume @DEFAULT_SINK@ +5%; pkill -RTMIN+8 waybar"
|
|
||||||
bindsym XF86AudioLowerVolume exec "pactl set-sink-volume @DEFAULT_SINK@ -5%; pkill -RTMIN+8 waybar"
|
|
||||||
bindsym XF86AudioMute exec "pactl set-sink-mute @DEFAULT_SINK@ toggle; pkill -RTMIN+8 waybar"
|
|
||||||
|
|
||||||
bindsym XF86AudioPlay exec playerctl play-pause
|
|
||||||
bindsym XF86AudioNext exec playerctl next
|
|
||||||
bindsym XF86AudioPrev exec playerctl previous
|
|
||||||
|
|
||||||
bindsym XF86MonBrightnessUp exec "brightnessctl set 5%+"
|
|
||||||
bindsym XF86MonBrightnessDown exec "brightnessctl set 5%-"
|
|
||||||
#
|
|
||||||
# Moving around:
|
|
||||||
#
|
|
||||||
# Move your focus around
|
|
||||||
bindsym $mod+$left focus left
|
|
||||||
bindsym $mod+$down focus down
|
|
||||||
bindsym $mod+$up focus up
|
|
||||||
bindsym $mod+$right focus right
|
|
||||||
# Or use $mod+[up|down|left|right]
|
|
||||||
bindsym $mod+Left focus left
|
|
||||||
bindsym $mod+Down focus down
|
|
||||||
bindsym $mod+Up focus up
|
|
||||||
bindsym $mod+Right focus right
|
|
||||||
|
|
||||||
# Move the focused window with the same, but add Shift
|
|
||||||
bindsym $mod+Shift+$left move left
|
|
||||||
bindsym $mod+Shift+$down move down
|
|
||||||
bindsym $mod+Shift+$up move up
|
|
||||||
bindsym $mod+Shift+$right move right
|
|
||||||
# Ditto, with arrow keys
|
|
||||||
bindsym $mod+Shift+Left move left
|
|
||||||
bindsym $mod+Shift+Down move down
|
|
||||||
bindsym $mod+Shift+Up move up
|
|
||||||
bindsym $mod+Shift+Right move right
|
|
||||||
#
|
|
||||||
# Workspaces:
|
|
||||||
#
|
|
||||||
# Switch to workspace
|
|
||||||
bindsym $mod+1 workspace number 1
|
|
||||||
bindsym $mod+2 workspace number 2
|
|
||||||
bindsym $mod+3 workspace number 3
|
|
||||||
bindsym $mod+4 workspace number 4
|
|
||||||
bindsym $mod+5 workspace number 5
|
|
||||||
bindsym $mod+6 workspace number 6
|
|
||||||
bindsym $mod+7 workspace number 7
|
|
||||||
bindsym $mod+8 workspace number 8
|
|
||||||
bindsym $mod+9 workspace number 9
|
|
||||||
bindsym $mod+0 workspace number 10
|
|
||||||
|
|
||||||
# Move focused container to workspace
|
|
||||||
bindsym $mod+Shift+1 move container to workspace number 1
|
|
||||||
bindsym $mod+Shift+2 move container to workspace number 2
|
|
||||||
bindsym $mod+Shift+3 move container to workspace number 3
|
|
||||||
bindsym $mod+Shift+4 move container to workspace number 4
|
|
||||||
bindsym $mod+Shift+5 move container to workspace number 5
|
|
||||||
bindsym $mod+Shift+6 move container to workspace number 6
|
|
||||||
bindsym $mod+Shift+7 move container to workspace number 7
|
|
||||||
bindsym $mod+Shift+8 move container to workspace number 8
|
|
||||||
bindsym $mod+Shift+9 move container to workspace number 9
|
|
||||||
bindsym $mod+Shift+0 move container to workspace number 10
|
|
||||||
# Note: workspaces can have any name you want, not just numbers.
|
|
||||||
# We just use 1-10 as the default.
|
|
||||||
#
|
|
||||||
# Layout stuff:
|
|
||||||
#
|
|
||||||
# You can "split" the current object of your focus with
|
|
||||||
# $mod+b or $mod+v, for horizontal and vertical splits
|
|
||||||
# respectively.
|
|
||||||
bindsym $mod+b splith
|
|
||||||
bindsym $mod+v splitv
|
|
||||||
|
|
||||||
# Switch the current container between different layout styles
|
|
||||||
bindsym $mod+s layout stacking
|
|
||||||
bindsym $mod+t layout tabbed
|
|
||||||
bindsym $mod+e layout toggle split
|
|
||||||
|
|
||||||
# Make the current focus fullscreen
|
|
||||||
bindsym $mod+f fullscreen
|
|
||||||
|
|
||||||
# Toggle the current focus between tiling and floating mode
|
|
||||||
bindsym $mod+Shift+space floating toggle
|
|
||||||
|
|
||||||
# Swap focus between the tiling area and the floating area
|
|
||||||
bindsym $mod+space focus mode_toggle
|
|
||||||
|
|
||||||
# Move focus to the parent container
|
|
||||||
bindsym $mod+a focus parent
|
|
||||||
#
|
|
||||||
# Scratchpad:
|
|
||||||
#
|
|
||||||
# Sway has a "scratchpad", which is a bag of holding for windows.
|
|
||||||
# You can send windows there and get them back later.
|
|
||||||
|
|
||||||
# Move the currently focused window to the scratchpad
|
|
||||||
bindsym $mod+Shift+minus move scratchpad
|
|
||||||
|
|
||||||
# Show the next scratchpad window or hide the focused scratchpad window.
|
|
||||||
# If there are multiple scratchpad windows, this command cycles through them.
|
|
||||||
bindsym $mod+minus scratchpad show
|
|
||||||
#
|
|
||||||
# Resizing containers:
|
|
||||||
#
|
|
||||||
mode "resize" {
|
|
||||||
# left will shrink the containers width
|
|
||||||
# right will grow the containers width
|
|
||||||
# up will shrink the containers height
|
|
||||||
# down will grow the containers height
|
|
||||||
bindsym $left resize shrink width 10px
|
|
||||||
bindsym $down resize grow height 10px
|
|
||||||
bindsym $up resize shrink height 10px
|
|
||||||
bindsym $right resize grow width 10px
|
|
||||||
|
|
||||||
# Ditto, with arrow keys
|
|
||||||
bindsym Left resize shrink width 10px
|
|
||||||
bindsym Down resize grow height 10px
|
|
||||||
bindsym Up resize shrink height 10px
|
|
||||||
bindsym Right resize grow width 10px
|
|
||||||
|
|
||||||
# Return to default mode
|
|
||||||
bindsym Return mode "default"
|
|
||||||
bindsym Escape mode "default"
|
|
||||||
}
|
|
||||||
bindsym $mod+r mode "resize"
|
|
||||||
|
|
||||||
# show sov
|
|
||||||
#bindsym --no-repeat $mod+Shift+w exec "echo 1 > /tmp/sovpipe"
|
|
||||||
#bindsym --release $mod+Shift+w exec "echo 0 > /tmp/sovpipe"
|
|
||||||
|
|
||||||
# show bindsym help
|
|
||||||
bindsym $mod+Ctrl+h exec cat ~/.config/sway/config |grep bindsym |grep -v "#"| sed 's/^[[:space:]]*//'| wofi --dmenu
|
|
||||||
|
|
||||||
# set workspace monitor
|
|
||||||
#workspace 1 output eDP-1
|
|
||||||
#workspace 2 output HDMI-A-1 DP-1 eDP-1
|
|
||||||
#workspace 3 output HDMI-A-1 DP-1 eDP-1
|
|
||||||
#workspace 4 output HDMI-A-1 DP-1 eDP-1
|
|
||||||
#workspace 5 output HDMI-A-1 DP-1 eDP-1
|
|
||||||
#workspace 6 output HDMI-A-1 DP-1 eDP-1
|
|
||||||
#workspace 7 output eDP-1
|
|
||||||
#workspace 8 output eDP-1
|
|
||||||
#workspace 9 output eDP-1
|
|
||||||
#workspace 10 output eDP-1
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Status Bar:
|
# Status Bar:
|
||||||
#
|
#
|
||||||
# Read `man 5 sway-bar` for more information about this section.
|
# Read `man 5 sway-bar` for more information about this section.
|
||||||
bar {
|
# bar {
|
||||||
# position top
|
# # position top
|
||||||
|
|
||||||
# When the status_command prints a new line to stdout, swaybar updates.
|
# # When the status_command prints a new line to stdout, swaybar updates.
|
||||||
# The default just shows the current date and time.
|
# # The default just shows the current date and time.
|
||||||
# status_command while date +'%Y-%m-%d %I:%M:%S %p'; do sleep 1; done
|
# # status_command while date +'%Y-%m-%d %I:%M:%S %p'; do sleep 1; done
|
||||||
# status_command ~/.config/waybar/launch.sh
|
# # status_command ~/.config/waybar/launch.sh
|
||||||
swaybar_command waybar
|
# swaybar_command waybar
|
||||||
|
|
||||||
colors {
|
# colors {
|
||||||
statusline #ffffff
|
# statusline #ffffff
|
||||||
background #323232
|
# background #323232
|
||||||
inactive_workspace #32323200 #32323200 #5c5c5c
|
# inactive_workspace #32323200 #32323200 #5c5c5c
|
||||||
}
|
# }
|
||||||
|
# }
|
||||||
|
seat seat0 {
|
||||||
|
xcursor_theme Adwaita 24
|
||||||
}
|
}
|
||||||
|
|
||||||
gaps outer 5
|
gaps outer 5
|
||||||
@ -290,7 +104,7 @@ gaps inner 5
|
|||||||
for_window [app_id="^.*"] border pixel 4
|
for_window [app_id="^.*"] border pixel 4
|
||||||
for_window [class="^.*"] border pixel 4
|
for_window [class="^.*"] border pixel 4
|
||||||
for_window [workspace=8] floating enable
|
for_window [workspace=8] floating enable
|
||||||
for_window [workspace=6] floating enable
|
for_window [workspace=9] floating enable
|
||||||
|
|
||||||
focus_follows_mouse no
|
focus_follows_mouse no
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
cursorTheme=$(swaymsg -t get_inputs | jq -r '.[] | select(.type == "pointer") | .xcursor_theme' | head -n 1)
|
||||||
|
|
||||||
|
echo "Current cursor theme: $cursorTheme"
|
||||||
|
# swaymsg "seat seat0 xcursor_theme "
|
||||||
15
home/dot_config/sway/scripts/executable_scale-cursor.sh
Normal file
15
home/dot_config/sway/scripts/executable_scale-cursor.sh
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# usage: scale-cursor.sh <cursor-theme> <bigSize> <originalSize>
|
||||||
|
if [ "$#" -ne 3 ]; then
|
||||||
|
echo "Usage: $0 <cursor-theme> <bigSize> <originalSize>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
CURSOR_THEME="$1"
|
||||||
|
BIG_SIZE="$2"
|
||||||
|
ORIGINAL_SIZE="$3"
|
||||||
|
|
||||||
|
swaymsg "seat seat0 xcursor_theme $CURSOR_THEME $BIG_SIZE"
|
||||||
|
sleep 1
|
||||||
|
swaymsg "seat seat0 xcursor_theme $CURSOR_THEME $ORIGINAL_SIZE"
|
||||||
32
home/dot_config/wofi/executable_wofi-current-workspace.sh
Normal file
32
home/dot_config/wofi/executable_wofi-current-workspace.sh
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# 1. 取得目前 focused workspace 的名稱
|
||||||
|
CURRENT_WS=$(swaymsg -t get_workspaces | jq -r '.[] | select(.focused).name')
|
||||||
|
|
||||||
|
# 如果沒抓到 workspace,直接退出
|
||||||
|
if [ -z "$CURRENT_WS" ]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 2. 列出該 workspace 內的所有視窗 (con 與 floating_con)
|
||||||
|
# 直接從 get_tree 找對應名稱的 workspace 節點並遞迴出視窗資訊
|
||||||
|
entries=$(swaymsg -t get_tree | jq -r --arg WS "$CURRENT_WS" '
|
||||||
|
.. |
|
||||||
|
select(.type? == "workspace" and .name == $WS) |
|
||||||
|
recurse(.nodes[]?, .floating_nodes[]?) |
|
||||||
|
select(.type == "con" or .type == "floating_con") |
|
||||||
|
select(.name != null) |
|
||||||
|
(.id | tostring) + " [" + (.app_id // .window_properties.class // "Unknown") + "] " + .name')
|
||||||
|
|
||||||
|
# 如果沒有視窗,直接結束
|
||||||
|
if [ -z "$entries" ]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 3. 透過 wofi 顯示選單,並取得選擇視窗的 id (第一個欄位)
|
||||||
|
selected=$(echo "$entries" | wofi --width 600 --height 400 --dmenu --cache-file /dev/null | awk '{print $1}')
|
||||||
|
|
||||||
|
# 如果有選擇,則切換焦點到該視窗
|
||||||
|
if [ -n "$selected" ]; then
|
||||||
|
swaymsg "[con_id=$selected]" focus
|
||||||
|
fi
|
||||||
Loading…
x
Reference in New Issue
Block a user