added support for multiple monitors

This commit is contained in:
2025-11-12 15:07:06 -05:00
parent b9c460cdcf
commit 0f5bd0f365
3 changed files with 177 additions and 11 deletions
+10 -4
View File
@@ -22,7 +22,12 @@ font pango:monospace 8
# Start XDG autostart .desktop files using dex. See also
# https://wiki.archlinux.org/index.php/XDG_Autostart
exec --no-startup-id dex --autostart --environment i3
exec_always --no-startup-id killall -q polybar; polybar -c .config/polybar/main.module &
# COMMENT THIS IN FOR ONE SCREEN
# exec_always --no-startup-id killall -q polybar; polybar -c .config/polybar/main.module &
# DELETEME if you change your monitor setup
exec_always --no-startup-id bash /home/ion606/setupScreens.sh
# The combination of xss-lock, nm-applet and pactl is a popular choice, so
# they are included here as an example. Modify as you see fit.
@@ -30,14 +35,15 @@ exec_always --no-startup-id killall -q polybar; polybar -c .config/polybar/main.
# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the
# screen before suspend. Use loginctl lock-session to lock your screen.
exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork
exec_always --no-startup-id dunst
# NetworkManager is the most popular way to manage wireless networks on Linux,
# and nm-applet is a desktop environment-independent system tray GUI for it.
exec --no-startup-id nm-applet
exec --no-startup-id /usr/lib/notify-osd/notify-osd &
exec_always feh --bg-fill "$(find /home/ion606/Pictures/astolfo/ -type f | shuf -n 1)"
exec_always picom --config /home/ion606/.config/picom/picom.config
exec_always feh --bg-fill "$(find /home/ion606/Pictures/astolfo/ -type f | shuf -n 1)"
exec_always picom --config /home/ion606/.config/picom/picom.conf
exec_always --no-startup-id eww daemon
focus_follows_mouse no
@@ -53,7 +59,7 @@ bindsym XF86MonBrightnessDown exec brightnessctl set 10%-
bindsym XF86MonBrightnessUp exec brightnessctl set +10%
bindsym $mod+Shift+B exec feh --bg-fill "/home/ion606/Pictures/bk.gif"
bindsym $mod+Shift+B exec feh --bg-fill "$(find /home/ion606/Pictures/astolfo/ -type f | shuf -n 1)"
# Use Mouse+$mod to drag floating windows to their wanted position
floating_modifier $mod
+114 -7
View File
@@ -1,4 +1,5 @@
[bar/example]
monitor = ${env:MONITOR:}
width = 100%
height = 30
background = #2c2c54
@@ -41,6 +42,9 @@ pseudo-transparency = false
[module/i3]
type = internal/i3
index-sort = true
sort-workspaces = true
pin-workspaces = true
ws-icon-0 = 1;♚
ws-icon-1 = 2;♛
ws-icon-2 = 3;♜
@@ -123,7 +127,7 @@ label-warn = CPU %percentage%%
[module/wifi]
type = internal/network
interface = wlo1
interface = wlan0
interface-type = wireless
interval = 3.0
udspeed-minwidth = 5
@@ -237,10 +241,113 @@ ramp-4 = 🌕
[module/battery]
type = custom/script
exec = ~/.config/polybar/scripts/battery_status.sh
interval = 5
type = internal/battery
; toggle the display mode (percentage vs time remaining) on left-click and refresh the module immediately
click-left = ~/.config/polybar/scripts/toggle_battery_display.sh && polybar-msg hook battery_script 1
hook-0 = ~/.config/polybar/scripts/battery_status.sh
; This is useful in case the battery never reports 100% charge
; Default: 100
full-at = 98
; format-low once this charge percentage is reached
; Default: 10
; New in version 3.6.0
low-at = 20
; Use the following command to list batteries and adapters:
; $ ls -1 /sys/class/power_supply/
battery = BAT1
adapter = ADP1
; If an inotify event haven't been reported in this many
; seconds, manually poll for new values.
;
; Needed as a fallback for systems that don't report events
; on sysfs/procfs.
;
; Disable polling by setting the interval to 0.
;
; Default: 5
poll-interval = 5
; see "man date" for details on how to format the time string
; NOTE: if you want to use syntax tags here you need to use %%{...}
; Default: %H:%M:%S
time-format = %H:%M
; Available tags:
; <label-charging> (default)
; <bar-capacity>
; <ramp-capacity>
; <animation-charging>
format-charging = ⚡ <animation-charging> <label-charging>
; Available tags:
; <label-discharging> (default)
; <bar-capacity>
; <ramp-capacity>
; <animation-discharging>
; format-discharging = <ramp-capacity> <label-discharging>
; Available tags:
; <label-full> (default)
; <bar-capacity>
; <ramp-capacity>
format-full = <ramp-capacity> <label-full>
; Format used when battery level drops to low-at
; If not defined, format-discharging is used instead.
; Available tags:
; <label-low>
; <animation-low>
; <bar-capacity>
; <ramp-capacity>
; New in version 3.6.0
format-low = <label-low> <animation-low>
; Available tokens:
; %percentage% (default) - is set to 100 if full-at is reached
; %percentage_raw%
; %time%
; %consumption% (shows current charge rate in watts)
label-charging = %percentage%%
; Available tokens:
; %percentage% (default) - is set to 100 if full-at is reached
; %percentage_raw%
label-full = %percentage%% ^~^
; Available tokens:
; %percentage% (default) - is set to 100 if full-at is reached
; %percentage_raw%
; %time%
; %consumption% (shows current discharge rate in watts)
; New in version 3.6.0
label-low = BATTERY LOW AT %percentage%
; Only applies if <ramp-capacity> is used
ramp-capacity-0 = 
ramp-capacity-1 = 
ramp-capacity-2 = 
ramp-capacity-3 = 
ramp-capacity-4 = 
; Only applies if <bar-capacity> is used
bar-capacity-width = 10
; Only applies if <animation-charging> is used
animation-charging-0 = 
animation-charging-1 = 
animation-charging-2 = 
animation-charging-3 = 
animation-charging-4 = 
; Framerate in milliseconds
animation-charging-framerate = 750
; Only applies if <animation-low> is used
; New in version 3.6.0
animation-low-0 = ⚠️
animation-low-1 = ⚠️
animation-low-2 = ⚠️
animation-low-3 = 
animation-low-4 = 
animation-low-5 = 
animation-low-framerate = 600
+53
View File
@@ -0,0 +1,53 @@
# get list of connected outputs
outputs=$(xrandr --query | grep " connected" | awk '{print $1}')
current_workspace=$(i3-msg -t get_workspaces | jq -r '.[] | select(.focused==true).name') || 1
dp=""
hdmi=""
for out in $outputs; do
if [[ $out == DisplayPort-* ]]; then
dp="$out"
elif [[ $out == HDMI-* ]]; then
# pick the first HDMI found
if [[ -z $hdmi ]]; then
hdmi="$out"
fi
fi
done
if [[ -z $dp ]]; then
echo "No DisplayPort output found. Exiting."
exit 1
fi
if [[ -z $hdmi ]]; then
echo "No HDMI output found. Using only $dp as primary."
xrandr --output "$dp" --auto --primary
exit 0
fi
# both found: apply layout
xrandr --output "$dp" --auto --primary --output "$hdmi" --auto --left-of "$dp"
# move windows
# send workspace 1 to HDMI output
i3-msg "workspace 1; move workspace to output $hdmi"
# move 2,3,4 to DP out
i3-msg "workspace 2; move workspace to output $dp"
i3-msg "workspace 3; move workspace to output $dp"
i3-msg "workspace 4; move workspace to output $dp"
# polybar
killall -q polybar
while pgrep -u $UID -x polybar >/dev/null; do sleep 0.1; done
for m in $(xrandr --query | grep " connected" | cut -d" " -f1); do
MONITOR=$m polybar -c .config/polybar/main.module &
done
# switch back to the workspace I was on
i3-msg "workspace number $current_workspace"