## Mod
set $mod Mod4
floating_modifier $mod

## Font
font pango:monospace 10

## Wrapping
focus_wrapping no

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

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

## Resize window
bindsym $mod+Control+h resize shrink width  10 px or 10 ppt
bindsym $mod+Control+j resize grow   height 10 px or 10 ppt
bindsym $mod+Control+k resize shrink height 10 px or 10 ppt
bindsym $mod+Control+l resize grow   width  10 px or 10 ppt

## Focus parent
bindsym $mod+a focus parent

## Focus child
bindsym $mod+z focus child

## Split
bindsym $mod+v split h
bindsym $mod+s split v

## Layout
bindsym $mod+q layout stacking
bindsym $mod+w layout tabbed
bindsym $mod+e layout toggle split

## Toggle fullscreen
bindsym $mod+f fullscreen toggle

## Toggle floating focus
bindsym $mod+Shift+f focus mode_toggle

## Toggle floating
bindsym $mod+Control+f floating toggle

## Automatic floating
for_window [instance="(^|-)floating(-|$)"] floating enable

## Kill
bindsym $mod+Shift+q kill

## Reload
bindsym $mod+Shift+r reload

## Restart
bindsym $mod+Control+r restart

## Exit
# bindsym $mod+Control+e exit

## Terminal
bindsym $mod+Return exec --no-startup-id $TERMINAL

## Launcher
bindsym $mod+d exec --no-startup-id rofi -show drun

## Rename workspace
bindsym $mod+x exec --no-startup-id i3-workspace-rename rofi -dmenu -l 0 -filter

## Switch workspace
bindsym $mod+1 workspace number  1
bindsym $mod+2 workspace number  2
bindsym $mod+3 workspace number  3
bindsym $mod+4 workspace number  4
bindsym $mod+5 workspace number  5
bindsym $mod+6 workspace number  6
bindsym $mod+7 workspace number  7
bindsym $mod+8 workspace number  8
bindsym $mod+9 workspace number  9
bindsym $mod+0 workspace number 10
bindsym $mod+Tab         workspace next
bindsym $mod+Shift+Tab   workspace prev
bindsym $mod+Control+Tab workspace back_and_forth

## Move to workspace
bindsym $mod+Shift+1 move container to workspace number  1
bindsym $mod+Shift+2 move container to workspace number  2
bindsym $mod+Shift+3 move container to workspace number  3
bindsym $mod+Shift+4 move container to workspace number  4
bindsym $mod+Shift+5 move container to workspace number  5
bindsym $mod+Shift+6 move container to workspace number  6
bindsym $mod+Shift+7 move container to workspace number  7
bindsym $mod+Shift+8 move container to workspace number  8
bindsym $mod+Shift+9 move container to workspace number  9
bindsym $mod+Shift+0 move container to workspace number 10

## Move and switch to workspace
bindsym $mod+Control+1 move container to workspace number  1; workspace number  1
bindsym $mod+Control+2 move container to workspace number  2; workspace number  2
bindsym $mod+Control+3 move container to workspace number  3; workspace number  3
bindsym $mod+Control+4 move container to workspace number  4; workspace number  4
bindsym $mod+Control+5 move container to workspace number  5; workspace number  5
bindsym $mod+Control+6 move container to workspace number  6; workspace number  6
bindsym $mod+Control+7 move container to workspace number  7; workspace number  7
bindsym $mod+Control+8 move container to workspace number  8; workspace number  8
bindsym $mod+Control+9 move container to workspace number  9; workspace number  9
bindsym $mod+Control+0 move container to workspace number 10; workspace number 10

