###############################################################################################################################
#																									    bspwm hotkeys
###############################################################################################################################

# Cleanly quit bspwm
super + shift + q
	bspc quit 1 && pkill polybar

# Show this file
super + F1
	alacritty -e bat ~/.config/sxhkd/sxhkdrc

#
# Window manipulation
#--------------------------------------------------------------

# BSPWM WINDOW STATES:

#tiled - Its size and position are determined by the window tree.
#pseudo_tiled - A tiled window that automatically shrinks but doesn’t stretch beyond its floating size.
#floating - Can be moved/resized freely. Although it doesn’t use any tiling space, it is still part of the window tree.
#fullscreen - Fills its monitor rectangle and has no borders.

#--------------------------------------------------------------

# Close window
super + x
	bspc node -c

# Kill window
super + shift + x
	bspc node -k

# Toggle tiling mode of window
super + shift + t
	bspc node -t {pseudo_tiled,tiled}

# Toggle floating mode of window
super + t
	{bspc node -t floating && window-placer $(bspc query -T -d | grep -o '"state":"floating"' | wc -l),bspc node -t tiled}

# Force all windows of the desktop to tile
super + ctrl + t
	bspcp tile

# Force all windows of the desktop to float and arrange them
super + ctrl + shift + t
	bspcp float

# Toggle fullscreen
super + shift + f
	bspc node -t {fullscreen,tiled}

# Try to keep size and position of the selected window
super + o
	bspc node -g private

# Make window sticky
super + i
	bspc node -g sticky

# Lock a window from closing
super + Escape
	bspc node -g locked

### Map or unmap windows (functional equivalent of "minimize")

# Show hidden windows
super + c
    whid dmenu

# Hide window
super + shift + c
    whid hide

# Show the most recently hidden window
super + ctrl + c
    whid last

#
# Window moving and splitting
# ______________

# Autopresel (split window in its largest dimension)
#ctrl + space
	#auto-presel

# Presel window for splitting in certain direction
alt + ctrl + {a,s,w,d}
	bspc node -p \~{west,south,north,east} -i

alt + ctrl + {h,j,k,l}
	bspc node -p \~{west,south,north,east}

alt + ctrl + {Left,Down,Up,Right}
	bspc node -p \~{west,south,north,east}

# cancel the preselection for the focused node
super + ctrl + space
	bspc node -p cancel

# Presel the desktop for splitting in certain direction
# alt + shift + {a,s,w,d}
	# bspc node @/ -p \~{west,south,north,east}
#
# alt + shift + {h,j,k,l}
	# bspc node @/ -p \~{west,south,north,east}

# alt + shift + {Left,Down,Up,Right}
	# bspc node @/ -p \~{west,south,north,east}
# Set splitting ratio of windows
alt + ctrl + {1-9}
	bspc node -o 0.{1-9}

# Move current window to largest space or preselected area if there is one.
super + Return
    windowpromoter

# Create a new "master area", splitting the whole desktop instead of just windows.
alt + Return
	bspc node -n @/

# go (Shift=move) to desktop (and focus the monitor that the desktop is located on. Bspwm style)
super + {_,shift + }{1-9,0}
    bspc {desktop -f,node -d} ^{1-9,10}

## Alternative: i3 style behavior (focus nth, desktop of the focused monitor)
#super + {1-9,0}
#	focusdesktopofthismonitor {1-9}
#super + shift + {1-9,0}
#	movetodesktopofthismonitor {1-9,10}

## Another alternative: xmonad style desktops. You have 10 desktops shared between all monitors,
## and focusing a desktop focuses it on the currently focused monitor
#super + {1-9,0}
#	summondesktop.sh {1-9,10}
#super + shift + {1-9,0}
#	bspc node -d ^{1-9,10}

# Select previous / next desktop
super + {m,n}
	bspc desktop -f {prev.occupied,next.occupied}

# cycle windows
alt + {_,shift + }Tab
    bspc node -f {next,prev}

# Go to specific window
super + Tab
	rofi -modi window -show window

#Focus windows by direction, works with multihead
super +  {a,s,w,d}
    focusmover {west,south,north,east}

#super +  {h,j,k,l}
#    focusmover {west,south,north,east}

super +  {Left,Down,Up,Right}
    focusmover {west,south,north,east}

# Move tiled windows. Moving a tiled window to
# preselected one moves into preselection instead.
# Moving out of the screen should move the window to next monitor if possible
super + shift + {a,s,w,d}
	windowgrabber {west,south,north,east}

#super + shift + {h,j,k,l}
#	windowgrabber {west,south,north,east}

# Different style of movement: transplant into window in chosen direction
super + shift + {Left,Down,Up,Right}
	euclid_mover {west,south,north,east}

#resize windows
super + ctrl + {a,s,w,d}
	bspwm_resize.sh {west,south,north,east}

#super + ctrl + {h,j,k,l}
#	bspwm_resize.sh {west,south,north,east}

super + ctrl + {Left,Down,Up,Right}
	bspwm_resize.sh {west,south,north,east}

