Configure your i3wm to look good and work well
Now I will assume that you read my blogpost on why I like i3, or maybe not, but you want a way to configure i3 window manager to your tastes. This is about how I, over a couple of years, migrated my i3 setup to what I have today. I am very happy with this setup and I am running almost identical setups on both my work Linux Mint laptop and this laptop, my personal FreeBSD 13.1 laptop. Have the exact same shortcuts and keystrokes between every machine I have, all running i3, this makes it easy for me and I do not have to think about which machine I am on what what the correct keystrokes are. In my previous post I linked my cheatsheet for i3 and gave it to you in a download. Now let us talk about my design requirements for my desktop.,
There were several things I have seen on other people's desktops that I wanted on my i3 setup. Below is a list of the packages you must install to do all the things I have on my system:
- i3 --- The i3 window manager package (or i3-gaps)
- i3blocks --- Define blocks for your i3bar status line
- i3lock --- Slightly improved screen locker based on slock
- i3status --- Small program for generating a status bar
- rofi --- Window switcher, run dialog and dmenu replacement
- dmenu --- X11 menu application designed for the dwm window manager
- feh --- wallpaper management program
- gnome-screenshot --- GNOME utility for making pictures of your screen
- conky --- Advanced, highly configurable system monitor for X11
- vim --- Improved version of the vi editor (console flavor)
- doas or sudo --- utilities to run commands with root privileges
Now, i3 is just the window manager, so on most distros, you will need to install the desktop that comes with their distro. On Linux Mint, my linux of choice, I install Cinnamon from the install, then I install and configure the packages above.
Now if you were to go to log out of whatever window manager you are in, then choose to boot into i3 from either gdm, lightdm, slim, or xdm, or whatever you have installed, then you would get a default i3 desktop, no features, black screen and would get to chose a couple of simple options, like do you want to use Alt or Win key as your modifier. My suggestion is to always use WIN key as your modifier. Alt key is used by a lot of programs and you run a much higher risk of breaking an application using Alt. WIN key is very rarely used, especially in FreeBSD or Linux. The only real use I have for the WIN key is on my mechanical keyboards, but that is another topic entirely.
But, instead of doing that exercise, I have a predefined i3.conf file ready to go. So I can set it up and put it all in place so that the first time I open i3 I have my config. Now there is no way for me to remember or
tell you all of the various sources from all over the internet I pulled data from to come up with this config. Some came from Manjaro, some came from the default Linux Mint i3 install, and the rest from documents and
man pages. To use this preconfigured config file, there are a couple of simple steps
## to get into your home directory
# cd ~## create the needed hidden config directory for i3 config
# mkdir -p .config/i3
Now you need to have a config file. Here is mine and you can start with it, or edit it to get started, or just create your own. Whichever you chose, the file is named config with no extension and is places in the .config/i3 directory we just created.
# i3 config file (v4)
#
set $mod Mod4
# 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 8
#font pango:DejaVu Sans Mono 8
title_align center
# The combination of xss-lock, nm-applet and pactl is a popular choice, so
# they are included here as an example. Modify as you see fit.
# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock th
e
# screen before suspend. Use loginctl lock-session to lock your screen.
# exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork
# NetworkManager is the most popular way to manage wireless networks on Linux,
# and nm-applet is a desktop environment-independent system tray GUI for it.
exec --no-startup-id nm-applet
# assign [class="terminal"] number 0; exec bpytop
# assign [class="Slack"] number 1
# assign [class="Firefoxi-esr"] number 2
assign [class="thunderbird"] number 22
#assign [class="quiterss"] number 21
# assign [class="Terminator"] number 22
# 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
# Use Mouse+$mod to drag floating windows to their wanted position
floating_modifier $mod
# start a terminal
bindsym $mod+Return exec terminator
# kill focused window
bindsym $mod+Shift+q kill
# start dmenu (a program launcher)
#bindsym $mod+d exec --no-startup-id dmenu_run
# start screencapture
bindsym $mod+d exec --no-startup-id "gnome-screenshot -i"
# A more modern dmenu replacement is rofi:
# bindcode $mod+q exec "rofi -modi drun,run -show drun"
bindsym $mod+q exec "rofi -modi window,drun,run -show drun -sidebar-mode -terminal terminator
#-color-window" '#000000, #000000, #000000' -color-normal '#000000, #b3e774, #000000, #b3e774, #000000' -color-active '#0000FF, #b3e774, #000000, #b3e774, #000000' -color-urgent '#FF0000, #b3e774, #FF0000, #b3e774,
#FF0000'"
#There also is i3-dmenu-desktop which only displays applications shipping a
# .desktop file. It is a wrapper around dmenu, so you need that installed.
# bindcode $mod+40 exec --no-startup-id i3-dmenu-desktop
# change focus
bindsym $mod+j focus left
bindsym $mod+k focus down
bindsym $mod+l focus up
bindsym $mod+semicolon 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+semicolon 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"
set $ws2 "2"
set $ws3 "3"
set $ws4 "4"
set $ws5 "5"
set $ws6 "6"
set $ws7 "7"
set $ws8 "8"
set $ws9 "9"
set $ws10 "10"
set $ws11 "11"
set $ws12 "12"
set $ws13 "13"
set $ws14 "14"
set $ws15 "15"
set $ws16 "16"
set $ws17 "17"
set $ws18 "18"
set $ws19 "19"
set $ws20 "20"
set $ws21 "21"
set $ws22 "22"
# 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
bindsym $mod+F1 workspace number $ws11
bindsym $mod+F2 workspace number $ws12
bindsym $mod+F3 workspace number $ws13
bindsym $mod+F4 workspace number $ws14
bindsym $mod+F5 workspace number $ws15
bindsym $mod+F6 workspace number $ws16
bindsym $mod+F7 workspace number $ws17
bindsym $mod+F8 workspace number $ws18
bindsym $mod+F9 workspace number $ws19
bindsym $mod+F10 workspace number $ws20
bindsym $mod+F11 workspace number $ws21
bindsym $mod+F12 workspace number $ws22
# 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
bindsym $mod+Shift+F1 move container to workspace number $ws11
bindsym $mod+Shift+F2 move container to workspace number $ws12
bindsym $mod+Shift+F3 move container to workspace number $ws13
bindsym $mod+Shift+F4 move container to workspace number $ws14
bindsym $mod+Shift+F5 move container to workspace number $ws15
bindsym $mod+Shift+F6 move container to workspace number $ws16
bindsym $mod+Shift+F7 move container to workspace number $ws17
bindsym $mod+Shift+F8 move container to workspace number $ws18
bindsym $mod+Shift+F9 move container to workspace number $ws19
bindsym $mod+Shift+F10 move container to workspace number $ws20
bindsym $mod+Shift+F11 move container to workspace number $ws21
bindsym $mod+Shift+F12 move container to workspace number $ws22
# Make the currently focused window a scratchpad
bindsym $mod+Shift+minus move scratchpad
# Show the first scratchpad window
bindsym $mod+minus scratchpad show
# Show the sup-mail scratchpad window, if any.
# bindsym mod4+s [title="^Sup ::"] scratchpad show
# 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 or $mod+r
bindsym Return mode "default"
bindsym Escape mode "default"
bindsym $mod+r mode "default"
}
bindsym $mod+r mode "resize"
# set the backlight F5 and F6 buttons to work in i3
bindsym XF86MonBrightnessUp exec xbacklight -inc 10
bindsym XF86MonBrightnessDown exec xbacklight -dec 10
exec --no-startup-id start_conky_maia
# Start i3bar to display a workspace bar (plus the system information i3status
# finds out, if available)
bar {
status_command i3status
font pango:monospace 9
colors {
background #444444
statusline #ffffff
separator #0000ff
focused_workspace #4c7899 #285577 #ffffff
active_workspace #333333 #5f676a #ffffff
inactive_workspace #333333 #222222 #888888
urgent_workspace #2f343a #900000 #ffffff
binding_mode #2f343a #900000 #ffffff
}
}
# Review the lines below and append to ~/.config/i3/config
## Volume control
# Path to volume control, without trailing slash
#set $volumepath ~/i3-volume
# Command for the status line
# ie: i3blocks, i3status
#set $statuscmd i3status
# Signal used to update the status line
# i3blocks uses SIGRTMIN+10 by default
# i3status uses SIGUSR1 by default
#set $statussig SIGUSR1
# Amount to increase/decrease volume as a percentage
#set $volumestep 3
# pulseaudio-utils settings
#
# Symbolic name for sink (numeric index not supported)
# Recommended: comment out this setting and omit the -s option to use default sink
# List sink names: pacmd list-sinks | awk -F "[<>]" '/^\s+name: <.*>/{print $2}'"
# set $sinkname alsa_output.pci-0000_00_1b.0.analog-stereo
# Using pulseaudio-utils (append "-s $sinkname" without quotes to override default sink)
#bindsym XF86AudioRaiseVolume exec --no-startup-id $volumepath/volume -n -t $statuscmd -u $statussig up $volumestep
#bindsym XF86AudioLowerVolume exec --no-startup-id $volumepath/volume -n -t $statuscmd -u $statussig down $volumestep
#bindsym XF86AudioMute exec --no-startup-id $volumepath/volume -n -t $statuscmd -u $statussig mute
I know that is a huge, long file with a lot of crap in it. Now I will go through it line by line to explain what I have set up here. If there are places I remember where the data came from I will throw in a reference. I am positive NONE of this is my own work without information and help from lots of sources. This is just my compilation of the data into one config file to suit my own needs/wants.
set $mod Mod4
This line sets the *WIN* key (Mod4) to be the modifier.
font pango:monospace 8
This line sets the default window font, and the bar font unless overridden elsewhere
title_align center
I like my window titles centered on the window. Totally astetic, this line can be deleted
# exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork
This line, if you want to lock your screen, uncomment it and it uses i3lock
exec --no-startup-id nm-applet
nm-applet is a popular tray application to show the network status and allow you to do network changes
assign [class="thunderbird"] number 22
This line assigns thunderbird to desktop 22. When opened it will automatically open on 22.
# 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
This entire block is to allow pactl to use PulseAudio. This block will need to be modified to your hardware.
floating_modifier $mod
Use Mouse+$mod to drag floating windows to their wanted position.
bindsym $mod+Return exec terminator
I love terminator, so this line starts terminator using Win-Enter. Change Terminator to your favorite terminal program.
bindsym $mod+Shift+q kill
This WIN+Shift+q will kill the currently focused window. Handy if a program hangs up.
#bindsym $mod+d exec --no-startup-id dmenu_run
If you prefer dmenu to rofi uncomment this line out and WIN+d will open dmenu.
bindsym $mod+d exec --no-startup-id "gnome-screenshot -i"
This one I just added to my config tonight. In doing all this blogging I need to make lots of screenshots. I got tired of using rofi to do it, so since i don't use dmenu at all, I repurposed the WIN+d key to be my
screenshot. Obviously, if you want dmenu, pick a different key that d to do this. The -i is extremely important because that is what gives you the option box to pick what to screenshot and where to save it.
bindsym $mod+q exec "rofi -modi window,drun,run -show drun -sidebar-mode -terminal terminator
#-color-window" '#000000, #000000, #000000' -color-normal '#000000, #b3e774, #000000, #b3e774, #000000' -color-active '#0000FF, #b3e774, #000000, #b3e774, #000000' -color-urgent '#FF0000, #b3e774, #FF0000, #b3e774,
#FF0000'"
This is my startup script to run rofi. I chose WIN+q for rofi, but some people use the WIN+d for it to replace dmenu. For whatever reason the WIN+q is very comfortable to my hand, so I use that. You are free to pick
whatever open keyset you want for rofi.
# change focus
bindsym $mod+j focus left
bindsym $mod+k focus down
bindsym $mod+l focus up
bindsym $mod+semicolon focus right
This block sets the keyboard shortcuts to focus to a specific window
# alternatively, you can use the cursor keys:
bindsym $mod+Up focus up
bindsym $mod+Right focus right
The above block sets it so you can use the cursor keys to focus
# move focused window
bindsym $mod+Shift+j move left
bindsym $mod+Shift+k move down
bindsym $mod+Shift+l move up
bindsym $mod+Shift+semicolon move right
As it says, to move a focused window around.
# 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
bindsym $mod+h split h
Splits windows in a horizontal view
bindsym $mod+v split v Splits windows in a vertical view
bindsym $mod+f fullscreen toggle Enters fullscreen mode for focused container
# change container layout (stacked, tabbed, toggle split)
bindsym $mod+s layout stacking
bindsym $mod+w layout tabbed
bindsym $mod+e layout toggle split
Keystrokes to change layouts between tabbedm stacking, et al.
# toggle tiling / floating
bindsym $mod+Shift+space floating toggle
Toggles a window between floating and tiling
# change focus between tiling / floating windows
bindsym $mod+space focus mode_toggle
This key combo allows you to change focus between a floating window and a tiling window on the same desktop. Helpful when needing to see both apps at the same time.
# focus the parent container
bindsym $mod+a focus parent
Changes focus to the parent window
# 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"
set $ws2 "2"
set $ws3 "3"
set $ws4 "4"
set $ws5 "5"
set $ws6 "6"
set $ws7 "7"
set $ws8 "8"
set $ws9 "9"
set $ws10 "10"
set $ws11 "11"
set $ws12 "12"
set $ws13 "13"
set $ws14 "14"
set $ws15 "15"
set $ws16 "16"
set $ws17 "17"
set $ws18 "18"
set $ws19 "19"
set $ws20 "20"
set $ws21 "21"
set $ws22 "22"
As you can guess, this names/numbers my 22 workspaces so they can be reached.
# 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
bindsym $mod+F1 workspace number $ws11
bindsym $mod+F2 workspace number $ws12
bindsym $mod+F3 workspace number $ws13
bindsym $mod+F4 workspace number $ws14
bindsym $mod+F5 workspace number $ws15
bindsym $mod+F6 workspace number $ws16
bindsym $mod+F7 workspace number $ws17
bindsym $mod+F8 workspace number $ws18
bindsym $mod+F9 workspace number $ws19
bindsym $mod+F10 workspace number $ws20
bindsym $mod+F11 workspace number $ws21
bindsym $mod+F12 workspace number $ws22
From this block I can hit WIN and a number/Fkey to go to a workspace.
# 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
bindsym $mod+Shift+F1 move container to workspace number $ws11
bindsym $mod+Shift+F2 move container to workspace number $ws12
bindsym $mod+Shift+F3 move container to workspace number $ws13
bindsym $mod+Shift+F4 move container to workspace number $ws14
bindsym $mod+Shift+F5 move container to workspace number $ws15
bindsym $mod+Shift+F6 move container to workspace number $ws16
bindsym $mod+Shift+F7 move container to workspace number $ws17
bindsym $mod+Shift+F8 move container to workspace number $ws18
bindsym $mod+Shift+F9 move container to workspace number $ws19
bindsym $mod+Shift+F10 move container to workspace number $ws20
bindsym $mod+Shift+F11 move container to workspace number $ws21
bindsym $mod+Shift+F12 move container to workspace number $ws22
From this block you can see that Shift+WIN+num or Fkey will send a program to that desktop you specify. I use this a lot as you flip programs around and either bring them to current desktop, or send them to get them
out
of view.
bindsym $mod+Shift+minus move scratchpad
Open a Scratchpad on the curretnly focused Window
bindsym $mod+minus scratchpad show
Show the first scratchpad, then with repeated WIN+- you will cycle through all scratchpads.
bindsym $mod+Shift+c reload
Reload the configuration file
bindsym $mod+Shift+r restart
Restart in place keeping all window layouts, etc.
# 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'"
As it says this logs you out of i3, puts up a nagbar that makes you click on YES to exit.
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 or $mod+r
bindsym Return mode "default"
bindsym Escape mode "default"
bindsym $mod+r mode "default"
}
bindsym $mod+r mode "resize"
Commands to resize windows.
# set the backlight F5 and F6 buttons to work in i3
bindsym XF86MonBrightnessUp exec xbacklight -inc 10
bindsym XF86MonBrightnessDown exec xbacklight -dec 10
This code above is supposed to make the backlight for the screen buttons work, but this does not work on my Thinkpad, and it has not been an issue, or something I really use, so I have not debugged to figure out how to
make it work correctly.
exec --no-startup-id start_conky_maia
When you have the conky scripts in the right places (I will blog on just the conky options later) this starts the various cpu and ram usage, etc and the cheatsheet on the desktop. These modules and code were taken
specifically from the i3 community version of Manjaro.
# Start i3bar to display a workspace bar (plus the system information i3status
# finds out, if available)
bar {
status_command i3status
font pango:monospace 9
colors {
background #444444
statusline #ffffff
separator #0000ff
focused_workspace #4c7899 #285577 #ffffff
active_workspace #333333 #5f676a #ffffff
inactive_workspace #333333 #222222 #888888
urgent_workspace #2f343a #900000 #ffffff
binding_mode #2f343a #900000 #ffffff
}
}
This block starts the i3 bar and hte i3status to give you the cool bar at the bottom of the screen. I will blog later on the configs to set all of this up. for now put this in there. If your screen has a different
resolution, and your bar seems either huge or too small, adjust the font line above. I am on a 17 inch 4k laptop screen, so I have to go to a little bigger font or the bar is so small I can't even read it. Colors I
kept from the Linux Mint config.
The rest of the file is all commented out. Those lines are sample lines I copied from various documents as i was trying to configure it all how I wanted it. I left them there in case there is a line in there that will hint to you what you need to do on your setup.
A very long blog post with a lot of info. I will continue to document all the moving pieces of my config in hopes that it helps someone else set up their i3 successfully.