# Declaration of the mod key
set $mod                          Mod4
set $alt                          Mod1

# Font for window titles
font                              pango:monospace 8

# Variables
set $up                           Up
set $down                         Down
set $left                         Left
set $right                        Right
set $exiti3                       "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'"
set $lockscreen                   "Lucien Cartier-Tilet\n(Phuntsok Drak-pa)\n+33 (0)6 83 90 56 89"
set $rofiexec                     "rofi -combi-modi window,drun -show combi -mohh combi -m -1"
set $execgnus                     "exec emacsclient --create-frame --eval '(gnus)'"
set $term                         st

# use Mouse+$mod to drag floating windows to their wanted position
floating_modifier                 $mod

################################################################################
###                            Clients position                              ###
################################################################################

assign [class="discord"] 10
assign [class="Emacs"] 2
assign [class="Chromium"] 3
assign [class="Nemo"] 4
assign [class="Godot"] 5
assign [class="Gimp*"] 6
assign [class="Steam"] 9

################################################################################
###                                 Shortcuts                                ###
################################################################################

# start a terminal
bindsym $mod+Return               exec $term
bindsym Ctrl+$mod+Return          exec emacsclient --eval "(eshell-new)" --create-frame
bindsym $mod+$alt+Return          split h;; exec $term
bindsym $mod+Shift+Return         split v;; exec $term

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

# program launcher
bindsym $mod+Shift+d              exec --no-startup-id j4-dmenu-desktop
bindsym $mod+d                    exec --no-startup-id $rofiexec
bindsym $mod+w                    exec --no-startup-id rofi-wifi-menu

# change focus
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+$left          move left
bindsym $mod+Shift+$down          move down
bindsym $mod+Shift+$up            move up
bindsym $mod+Shift+$right         move right

# Change split
bindsym $mod+h                    split h
bindsym $mod+v                    split v
bindsym $mod+t                    split toggle

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

# toggle tiling / floating
bindsym $mod+Shift+space          floating toggle
# change focus between tiling / floating windows
bindsym $mod+space                focus mode_toggle
# center floating window
bindsym Ctrl+$mod+c               move position center

# Scratchpad
bindsym $mod+Shift+s              move scratchpad
bindsym $mod+s                    scratchpad show

# 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 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

# move to previous or next workspace
bindsym $mod+Tab                  workspace next
bindsym $mod+Shift+Tab            workspace previous

# reload the configuration file
bindsym $mod+Shift+c              reload
# restart i3 inplace
bindsym $mod+Shift+r              restart
# exit i3
bindsym $mod+Shift+e              exec $exiti3

# resize window (you can also use the mouse for that)
mode "resize" {
    bindsym $right                resize grow width 20 px or 10 ppt
    bindsym $left                 resize shrink width 10 px or 5 ppt
    bindsym $down                 resize grow height 10 px or 5 ppt
    bindsym $up                   resize shrink height 10 px or 5 ppt
    bindsym Return mode           "default"
    bindsym Escape mode           "default"
}
bindsym $mod+r                    mode "resize"

mouse_warping none

# Keyboard layout
bindsym $mod+$alt+k               exec setxkbmap fr bepo
bindsym $mod+$alt+Shift+k         exec setxkbmap fr
bindsym $mod+$alt+Ctrl+k          exec setxkbmap us

# bindings for MS Natural Ergonomic Keyboard 4000 ##############################
bindsym XF86Launch5               exec emacsclient --create-frame
bindsym $mod+e                    exec emacsclient --create-frame
bindsym XF86Launch6               exec chromium
bindsym $mod+c                    exec chromium
bindsym XF86HomePage              exec chromium https://labs.phundrak.fr
bindsym XF86Search                exec chromium https://www.google.com
bindsym XF86Launch9               exec nemo
bindsym $mod+n                    exec nemo
bindsym XF86Launch8               $execgnus
bindsym XF86Mail                  $execgnus
bindsym $mod+m                    $execgnus
bindsym XF86Launch7               exec discord-canary
bindsym Ctrl+Shift+d              exec discord-canary
bindsym XF86AudioMute             exec amixer -D pulse set Master 1+ toggle
bindsym Ctrl+$mod+Prior           exec amixer -D pulse -q set Master 2%+ unmute
bindsym XF86AudioRaiseVolume      exec amixer -D pulse -q set Master 2%+ unmute
bindsym Ctrl+$mod+Next            exec amixer -D pulse -q set Master 2%- unmute
bindsym XF86AudioLowerVolume      exec amixer -D pulse -q set Master 2%- unmute
bindsym XF86Calculator            exec /usr/bin/speedcrunch
bindsym $mod+$alt+c               exec /usr/bin/speedcrunch
#bindsym XF86Favourites
#bindsym Help
#bindsym Undo
#bindsym Redo
#bindsym XF86New
#bindsym SunOpen
#bindsym XF86Close
#bindsym XF86Reply
#bindsym XF86MailForward
#bindsym XF86Send
#bindsym XF86Save

