# i3 config file (v4)
#
# Please see http://i3wm.org/docs/userguide.html for a complete reference!

set $mod Mod4
set $alt Mod1
floating_modifier $mod

font pango:sans 9

# kill focused window
bindsym $mod+apostrophe kill
bindsym $alt+F4 kill

# change window focus
bindsym $mod+d focus left
bindsym $mod+h focus down
bindsym $mod+t focus up
bindsym $mod+n focus right

# move focused window
bindsym $mod+Shift+d move left
bindsym $mod+Shift+h move down
bindsym $mod+Shift+t move up
bindsym $mod+Shift+n move right

# split in horizontal orientation
bindsym $mod+m split h
bindsym $mod+w split v

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

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

# toggle tiling / floating
bindsym $mod+u floating toggle
bindsym $mod+e sticky toggle

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

#  Screen configs  #
set    $bl  "DP-5"
set    $tl  "DP-1"
set    $br  "HDMI-0"
set    $tr  "DP-3"

# Workspace -> Screen
workspace 1 output $bl
workspace 2 output $br
workspace 3 output $tl
workspace 4 output $tr
workspace 5 output $bl
workspace 6 output $br
workspace 7 output $tl
workspace 8 output $tr

# 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

# move workspaces across screens
bindsym $mod+$alt+d move workspace to output left
bindsym $mod+$alt+n move workspace to output right
bindsym $mod+$alt+t move workspace to output up
bindsym $mod+$alt+h move workspace to output down

# 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

# opens logout/shutdown menu
bindsym $mod+Shift+Escape exec --no-startup-id ~/.config/i3/powermenu.sh

set $bg-color            #2f343f
set $inactive-bg-color   #2f343f
set $text-color          #f3f4f5
set $inactive-text-color #676E7D
set $urgent-bg-color     #E53935

# window colors
#                       border              background         text                 indicator
client.focused          $bg-color           $bg-color          $text-color          $bg-color
client.unfocused        $inactive-bg-color  $inactive-bg-color $inactive-text-color $bg-color
client.focused_inactive $inactive-bg-color  $inactive-bg-color $inactive-text-color $bg-color
client.urgent           $urgent-bg-color    $urgent-bg-color   $text-color          $bg-color

# Window rules
for_window [class="Pinentry"] floating enable
for_window [class="Pavucontrol"] floating enable
for_window [class="Blueman-manager"] floating enable
for_window [class="floating-term" instance="termite"] floating enable
for_window [class="Alacritty" instance="floating-term"] floating enable
for_window [class="^jetbrains-.+$" title="win0"] floating enable
for_window [window_role="floating-term"] floating enable
for_window [class="^Rofi$"] floating enable

new_window none
new_float none

gaps inner 24
gaps outer 4

focus_follows_mouse yes
popup_during_fullscreen smart

# keybindings
bindsym $mod+Shift+j            reload
bindsym --release $mod+x        exec xkill
bindsym $mod+c                  exec notify-send "Try again" "You meant \\\$mod+b"
bindsym $mod+b                  exec systemd-run-i3 -n firefox
bindsym $mod+Return             exec systemd-run-i3 -n alacritty
bindsym $mod+Ctrl+Return        exec systemd-run-i3 -n alacritty --class floating
bindsym $mod+Shift+Return       exec systemd-run-i3 -n alacritty --working-directory "$(xcwd)"
bindsym $mod+Ctrl+Shift+Return  exec systemd-run-i3 -n alacritty --class floating --working-directory "$(xcwd)"
bindsym $mod+v                  exec systemd-run-i3 -n alacritty -e sh -c "($SHELL -c $EDITOR || :) && $SHELL"
bindsym $mod+Ctrl+v             exec systemd-run-i3 -n alacritty --class floating -e sh -c "($SHELL -c $EDITOR || : ) && $SHELL"
bindsym $mod+l                  exec dm-tool switch-to-greeter
bindsym $mod+space              exec "pkill rofi; rofi -show run -sidebar-mode -terminal i3-sensible-terminal -normal-window -run-command 'systemd-run-i3 -n {cmd}'"
bindsym $mod+Shift+p            exec rofi-pass --root $(grep path ~/.config/gopass/config.yml | sed -E 's|^.*fs\+file://||g' | tr '\n' ':') | sed 's/:$//g'
bindsym $mod+Shift+e            exec "pkill rofi; rofi -show emoji -modi emoji -normal-window"
bindsym $mod+Shift+i            exec rofi-fontawesome
bindsym --release Print         exec screenshot
bindsym --release $mod+Print    exec screenshot --clip
bindsym --release Shift+Print   exec screenshot --active
bindsym --release $mod+Shift+Print exec screenshot --active --clip
bindsym $mod+Shift+x            exec systemd-run-i3 -n i3-sensible-terminal --class floating-term --hold -e /bin/echo "$(xprop -id $(xdotool getactivewindow))"
bindsym $mod+$alt+space         exec systemd-run-i3 -s background -n ~/.config/i3/cycleaudio.py
bindsym $mod+numbersign         exec systemd-run-i3 -n i3-sensible-terminal --hold -e sh -c 'xclip -o | gpg --decrypt 2>&1'
bindsym $mod+r                  exec bash -c 'pwgen -snc 32 1 | tee >(xargs notify-send Generated\ password\:) | xclip -i -r'
bindsym $mod+g                  exec systemd-run-i3 -n notify-send -c transfer "$(gist -PRpc)"
bindsym --release $mod+i        exec systemd-run-i3 -s background -n sh -c 'sleep 0.5 && xdotool getactivewindow type --delay 10 -- "$(xclip -o -selection clipboard)"'
bindsym $mod+z                  exec otp | rofi -dmenu -p otp | xargs otp

# Media player controls
bindsym XF86AudioPlay           exec --no-startup-id playerctl -a play-pause
bindsym XF86AudioPause          exec --no-startup-id playerctl -a pause
bindsym XF86AudioStop           exec --no-startup-id playerctl -a stop
bindsym XF86AudioNext           exec --no-startup-id playerctl -a next
bindsym XF86AudioPrev           exec --no-startup-id playerctl -a previous
bindsym XF86AudioRaiseVolume    exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@  +1000
bindsym XF86AudioLowerVolume    exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@  -1000
bindsym XF86AudioMute           exec --no-startup-id pactl set-sink-mute   @DEFAULT_SINK@ toggle
bindsym XF86MonBrightnessUp     exec light -A 5
bindsym XF86MonBrightnessDown   exec light -U 5

# vim:ft=i3