exec --no-startup-id ~/.local/bin/startup-progs

# super
set $mod Mod4
# alt
set $mod2 Mod1
# hyper
set $mod3 Mod3

# window title and bar font (unless specified differently in 'bar {}'
#font pango:Source Code Pro 9.5
font pango:Source Code Pro Medium 10.5
# font -misc-fixed-medium-r-normal--13-120-75-75-c-70-iso10646-1
# font -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1

# for dragging floating windows with mouse
floating_modifier $mod

# default tabbed
workspace_layout tabbed

# terminal
bindsym $mod+Return exec xterm
bindsym $mod+Shift+Return exec xterm -name floating
for_window [class="XTerm" instance="floating"] floating enable

# kill focused window (not necessarily its application)
bindsym $mod+Shift+w kill
# kill an application
#bindsym --release $mod+Shift+x exec xkill

# launcher and pass
bindsym $mod+space exec dmenu_run -fn 'Source Code Pro Medium-10.5'
bindsym $mod+backslash exec passmenu --type -fn 'Source Code Pro Medium-10.5'

# brightness
bindsym $mod+apostrophe exec dmenu-light      # brightness chooser
bindsym XF86MonBrightnessUp exec light -A 5   # increase brightness
bindsym XF86MonBrightnessDown exec light -U 5 # decrease brightness

# volume
bindsym $mod+semicolon exec dmenu-pamixer # volume chooser
bindsym XF86AudioRaiseVolume exec pamixer --allow-boost --increase 5
bindsym XF86AudioLowerVolume exec pamixer --allow-boost --decrease 5
bindsym XF86AudioMute        exec pamixer --toggle-mute
bindsym XF86AudioMicMute     exec pactl set-source-mute 1 toggle

# window focus
bindsym $mod+h focus left
bindsym $mod+j focus down
bindsym $mod+k focus up
bindsym $mod+l focus right
bindsym $mod+Left focus left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
bindsym $mod+Right focus right

# window move
bindsym $mod+Shift+h move left
bindsym $mod+Shift+j move down
bindsym $mod+Shift+k move up
bindsym $mod+Shift+l move right
bindsym $mod+Shift+Left move left
bindsym $mod+Shift+Down move down
bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Right move right

# horizontal and vertical orientation
bindsym $mod+shift+backslash split h
bindsym $mod+minus split v

# enter fullscreen mode for the focused container
bindsym $mod+f fullscreen toggle

# change container layout (stacked, tabbed, toggle split)
bindsym $mod+s layout stacking
bindsym $mod+w layout tabbed
bindsym $mod+e layout toggle split

# toggle tiling / floating
bindsym $mod+Shift+f floating toggle
bindsym $mod+period floating toggle
# toggle tiling / floating focus
bindsym $mod+grave focus mode_toggle
bindsym $mod+comma focus mode_toggle

# toggle sticky
bindsym $mod+shift+s sticky toggle

# focus parent / child
bindsym $mod+a focus parent
bindsym $mod+Shift+a focus child

# switch to workspace
bindsym $mod+1 workspace 1
bindsym $mod+2 workspace 2
bindsym $mod+3 workspace 3
bindsym $mod+4 workspace 4
bindsym $mod+5 workspace 5
bindsym $mod+6 workspace 6
bindsym $mod+7 workspace 7
bindsym $mod+8 workspace 8
bindsym $mod+9 workspace 9
bindsym $mod+0 workspace 10
bindsym $mod+bracketleft  workspace prev
bindsym $mod+bracketright workspace next

# move focused container to workspace
bindsym $mod+Shift+1 move container to workspace 1
bindsym $mod+Shift+2 move container to workspace 2
bindsym $mod+Shift+3 move container to workspace 3
bindsym $mod+Shift+4 move container to workspace 4
bindsym $mod+Shift+5 move container to workspace 5
bindsym $mod+Shift+6 move container to workspace 6
bindsym $mod+Shift+7 move container to workspace 7
bindsym $mod+Shift+8 move container to workspace 8
bindsym $mod+Shift+9 move container to workspace 9
bindsym $mod+Shift+0 move container to workspace 10
bindsym $mod+Shift+bracketleft  move container to workspace prev
bindsym $mod+Shift+bracketright move container to workspace next

# bspwm-esque workspace switch and container move
bindsym $mod2+bracketleft        exec b-ws-util i3 switch prev
bindsym $mod2+bracketright       exec b-ws-util i3 switch next
bindsym $mod2+Shift+bracketleft  exec b-ws-util i3 move   prev follow
bindsym $mod2+Shift+bracketright exec b-ws-util i3 move   next follow

set $mode_system System (l)ock | (e)xit i3 | (s)uspend | (h)ibernate | (r)eboot | (S)hutdown
mode "$mode_system" {
    bindsym l       exec i3lock,                mode "default"
    bindsym e       exec i3-msg exit,           mode "default"
    bindsym s       exec systemctl suspend,     mode "default"
    bindsym h       exec systemctl hibernate,   mode "default"
    bindsym r       exec systemctl reboot,      mode "default"
    bindsym Shift+s exec systemctl poweroff -i, mode "default"

    bindsym Return  mode "default"
    bindsym Escape  mode "default"
    bindsym q       mode "default"
}

bindsym $mod+Shift+c reload
bindsym $mod+Shift+r restart
bindsym $mod+Shift+e mode "$mode_system"

# resize window (you can also use the mouse for that)
mode "resize" {
        # These bindings trigger as soon as you enter the resize mode

        # Pressing left will shrink the window’s width.
        # Pressing right will grow the window’s width.
        # Pressing up will shrink the window’s height.
        # Pressing down will grow the window’s height.
        bindsym j resize shrink width 10 px or 10 ppt
        bindsym k resize grow height 10 px or 10 ppt
        bindsym l resize shrink height 10 px or 10 ppt
        bindsym semicolon resize grow width 10 px or 10 ppt

        # same bindings, but for the arrow keys
        bindsym Left resize shrink width 10 px or 10 ppt
        bindsym Down resize grow height 10 px or 10 ppt
        bindsym Up resize shrink height 10 px or 10 ppt
        bindsym Right resize grow width 10 px or 10 ppt

        # back to normal: Enter or Escape
        bindsym Return mode "default"
        bindsym Escape mode "default"
}
bindsym $mod+r mode "resize"

# change theme mode
set $mode_theme theme (d)ark | (l)ight
mode "$mode_theme" {
        bindsym d exec change-theme dark,  mode "default"
        bindsym l exec change-theme light, mode "default"
        bindsym Return mode "default"
        bindsym Escape mode "default"
        bindsym q      mode "default"
}
bindsym $mod+t mode "$mode_theme"

# application-specific window configurations
for_window [class="mpv"] floating enable
for_window [class="Mumble"] floating enable
for_window [class="Nm-connection-editor"] floating enable
for_window [class="Virt-manager"] floating enable

# no title bars
for_window [class="^.*"] border pixel 4

# i3bar and system info from i3status
bar {
    status_command i3status | my-i3status
    tray_output primary
}