This commit is contained in:
jay 2026-03-22 20:46:20 +08:00
parent a4faab3db1
commit 35abfa07bc
17 changed files with 603 additions and 216 deletions

View 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

View File

@ -1,5 +1,4 @@
XIM=fcitx
GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx
@ -10,7 +9,7 @@ RTC_USE_PIPEWIRE=true
IM_MODULE_CLASSNAME=fcitx::QFcitxPlatformInputContext
GDK_BACKEND=wayland,x11
QT_QPA_PLATFORM="wayland;xcb"
QT_QPA_PLATFORM=wayland;xcb
CLUTTER_BACKEND=wayland
SDL_VIDEODRIVER=wayland
EDITOR=nvim

View 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;
}

View 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}%")))

View 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'

View 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

View 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

View 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

View 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

View 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

View 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.

View 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

View 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

View File

@ -18,7 +18,8 @@ set $up k
set $right l
# Your preferred terminal emulator
# 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
# Your preferred application launcher
# 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 wofi --show drun
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
#
@ -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
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 systemctl --user restart xdg-desktop-portal xdg-desktop-portal-wlr
# exec_always xdg-desktop-portal -r
# exec_always /usr/libexec/xdg-desktop-portal-wlr
# 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 mako
exec udiskie --smart-tray
exec_always ~/.config/eww/open-main.sh
# 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
#
@ -65,222 +74,27 @@ exec swayidle -w \
# 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.
### 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:
#
# Read `man 5 sway-bar` for more information about this section.
bar {
# position top
# bar {
# # position top
# When the status_command prints a new line to stdout, swaybar updates.
# 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 ~/.config/waybar/launch.sh
swaybar_command waybar
# # When the status_command prints a new line to stdout, swaybar updates.
# # 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 ~/.config/waybar/launch.sh
# swaybar_command waybar
colors {
statusline #ffffff
background #323232
inactive_workspace #32323200 #32323200 #5c5c5c
}
# colors {
# statusline #ffffff
# background #323232
# inactive_workspace #32323200 #32323200 #5c5c5c
# }
# }
seat seat0 {
xcursor_theme Adwaita 24
}
gaps outer 5
@ -290,7 +104,7 @@ gaps inner 5
for_window [app_id="^.*"] border pixel 4
for_window [class="^.*"] border pixel 4
for_window [workspace=8] floating enable
for_window [workspace=6] floating enable
for_window [workspace=9] floating enable
focus_follows_mouse no

View File

@ -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 "

View 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"

View 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