### Alexis V.'s Subtle configuration "Blue Touch"
### Based on Graawr's Classy Touch
### Last updated 27/08/2013

## General options
    
    set :step,              10 
    set :border_snap,       10

    set :gravity,           :ct66
    set :tiling,            false
    set :honor_size_hints,  false
    set :urgent,            false
    set :urgent_dialogs,    false

    set :click_to_focus,    false
    set :skip_pointer_warp, false
    set :skip_urgent_warp,  false 


## Panels

    screen 1 do
      top     [ :views, :separator, :title, :spacer, :mpd, :clock2 ]
      bottom  [ ]
     
    end

## Addons

    # No addons for now
    
## Colors

    background_1 =   "#151515"
    background_2 =   "#353535"    

    color_above =    "#ebebeb"
    color_light =    "#0077bb"
    color_medium =   "#545454"
    color_dark =     "#303030"

## Styles
    
    style :all do
      padding      2, 2, 2, 2
      margin       0, 0, 0, 0
      icon         color_light
      font         "xft:Ohsnap:pixelsize=12:antialias=false"
    end

    style :subtle do
      padding      0, 0, 0, 0
      margin       0, 0, 0, 0 
      panel_top    background_1
      panel_bottom background_1
    end

    style :clients do
      padding      0, 0, 0, 0
      margin       4, 4, 4, 4
      active       color_above, 1
      inactive     background_2, 1
      width        75
    end
     
    style :title do
      padding      1, 4, 2, 4
      margin       0, 0, 0, 0 
      foreground   color_above
      background   background_1
      font         "xft:Ohsnap:pixelsize=12:antialias=false"
    end
    
    style :sublets do
      padding      1, 4, 2, 4
      margin       0, 0, 0, 0
      foreground   color_medium
      background   background_1
      icon         color_light
      font         "xft:Ohsnap:pixelsize=12:antialias=false"
    end

    style :separator do
      padding      1, 2, 2, 2
      margin       0, 0, 0, 0
      foreground   color_light
      background   background_1
      separator    "|"
      font         "xft:Ohsnap:pixelsize=10:antialias=false"
    end
     
    style :views do
      padding      1, 5, 2, 5
      margin       0, 0, 0, 0
      foreground   color_medium
      background   background_1
      icon         color_dark
      font         "xft:Ohsnap:pixelsize=10:antialias=false"

        style :urgent do
          padding       1, 5, 2, 5
          margin        0, 0, 0, 0
          foreground    color_above
          background    background_1
          icon          color_above
          font          "xft:Ohsnap:pixelsize=12:antialias=false"
        end
         
        style :occupied do
          padding       1, 5, 2, 5
          margin        0, 0, 0, 0
          foreground    color_above
          background    background_1
          icon          color_medium
          font          "xft:Ohsnap:pixelsize=10:antialias=false"
        end
    
        style :focus do
          padding       1, 5, 2, 5
          margin        0, 0, 0, 0
          foreground    color_above
          background    color_light
          icon          color_light
          font          "xft:Ohsnap:pixelsize=10:antialias=false"
        end
    end     
   
