set $mod Mod4
set $leftoutput DP-3
set $rightoutput HDMI-0

font pango:monospace 8

floating_modifier $mod

# start a terminal
bindsym $mod+Return exec alacritty

bindsym $mod+b exec i3lock -i ~/.config/i3/matrix.png -t

# kill focused window
bindsym $mod+Shift+q kill

# start dmenu (a program launcher)
bindsym $mod+i exec rofi -show

# change focus
bindsym $mod+h focus left
bindsym $mod+j focus down
bindsym $mod+k focus up
bindsym $mod+l focus right

# alternatively, you can use the cursor keys:
bindsym $mod+Left focus left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
bindsym $mod+Right focus right

# move focused window
bindsym $mod+Shift+h move left
bindsym $mod+Shift+j move down
bindsym $mod+Shift+k move up
bindsym $mod+Shift+l move right

# alternatively, you can use the cursor keys:
bindsym $mod+Shift+Left move left
bindsym $mod+Shift+Down move down
bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Right move right

bindsym $mod+Control+t focus output left
bindsym $mod+Control+n focus output right

bindsym $mod+Control+Left move workspace to output left
bindsym $mod+Control+Right move workspace to output right

# split in horizontal orientation
bindsym $mod+c split h

# split in vertical orientation
bindsym $mod+period split v

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

# change container layout (stacked, tabbed, toggle split)
bindsym $mod+u layout stacking
bindsym $mod+t layout tabbed
bindsym $mod+p layout toggle split

bindsym $mod+z sticky toggle

# toggle tiling / floating
bindsym $mod+space floating toggle

# change focus between tiling / floating windows
bindsym $mod+Shift+space focus mode_toggle

# focus the parent container
bindsym $mod+a focus parent

# focus the child container
#bindsym $mod+d 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+Tab workspace next_on_output
bindsym $mod+Shift+Tab workspace prev_on_output

# 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

# reload the configuration file
bindsym $mod+Shift+x reload
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
bindsym $mod+Shift+o restart
# exit i3 (logs you out of your X session)
bindsym $mod+Shift+p exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -b 'Yes, exit i3' 'i3-msg exit'"

# dunst
bindsym Control+space exec dunstctl close
bindsym Control+Shift+space exec dunstctl close-all
bindsym Control+grave exec dunstctl history-pop
bindsym Control+period exec dunstctl context

# scratchpad
bindsym $mod+Shift+grave move scratchpad
bindsym $mod+grave scratchpad show

