# node manager shortcuts

# focus the node for the given path jump
super + {p,b,comma,period}
	bspc node -f @{parent,brother,first,second}

# set modes to tiled/floating for current node
super + {s,f}
	bspc node -t {tiled,floating}

# set modes to pseudo_tiled/fullscreen for current node
super + shift + {s,f}
	bspc node -t {pseudo_tiled,fullscreen -l above}

# focus the last node/desktop
super + {grave,Tab}
	bspc {node,desktop} -f last

# focus the next floating node
super + ctrl + f
	bspc node -f next.floating

# swap positions with the previous node
super + apostrophe
	bspc node -s last

# swap the current node with the biggest node on the current desktop
super + m
	bspc node -s biggest

# move/swap between nodes using vim-style arrows
super + {_,shift + }{h,j,k,l}
	bspc node -{f,s} {west,south,north,east}

# swap previous/next desktops
super + bracket{left,right}
	bspc desktop -f {prev,next}

# preselect the splitting area for the current node
super + ctrl + {h,j,k,l}
	bspc node -p {west,south,north,east}

# clear the splitting area
super + ctrl + {_,shift + }space
	bspc {node -p cancel,desktop -c}

# expand the current node
super + alt + {h,j,k,l}
	bspc node {@west -r -10,@south -r +10,@north -r -10,@east -r +10}

# shrink the current node
super + alt + shift + {h,j,k,l}
	bspc node {@east -r -10,@north -r +10,@south -r -10,@west -r +10}

# set node split ratio
super + ctrl + {1-9}
	bspc node -o 0.{1-9}

# move a floating window very slowly
super + shift + {Left,Down,Up,Right}
	bspc node --move {-1 0, 0 1, 0 -1, 1 0}

# move a floating window
super + {Left,Down,Up,Right}
	bspc node --move {-20 0, 0 20, 0 -20, 20 0}

# focus/move node to the selected desktop
super + {_,shift + }{1-9,0}
	bspc {desktop -f,node -d} ^{1-9,10}

# # focus clicked node
~button1
	bspc node -f pointed

super + shift + alt + ctrl + s
	wres1080

# # mouse controls for node movement and resizing
# super + button{1-3}
# 	bspc pointer -g {move,resize_side,resize_corner}

# # simulate mouse2
# shift + super + button1
# 	bspc pointer -g resize_corner

# # ???
# super + !button{1-3}
# 	bspc pointer -t %i %i

# # ???
# super + @button{1-3}
# 	bspc pointer -u

# change node gap and desktop padding
super + plus
	bspc config -d focused window_gap $((`bspc config -d focused window_gap` + 5 ))

super + equal
	bspc config -m $(bspc query -M | head -n 1) top_padding $TOP_BAR_PADDING; bspc config -m $(bspc query -M | head -n 1) bottom_padding $BOTTOM_BAR_PADDING; bspc config -d focused window_gap $WINDOW_GAP

super + minus
	bspc config -d focused window_gap $((`bspc config -d focused window_gap` - 5 ))

super + alt + r
	bspc config -m $(bspc query -M | head -n 1) bottom_padding $BOTTOM_BAR_PADDING; bspc config -m $(bspc query -M | head -n 1) top_padding $TOP_BAR_PADDING; bspc config -d focused window_gap $WINDOW_GAP

super + alt + equal
	bspc config -d focused bottom_padding 0; bspc config -d focused top_padding 0; bspc config -d focused left_padding 0; bspc config -d focused right_padding 0

super + alt + plus
	bspc config -d focused bottom_padding $(expr $(bspc config -d focused bottom_padding) + 5); bspc config -d focused top_padding $(expr $(bspc config -d focused top_padding) + 5); bspc config -d focused left_padding $(expr $(bspc config -d focused left_padding) + 5); bspc config -d focused right_padding $(expr $(bspc config -d focused right_padding) + 5)

super + ctrl + alt + k
	bspc config -d focused bottom_padding $(expr $(bspc config -d focused bottom_padding) - 5); bspc config -d focused top_padding $(expr $(bspc config -d focused top_padding) - 5)

super + ctrl + alt + j
	bspc config -d focused bottom_padding $(expr $(bspc config -d focused bottom_padding) + 5); bspc config -d focused top_padding $(expr $(bspc config -d focused top_padding) + 5)

super + ctrl + alt + h
	bspc config -d focused left_padding $(expr $(bspc config -d focused left_padding) - 5); bspc config -d focused right_padding $(expr $(bspc config -d focused right_padding) - 5)

