diff --git a/.config/bspwm/bspwmrc b/.config/bspwm/bspwmrc index 97e74ab..4054931 100755 --- a/.config/bspwm/bspwmrc +++ b/.config/bspwm/bspwmrc @@ -1,13 +1,44 @@ #! /bin/sh -# set primary monitor and lower resolution -xrandr --output HDMI-A-0 --mode 2560x1440 --primary --right-of eDP +monitor_internal=eDP +monitor_external=HDMI-A-0 +monitor_primary=$monitor_external + +# check if we are connected to an second monitor +dock_status=docked +if xrandr | grep "$monitor_external disconnected"; then + dock_status=undocked + monitor_primary=$monitor_internal +fi + +# set primary monitor +xrandr --output $monitor_primary --primary + +if [[ "$dock_status" = "docked" ]]; then + # lower external monitor resolution and set up positioning + xrandr --output $monitor_external --mode 2560x1440 --right-of $monitor_internal +fi # start sxhkd pgrep -x sxhkd > /dev/null || sxhkd & -bspc monitor eDP -d 1 2 3 4 5 -bspc monitor HDMI-A-0 -d 6 7 8 9 10 +# create/move desktops +if [[ "$dock_status" = "docked" ]]; then + if [[ "$(bspc query -D -m $monitor_internal | wc -l)" = "10" ]]; then + bspc query -D -m $monitor_internal --names | tail -5 | xargs -rd'\n' -i'{}' bspc desktop {} -m $monitor_external --follow + else + bspc monitor $monitor_internal -d 1 2 3 4 5 + bspc monitor $monitor_external -d 6 7 8 9 10 + fi +else + if [[ "$(bspc query -D --names | grep -v ghost | wc -l)" = "10" ]]; then + # create ghost desktop so all external desktops can be moved + #bspc monitor $monitor_external -d ghost + bscp query -D -m $monitor_external --names | grep -v ghost | xargs -rd'\n' -i'{}' bspc desktop {} -m $monitor_internal --follow + else + bspc monitor $monitor_internal -d 1 2 3 4 5 6 7 8 9 10 + fi +fi bspc config border_width 4 bspc config window_gap 15 @@ -25,11 +56,22 @@ bspc config urgent_border_color \#cba6f7 bspc config presel_feedback_color \#cba6f7 # rules -bspc rule -a discord -o node=@^1:^1:/2 desktop='1' follow=off focus=off -bspc rule -a Element -o node=@^1:^1:/1 desktop='1' -bspc rule -a TelegramDesktop -o node=@^1:^1:/1 desktop='1' -bspc rule -a firefox desktop='6' follow=off -bspc rule -a Claws-mail desktop='7' follow=off +bspc rule -a discord -o node=@^1:^1:/2 desktop=1 follow=off focus=off +bspc rule -a Element -o node=@^1:^1:/1 desktop=1 +bspc rule -a TelegramDesktop -o node=@^1:^1:/1 desktop=1 + +firefox_desktop=6 +claws_desktop=7 +obsidian_desktop=8 +if [[ "$dock_status" = "undocked" ]]; then + firefox_desktop=2 + claws_desktop=3 + obsidian_desktop=4 +fi + +bspc rule -a firefox desktop=$firefox_desktop follow=off +bspc rule -a Claws-mail desktop=$claws_desktop follow=off +bspc rule -a obsidian desktop=$obsidian_desktop follow=off bspc rule -a REAPER desktop='10' follow=off # floating windows @@ -37,6 +79,7 @@ bspc rule -a Pavucontrol state=floating rectangle=600x800+0+0 center=on bspc rule -a 1Password state=floating rectangle=1000x900+0+0 center=on bspc rule -a Org.gnome.Nautilus state=floating rectangle=1200x900+0+0 center=on bspc rule -a kitty_float state=floating rectangle=1000x700+0+0 center=on +bspc rule -a Popsicle-gtk state=floating rectangle=800x300+0+0 center=on # startup picom --experimental-backends & @@ -44,6 +87,8 @@ polybar-msg cmd quit polybar left & polybar right & dunst & +rofi-polkit-agent & + if [ ! -f /tmp/startup.lock ]; then touch /tmp/startup.lock @@ -54,4 +99,5 @@ if [ ! -f /tmp/startup.lock ]; then firefox & claws-mail & + obsidian & fi