# Basic binds (inspired from the previous i3 config).
super + Return
    $TERMINAL

# A dropdown terminal.
# Requires tmux and tdrop for this to work.
super + shift + Return
    tdrop -ma -w -4 -y "$PANEL_HEIGHT" $TERMINAL

# A handy-dandy calculator as a quick dropdown terminal.
super + shift + c
    tdrop -ma -w -4 -y "$PANEL_HEIGHT" $TERMINAL -e julia

# Quick toggling for screenkey.
# Useful for setting up a demo.
super + t
    toggle-process screenkey

# Application launcher.
super + d
    rofi -show drun -sidebar-mode -theme themes/fds-mini-sidebar

# User action shortcuts.
super + F10
    user-prompt "Proceed to shutdown?" "sudo -A shutdown 0"

super + F11
    user-prompt "Proceed to reboot?" "sudo -A reboot"

super + F12
    user-prompt "Exit from X session?" "pkill bspwm"

# Screenshot and screencast launcher.
super + {_, shift + } Print
    rofi-screenshot-menu {_, --stop && notify-send "All recording has stopped" || notify-send "There's no active recording process"}

# A bunch of miscellaneous scripts.
super + x ; {a, s, d}
    set -o pipefail && \
    {ocr | xclip -in -selection clipboard && notify-send "Image content has been copied on the clipboard.", \
    parse-barcodes | xclip -selection clipboard && notify-send "Bar code content has been copied.", \
    colorpicker | xclip -selection clipboard && notify-send "Color copied to clipboard."}

# Miscellaneous shortcuts.
super + shift + c
    $HOME/.config/emacs/bin/org-capture

super + shift + e
    choose-emoji-menu

super + shift + m
    choose-manual-menu

super + shift + n
    $TERMINAL -e newsboat

shift + super + r
    pkill -USR1 sxhkd && notify-send "SXHKD config has successfully reloaded."

shift + super + b
    ls $HOME/library/books/*.pdf | xargs -n1 basename | rofi -dmenu | sed "s/^/library\/books\//" | xargs zathura


# The usual application suite shortcuts.
# I'm separating them according to the keyboard row (in the QWERTY layout anyway).
super + a ; {z, x, c, v, b, n, m}
    { $TERMINAL -e nvim, code, inkscape, gimp, blender, kdenlive, lmms }

super + a ; {f, a, d}
    { firefox, $TERMINAL -e lf, krita }

super + a ; {t, r}
    { thunderbird, thunar }



# bspwm exclusive shortcuts.
# Feel free to replace these if you're working with another WM/DE.
# Over time, I may replace one of the usual shortcut
# with something more generally applied (with `xdotool` for example).

# Close/Kill the focused window.
# Difference between closing a window and killing a window is how the process is killed.
# Closing a window only terminates the process for that window while killing a window terminates all of the related process of that window.
# For example, try opening two Firefox instance and test how it differs.
super + {_, shift +} + q
    bspc node --{close,kill}

# Move desktop/node view to the specified desktop.
super + {_,shift + }{1-9,0}
    bspc {desktop --focus,node --to-desktop} '^{1-9,10}'

# Desktop and node movements.
super + {_, shift + } Tab
    bspc desktop {next, prev} --focus

# less is <, greater is >
super + {less, greater}
    bspc node --to-desktop {prev,next}

# Window state 'mode'
super + z ; {z,x,c,v}
    bspc node --state {floating,fullscreen,tiled,pseudo_tiled}

# Window resize 'mode'
super + r : {h,j,k,l}
    bspc node --resize {left -10 0,bottom 0 10,top 0 -10,right 10 0}

# Window rotation while keeping the layout
# Stole this from https://www.reddit.com/r/bspwm/comments/jwq6di/give_me_some_good_ideas_for_features_i_could_try/gctmst8?utm_source=share&utm_medium=web2x&context=3
super + {r,R}
    bspc node @/ --circute {forward,backward}

# grave is `
super + grave
    bspc desktop --focus last.occupied

super + {Up,Down,Left,Right}
    bspc node {north,south,west,east} --focus

super + shift {Up,Down,Left,Right}
    bspc node {north,south,west,east} --swap focused --follow

# The Vim keybindings.
super + {k,j,h,l}
    bspc node {north,south,west,east} --focus

super + shift {k,j,h,l}
    bspc node {north,south,west,east} --swap focused --follow