#!/usr/bin/env fish function ensure-desktop if not bspc query --desktops $argv > /dev/null bspc monitor --add-desktops $argv end end function cleanup-empty-desktops for desktop in (bspc query --desktops) if not bspc query --nodes --desktop $desktop --node .!hidden bspc desktop $desktop.!active --remove end end end function sort-desktops set desktops (bspc query --desktops --monitor --names | sort) bspc monitor --reorder-desktops $desktops end function popterm set popterm_id (xdo id -n popterm) if test -z "$popterm_id" echo popterm not found, creating one bspc rule --remove '*:popterm' bspc rule --add '*:popterm' state=floating hidden=on border=off alacritty --class popterm --config-file ~/.config/alacritty/alacritty-pop.yml -e tmux new-session -A -s P & while test -z "$popterm_id" set popterm_id (xdo id -n popterm) sleep 0.01 echo sleep until popterm is ready end end set monitor (bspc query --monitors --names --monitor focused) if bspc query --nodes --desktop focused --node .!hidden | grep $popterm_id bspc node $popterm_id --flag hidden=on else set whxy (xrandr | grep "^$monitor " | grep -oP '\d+x\d+\+\d+\+\d+' | string replace -a -r '\D' ' ' | string split ' ') set bw (bspc config border_width) set w (math -s0 "$whxy[1] - $bw * 2") set h (math -s0 "$whxy[2] / 2") set x $whxy[3] set y (math -s0 "$h - $bw * 2") #set w 800 #set h (math -s0 "$whxy[2]/2") #set x (math "($whxy[1] - $w) / 2 + $whxy[3]") #set y $h xdo resize -w $w -h $h $popterm_id xdo move -x $x -y $y $popterm_id bspc node $popterm_id --to-desktop focused bspc node $popterm_id --flag hidden=off --focus end end function swap-current-node set sel $argv[1] #if not bspc node --swap $sel --follow bspc node --to-monitor $sel --follow #end end switch "$argv[1]" case 'move-current-window-to-desktop' ensure-desktop $argv[2] bspc node --to-desktop $argv[2] --follow sort-desktops cleanup-empty-desktops case 'focus-desktop' ensure-desktop $argv[2] bspc desktop --focus $argv[2] cleanup-empty-desktops sort-desktops case 'move-current-desktop-to-monitor' bspc desktop --to-monitor $argv[2] --follow bspc desktop --focus sort-desktops case 'popterm' popterm case 'swap-current-node' swap-current-node $argv[2] case '*' cleanup-empty-desktops end