super + shift + r
	bspwm_rename_desktop
#
# Layout manipulation/desktop level controls
# ______________

# Toggle monocle mode
super + f
	bspc desktop -l next

# Balance tree
super + b
	bspc node @/ -B

# Balance brother node. If you do this on biggest window of the desktop, it usually means balancing all windows with except the biggest.
super + alt + b
	bspc node @brother -B

# Undo balancing (equalize windows)
super + ctrl + b
	bspc node @/ -E

# Toggle automatic balancing of windows
alt + b
	euclid_balancer

# Mirror and flip leaves of tree
super + {comma,period}
	bspc node @/ -F {horizontal,vertical}

# Rotate leaves of tree
super + shift + {comma,period}
	bspc node @/ -R {90,270}

# Change window gap

super + g
	bspc config -d focused window_gap {$gap,$(($gap+$gap)),$(($gap+$gap+$gap))}

super + button{4,5}
	bspc config -d focused window_gap $((`bspc config -d focused window_gap` {+,-} 2 ))
#
# mouse bindings
# __________________

~button1
	DidIClickDesktop.sh && gapgrab

~button2
	DidIClickDesktop.sh && mygtkmenui -- .config/GTKmenu/BspwmDesktopMenui
#DidIClickDesktop.sh && mygtkmenui -- .config/GTKmenu/BspwmWindowMenui

~button3
	DidIClickDesktop.sh && mygtkmenui -- .config/GTKmenu/LaunchMenu

# Switch workspace by scrolling on the desktop. Causes scrolling issues on some systems.
#~button4
#	DidIClickDesktop.sh && bspc desktop -f next
#~button5
#	DidIClickDesktop.sh && bspc desktop -f prev

### Add or remove desktops by scrolling
super + ctrl + button5
    bspcp dsktp rm

super + ctrl + button4
    bspcp dsktp add

# Spawn applications popup menu and manually tile selected
# app where your mouse was when you opened the menu. Smartsplit only chooses
# biggest dimension of the window, MouseLaunch only cares which edge is closer.
# mod5 is alt_gr (first key right from space) on most keyboards.
#mod5 + @button1
    #MouseLaunch ; mygtkmenui -- .config/GTKmenu/LaunchMenu
#	smartsplit ; dboxmenu

# Spawn window manipulation menu
# Mod1 is alt
#    BspwmWindowMenu
#mod1 + @button1
    #mygtkmenui -- .config/GTKmenu/BspwmWindowMenui


#
# Touchpad "gestures" (depend on your touchpad driver, very likely to be unavailable)
#_____________________

#
# spawn programs
#

# run applications
super + space
	rofi -modi drun,run,window,calc,emoji -show drun
	#dmenu_recent -fn 'xos4 Terminus:size=15' -i -l 14 -w 600 -y $PANEL_HEIGHT

# Triggered by jus tapping super
super + shift + @space
	ulauncher-toggle
	#gnome-pie -o 460 --display=:0

super + shift + Return
	urxvt

super + z
	kitty

super + shift + z
	alacritty

super + r
	rofi -modi drun,run,window,calc,emoji -show run

super + shift + b
	$BROWSER

super + e
	nemo

super + shift + e
	alacritty -e ranger

super + shift + l
	loginctl lock-session

Print
#	scrot
  flameshot screen -c

#
# Media keys
#

XF86AudioPrev
	playerctl previous

XF86AudioPlay
	playerctl play-pause

XF86AudioNext
	playerctl next

XF86AudioRaiseVolume
	amixer set Master playback 2%+

XF86AudioLowerVolume
	amixer set Master playback 2%-

XF86AudioMute
	amixer set Master toggle

XF86MonBrightnessDown
	xbacklight -dec 5

XF86MonBrightnessUp
	xbacklight -inc 5

XF86ScreenSaver
	loginctl lock-session

XF86Sleep
	systemctl suspend

XF86Display
	workspaces_multimonitor; $HOME/.config/polybar/launch.sh

shift + XF86Display
	arandr

XF86AudioMicMute
	amixer set Capture toggle

XF86Launch1
	#rofi -modi drun,run,window,calc,windowcd,combi,keys,filebrowser,emoji -show drun
	rofi-rbw

ctrl + shift + Escape
	alacritty -e btop

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

alt + space
	ulauncher-toggle

super + shift + @S
	flameshot gui
  #scrot
# In case bspwmrc fails to execute/you wish have plugged in a new monitor
super + shift + R
	bspwmrc
#edit this file
alt + ctrl + space
	$EDITOR ~/.config/sxhkd/sxhkdrc
# Toggle compositing
super + ctrl + alt + space
	{pkill picom, picom -b --vsync }

# Remove receptacles
super + BackSpace
  for i in $(bspc query -N -n .leaf.!window.local); do bspc node $i -k; done

###############################################################################################################################
#																	VIDEO-RELATED HOTKEYS
###############################################################################################################################

# Rotate the screen. WARNING: Laggy.
mod5 + {Left,Down,Up,Right}
	rotate_desktop {left,inverted,normal,right}