bindsym $mod+F3                   exec arandr

# Brightness keyboard shortcuts
bindsym XF86MonBrightnessUp       exec light -A 5
bindsym XF86MonBrightnessDown     exec light -U 5

# Wal
bindsym $mod+Ctrl+w               exec wal -i ~/Pictures/Wallpapers -o wal-set

# Take a screenshot
bindsym --release Print           exec --no-startup-id scrot
bindsym --release Ctrl+Print      exec --no-startup-id scrot -s
bindsym           Shift+Print     exec --no-startup-id scrot -d 3

# Lock screen
bindsym $mod+l                    exec i3lock -fol
bindsym $mod+$alt+h               exec i3lock -fol && systemctl suspend
bindsym $mod+Shift+h              exec i3lock -fol && systemctl hibernate

# SSH terminals
bindsym $mod+$alt+m               exec $term ssh Mila
bindsym $mod+$alt+t               exec $term ssh Tilo
bindsym $mod+$alt+n               exec $term ssh Naro

# Utilities
bindsym $mod+Ctrl+h               exec $term htop

# Music shortcuts
bindsym $alt+XF86AudioRaiseVolume exec mpc next
bindsym $mod+Next                 exec mpc next
bindsym $alt+XF86AudioLowerVolume exec mpc prev
bindsym $mod+Prior                exec mpc prev
bindsym XF86AudioPlay             exec mpc toggle
bindsym $mod+p                    exec mpc toggle
bindsym $mod+$alt+p               exec mpc stop
bindsym $alt+XF86AudioPlay        exec mpc stop
# below, 7 and 8 are the emplacement for `+` and `-` on the bépo layout
# respectively, hence the order
bindsym $mod+$alt+7               exec mpc volume +5
bindsym $mod+$alt+8               exec mpc volume -5
bindsym $mod+Shift+n              exec $term ncmpcpp -q
bindsym $mod+Shift+v              exec $term ncmpcpp -qs visualizer

################################################################################
#                               i3-gaps settings                               #
################################################################################

smart_gaps                        on
gaps                              inner 20
gaps                              outer -10
border_radius                     10
popup_during_fullscreen           leave_fullscreen
workspace_auto_back_and_forth     yes
focus_follows_mouse               off

# Change gaps size
bindsym $mod+g                    gaps inner current plus 5
bindsym $mod+Shift+g              gaps inner current minus 5
bindsym $mod+Ctrl+g               gaps outer current plus 5
bindsym $mod+Ctrl+Shift+g         gaps outer current minus 5
bindsym $mod+$alt+g               gaps inner all set 20; gaps outer all set -10

default_border                    pixel 0
smart_borders                     on

################################################################################
#                                Modules startup                               #
################################################################################
exec_always --no-startup-id       ~/dotfiles/enable_thouch.sh
exec_always --no-startup-id       ~/.config/polybar/launch.sh
exec_always --no-startup-id       wal -i "$(< "${HOME}/.cache/wal/wal")"
exec        --no-startup-id       xss-lock -- i3lock-fancy -t $lockscreen
exec        --no-startup-id       "xrdb $HOME/.Xresources"
exec        --no-startup-id       xfce4-power-manager
exec        --no-startup-id       compton -F --opengl --config ~/.config/compton.conf -e 1
exec        --no-startup-id       redshift-gtk
exec        --no-startup-id       mpd
exec        --no-startup-id       mpc stop
exec        --no-startup-id       syndaemon -i 1.0 -t -k
exec        --no-startup-id       sleep 3; emacs --eval "(server-start)"
exec        --no-startup-id       mpd_discord_richpresence --no-idle --fork
exec        --no-startup-id       i3-battery-popup -N -t 2m


################################################################################
#                          Set colors from Xresources                          #
################################################################################

set_from_resource $fg i3wm.color7 #f0f0f0
set_from_resource $bg i3wm.color2 #f0f0f0

# class                 border  backgr. text indicator child_border
client.focused          $bg     $bg     $fg  $bg       $bg
client.focused_inactive $bg     $bg     $fg  $bg       $bg
client.unfocused        $bg     $bg     $fg  $bg       $bg
client.urgent           $bg     $bg     $fg  $bg       $bg
client.placeholder      $bg     $bg     $fg  $bg       $bg

# client.background       $bg