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


# i3-gaps
hide_edge_borders both
default_border none
smart_borders on
smart_gaps on
for_window [class="^.*"] border pixel 2
gaps inner 8
gaps outer 0

no_focus [window_role="pop-up"]

workspace_auto_back_and_forth yes

set $mod Mod4

font pango:monospace 8

exec --no-startup-id dex --autostart --environment i3

exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork

bindsym $mod+Ctrl+l exec betterlockscreen -l dimblur
#bindsym $mod+Ctrl+Escape exec "i3-nagbar -t warning -m 'CHOOSE' -B 'LOCK' 'betterlockscreen -l dimblur' -B 'SUSPEND' 'betterlockscreen -s -l dimblur' -B 'LOGOUT' 'i3-msg exit && exit' -B 'REBOOT' 'systemctl reboot' -B 'POWER OFF' 'systemctl poweroff'"

bindsym $mod+Ctrl+Escape exec --no-startup-id archlinux-logout
bindsym $mod+Ctrl+0 exec --no-startup-id archlinux-logout

#set $mode_system (l)ock (e)xit switch_(u)ser (s)uspend (h)ibernate (r)eboot (shift+s)hutdown
#bindsym $mod+Ctrl+Escape mode "$mode_system"

#mode "$mode_system" {
#	bindsym l exec --no-startup-id betterlockscreen -l dimblur
#   bindsym e exec --no-startup-id i3exit logout, mode "default"
#   bindsym u exec --no-startup-id i3exit switch_user, mode "default"
#	#bindsym s exec --no-startup-id i3-msg exit && exit
#	bindsym s exec betterlockscreen -s -l dimblur
#   bindsym h exec --no-startup-id i3exit hibernate, mode "default"
#	bindsym r exec --no-startup-id i3exit reboot, mode "default"
#	bindsym Shift+s exec --no-startup-id i3exit shutdown, mode "default"

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

# Use pactl to adjust volume in PulseAudio.
set $refresh_i3status killall -SIGUSR1 i3status
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status
bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status

floating_modifier $mod
floating_minimum_size 1500 x 850
floating_maximum_size -1 x -1

# move tiling windows via drag & drop by left-clicking into the title bar,
# or left-clicking anywhere into the window while holding the floating modifier.
#tiling_drag modifier titlebar

# start a terminal
bindsym $mod+Return exec alacritty

# kill focused window
bindsym $mod+q kill

# start dmenu (a program launcher)
bindsym $mod+d exec --no-startup-id dmenu_run
bindsym $mod+Shift+d exec "rofi -modi drun,run -show drun"
# bindcode $mod+40 exec "rofi -modi drun,run -show drun"

# change focus
bindsym $mod+h focus left
bindsym $mod+j focus down
bindsym $mod+k focus up
bindsym $mod+l 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

# split in horizontal orientation
#bindsym $mod+Ctrl+h split h; exec notify-send 'Horizontal Split Mode'

# split in vertical orientation
#bindsym $mod+Ctrl+v split v; exec notify-send 'Vertical Split Mode'

#toggle split mode
bindsym $mod+Shift+plus split toggle

# 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+space floating toggle

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

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

# focus the child container
#bindsym $mod+d focus child

# workspace names
set $ws1 "1: term"
set $ws2 "2: www"
set $ws3 "3"
set $ws4 "4"
set $ws5 "5"
set $ws6 "6"
set $ws7 "7"
set $ws8 "8"
set $ws9 "9"
set $ws10 "10"

# switch to workspace
bindsym $mod+1 workspace number $ws1
bindsym $mod+2 workspace number $ws2
bindsym $mod+3 workspace number $ws3
bindsym $mod+4 workspace number $ws4
bindsym $mod+5 workspace number $ws5
bindsym $mod+6 workspace number $ws6
bindsym $mod+7 workspace number $ws7
bindsym $mod+8 workspace number $ws8
bindsym $mod+9 workspace number $ws9
bindsym $mod+0 workspace number $ws10

