### BITTE DIESE DATEI NUR MIT FOLGENDEM BEFEHL BEARBEITEN ###
# chezmoi edit .config/i3/config
#
#====================== OLD COLOR SCHME
set $foreground   #eceff1
set $background   #263238
set $color0       #263238
set $color8       #37474f
set $color1       #ff9800
set $color9       #ffa74d
set $color2       #8bc34a
set $color10      #9ccc65
set $color3       #ffc107
set $color11      #ffa000
set $color4       #03a9f4
set $color12      #81d4fa
set $color5       #ea427b
set $color13      #ad1457
set $color6       #009688
set $color14      #26a69a
set $color7       #cfd8dc
set $color15      #eceff1
set $transparent #000000FF



set $FOCUS #18A4DB
set $UNFOCUS #127196
set $BORDERF #00c3FF
set $BORDERU #00245E

# This file has been auto-generated by i3-config-wizard(1).
# It will not be overwritten, so edit it as you like.
#
# Should you change your keyboard layout some time, delete
# this file and re-run i3-config-wizard(1).
#

# xmodmap -pke
# xev

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

set $mod Mod1

# Font for window titles. Will also be used by the bar unless a different font
# is used in the bar {} block below.
#font pango:Noto Sans Bold 9
#font pango:Droid Sans 9
#font pango:FontAwesome 8, pango: Droid Sans Mono 8
#font pango:System San Francisco Display 10
#font pango:System San Francisco Display 6
#font pango:monospace 8
font pango:monospace 12

# This font is widely installed, provides lots of unicode glyphs, right-to-left
# text rendering and scalability on retina/hidpi displays (thanks to pango).
#font pango:DejaVu Sans Mono 8

# Before i3 v4.8, we used to recommend this one as the default:
# font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
# The font above is very space-efficient, that is, it looks good, sharp and
# clear in small sizes. However, its unicode glyph coverage is limited, the old
# X core fonts rendering does not support right-to-left and this being a bitmap
# font, it doesn’t scale on retina/hidpi displays.

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

workspace_auto_back_and_forth yes
force_display_urgency_hint 0 ms
focus_on_window_activation urgent

# start a terminal
bindsym $mod+Return exec wezterm

# Start Offline Speech
bindsym $mod+Shift+s exec ~/.config/nerd-dictation/run-dictation.sh

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

# Menu
#bindsym $mod+d exec rofi -show run -lines 3 -bw 1 -font "Cantarell 18" -opacity "75" 
#bindsym $mod+d exec rofi -show run -lines 3 -eh 2 -width 100 -padding 150 -markup -opacity "85" -bw 0 -bc "#2f343f" -bg "#2f343f" -fg "#f3f4f5" -hlbg "#2f343f" -hlfg "#9575cd" -font "Droid Sans 18" -theme Arc-Dark
#bindsym $mod+d exec rofi -show run -lines 3 -eh 2 -width 100 -padding 800 -opacity "85" -bw 0 -bc "$bg-color" -bg "$bg-color" -fg "$text-color" -hlbg "$bg-color" -hlfg "#9575cd" -font "System San Francisco Display 18"

# start dmenu (a program launcher)
#bindsym $mod+d exec dmenu_run
# There also is the (new) i3-dmenu-desktop which only displays applications
# shipping a .desktop file. It is a wrapper around dmenu, so you need that
# installed.
#bindsym $mod+d exec --no-startup-id i3-dmenu-desktop --dmenu='rofi -i -dmenu -font "snap 12" -bg "#222222" -fg "#888888" -hlbg "#285577" -hlfg "#ffffff" -opacity 90 -m 0 -location 2'

bindsym $mod+d exec --no-startup-id rofi -show run
bindsym $mod+shift+d exec --no-startup-id j4-dmenu-desktop --dmenu="~/.config/sway/bemenu-run.sh -l 30" --term="wezterm" --no-generic
bindsym $mod+y exec CM_LAUNCHER=rofi CM_HISTLENGTH=15 clipmenu
bindsym $mod+shift+y exec .config/rofi/rofi-pass.sh

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

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

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

# 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

# Define names for default workspaces for which we configure key bindings later on.
# We use variables to avoid repeating the names in multiple places.
set $ws1 "1: Terminals "
set $ws2 "2: Browser "
set $ws3 "3: Mail "
set $ws4 "4: Office "
set $ws5 "5: Music "
set $ws6 "6: Speakprogram "
set $ws7 "7: IDE "
set $ws8 "8: Steam "
set $ws9 "9: Chat "
set $ws10 "10: Others "

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

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