super + ctrl + alt + l
	bspc config -d focused left_padding $(expr $(bspc config -d focused left_padding) + 5); bspc config -d focused right_padding $(expr $(bspc config -d focused right_padding) + 5)

super + alt + plus
	bspc config -d focused bottom_padding $(expr $(bspc config -d focused bottom_padding) + 5); bspc config -d focused top_padding $(expr $(bspc config -d focused top_padding) + 5); bspc config -d focused left_padding $(expr $(bspc config -d focused left_padding) + 5); bspc config -d focused right_padding $(expr $(bspc config -d focused right_padding) + 5)

super + ctrl + alt + shift + space
	bspc config -d focused bottom_padding 0; bspc config -d focused top_padding 0; bspc config -d focused left_padding 0; bspc config -d focused right_padding 0

super + ctrl + alt + space
	bspc config -d focused bottom_padding 200; bspc config -d focused top_padding 200; bspc config -d focused left_padding 400; bspc config -d focused right_padding 400



super + alt + minus
	bspc config -d focused bottom_padding $(expr $(bspc config -d focused bottom_padding) - 5)

# wm-independant shortcuts

# spawn a transparent node
super + alt + t
	urxvtc && compton-trans -c -o 0

# rotate the current node
super + r
	bspc node -R 90

# balance the current node
super + shift + b
	bspc node -B

# make current node transparent
super + t
	compton-trans -c -o 0

# make current node fully opaque
super + shift + t
	compton-trans -c -o 100

# swap sxhkx config with an alternate file and reload the new one
# super + shift + alt + ctrl + r
# if [ -e ~/.config/sxhkd/altsxhkdrc ]; then mv ~/.config/sxhkd/sxhkdrc ~/.config/sxhkd/origsxhkdrc && mv ~/.config/sxhkd/altsxhkdrc ~/.config/sxhkd/sxhkdrc && pkill -USR1 -x sxhkd; fi

# spawn a terminal
super + Return
	urxvtc

# spawn a floating terminal
super + shift + Return
	bspc rule -a '*' -o state=floating && urxvtc --dimensions 80x24

# spawn the app launcher
super + space
	"$DOTFILES_PATH/scripts/bin/app-launcher" -modi run -show run

# lock the desktop
super + ctrl + shift + l
	dm-tool switch-to-greeter
	# $SHELL -c '$DOTFILES_PATH/env/x/screensaver/lock.sh'

# spawn gui file explorer
super + e
	thunar

# volumes controls and media navigation for media keys
{_,shift + }XF86AudioLowerVolume
	amixer -D pulse sset Master 5%-

	# pulseaudio-ctl lower	
	# ADJ={10,1} && amixer -c 1 sset Speaker $ADJ%- && amixer -c 1 sset Headphone $ADJ%- && amixer -c 1 sset Master $ADJ%- && update_bar_MasterVolume

{_,shift + }XF86AudioRaiseVolume
	amixer -D pulse sset Master 5%+

	# pulseaudio-ctl raise	
	# ADJ={10,1} && amixer -c 1 sset Speaker $ADJ%+ && amixer -c 1 sset Headphone $ADJ%+ && amixer -c 1 sset Master $ADJ%+ && update_bar_MasterVolume

XF86AudioMute
	amixer -D pulse sset Master toggle

	# pulseaudio-ctl mute
	# amixer -c 1 sset Master toggle && update_bar_MasterVolume

XF86AudioPlay
	mpc toggle

XF86AudioNext
	mpc next

XF86AudioPrev
	mpc prev

# monitor brightness controls for monitor birghtness keys
{_,shift + }XF86MonBrightnessUp
	xbacklight + 10

{_,shift + }XF86MonBrightnessDown
	xbacklight - 10

# open rofi as a window switcher
super + w
	"$DOTFILES_PATH/scripts/bin/app-launcher" -modi window,run -show window

# close the current application
super + c
	bspc node -c

# kill the current application
super + shift + c
	bspc node -k

# kill the wm, if alt is held, it will reload instead of truly quitting...
# I think?
super + ctrl + {alt +,_} Escape
	{bspc wm -d > "$BSPWM_STATE_FILE" && bspc quit, \
		bspc quit 1}

Print
	scrot

# make sxhkd reload its configuration files:
super + Escape
	pkill -USR1 -x sxhkd