I first came across tiling window managers with Wmi. I was looking for a light-weight window manager that could be driven with the keyboard, and it was (literally) the first one I found, and I stuck with it—until Wmii came out a couple months later. Wmii remained on my system for a couple years (with occasional breaks for ratpoison, ion, scrotwm, and—others, that I can not remember), until I found Xmonad.
Initially, I was uncertain about installing Xmonad due to the size of its dependencies (now 600+ Mb), but after reading a slew of positive reviews, I decided to give it a try. I liked it—more than any of the other window managers I had tried—but not enough to switch. So back to Wmii I went—until its next release (repeatedly) failed to compile properly on my system. Not being a patient fellow, I decided to give Xmonad another go (despite its dependency bloat), and this time it stuck (probably more out of necessity than anything else).
Xmonad remained on my system for the better part of two years, until yesterday, when I found Subtle. This was a quick switch for me, as it was light on dependencies (its total installed size is 19 Mb), and could be made to almost exactly replicate Xmonad’s environment (once I figured out how to properly use the configuration file). The only real adjustment that I have had to make is that Subtle has strict tagging, and so programmes will only open in views with the appropriate tag, rather than in the current view.
Importing (if it can be called that) my Xmonad setup required some trial and error editing of Subtle’s configuration file, so I copied the default config file (subtle.rb) from /etc/xdg/subtle to ~/.config/subtle and got down to work.
Under “Options” I changed the border size from 1 pixel to 0 pixels (borders are for the week).
#
# == Options
#
# Border size in pixel of the windows
set :border, 0
Under “Screen” I got rid of the default panel entirely by commenting it out, and adding in an empty referrer for the “top” panel.
#
# == Screen
#
screen 1 do
top [ ]
# top [ :views, :title, :spacer, :keychain, :spacer, :tray, :sublets ]
bottom [ ]
end
Next came the key-bindings. I had to edit these since the default setup relied heavily upon a user having a keyboard with a Windows key, and I no longer have one of those. I have a 102 key buckling-spring monstrosity that can be alternately used to beat burglars into submission, and annoy cubicle-mates to the point of homicidal insanity. It is wonderful.
So I modified the key-bindings to as closely resemble those of Xmonad as possible, added “grab”s (key-bindings) for dmenu and the five additional views I was going to create shortly thereafter, and changed the default terminal emulator to lxterminal.
#
# == Grabs
#
# ==== Mouse buttons
#
# [*B1*] = Button1 (Left mouse button)
# [*B2*] = Button2 (Middle mouse button)
# [*B3*] = Button3 (Right mouse button)
# [*B4*] = Button4 (Mouse wheel up)
# [*B5*] = Button5 (Mouse wheel down)
#
# ==== Modifiers
#
# [*A*] = Alt key
# [*C*] = Control key
# [*M*] = Meta key
# [*S*] = Shift key
# [*W*] = Super (Windows) key
#
grab "A-p", "dmenu_run"
# Jump to view1, view2, ...
grab "A-S-1", :ViewJump1
grab "A-S-2", :ViewJump2
grab "A-S-3", :ViewJump3
grab "A-S-4", :ViewJump4
grab "A-S-5", :ViewJump5
grab "A-S-6", :ViewJump6
grab "A-S-7", :ViewJump7
grab "A-S-8", :ViewJump8
grab "A-S-9", :ViewJump9
# Switch current view
grab "A-1", :ViewSwitch1
grab "A-2", :ViewSwitch2
grab "A-3", :ViewSwitch3
grab "A-4", :ViewSwitch4
grab "A-5", :ViewSwitch5
grab "A-6", :ViewSwitch6
grab "A-7", :ViewSwitch7
grab "A-8", :ViewSwitch8
grab "A-9", :ViewSwitch9
# Select next and prev view */
grab "A-S-Right", :ViewNext
grab "A-S-Left", :ViewPrev
# Move mouse to screen1, screen2, ...
grab "C-A-1", :ScreenJump1
grab "C-A-2", :ScreenJump2
grab "C-A-3", :ScreenJump3
grab "C-A-4", :ScreenJump4
grab "C-A-5", :ScreenJump5
grab "C-A-6", :ScreenJump6
grab "C-A-7", :ScreenJump7
grab "C-A-8", :ScreenJump8
grab "C-A-9", :ScreenJump9
# Force reload of config and sublets
grab "A-C-r", :SubtleReload
# Force restart of subtle
grab "A-C-S-r", :SubtleRestart
# Quit subtle
grab "A-S-q", :SubtleQuit
# Move current window
grab "A-B1", :WindowMove
# Resize current window
grab "A-B3", :WindowResize
# Toggle floating mode of window
grab "A-S-f", :WindowFloat
# Toggle fullscreen mode of window
grab "A-space", :WindowFull
# Toggle sticky mode of window (will be visible on all views)
grab "A-C-s", :WindowStick
# Raise window
grab "A-S-r", :WindowRaise
# Lower window
grab "A-S-l", :WindowLower
# Select next windows
grab "A-Left", :WindowLeft
grab "A-Down", :WindowDown
grab "A-Up", :WindowUp
grab "A-Right", :WindowRight
# Kill current window
grab "A-S-c", :WindowKill
# Cycle between given gravities
grab "A-KP_7", [ :top_left, :top_left66, :top_left33 ]
grab "A-KP_8", [ :top, :top66, :top33 ]
grab "A-KP_9", [ :top_right, :top_right66, :top_right33 ]
grab "A-KP_4", [ :left, :left66, :left33 ]
grab "A-KP_5", [ :center, :center66, :center33 ]
grab "A-KP_6", [ :right, :right66, :right33 ]
grab "A-KP_1", [ :bottom_left, :bottom_left66, :bottom_left33 ]
grab "A-KP_2", [ :bottom, :bottom66, :bottom33 ]
grab "A-KP_3", [ :bottom_right, :bottom_right66, :bottom_right33 ]
# Exec programs
grab "A-S-Return", "lxterminal"
Next came the tags. This took me the longest to figure out, but once it was clear, it was stupidly simple. The basic setup is: tag "<view tag>", "<programmes>". It tells Subtle under which “View” a programme should be added.
#
# == Tags
#
# Simple tags
tag "terms", "lxterminal"
tag "browser", "uzbl|opera|firefox|navigator|seamonkey|vimprobable2"
tag "ink", "inkscape"
tag "libreo", "libreoffice|lowriter|localc"
tag "gnuo", "abiword|gnumeric"
tag "pdf", "epdfview|lyx"
tag "xine", "xine"
Finally, there was the “View” section, which I edited concurrently with the “Tags” section. The basic setup here is: tag"<view name>", "<view tag>". The “View Name” is—well, the name of the given “View”, and is also what would show up on the panel if I had one displayed. The “View Tag” refers back to the “Tags” entry, and tells Subtle what programmes can be displayed in a particular “View”.
#
# == Views
#
view "terms", "terms"
view "www", "browser"
view "gimp", "gimp_.*"
view "ink", "ink"
view "libreo", "libreo"
view "gnuo", "gnuo"
view "pdf", "pdf"
view "xine", "xine"
view "default", "default"