#!/bin/bash

source ~/.config/init/vars

# always start frames max (pt. 1)
hc set default_frame_layout 2
hc set_layout max

hc set tree_style '╾│ ├└╼─┐'

hc emit_hook reload

###########
#  THEME  #
###########

hc set frame_border_normal_color $bg_normal
hc set frame_border_active_color $bg_focus
hc set frame_bg_normal_color $bg_normal
hc set frame_bg_active_color $bg_focus
hc set window_border_normal_color $bg_normal
hc set window_border_active_color $bg_focus
hc set frame_border_width 2
hc set frame_border_inner_width 0
hc set window_border_width 2
hc set window_border_inner_width 0
hc set always_show_frame 0
hc set frame_bg_transparent 1
hc set frame_normal_opacity 100
hc set frame_active_opacity 100
hc set frame_transparent_width 0
hc set frame_gap 0
hc set frame_padding 0
hc set smart_frame_surroundings 1
hc set smart_window_surroundings 1

#################
#  KEYBINDINGS  #
#################

# remove all existing keybindings
hc keyunbind --all

# keybindings

hc keybind Mod4-Shift-r reload
hc keybind Mod4-e close_or_remove

# basic movement
# focusing clients
hc keybind Mod4-h     focus left
hc keybind Mod4-j     focus down
hc keybind Mod4-k     focus up
hc keybind Mod4-l     focus right

# moving clients
hc keybind Mod4-Shift-h     shift left
hc keybind Mod4-Shift-j     shift down
hc keybind Mod4-Shift-k     shift up
hc keybind Mod4-Shift-l     shift right

# cycle through clients
hc keybind Mod4-d cycle  1
hc keybind Mod4-a cycle -1

# splitting frames
# create an empty frame at the specified direction
hc keybind Mod4-s chain .-. lock .-. split bottom 0.5 .-. focus -e d .-. unlock
hc keybind Mod4-v chain .-. lock .-. split right  0.5 .-. focus -e r .-. unlock
# create an empty frame and shift the currently focused client into it
hc keybind Mod4-Control-s chain .-. lock .-. split bottom 0.5 .-. shift down .-. unlock
hc keybind Mod4-Control-v chain .-. lock .-. split right  0.5 .-. shift right .-. unlock
# let the current frame explode into subframes
hc keybind Mod4-Shift-space split explode

# resizing frames
resizestep=0.04
hc keybind Mod4-Control-h       resize left +$resizestep
hc keybind Mod4-Control-j       resize down +$resizestep
hc keybind Mod4-Control-k       resize up +$resizestep
hc keybind Mod4-Control-l       resize right +$resizestep

# tags
tag_names=( {1..5} )
tag_keys=( {1..5} 0 )

hc rename default "${tag_names[0]}" || true
for i in ${!tag_names[@]} ; do
    hc add "${tag_names[$i]}"
    key="${tag_keys[$i]}"
    if ! [ -z "$key" ] ; then
        hc keybind "Mod4-$key" use_index "$i"
        hc keybind "Mod4-Control-$key" move_index "$i"
    fi
done

# cycle through tags
hc keybind Mod4-n use_index +1 --skip-visible
hc keybind Mod4-p use_index -1 --skip-visible

# jump to last used tag
hc keybind Mod4-Escape use_previous

# layouting
hc keybind Mod4-t pseudotile toggle
hc keybind Mod4-f fullscreen toggle

# mouse
hc mouseunbind --all
hc mousebind Mod4-Button1 move
hc mousebind Mod4-Button2 zoom
hc mousebind Mod4-Button3 resize

# focus
hc keybind Mod4-BackSpace   cycle_monitor
hc keybind Mod4-i jumpto urgent


## launchers

# tegaki
hc keybind Mod4-r spawn tegaki-recognize

#pass
hc keybind Mod4-x spawn ~/.config/herbstluftwm/pass.sh
hc keybind Mod4-Shift-x spawn ~/.config/herbstluftwm/pass.sh -f

#scrot-ing
hc keybind Print               spawn ~/.config/herbstluftwm/maim.sh
hc keybind Shift-Print         spawn ~/.config/herbstluftwm/maim.sh -s
hc keybind Control-Print       spawn ~/.config/herbstluftwm/maim.sh -m clipboard
hc keybind Shift-Control-Print spawn ~/.config/herbstluftwm/maim.sh -s -m clipboard
hc keybind Mod4-Print          spawn ~/.config/herbstluftwm/maim.sh -m send
hc keybind Mod4-Shift-Print    spawn ~/.config/herbstluftwm/maim.sh -s -m send