## Gravities
     
    # Top left
    gravity :tl_a1,     [   0,   0,  33,  33 ]
    gravity :tl_a2,     [   0,   0,  50,  33 ]
    gravity :tl_a3,     [   0,   0,  67,  33 ]
     
    gravity :tl_b1,     [   0,   0,  33,  50 ]
    gravity :tl_b2,     [   0,   0,  50,  50 ]
    gravity :tl_b3,     [   0,   0,  67,  50 ]
     
    gravity :tl_c1,     [   0,   0,  33,  67 ]
    gravity :tl_c2,     [   0,   0,  50,  67 ]
    gravity :tl_c3,     [   0,   0,  67,  67 ]
     
    # Top center
    gravity :tc_a1,     [   0,   0, 100,  50 ]
    gravity :tc_a2,     [   0,   0, 100,  67 ]
    gravity :tc_a3,     [   0,   0, 100,  33 ]
     
    gravity :tc_b1,     [  33,   0,  34,  33 ]
    gravity :tc_b2,     [  33,   0,  34,  50 ]
    gravity :tc_b3,     [  33,   0,  34,  67 ]
     
    # Top right
    gravity :tr_a1,     [  67,   0,  33,  33 ]
    gravity :tr_a2,     [  50,   0,  50,  33 ]
    gravity :tr_a3,     [  33,   0,  67,  33 ]
     
    gravity :tr_b1,     [  67,   0,  33,  50 ]
    gravity :tr_b2,     [  50,   0,  50,  50 ]
    gravity :tr_b3,     [  33,   0,  67,  50 ]
     
    gravity :tr_c1,     [  67,   0,  33,  67 ]
    gravity :tr_c2,     [  50,   0,  50,  67 ]
    gravity :tr_c3,     [  33,   0,  67,  67 ]
     
    # Left
    gravity :l_a1,      [   0,  33,  33,  34 ]
    gravity :l_a2,      [   0,  33,  50,  34 ]
    gravity :l_a3,      [   0,  33,  67,  34 ]
     
    gravity :l_b1,      [   0,   0,  33, 100 ]
    gravity :l_b2,      [   0,   0,  50, 100 ]
    gravity :l_b3,      [   0,   0,  67, 100 ]
     
    # Center
    gravity :ct,        [   0,   0, 100, 100 ]
    gravity :ct33,      [  33,  33,  34,  34 ] 
    gravity :ct66,      [  25,  25,  50,  50 ], :vert
    gravity :ct40,      [  0,  33,  100,  34 ]
 
    # Right
    gravity :r_a1,      [  67,  33,  33,  34 ]
    gravity :r_a2,      [  50,  33,  50,  34 ]
    gravity :r_a3,      [  33,  33,  67,  34 ]
     
    gravity :r_b1,      [  67,   0,  33, 100 ]
    gravity :r_b2,      [  50,   0,  50, 100 ]
    gravity :r_b3,      [  33,   0,  67, 100 ]
     
    # Bottom left
    gravity :bl_a1,     [   0,  67,  33,  33 ]
    gravity :bl_a2,     [   0,  67,  50,  33 ]
    gravity :bl_a3,     [   0,  67,  67,  33 ]
     
    gravity :bl_b1,     [   0,  50,  33,  50 ]
    gravity :bl_b2,     [   0,  50,  50,  50 ]
    gravity :bl_b3,     [   0,  50,  67,  50 ]
     
    gravity :bl_c1,     [   0,  33,  33,  67 ]
    gravity :bl_c2,     [   0,  33,  50,  67 ]
    gravity :bl_c3,     [   0,  33,  67,  67 ]
     
    # Bottom center
    gravity :bc_a1,     [   0,  50, 100,  50 ]
    gravity :bc_a2,     [   0,  33, 100,  67 ]
    gravity :bc_a3,     [   0,  67, 100,  33 ]

    gravity :bc_b1,     [  33,  67,  34,  33 ]
    gravity :bc_b2,     [  33,  50,  34,  50 ]
    gravity :bc_b3,     [  33,  33,  34,  67 ]
     
    # Bottom right
    gravity :br_a1,     [  67,  67,  33,  33 ]
    gravity :br_a2,     [  50,  67,  50,  33 ]
    gravity :br_a3,     [  33,  67,  67,  33 ]
     
    gravity :br_b1,     [  67,  50,  33,  50 ]
    gravity :br_b2,     [  50,  50,  50,  50 ]
    gravity :br_b3,     [  33,  50,  67,  50 ]
     
    gravity :br_c1,     [  67,  33,  33,  67 ]
    gravity :br_c2,     [  50,  33,  50,  67 ]
    gravity :br_c3,     [  33,  33,  67,  67 ]

    # Special
    gravity :sp_br,     [  70,  85,  30,  15 ]
    gravity :sp_bl,     [   0,  85,  30,  15 ]
    gravity :sp_tr,     [  70,   0,  30,  15 ]
    gravity :sp_tl,     [   0,   0,  30,  15 ]

    # Gimp
    gravity :gimp_i,    [  10,   0,  80, 100 ]
    gravity :gimp_t,    [   0,   0,  10, 100 ]
    gravity :gimp_d,    [  90,   0,  10, 100 ]
      
