I3: An improved tiling window manager

Came across this y’day, when watching Eric Raymond’s new desktop being built by a couple of hardware guys. He apparently uses this, and the video showed it for like a few seconds, and immediately it felt like something really interesting. So, I spent more time learning about it, and it is definitely solid. Here’re some videos:

The tech series detailing how it works and how to make it work for you. One of the best tech tutorial videos I’ve seen:

Tech talk at Google (in the middle of seeing this one):

Spent time over the last couple of weeks and today – made it my primary window manager, and have been really impressed.

Here’s my config. I’ve kept my configs hidden – but if you want to see them, let me know and I can share the repo with you.

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

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

# Constants
set $mod Mod4

set $base00 #101218
set $base01 #1f222d
set $base02 #252936
set $base03 #7780a1
set $base04 #C0C5CE
set $base05 #d1d4e0
set $base06 #C9CCDB
set $base07 #ffffff
set $base08 #ee829f
set $base09 #f99170
set $base0A #ffefcc
set $base0B #a5ffe1
set $base0C #97e0ff
set $base0D #97bbf7
set $base0E #c0b7f9
set $base0F #fcc09e

	# set $w1 "1: "
	# set $w2 "2: chrome"

# Font for window titles. Will also be used by the bar unless a different font
# is used in the bar {} block below.
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

# start a terminal
bindsym $mod+Return exec i3-sensible-terminal

# kill focused window
bindsym $mod+q kill

# 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

# 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+c split v

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

# 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

# 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

exec slack
exec google-chrome
exec terminator -c mutt
exec terminator -c misc
exec i3-msg 'workspace 1; exec terminator'
exec i3-msg 'workspace 2; append_layout ~/.i3/w2.json'
exec /opt/toggldesktop/TogglDesktop.sh

# Run offlineimap and move to scratchpad.
exec terminator -c off -e offlineimap
for_window [instance="off"] move scratchpad

# Make the currently focused window a scratchpad
bindsym $mod+Shift+minus move scratchpad
bindsym $mod+minus scratchpad show


bindsym $mod+g [class="google-chrome"] focus

# Set the wallpaper
# exec_always feh --bg-scale ~/Documents/4EXUTH4.jpg
exec_always xset r rate 250 3

for_window [class="Meld"] floating enable
focus_follows_mouse no

# 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 semicolon 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
	bindsym Return mode "default"
	bindsym Escape mode "default"
}

bindsym $mod+r mode "resize"
bindsym $mod+shift+x exec ~/bin/lock.sh

# Widow Colours
#                       border  background text    indicator
client.focused          $base01 $base01    $base07 $base0F
client.focused_inactive $base02 $base02    $base03 $base0F
client.unfocused        $base02 $base02    $base03 $base0F
client.urgent           $base02 $base08    $base00 $base0F

# Bar
bar {
	status_command i3status -c ~/.i3/i3status.conf
	# status_command i3blocks -c ~/.i3/i3blocks.conf
	position top
	# strip_workspace_numbers yes
	# height 25
	bindsym button4 nop
	bindsym button5 nop
	colors {
		separator $base03
		background $base01
		statusline $base05
	#                    border  background text
		focused_workspace  $base01 $base01    $base07
		active_workspace   $base01 $base02    $base03
		inactive_workspace $base01 $base01    $base03
		urgent_workspace   $base01 $base01    $base08
	}
}