## Mark
bindsym $mod+m mode "mark"
mode "mark"
{
    bindsym Escape    mode "default"
    bindsym Control+c mode "default"
    bindsym $mod+a mark --add --toggle a; mode "default"
    bindsym $mod+b mark --add --toggle b; mode "default"
    bindsym $mod+c mark --add --toggle c; mode "default"
    bindsym $mod+d mark --add --toggle d; mode "default"
    bindsym $mod+e mark --add --toggle e; mode "default"
    bindsym $mod+f mark --add --toggle f; mode "default"
    bindsym $mod+g mark --add --toggle g; mode "default"
    bindsym $mod+h mark --add --toggle h; mode "default"
    bindsym $mod+i mark --add --toggle i; mode "default"
    bindsym $mod+j mark --add --toggle j; mode "default"
    bindsym $mod+k mark --add --toggle k; mode "default"
    bindsym $mod+l mark --add --toggle l; mode "default"
    bindsym $mod+m mark --add --toggle m; mode "default"
    bindsym $mod+n mark --add --toggle n; mode "default"
    bindsym $mod+o mark --add --toggle o; mode "default"
    bindsym $mod+p mark --add --toggle p; mode "default"
    bindsym $mod+q mark --add --toggle q; mode "default"
    bindsym $mod+r mark --add --toggle r; mode "default"
    bindsym $mod+s mark --add --toggle s; mode "default"
    bindsym $mod+t mark --add --toggle t; mode "default"
    bindsym $mod+u mark --add --toggle u; mode "default"
    bindsym $mod+v mark --add --toggle v; mode "default"
    bindsym $mod+w mark --add --toggle w; mode "default"
    bindsym $mod+x mark --add --toggle x; mode "default"
    bindsym $mod+y mark --add --toggle y; mode "default"
    bindsym $mod+z mark --add --toggle z; mode "default"
    bindsym $mod+1 mark --add --toggle 1; mode "default"
    bindsym $mod+2 mark --add --toggle 2; mode "default"
    bindsym $mod+3 mark --add --toggle 3; mode "default"
    bindsym $mod+4 mark --add --toggle 4; mode "default"
    bindsym $mod+5 mark --add --toggle 5; mode "default"
    bindsym $mod+6 mark --add --toggle 6; mode "default"
    bindsym $mod+7 mark --add --toggle 7; mode "default"
    bindsym $mod+8 mark --add --toggle 8; mode "default"
    bindsym $mod+9 mark --add --toggle 9; mode "default"
    bindsym $mod+0 mark --add --toggle 0; mode "default"
    bindsym a [con_mark="a"] focus; mode "default"
    bindsym b [con_mark="b"] focus; mode "default"
    bindsym c [con_mark="c"] focus; mode "default"
    bindsym d [con_mark="d"] focus; mode "default"
    bindsym e [con_mark="e"] focus; mode "default"
    bindsym f [con_mark="f"] focus; mode "default"
    bindsym g [con_mark="g"] focus; mode "default"
    bindsym h [con_mark="h"] focus; mode "default"
    bindsym i [con_mark="i"] focus; mode "default"
    bindsym j [con_mark="j"] focus; mode "default"
    bindsym k [con_mark="k"] focus; mode "default"
    bindsym l [con_mark="l"] focus; mode "default"
    bindsym m [con_mark="m"] focus; mode "default"
    bindsym n [con_mark="n"] focus; mode "default"
    bindsym o [con_mark="o"] focus; mode "default"
    bindsym p [con_mark="p"] focus; mode "default"
    bindsym q [con_mark="q"] focus; mode "default"
    bindsym r [con_mark="r"] focus; mode "default"
    bindsym s [con_mark="s"] focus; mode "default"
    bindsym t [con_mark="t"] focus; mode "default"
    bindsym u [con_mark="u"] focus; mode "default"
    bindsym v [con_mark="v"] focus; mode "default"
    bindsym w [con_mark="w"] focus; mode "default"
    bindsym x [con_mark="x"] focus; mode "default"
    bindsym y [con_mark="y"] focus; mode "default"
    bindsym z [con_mark="z"] focus; mode "default"
    bindsym 1 [con_mark="1"] focus; mode "default"
    bindsym 2 [con_mark="2"] focus; mode "default"
    bindsym 3 [con_mark="3"] focus; mode "default"
    bindsym 4 [con_mark="4"] focus; mode "default"
    bindsym 5 [con_mark="5"] focus; mode "default"
    bindsym 6 [con_mark="6"] focus; mode "default"
    bindsym 7 [con_mark="7"] focus; mode "default"
    bindsym 8 [con_mark="8"] focus; mode "default"
    bindsym 9 [con_mark="9"] focus; mode "default"
    bindsym 0 [con_mark="0"] focus; mode "default"
}

## Floating
for_window [title="^xzoom x[0-9]+$"] floating enable

## Borders
default_border                 pixel 0
default_floating_border        pixel 0
for_window [class=".*"] border pixel 0

## Gaps
gaps inner 10
gaps outer -5
# gaps top    21
# gaps bottom 21

## DEBUG
# bindsym $mod+Shift+w border pixel 1; gaps inner all set  0; gaps outer all set  0;
# bindsym $mod+Shift+e border pixel 0; gaps inner all set 10; gaps outer all set -5;
bindsym $mod+Shift+w border pixel 1
bindsym $mod+Shift+e border pixel 0

## Colors
# https://notes.rcrnstn.net/colors.md
# RGBA
# TODO: `set_from_resource` (with fallback)?

# hex(round(0xff*0.75))      = hex(floor(0xff*0.75))      = '0xbf'
# hex(round(0xff*0.75*0.90)) = hex(floor(0xff*0.75*0.90)) = '0xac'
set $bgnone     #00000000
set $bginactive #000000bf
set $bgactive   #000000ac

# OKLCH
# Lightness: 0.0, 0.3740, 0.5609, 0.7479
# Chroma 0.0, 0.0645, 0.1289
# Hue: 29.23, 89.23, 149.23, 209.23, 269.23, 329.23
set $bgblack    #000000ff
set $bgred      #5e332cff
set $bggreen    #264a2eff
set $bgyellow   #4e3f12ff
set $bgblue     #333f63ff
set $bgmagenta  #543451ff
set $bgcyan     #004a53ff
set $bgwhite    #414141ff
set $fgblack    #757575ff
set $fgred      #f48c7dff
set $fggreen    #6ec480ff
set $fgyellow   #cea93fff
set $fgblue     #8ca9ffff
set $fgmagenta  #da8fd5ff
set $fgcyan     #01c3d9ff
set $fgwhite    #adadadff

# Unkown (Lch_uv?)
# set $bgblack    #000000ff
# set $bgred      #553535ff
# set $bggreen    #26442aff
# set $bgyellow   #453d1eff
# set $bgblue     #323e55ff
# set $bgmagenta  #51344eff
# set $bgcyan     #044545ff
# set $bgwhite    #3e3e3eff
# set $fgblack    #797979ff
# set $fgred      #ffa6a7ff
# set $fggreen    #7bd188ff
# set $fgyellow   #d3be67ff
# set $fgblue     #9dbfffff
# set $fgmagenta  #f3a3ecff
# set $fgcyan     #00d3d4ff
# set $fgwhite    #bebebeff

#                       border   background  text     indicator child_border
client.focused          $fgwhite $bginactive $fgwhite $fgblack  $fgwhite
client.focused_inactive $fgblack $bginactive $fgwhite $fgblack  $fgblack
client.unfocused        $fgblack $bginactive $fgblack $fgblack  $fgblack
client.placeholder      $fgblack $bginactive $fgblack $fgblack  $fgblack
client.urgent           $fgblack $bginactive $fgred   $fgblack  $fgblack
client.background       $bgnone