## Grabs

    # Cycle between given gravities
    grab "W-KP_7",      [ :tl_a1, :tl_a2, :tl_a3, :tl_b1, :tl_b2, :tl_b3, :tl_c1, :tl_c2, :tl_c3 ]
    grab "W-KP_8",      [ :tc_b1, :tc_b2, :tc_b3, :tc_a3, :tc_a1, :tc_a2                         ]
    grab "W-KP_9",      [ :tr_a1, :tr_a2, :tr_a3, :tr_b1, :tr_b2, :tr_b3, :tr_c1, :tr_c2, :tr_c3 ]
     
    grab "W-KP_4",      [ :l_a1,  :l_a2,  :l_a3,  :l_b1,  :l_b2,  :l_b3 ]
    grab "W-KP_5",      [ :ct33  ,  :ct66,  :ct, :ct40 ]
    grab "W-KP_6",      [ :r_a1,  :r_a2,  :r_a3,  :r_b1,  :r_b2,  :r_b3 ]
     
    grab "W-KP_1",      [ :bl_a1, :bl_a2, :bl_a3, :bl_b1, :bl_b2, :bl_b3, :bl_c1, :bl_c2, :bl_c3 ]
    grab "W-KP_2",      [ :bc_b1, :bc_b2, :bc_b3, :bc_a3, :bc_a1, :bc_a2                         ]
    grab "W-KP_3",      [ :br_a1, :br_a2, :br_a3, :br_b1, :br_b2, :br_b3, :br_c1, :br_c2, :br_c3 ]
     
    grab "W-KP_0",      [ :sp_br, :sp_bl, :sp_tr, :sp_tl ]

    # Naviguate through clients 
    grab "A-Tab" do
        clients = Subtlext::Client.visible
        clients.last.instance_eval do
            focus
            raise
        end
    end

    # Go to next non-empty view
    grab "C-F8" do
        vArr = Subtlext::View[:all];
        cindx = vArr.index(Subtlext::View.current);
        for i in 1..vArr.size do
            cV = vArr[(i + cindx) % vArr.size];
            if (!cV.clients.empty? && Subtlext::View.visible.index(cV) == nil) then
                cV.jump;
                break;
            end
        end
    end
 
    # Go to previous non-empty view
    grab "C-F9" do
        vArr = Subtlext::View[:all].reverse;
        cindx = vArr.index(Subtlext::View.current);
        for i in 1..vArr.size do
            cV = vArr[(i + cindx) % vArr.size];
            if (!cV.clients.empty? && Subtlext::View.visible.index(cV) == nil) then
                cV.jump;
                break;
            end
        end
    end
    
    # Subtle actions 
    grab "W-C-r",   :SubtleReload
    grab "W-A-r",   :SubtleRestart
    grab "W-C-q",   :SubtleQuit
     
    # Window actions
    grab "W-B1",    :WindowMove
    grab "W-Up",    :WindowMoveUp
    grab "W-Right", :WindowMoveRight
    grab "W-Down",  :WindowMoveDown
    grab "W-Left",  :WindowMoveLeft

    grab "W-B3",    :WindowResize
    grab "W-C-Up",  :WindowResizeUp
    grab "W-C-Right", :WindowResizeRight
    grab "W-C-Down",:WindowResizeDown
    grab "W-C-Left",:WindowResizeLeft

    grab "W-h",     :WindowLeft
    grab "W-j",     :WindowDown
    grab "W-k",     :WindowUp
    grab "W-l",     :WindowRight
    grab "W-r",     :WindowRaise
    grab "W-s",     :WindowLower
    grab "W-q",     :WindowKill
    grab "W-S-f",   :WindowFloat
    grab "W-S-d",   :WindowFull
    grab "W-S-s",   :WindowStick
     
    # Shortcuts
    grab "W-Return",             "urxvtc -name terminal"
    grab "W-w",                  "firefox"
    grab "W-v",                  "urxvtc -name vim -e vim"
    grab "W-g",                  "steam"
    grab "W-m",                  "thunderbird"
    grab "W-i",                  "gimp"
    grab "W-a",                  "skype"
    grab "W-e",                  "ekiga"
    grab "W-z",                  "filezilla"

    # Screen capture
    grab "Print",		 "cd ~/Pictures && scrot && cd ~"