# reload the configuration file
bindsym $mod+Shift+c reload
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
bindsym $mod+Shift+r restart
# exit i3 (logs you out of your X session)
bindsym $mod+Shift+e 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'"

# resize window (you can also use the mouse for that)
mode "resize" {
    # These bindings trigger as soon as you enter the resize mode

    # Pressing left will shrink the window’s width.
    # Pressing right will grow the window’s width.
    # Pressing up will shrink the window’s height.
    # Pressing down will grow the window’s height.
    bindsym j resize shrink width 10 px or 10 ppt
    bindsym k resize grow height 10 px or 10 ppt
    bindsym l resize shrink height 10 px or 10 ppt
    bindsym odiaeresis 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 or $mod+r
    bindsym Return mode "default"
    bindsym Escape mode "default"
    bindsym $mod+r mode "default"
}

bindsym $mod+r mode "resize"

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          #00ff00
client.unfocused        $inactive-bg-color $inactive-bg-color $inactive-text-color #00ff00
client.focused_inactive $inactive-bg-color $inactive-bg-color $inactive-text-color #00ff00
client.urgent $urgent-bg-color $urgent-bg-color $text-color #00ff00

# Start i3bar to display a workspace bar (plus the system information i3status
# finds out, if available)

#client.focused #81a2be #81a2be #1d1f21 #282a2e
#client.focused_inactive #373b41 #373b41 #969896 #282a2e
#client.unfocused #282a2e #282a2e #969896 #282a2e
#client.urgent #373b41 #cc6666 #ffffff #cc6666

# Status-Bar
#exec_always --no-startup-id $HOME/.config/polybar/launch.sh --cuts

bar {
    font pango:MesloLGM Nerd Font Bold 13
    position top
    status_command i3status-rs ~/.config/i3status-rust/config.toml
    colors {
        #separator #666666
        #background #222222
        #statusline #dddddd
        #focused_workspace #0088CC #0088CC #ffffff
        #active_workspace #333333 #333333 #ffffff
        #inactive_workspace #333333 #333333 #888888
        #urgent_workspace #2f343a #900000 #ffffff

        #background #eceff1
        background $bg-color
		statusline #263238
		#separator #556270
		separator #757575
		
		#colors           outline  background  number
		#focused_workspace	$color6  $color6    $color15
		active_workspace	$color6  $color6  	$color15
		#inactive_workspace	$color7  $color7    $color6
		#urgent_workspace	$color13 $color13   $color15

		focused_workspace  $bg-color          $bg-color          $text-color
		inactive_workspace $inactive-bg-color $inactive-bg-color $inactive-text-color
		urgent_workspace $urgent-bg-color $urgent-bg-color $text-color
    }
}

# Benutzerdefiniert

# Fenster zu einem Scratchpad
bindsym $mod+Shift+minus move scratchpad
# Zeige das scratcpad window
bindsym $mod+minus scratchpad show

# Starte Programme über Tastaurkombination

# Press $mod+o followed by either b to launch firefox,
# Escape or Return to the default mode, respectively.
set $mode_launcher Launch: [b]rowser [p]avucontrol [a]randr [f]ilemanager
bindsym $mod+o mode "$mode_launcher"