# ranger
hc keybind Mod4-Shift-Control-Return spawn urxvt -name "ranger" -e ranger ~
hc keybind Mod4-Shift-Control-b      spawn urxvt -name "ranger" -e ranger ~/documents/books
hc keybind Mod4-Shift-Control-c      spawn urxvt -name "ranger" -e ranger ~/documents/comics
hc keybind Mod4-Shift-Control-d      spawn urxvt -name "ranger" -e ranger ~/downloads
hc keybind Mod4-Shift-Control-g      spawn urxvt -name "ranger" -e ranger ~/games
hc keybind Mod4-Shift-Control-i      spawn urxvt -name "ranger" -e ranger ~/images
hc keybind Mod4-Shift-Control-m      spawn urxvt -name "ranger" -e ranger ~/music
hc keybind Mod4-Shift-Control-n      spawn urxvt -name "ranger" -e ranger ~/documents/manga
hc keybind Mod4-Shift-Control-p      spawn urxvt -name "ranger" -e ranger ~/projects
hc keybind Mod4-Shift-Control-s      spawn urxvt -name "ranger" -e ranger ~/desktop
hc keybind Mod4-Shift-Control-r      spawn urxvt -name "ranger" -e ranger ~/romz
hc keybind Mod4-Shift-Control-t      spawn urxvt -name "ranger" -e ranger ~/thcool
hc keybind Mod4-Shift-Control-v      spawn urxvt -name "ranger" -e ranger ~/videos
hc keybind Mod4-Shift-Control-w      spawn urxvt -name "ranger" -e ranger ~/documents/writing

# grab colour to clipboard
hc keybind Mod4-c spawn ~/.config/herbstluftwm/colourgrab.sh

# click
hc keybind Mod4-w spawn xdotool click 1

# spawn
hc keybind Mod4-Return  spawn urxvt
hc keybind Mod4-Shift-b spawn primusrun VBoxSDL --startvm arch
hc keybind Mod4-Shift-d spawn ~/games/desura/desura
hc keybind Mod4-Shift-f spawn firejail --netfilter=/etc/firejail/nolocal.net firefox
hc keybind Mod4-Shift-g spawn gwaei
hc keybind Mod4-Shift-i spawn gimp
hc keybind Mod4-Shift-m spawn mathematica
hc keybind Mod4-Shift-n spawn urxvt -name "notes" -e $EDITOR ~/notes
hc keybind Mod4-Shift-o spawn ~/stuffs/tor/start-tor-browser
hc keybind Mod4-Shift-p spawn urxvt -e pms
hc keybind Mod4-Shift-t spawn transmission-gtk
hc keybind Mod4-Shift-v spawn urxvt -name "$EDITOR" -e $EDITOR
hc keybind Mod4-Shift-w spawn urxvt -name "weechat" -e weechat

# dmenu
hc keybind Mod4-r spawn dmenu_run -fn "${bfont}:size=${bfont_size}" \
	-p "Run:" -h "$bheight" \
	-nb "$bar_bg" -nf "$bar_fg" \
	-sb "$bg_focus"  -sf "$fg_focus"
hc keybind Mod4-g spawn ~/.config/herbstluftwm/switcher.sh
# hc keybind Mod4-8 spawn ~/.config/herbstluftwm/calc.sh

hc keybind XF86AudioLowerVolume spawn ~/.config/herbstluftwm/pvol.sh down
hc keybind XF86AudioRaiseVolume spawn ~/.config/herbstluftwm/pvol.sh up
hc keybind XF86AudioMute spawn ~/.config/herbstluftwm/pvol.sh mute
hc keybind XF86AudioMicMute spawn ~/.config/herbstluftwm/pvol.sh

# tunes
hc keybind Mod4-Up spawn ~/.config/herbstluftwm/mpc-status.sh
hc keybind Mod4-Down spawn mpc toggle
hc keybind Mod4-Right spawn ~/.config/herbstluftwm/mpc-status.sh next
hc keybind Mod4-Left spawn ~/.config/herbstluftwm/mpc-status.sh prev

## end launchers


###########
#  RULES  #
###########

hc unrule -F
hc rule focus=on 
# unmanage docks, dropdowns, etc
hc rule windowtype~'_NET_WM_WINDOW_TYPE_(NOTIFICATION|DOCK)' manage=off
# set apppropriate things to pseudotile
hc rule windowtype~'_NET_WM_WINDOW_TYPE_(DIALOG|UTILITY|SPLASH)' pseudotile=on focus=on
hc rule class~'(VBoxSDL|SleepIsDeathApp|freeciv-sdl|FTL|pinentry)' pseudotile=on focus=on
hc rule class~'(Tegaki-recognize|PlayOnLinux|PCSX2|Tilem2|Wine|explorer.exe)' pseudotile=on focus=on
hc rule class~'(mednafen)' pseudotile=on focus=on

# unlock, just to be sure
hc unlock

##############
#  CHILDREN  #
##############

# run the panel
panel=~/.config/herbstluftwm/panel.sh
[ -x "$panel" ] || panel=/etc/xdg/herbstluftwm/panel.sh
for monitor in $(hc list_monitors | cut -d: -f1) ; do
    # start it on each monitor
    "$panel" $monitor &
done

# run dunst with theme colours
pkill dunst
dunst -lb $bar_bg -nb $bar_bg -cb $bg_focus \
	-lf $bar_fg -nf $bar_fg -cf $fg_focus \
	-frame_color $bg_focus -geom "0x3-4+$(($bheight + 4))" \
	-fn "$mfont $mfont_size,$jfont $jfont_size,$cfont $cfont_size,$efont $efont_size,$bkfont $bkfont_size" \
	-max_icon_size 0