## Tags
     
    # Simple tags
    tag "web",      "chromium|firefox|filezilla"
    tag "msg",      "skype|ekiga|thunderbird"
    tag "steam",    "steam"
    tag "media",    "easytag|sonata|audacity|gimp|feh" 

    # Placement
    tag "web_full" do
      match "chromium|firefox"
      gravity :ct
    end

    tag "msg_full" do
      match "thunderbird"
      gravity :ct
    end

    tag "media_full" do
      match "libreoffice|audacity|easytag" 
      gravity :ct
    end

    # Apps definition
    tag "terms" do
      match :instance => "terminal"
    end

    tag "vim" do 
      match :instance => "vim"
      gravity :ct
    end

    tag "minecraft" do
      match :name => "Minecraft*|minecraft*"
    end

    tag "flash" do
      match "<unknown>|plugin-container|exe|operapluginwrapper|npviewer.bin"
    end

    # Modes
    tag "stick" do
      match "mplayer"
      stick true
    end
     
    tag "float" do
      match "mplayer|display"
      float true
    end

    tag "fixed" do
      match "display|gimp_*"
      fixed true
    end

    tag "borderless" do
      match "display|feh"
      borderless true
    end

    tag "urgent" do
      match "display"
      urgent true
    end

    tag "resize" do
      match "mplayer"
      resize true
    end

    # Gimp
    tag "gimp_image" do
      match   :role => "gimp-image-window"
      gravity :gimp_i
    end
     
    tag "gimp_toolbox" do
      match   :role => "gimp-toolbox$"
      gravity :gimp_t
    end
     
    tag "gimp_dock" do
      match   :role => "gimp-dock"
      gravity :gimp_d
    end

    tag "gimp_scum" do
      match   :role => "gimp-.*|screenshot"
    end

    # Autostarted stuff positionning
    tag "starttwitter" do
      match :instance => "starttwitter"
      gravity :r_b1
    end 

    tag "startmusic" do
      match :instance => "startmusic"
      gravity :tl_a3
    end 

    tag "startterminal" do
      match :instance => "startterminal"
      gravity :bl_c1
    end

    tag "startfiles" do
      match :instance => "startfiles"
      gravity :ct33
    end

    tag "startmixer" do
      match :instance => "startmixer"
      gravity :bc_b1
    end

## Views
     
    view "main" do
      match "terms|starttwitter|startmusic|startterminal|startfiles|startmixer"
    end

    view "vim" do
      match "vim"
      dynamic true
    end
     
    view "web" do
      match "web|web_full|flash"
    end

    view "msg" do
      match "msg|msg_full|mail"
    end
     
    view "media" do
      match "media|media_full|gimp_*|steam|minecraft"
    end

    view "other" do
      match "default|<unknown>"
      dynamic true
    end
     
## Sublets

    sublet :mpd do
      format_string "%artist% %title%"
      show_icons    false
      show_colors   true
      show_pause    true
      artist_color  color_medium
      title_color   color_light
      pause_color   color_medium
      stop_color    color_medium
      stop_text     "Stop"
      pause_text    "Pause"
      not_running_text ""
    end
      
    sublet :clock2 do
      interval       30
      time_format    "%H:%M"
      time_color     color_above
      date_format    ""
    end
 
## Hooks

    # Autostart
    on :start do
      Subtlext::Subtle.spawn "subtler -r"
      Subtlext::Subtle.spawn "numlockx" 
      Subtlext::Subtle.spawn "urxvtd"
      Subtlext::Subtle.spawn "compton -i 0.9 --focus-exclude 'height = 17 --vsync opengl'"
      Subtlext::Subtle.spawn "feh --bg-center Pictures/wallpaper.jpg"
      Subtlext::Subtle.spawn "sleep 5s && urxvtc -name starttwitter -e ttytter -ansi"
      Subtlext::Subtle.spawn "sleep 1s && urxvtc -name startmusic -e ncmpcpp"
      Subtlext::Subtle.spawn "sleep 1s && urxvtc -name startterminal"
      Subtlext::Subtle.spawn "sleep 1s && urxvtc -name startfiles -e ranger"
      Subtlext::Subtle.spawn "sleep 1s && urxvtc -name startmixer -e alsamixer"
    end 

    # Client autofocus
    on :client_create do |c|
      c.views.first.jump
      c.focus
      c.raise
    end
  
### End of configuration file
### Please feel free about telling me if you like it and getting me notified of your using and eventual editings :)