# move focused container to workspace
bindsym $mod+Shift+1 move container to workspace number $ws1
bindsym $mod+Shift+2 move container to workspace number $ws2
bindsym $mod+Shift+3 move container to workspace number $ws3
bindsym $mod+Shift+4 move container to workspace number $ws4
bindsym $mod+Shift+5 move container to workspace number $ws5
bindsym $mod+Shift+6 move container to workspace number $ws6
bindsym $mod+Shift+7 move container to workspace number $ws7
bindsym $mod+Shift+8 move container to workspace number $ws8
bindsym $mod+Shift+9 move container to workspace number $ws9
bindsym $mod+Shift+0 move container to workspace number $ws10

# navigate next/prev workspace
bindsym $mod+Tab workspace next
bindsym $mod+Shift+Tab workspace prev
bindsym $mod+Ctrl+Right workspace next
bindsym $mod+Ctrl+Left workspace prev

# scratchpad
# move current window to a scratchpad
bindsym $mod+Shift+minus move scratchpad
# show scratchpad
bindsym $mod+minus scratchpad show

bindsym $mod+Shift+r restart

mode "resize" {
        bindsym h resize shrink width 10 px or 10 ppt
        bindsym j resize grow height 10 px or 10 ppt
        bindsym k resize shrink height 10 px or 10 ppt
        bindsym l resize grow width 10 px or 10 ppt

        bindsym Return mode "default"
        bindsym Escape mode "default"
        bindsym $mod+r mode "default"
}

bindsym $mod+r mode "resize"

# Colors
set $nord0   #2E3440
set $nord1   #3B4252
set $nord2   #434C5E
set $nord3   #4C566A
set $nord4   #D8DEE9
set $nord5   #E5E9F0
set $nord6   #ECEFF4
set $nord7   #8FBCBB
set $nord8   #88C0D0
set $nord9   #81A1C1
set $nord10  #5E81AC
set $nord11  #BF616A
set $nord12  #D08770
set $nord13  #EBCB8B
set $nord14  #A3BE8C
set $nord15  #B48EAD

# Window color settings
    # class                 border  backgr. text    indicator
    client.focused          $nord15 $nord15 $nord4  $nord15
    client.unfocused        $nord2  $nord2  $nord6  $nord2
    client.focused_inactive $nord2  $nord2  $nord6  $nord2
    client.placeholder      $nord2  $nord2  $nord6  $nord2
    client.urgent           #d42121 #d42121 #f7f7f7 #d42121

    client.background       $nord04

bar {
	font pango:SpaceMono Nerd Font 10
	position top
   status_command i3status

   tray_output primary
   tray_padding 2

   separator_symbol ":|:"

   i3bar_command i3bar --transparency	

   strip_workspace_numbers no
   strip_workspace_name no

   binding_mode_indicator yes

    colors {
        background $nord0
        statusline $nord9
        separator  $nord10

        # colorclass           border  backgr. text
        focused_workspace     $nord3   $nord8  $nord4
        active_workspace      $nord3   $nord8  $nord4
        inactive_workspace    $nord8   $nord10 $nord4
        urgent_workspace      $nord3   $nord11 $nord4
        }
}

# Launchers
bindsym Print exec flameshot gui
bindsym $mod+b exec firefox
bindsym $mod+m exec dolphin

# Autorun
exec_always --no-startup-id feh -z --bg-scale /usr/share/backgrounds/arcolinux
exec --no-startup-id discord
exec --no-startup-id signal-desktop
exec_always --no-startup-id picom --config ~/.config/picom/picom.conf
exec --no-startup-id nm-applet
exec --no-startup-id volumeicon
exec --no-startup-id dunst

# Specific windows

# Assign workspaces (find class with xprop)
assign [class="Firefox-esr"] 2
assign [class="firefox"] 2
assign [class="Brave-browser"] 2
assign [class="firedragon"] 2
assign [class="Signal"] 4
assign [class="discord"] 4

# workstation specific overrides
include ~/.config/i3/`hostname`.conf