mode "$mode_launcher" {
    bindsym f exec firefox, mode "default"
    bindsym p exec pavucontrol, mode "default"
    bindsym a exec arandr, mode "default"
    bindsym f exec pcmanfm, mode "default"

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

bindsym $mod+b exec firefox
bindsym $mod+t exec pcmanfm
bindsym $mod+n exec wezterm start nmtui

#bindsym $mod+o exec termite -e /usr/bin/alsamixer
#bindsym $mod+y exec wezterm start ncmpcpp

# Alsa-Steuerung & Lautstärke einstellen
#bindsym $mod+i exec amixer set Speaker 5%+
#bindsym $mod+u exec amixer set Speaker 5%-
bindsym $mod+i exec pamixer --allow-boost -i 5
bindsym $mod+shift+i exec pamixer --allow-boost -d 5
bindsym $mod+shift+v exec "if pamixer --get-mute; then pamixer --unmute; else pamixer --mute; fi"
#bindsym $mod+shift+v exec amixer set Speaker toggle
#bindsym $mod+shift+h exec amixer set Capture toggle

# https://i3wm.org/docs/userguide.html#assign_workspace
# xprop

# Einstellungen für spezielle Programme (exact match instead of substring)
for_window [class="(?i)vlc"] floating disable border none
for_window [class="(?i)virtualbox"] floating enable border normal
for_window [class="(?i)claws-mail"] floating enable border normal
for_window [class="mplayer"] floating disable border none
for_window [title="Wicd"] floating enable border normal
for_window [title="galculator"] floating enable border normal
for_window [title="Verbindungsinformationen"] floating enable border normal
for_window [title="Lautstärkeregler"] floating enable border normal
for_window [title="Freundesliste"] floating enable border normal
#for_window [title="pcmanfm"] floating enable
for_window [title="Screen Layout Editor"] floating enable
for_window [title="Screen Layout Editor"] resize set 640 480
for_window [title="Layout speichern"] floating enable
for_window [title="Layout speichern"] resize set 640 480

# Einstellungen Fensterverhalten für bestimmte Programme im Terminal
for_window [class="Alpine"] floating enable border none
for_window [class="calcurse"] floating enable border none
for_window [class="newsbeuter"] floating enable border none
for_window [class="weechat"] floating enable border none

# assign special properties
for_window [class="^Pavucontrol$"] floating enable
for_window [title="MonoDevelop External Console"] floating enable
for_window [class="^Shutter$"] floating enable
# Enables floating windows of the chrome extension "Videostream for Chromecast"
for_window [instance="^crx_cnciopoikihiagdjbjpnocolokfelagl$"] floating enable
# The Chrome "Page Unresponsive" dialog is not floating...
for_window [title="Page Unresponsive"] floating enable
# Share your screen from Google Cast extension
for_window [title="Share your screen - Google Cast"] floating enable
# TeamSpeak new features window
for_window [class="^TeamSpeak 3$" title="^New TeamSpeak Features"] floating enable
# Android Device Monitor startup window
for_window [class="^Monitor$" instance="^Monitor$" title="^Monitor$"] floating enable
# chromeIPass "No logins found." window
for_window [title="^chromeIPass$"] floating enable

# Jetbrains
for_window [class="^com-intellij-updater-Runner$" title="^Update$"] floating enable
for_window [instance="^sun-awt-X11-XDialogPeer$" title="^Complete Installation$"] floating enable

# Unity
for_window [class="^Unity$" title="^Starting Unity...$"] floating enable
for_window [class="^Unity$" title="^Hold On$"] floating enable
for_window [class="^Unity$" title="^Preparing Package$"] floating enable
for_window [class="^Unity$" title="^Importing Package$"] floating enable

# https://github.com/ValveSoftware/steam-for-linux/issues/1040
#for_window [title="Steam"] floating enable
#for_window [title="Steam"] resize set 480 640
# Main Window
#for_window [class="^Steam$" title="^Steam$"] floating disable
for_window [class="^Steam$" title="^Friends$"] floating enable
for_window [class="^Steam$" title="Steam - News"] floating enable
for_window [class="^Steam$" title=".* - Chat"] floating enable
for_window [class="^Steam$" title="^Settings$"] floating enable
for_window [class="^Steam$" title=".* - event started"] floating enable
for_window [class="^Steam$" title=".* CD key"] floating enable
for_window [class="^Steam$" title="^Steam - Self Updater$"] floating enable
for_window [class="^Steam$" title="^Screenshot Uploader$"] floating enable
for_window [class="^Steam$" title="^Steam Guard - Computer Authorization Required$"] floating enable
for_window [class="^Steam$" title="Steam-Bibliotheksordner$"] floating enable
for_window [class="^Steam$" title="Neuen Steam-Bibliotheksordner auswählen oder erstellen:$"] floating enable
for_window [class="^Steam$" title="Freundesliste"] floating enable
for_window [title="^Steam Keyboard$"] floating enable
for_window [title="Bildschirmtastatur der Steam-Eingabe"] floating enable
for_window [title="Freundesliste"] floating enable
for_window [title="Steam-Einstellungen"] floating enable

# There is no specific property for windows that should be floating (eg. the WM_NAME is the device name (PC1))
for_window [class="^PacketTracer6$"] floating enable
for_window [class="^PacketTracer6$" title="PT Activity"] floating disable
for_window [class="^PacketTracer6$" title="Cisco Packet Tracer"] floating disable


# Alsa-Steuerung & Lautstärke einstellen
bindsym XF86AudioRaiseVolume exec pamixer --allow-boost -i 5
bindsym XF86AudioLowerVolume exec pamixer --allow-boost -d 5
bindsym XF86AudioMute exec "if pamixer --get-mute; then pamixer --unmute; else pamixer --mute; fi"
bindsym XF86AudioMicMute exec amixer set Capture toggle
#bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume 0 +5% #increase sound volume
#bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume 0 -5% #decrease sound volume
#bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute 0 toggle # mute sound

# Steuerung der Helligkeit
#bindsym XF86MonBrightnessUp exec xbacklight +10
#bindsym XF86MonBrightnessDown exec xbacklight -10
#bindsym XF86MonBrightnessUp exec xbacklight -inc 20 # increase screen brightness
#bindsym XF86MonBrightnessDown exec xbacklight -dec 20 # decrease screen brightness
bindsym XF86MonBrightnessUp exec "if lspci | grep -e VGA -e 3D -m 1 | grep AMD; then expr $(cat /sys/class/backlight/amdgpu_bl*/brightness) + 20 | sudo tee --append /sys/class/backlight/amdgpu_bl*/brightness; else expr $(cat /sys/class/backlight/intel_backlight/brightness) + 100 | sudo tee --append /sys/class/backlight/intel_backlight/brightness; fi"
bindsym XF86MonBrightnessDown exec "if lspci | grep -e VGA -e 3D -m 1 | grep AMD; then expr $(cat /sys/class/backlight/amdgpu_bl*/brightness) - 20 | sudo tee --append /sys/class/backlight/amdgpu_bl*/brightness; else expr $(cat /sys/class/backlight/intel_backlight/brightness) - 100 | sudo tee --append /sys/class/backlight/intel_backlight/brightness; fi"


# Touchpad controls
bindsym XF86TouchpadToggle exec /usr/bin/touchpad_toggle # toggle touchpad

# Media player controls
bindsym XF86AudioPlay exec playerctl play
bindsym XF86AudioPause exec playerctl pause
bindsym XF86AudioNext exec playerctl next
bindsym XF86AudioPrev exec playerctl previous

# monitor-picture
bindsym Print exec sleep 1 && scrot --select -e 'mv $f ~/Bilder/' --quality 50
bindsym Shift+Print exec scrot -e 'mv $f ~/Bilder/' --silent --quality 50
#bindsym a+Print exec scrot -u -e 'mv $f ~/Bilder/' --silent --quality 50

# Power control script - a useful replacement for the normal i3 exiting keybind.
# https://wiki.archlinux.org/index.php/i3#Shutdown.2C_reboot.2C_lock_screen
set $mode_system System (1) lock, (e) logout, (s) suspend, (h) hibernate, (r) reboot, (d) shutdown
mode "$mode_system" {
    bindsym 1 exec --no-startup-id ~/.config/i3/i3exit lock, mode "default"
    bindsym e exec --no-startup-id ~/.config/i3/i3exit logout, mode "default"
    bindsym s exec --no-startup-id ~/.config/i3/i3exit suspend, mode "default"
    bindsym h exec --no-startup-id ~/.config/i3/i3exit hibernate, mode "default"
    bindsym r exec --no-startup-id ~/.config/i3/i3exit reboot, mode "default"
    bindsym d exec --no-startup-id ~/.config/i3/i3exit shutdown, mode "default"
    # back to normal: Enter or Escape
    bindsym Return mode "default"
    bindsym Escape mode "default"
}
bindsym $mod+x mode "$mode_system"

## Manual management of external displays
# Set the shortcuts and what they do
set $mode_display Ext Screen (v) eDP ON, (h) HDMI ON, (x) eDP OFF, (y) HDMI OFF
mode "$mode_display" {
    bindsym v exec --no-startup-id xrandr --output eDP --auto --right-of HDMI-A-0, mode "default"
    bindsym h exec --no-startup-id xrandr --output HDMI-A-0 --auto --left-of eDP, mode "default"
    bindsym x exec --no-startup-id xrandr --output eDP --auto --off, mode "default"
    bindsym y exec --no-startup-id xrandr --output HDMI-A-0 --auto --off, mode "default"

    # back to normal: Enter or Escape
    bindsym Return mode "default"
    bindsym Escape mode "default"
}
# Declare here the shortcut to bring the display selection menu
bindsym $mod+Shift+m mode "$mode_display"

#RUN-Menü aufrufen
#bindsym $mod+p exec --no-startup-id i3-input -F 'exec %s' -P 'Auführen: '

# springen von Workspace zu workspace mit oder ohne container
workspace_auto_back_and_forth yes
#bindsym $mod+z workspace back_and_forth
#bindsym $mod+Shift+z move container to workspace back_and_forth; workspace back_and_forth

# display resoulution
#exec xrandr --output DP-0 --off --output DVI-D-0 --primary --mode 1920x1080 --pos 3840x0 --rotate normal --output DVI-D-1 --mode 1920x1080 --pos 0x0 --rotate normal --output DP-1 --off --output HDMI-0 --mode 1920x1080 --pos 1920x0 --rotate normal
exec --no-startup-id ~/.screenlayout/monitor.sh

# background
exec_always --no-startup-id feh --bg-scale ~/desktop-bilder/background.jpg
#exec_always --no-startup-id feh --bg-scale /opt/deadc0de-os-code/background.jpg

# start dbus for xdg-desktop-portal-gtk.service user service
exec --no-startup-id "dbus-update-activation-environment --systemd DBUS_SESSION_BUS_ADDRESS DISPLAY XAUTHORITY"

# conky ;-)
#exec --no-startup-id /opt/.Conky/startconky.sh now

# transparent background termite
#exec --no-startup-id picom -b --config ~/.config/i3/picom.conf

# volumeicon
#exec --no-startup-id volumeicon

# Networkmanager
exec --no-startup-id nm-applet

# Bluetooth
exec --no-startup-id blueman-applet

# Start clipmenud
exec --no-startup-id "clipmenud"

# Start xscreensaver
#exec --no-startup-id "xscreensaver -no-splash"

# Start Pulseaudio Server
#already started
#exec --no-startup-id "pulseaudio --start"

# Start dockd Daemon
exec --no-startup-id dockd --daemon

# Start dunst-notifyd Service
exec --no-startup-id "dunst"

# Start ntfy
#exec --no-startup-id "/usr/bin/ntfy subscribe --config /etc/ntfy/client.yml --from-config"

# Start volumeicon tray paystray (pulseaudio)
#exec --no-startup-id "pasystray --notify=all"

# imwheel faster scrolling (deactivated sound bug)
#exec --no-startup-id imwheel

# authentication manager
exec --no-startup-id lxpolkit

# SVKBD: Simple Virtual Keyboard
#exec --no-startup-id svkbd-mobile-intl -d

# xfce4-power-manager
#exec --no-startup-id xfce4-power-manager

# start gnome-keyring-daemon
#exec --no-startup-id /usr/bin/gnome-keyring-daemon --start --components=ssh,secrets,pkcs11

# notify service from smartphone
#exec --no-startup-id /opt/an2linuxserver/an2linuxserver.py

# Using ydotool for nerd-dictation
exec --no-startup-id ydotoold

# starting Steam
{{- if eq .chezmoi.hostname "SpectreOS-deck" }}
exec --no-startup-id steam -steamdeck -gamepadui
{{- end }}

#######

# i3lock
#convert image.jpg -resize $(xdpyinfo | grep dimensions | sed -r 's/^[^0-9]*([0-9]+x[0-9]+).*$/\1/') RGB:- | i3lock --raw $(xdpyinfo | grep dimensions | sed -r 's/^[^0-9]*([0-9]+x[0-9]+).*$/\1/'):rgb --image /dev/stdin
#bindsym $mod+shift+x exec i3lock -c 000000

bindsym $mod+shift+x exec xtrlock


### i3-gaps stuff ###

# Necessary for i3-gaps to work properly (pixel can be any value)
for_window [class="^.*"] border pixel 3

# Smart Gaps
smart_gaps on

# Smart Borders
smart_borders on

# Set inner/outer gaps
gaps inner 12
gaps outer -2

# Gaps mode
set $mode_gaps Gaps: (o) outer, (i) inner
set $mode_gaps_outer Outer Gaps: +|-|0 (local), Shift + +|-|0 (global)
set $mode_gaps_inner Inner Gaps: +|-|0 (local), Shift + +|-|0 (global)
bindsym $mod+Shift+g mode "$mode_gaps"

mode "$mode_gaps" {
    bindsym o      mode "$mode_gaps_outer"
    bindsym i      mode "$mode_gaps_inner"
    bindsym Return mode "default"
    bindsym Escape mode "default"
}

mode "$mode_gaps_inner" {
    bindsym plus  gaps inner current plus 5
    bindsym minus gaps inner current minus 5
    bindsym 0     gaps inner current set 0

    bindsym Shift+plus  gaps inner all plus 5
    bindsym Shift+minus gaps inner all minus 5
    bindsym Shift+0     gaps inner all set 0

    bindsym Return mode "default"
    bindsym Escape mode "default"
}
mode "$mode_gaps_outer" {
    bindsym plus  gaps outer current plus 5
    bindsym minus gaps outer current minus 5
    bindsym 0     gaps outer current set 0

    bindsym Shift+plus  gaps outer all plus 5
    bindsym Shift+minus gaps outer all minus 5
    bindsym Shift+0     gaps outer all set 0

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

exec notify-send -a i3 "loaded" "Welcome to i3."