# resize window (you can also use the mouse for that)
mode "resize" {
        bindsym t resize shrink width 10 px or 10 ppt
        bindsym s resize grow height 10 px or 10 ppt
        bindsym r resize shrink height 10 px or 10 ppt
        bindsym n 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+o mode "resize"

mode "move" {
        set $normal 50
        set $withshift 5
        set $withcontrol 100
        set $withmod 200

        bindsym t move left $normal px
        bindsym s move down $normal px
        bindsym r move up $normal px
        bindsym n move right $normal px

        bindsym Left move left $normal px
        bindsym Down move down $normal px
        bindsym Up move up $normal px
        bindsym Right move right $normal px

        bindsym Shift+t move left $withshift px
        bindsym Shift+s move down $withshift px
        bindsym Shift+r move up $withshift px
        bindsym Shift+n move right $withshift px

        bindsym Shift+Left move left $withshift px
        bindsym Shift+Down move down $withshift px
        bindsym Shift+Up move up $withshift px
        bindsym Shift+Right move right $withshift px

        bindsym Control+t move left $withcontrol px
        bindsym Control+s move down $withcontrol px
        bindsym Control+r move up $withcontrol px
        bindsym Control+n move right $withcontrol px

        bindsym Control+Left move left $withcontrol px
        bindsym Control+Down move down $withcontrol px
        bindsym Control+Up move up $withcontrol px
        bindsym Control+Right move right $withcontrol px

        bindsym $mod+t move left $withmod px
        bindsym $mod+s move down $withmod px
        bindsym $mod+r move up $withmod px
        bindsym $mod+n move right $withmod px

        bindsym $mod+Left move left $withmod px
        bindsym $mod+Down move down $withmod px
        bindsym $mod+Up move up $withmod px
        bindsym $mod+Right move right $withmod px

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

bindsym $mod+m mode "move"

set $mode_launcher launch
bindsym $mod+e mode "$mode_launcher"

mode "$mode_launcher" {
    bindsym f exec firefox; mode "default"
    bindsym t exec thunderbird; mode "default"
    bindsym s exec steam; mode "default"

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

bar {
        output $leftoutput
        strip_workspace_numbers yes
        font pango:DejaVu Sans Mono, FontAwesome 8
        status_command i3blocks -c ~/.config/i3blocks/left-config
}

bar {
        output $rightoutput
        strip_workspace_numbers yes
        font pango:DejaVu Sans Mono, FontAwesome 8
        status_command i3blocks -c ~/.config/i3blocks/right-config
}

workspace_auto_back_and_forth no

set $ws_browser_1 10:browser:1
set $ws_browser_2 11:browser:2
set $ws_steam steam
set $ws_lutris lutris
set $ws_mail 12:mail
set $ws_im 13:im

workspace 1 output $leftoutput
workspace 2 output $leftoutput
workspace 3 output $leftoutput
workspace 4 output $leftoutput
workspace 5 output $leftoutput

workspace $ws_browser_1 output $leftoutput
workspace $ws_browser_2 output $rightoutput
workspace $ws_steam output $leftoutput
workspace $ws_lutris output $leftoutput

workspace 6 output $rightoutput
workspace 7 output $rightoutput
workspace 8 output $rightoutput
workspace 9 output $rightoutput
workspace 10 output $rightoutput

workspace $ws_mail output $rightoutput
workspace $ws_im output $rightoutput

assign [class="^firefox" instance="^Navigator$"] workspace $ws_browser_1
assign [class="^org.mozilla.Thunderbird$"] workspace $ws_mail

assign [class="^Alacritty$" instance="^lucy-code$"] workspace 1
assign [class="^Alacritty$" instance="^lucy-server$"] workspace 6
assign [class="^URxvt$" instance="-code$"] workspace 3
assign [class="^URxvt$" instance="^lesportecles-rails$"] workspace 8
assign [class="^URxvt$" instance="-server$"] workspace 8
assign [class="^xfreerdp$"] workspace 8
assign [class="^Microsoft Teams" title="Microsoft Teams(?! Notification)"] workspace $ws_im
assign [class="^steam$"] workspace $ws_steam
assign [class="^Lutris$"] workspace $ws_lutris
assign [class="^Mattermost$"] workspace $ws_im
assign [class="^discord$"] workspace $ws_im

bindsym XF86Calculator exec "alacritty --class Alacritty,Float"
for_window [class="^Gcolor3$"] floating enable
for_window [class="^Alacritty$" instance="^Float$"] floating enable
for_window [class="^mpv$"] floating enable
for_window [class="^Pinentry$"] floating enable
for_window [class="^TeamViewer$"] floating enable
for_window [title="Microsoft Teams Notification"] floating enable, sticky enable
for_window [title="^Steam - News"] floating enable
for_window [title="^Origin$"] floating enable
for_window [class="Yad"] floating enable

bindsym XF86HomePage workspace $ws_browser_1
bindsym $mod+XF86HomePage workspace $ws_browser_2

bindsym $mod+Shift+XF86HomePage move container to workspace $ws_browser_1
bindsym $mod+Control+XF86HomePage move container to workspace $ws_browser_2

bindsym XF86Mail workspace $ws_mail
bindsym $mod+Shift+XF86Mail move container to workspace $ws_mail

bindsym $mod+XF86Mail workspace $ws_im
bindsym $mod+Control+XF86Mail move container to workspace $ws_im

# Pulse Audio controls
bindsym XF86AudioRaiseVolume exec --no-startup-id "wpctl set-volume @DEFAULT_SINK@ 0.05+ && pkill -RTMIN+10 i3blocks"
bindsym XF86AudioLowerVolume exec --no-startup-id "wpctl set-volume @DEFAULT_SINK@ 0.05- && pkill -RTMIN+10 i3blocks"

bindsym Shift+XF86AudioRaiseVolume exec --no-startup-id "wpctl set-volume @DEFAULT_SINK@ 0.02+ && pkill -RTMIN+10 i3blocks"
bindsym Shift+XF86AudioLowerVolume exec --no-startup-id "wpctl set-volume @DEFAULT_SINK@ 0.02- && pkill -RTMIN+10 i3blocks"

bindsym XF86AudioMute exec --no-startup-id "pactl set-sink-mute @DEFAULT_SINK@ toggle && pkill -RTMIN+10 i3blocks"

# Media player controls
bindsym XF86AudioPlay exec --no-startup-id mpc toggle
bindsym XF86AudioNext exec --no-startup-id mpc next
bindsym XF86AudioPrev exec --no-startup-id mpc prev

bindsym Print exec "flameshot gui"

new_window pixel 2

mouse_warping none
