Advertisement
Guest User

Untitled

a guest
Nov 4th, 2013
20
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --[[
  2.                                      
  3.      Blackburn Awesome WM config 2.0
  4.      github.com/copycat-killer      
  5.                                      
  6. --]]
  7.  
  8. -- {{{ Required libraries
  9. local gears     = require("gears")
  10. local awful     = require("awful")
  11. awful.rules     = require("awful.rules")
  12. require("awful.autofocus")
  13. local wibox     = require("wibox")
  14. local beautiful = require("beautiful")
  15. local naughty   = require("naughty")
  16. local drop      = require("scratchdrop")
  17. local lain      = require("lain")
  18. -- }}}
  19.  
  20. -- {{{ Error handling
  21. if awesome.startup_errors then
  22.     naughty.notify({ preset = naughty.config.presets.critical,
  23.                      title = "Oops, there were errors during startup!",
  24.                      text = awesome.startup_errors })
  25. end
  26.  
  27. do
  28.     local in_error = false
  29.     awesome.connect_signal("debug::error", function (err)
  30.         if in_error then return end
  31.         in_error = true
  32.  
  33.         naughty.notify({ preset = naughty.config.presets.critical,
  34.                          title = "Oops, an error happened!",
  35.                          text = err })
  36.         in_error = false
  37.     end)
  38. end
  39. -- }}}
  40.  
  41. -- {{{ Autostart applications
  42. function run_once(cmd)
  43.   findme = cmd
  44.   firstspace = cmd:find(" ")
  45.   if firstspace then
  46.      findme = cmd:sub(0, firstspace-1)
  47.   end
  48.   awful.util.spawn_with_shell("pgrep -u $USER -x " .. findme .. " > /dev/null || (" .. cmd .. ")")
  49. end
  50.  
  51. run_once("unclutter -idle 10")
  52. run_once("urxvtd")
  53. run_once("xrdb -merge ~/.Xresources")
  54. run_once("setxkbmap pl")
  55. run_once("mpd")
  56. run_once("/usr/bin/xscreensaver -no-splash &")
  57. run_once("/home/rlk120/.scripts/lightson.sh &")
  58. -- }}}
  59.  
  60. -- {{{ Variable definitions
  61. -- localization
  62. os.setlocale(os.getenv("LANG"))
  63.  
  64. -- home path
  65. homedir = os.getenv("HOME") .. "/.config/awesome/"
  66.  
  67. -- beautiful init
  68. beautiful.init(awful.util.getdir("config") .. "/themes/blackburn/theme.lua")
  69.  
  70. -- common
  71. modkey     = "Mod4"
  72. altkey     = "Mod1"
  73. terminal   = "urxvtc" or "xterm"
  74. editor     = os.getenv("EDITOR") or "nano" or "vi"
  75. editor_cmd = terminal .. " -e " .. editor
  76.  
  77. -- user defined
  78. browser    = "dwb"
  79. gui_editor = "gvim"
  80. graphics   = "gimp"
  81. musicplr = terminal .. " -g 130x34-320+16 -e ncmpcpp "
  82. tasks = terminal .. " -e htop "
  83. explorer = "spacefm"
  84.  
  85. local layouts = {
  86.     awful.layout.suit.floating,
  87.     lain.layout.uselesstile,
  88.     awful.layout.suit.fair,
  89.     lain.layout.uselesstile.left,
  90.     lain.layout.uselesstile.top
  91. }
  92. -- }}}
  93.  
  94. -- {{{ Tags
  95. tags = {
  96.        names = { "web", "term", "docs", "media", "down"},
  97.        layout = { layouts[1], layouts[3], layouts[2], layouts[1], layouts[5] }
  98.        }
  99. for s = 1, screen.count() do
  100.    tags[s] = awful.tag(tags.names, s, tags.layout)
  101. end
  102. -- }}}
  103.  
  104. -- {{{ Wallpaper
  105. if beautiful.wallpaper then
  106.     for s = 1, screen.count() do
  107.         gears.wallpaper.maximized(beautiful.wallpaper, s, true)
  108.     end
  109. end
  110. -- }}}
  111. -- {{{ Menu
  112. require("freedesktop/freedesktop")
  113. -- }}}
  114.  
  115. -- {{{ Wibox
  116. markup = lain.util.markup
  117. gray   = "#9E9C9A"
  118.  
  119. -- Textclock
  120. mytextclock = awful.widget.textclock(" %H:%M ")
  121.  
  122. -- Calendar
  123. lain.widgets.calendar:attach(mytextclock)
  124.  
  125. -- Mail IMAP check
  126. -- commented because it needs to be set before use
  127. mailwidget = lain.widgets.imap({
  128.     is_plain = true,
  129.     timeout  = 120,
  130.     server   = "imap.gmail.com",
  131.     mail     = "xorgx3@gmail.com",
  132.     password = "mypassword",
  133.     settings = function()
  134.         mail_notification_preset.position = "top_right"
  135.  
  136.         mail  = ""
  137.         count = ""
  138.  
  139.         if mailcount > 0 then
  140.             mail = "Mail: "
  141.             count = mailcount .. " "
  142.         end
  143.  
  144.         widget:set_markup(markup(gray, mail) .. count)
  145.     end
  146. })
  147.  
  148.  
  149. -- MPD
  150. mpdwidget = lain.widgets.mpd({
  151.     settings = function()
  152.         artist = mpd_now.artist .. " "
  153.         title  = mpd_now.title  .. "  "
  154.  
  155.         if mpd_now.state == "pause" then
  156.             artist = "mpd "
  157.             title  = "paused  "
  158.         elseif mpd_now.state == "stop" then
  159.             artist = ""
  160.             title  = ""
  161.         end
  162.  
  163.         widget:set_markup(markup(gray, artist) .. title)
  164.     end
  165. })
  166. mpdwidget:buttons(awful.util.table.join(awful.button({ }, 1, function () awful.util.spawn_with_shell(musicplr) end)))
  167.  
  168. -- /home fs
  169. fshome = lain.widgets.fs({
  170.     partition = "/home",
  171.     settings  = function()
  172.         fs_header = ""
  173.         fs_p      = ""
  174.  
  175.         if fs_now.used >= 90 then
  176.             fs_header = " Hdd "
  177.             fs_p      = fs_now.used
  178.         end
  179.  
  180.         widget:set_markup(markup(gray, fs_header) .. fs_p)
  181.     end
  182. })
  183.  
  184. -- Battery
  185. batwidget = lain.widgets.bat({
  186.     settings = function()
  187.         bat_header = " Bat "
  188.         bat_p      = bat_now.perc .. " "
  189.  
  190.         if bat_now.status == "Not present" then
  191.             bat_header = ""
  192.             bat_p      = ""
  193.         end
  194.  
  195.         widget:set_markup(markup(gray, bat_header) .. bat_p)
  196.     end
  197. })
  198.  
  199. -- ALSA volume
  200. volumewidget = lain.widgets.alsa({
  201.     settings = function()
  202.         header = " Vol "
  203.         level  = volume_now.level
  204.  
  205.         if volume_now.status == "off" then
  206.             level = "Mute "
  207.         else
  208.             level = level .. " "
  209.         end
  210.  
  211.         widget:set_markup(markup(gray, header) .. level)
  212.     end
  213. })
  214.  
  215. -- Weather
  216. yawn = lain.widgets.yawn(523920,
  217. {
  218.     settings = function()
  219.         widget:set_markup(" " .. units .. " ")
  220.     end
  221. })
  222.  
  223. -- Separators
  224. first = wibox.widget.textbox('<span font="Tamsyn 4"> </span>')
  225. arrl_pre = wibox.widget.imagebox()
  226. arrl_pre:set_image(beautiful.arrl_lr_pre)
  227. arrl_post = wibox.widget.imagebox()
  228. arrl_post:set_image(beautiful.arrl_lr_post)
  229.  
  230. -- Create a wibox for each screen and add it
  231. mywibox = {}
  232. mypromptbox = {}
  233. mylayoutbox = {}
  234. mytaglist = {}
  235. mytaglist.buttons = awful.util.table.join(
  236.                     awful.button({ }, 1, awful.tag.viewonly),
  237.                     awful.button({ modkey }, 1, awful.client.movetotag),
  238.                     awful.button({ }, 3, awful.tag.viewtoggle),
  239.                     awful.button({ modkey }, 3, awful.client.toggletag),
  240.                     awful.button({ }, 4, function(t) awful.tag.viewnext(awful.tag.getscreen(t)) end),
  241.                     awful.button({ }, 5, function(t) awful.tag.viewprev(awful.tag.getscreen(t)) end)
  242.                     )
  243. mytasklist = {}
  244. mytasklist.buttons = awful.util.table.join(
  245.                      awful.button({ }, 1, function (c)
  246.                                               if c == client.focus then
  247.                                                   c.minimized = true
  248.                                               else
  249.                                                   -- Without this, the following
  250.                                                   -- :isvisible() makes no sense
  251.                                                   c.minimized = false
  252.                                                   if not c:isvisible() then
  253.                                                       awful.tag.viewonly(c:tags()[1])
  254.                                                   end
  255.                                                   -- This will also un-minimize
  256.                                                   -- the client, if needed
  257.                                                   client.focus = c
  258.                                                   c:raise()
  259.                                               end
  260.                                           end),
  261.                      awful.button({ }, 3, function ()
  262.                                               if instance then
  263.                                                   instance:hide()
  264.                                                   instance = nil
  265.                                               else
  266.                                                   instance = awful.menu.clients({ width=250 })
  267.                                               end
  268.                                           end),
  269.                      awful.button({ }, 4, function ()
  270.                                               awful.client.focus.byidx(1)
  271.                                               if client.focus then client.focus:raise() end
  272.                                           end),
  273.                      awful.button({ }, 5, function ()
  274.                                               awful.client.focus.byidx(-1)
  275.                                               if client.focus then client.focus:raise() end
  276.                                           end))
  277.  
  278. for s = 1, screen.count() do
  279.     -- Create a promptbox for each screen
  280.     mypromptbox[s] = awful.widget.prompt()
  281.     -- Create an imagebox widget which will contains an icon indicating which layout we're using.
  282.     -- We need one layoutbox per screen.
  283.     mylayoutbox[s] = awful.widget.layoutbox(s)
  284.     mylayoutbox[s]:buttons(awful.util.table.join(
  285.                            awful.button({ }, 1, function () awful.layout.inc(layouts, 1) end),
  286.                            awful.button({ }, 3, function () awful.layout.inc(layouts, -1) end),
  287.                            awful.button({ }, 4, function () awful.layout.inc(layouts, 1) end),
  288.                            awful.button({ }, 5, function () awful.layout.inc(layouts, -1) end)))
  289.     -- Create a taglist widget
  290.     mytaglist[s] = awful.widget.taglist(s, awful.widget.taglist.filter.all, mytaglist.buttons)
  291.  
  292.     -- Create a tasklist widget
  293.     mytasklist[s] = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, mytasklist.buttons)
  294.  
  295.     -- Create the wibox
  296.     mywibox[s] = awful.wibox({ position = "top", screen = s, height = 18 })
  297.  
  298.     -- Widgets that are aligned to the left
  299.     local left_layout = wibox.layout.fixed.horizontal()
  300.     left_layout:add(first)
  301.     left_layout:add(mytaglist[s])
  302.     left_layout:add(arrl_pre)
  303.     left_layout:add(mylayoutbox[s])
  304.     left_layout:add(arrl_post)
  305.     left_layout:add(mypromptbox[s])
  306.     left_layout:add(first)
  307.  
  308.     -- Widgets that are aligned to the right
  309.     local right_layout = wibox.layout.fixed.horizontal()
  310.     if s == 1 then right_layout:add(wibox.widget.systray()) end
  311.     right_layout:add(first)
  312.     right_layout:add(mpdwidget)
  313.     right_layout:add(mailwidget)
  314.     right_layout:add(yawn.icon)
  315.     right_layout:add(yawn.widget)
  316.     right_layout:add(fshome)
  317.     --right_layout:add(batwidget)
  318.     right_layout:add(volumewidget)
  319.     right_layout:add(mytextclock)
  320.  
  321.     -- Now bring it all together (with the tasklist in the middle)
  322.     local layout = wibox.layout.align.horizontal()
  323.     layout:set_left(left_layout)
  324.     layout:set_middle(mytasklist[s])
  325.     layout:set_right(right_layout)
  326.  
  327.     mywibox[s]:set_widget(layout)
  328.  
  329.     -- Set proper background, instead of beautiful.bg_normal
  330.     mywibox[s]:set_bg(beautiful.topbar_path .. screen[mouse.screen].workarea.width .. ".png")
  331. end
  332. -- }}}
  333.  
  334. -- {{{ Mouse bindings
  335. root.buttons(awful.util.table.join(
  336.     awful.button({ }, 3, function () mymainmenu:toggle() end),
  337.     awful.button({ }, 4, awful.tag.viewnext),
  338.     awful.button({ }, 5, awful.tag.viewprev)
  339. ))
  340. -- }}}
  341.  
  342. -- {{{ Key bindings
  343. globalkeys = awful.util.table.join(
  344.     -- Take a screenshot
  345.     -- https://github.com/copycat-killer/dots/blob/master/bin/screenshot
  346.     awful.key({  }, "#99", function() os.execute("screenshot") end),
  347.  
  348.     -- Tag browsing
  349.     awful.key({ modkey }, "Left",   awful.tag.viewprev       ),
  350.     awful.key({ modkey }, "Right",  awful.tag.viewnext       ),
  351.     awful.key({ modkey }, "Escape", awful.tag.history.restore),
  352.  
  353.     -- Non-empty tag browsing
  354.     awful.key({ altkey }, "Left", function () lain.util.tag_view_nonempty(-1) end),
  355.     awful.key({ altkey }, "Right", function () lain.util.tag_view_nonempty(1) end),
  356.  
  357.     -- Default client focus
  358.     awful.key({ altkey }, "k",
  359.         function ()
  360.             awful.client.focus.byidx( 1)
  361.             if client.focus then client.focus:raise() end
  362.         end),
  363.     awful.key({ altkey }, "j",
  364.         function ()
  365.             awful.client.focus.byidx(-1)
  366.             if client.focus then client.focus:raise() end
  367.         end),
  368.  
  369.     -- By direction client focus
  370.     awful.key({ modkey }, "j",
  371.         function()
  372.             awful.client.focus.bydirection("down")
  373.             if client.focus then client.focus:raise() end
  374.         end),
  375.     awful.key({ modkey }, "k",
  376.         function()
  377.             awful.client.focus.bydirection("up")
  378.             if client.focus then client.focus:raise() end
  379.         end),
  380.     awful.key({ modkey }, "h",
  381.         function()
  382.             awful.client.focus.bydirection("left")
  383.             if client.focus then client.focus:raise() end
  384.         end),
  385.     awful.key({ modkey }, "l",
  386.         function()
  387.             awful.client.focus.bydirection("right")
  388.             if client.focus then client.focus:raise() end
  389.         end),
  390.  
  391.     -- Show Menu
  392.     awful.key({ modkey }, "w",
  393.         function ()
  394.             mymainmenu:show({ keygrabber = true })
  395.         end),
  396.  
  397.     -- Show/Hide Wibox
  398.     awful.key({ modkey }, "b", function ()
  399.         mywibox[mouse.screen].visible = not mywibox[mouse.screen].visible
  400.     end),
  401.  
  402.     -- On the fly useless gaps change
  403.     awful.key({ altkey, "Control" }, "+", function () lain.util.useless_gaps_resize(1) end),
  404.     awful.key({ altkey, "Control" }, "-", function () lain.util.useless_gaps_resize(-1) end),
  405.  
  406.     -- Layout manipulation
  407.     awful.key({ modkey, "Shift"   }, "j", function () awful.client.swap.byidx(  1)    end),
  408.     awful.key({ modkey, "Shift"   }, "k", function () awful.client.swap.byidx( -1)    end),
  409.     awful.key({ modkey, "Control" }, "j", function () awful.screen.focus_relative( 1) end),
  410.     awful.key({ modkey, "Control" }, "k", function () awful.screen.focus_relative(-1) end),
  411.     awful.key({ modkey,           }, "u", awful.client.urgent.jumpto),
  412.     awful.key({ modkey,           }, "Tab",
  413.         function ()
  414.             awful.client.focus.history.previous()
  415.             if client.focus then
  416.                 client.focus:raise()
  417.             end
  418.         end),
  419.     awful.key({ altkey, "Shift"   }, "l",      function () awful.tag.incmwfact( 0.05)     end),
  420.     awful.key({ altkey, "Shift"   }, "h",      function () awful.tag.incmwfact(-0.05)     end),
  421.     awful.key({ modkey, "Shift"   }, "l",      function () awful.tag.incnmaster(-1)       end),
  422.     awful.key({ modkey, "Shift"   }, "h",      function () awful.tag.incnmaster( 1)       end),
  423.     awful.key({ modkey, "Control" }, "l",      function () awful.tag.incncol(-1)          end),
  424.     awful.key({ modkey, "Control" }, "h",      function () awful.tag.incncol( 1)          end),
  425.     awful.key({ modkey,           }, "space",  function () awful.layout.inc(layouts,  1)  end),
  426.     awful.key({ modkey, "Shift"   }, "space",  function () awful.layout.inc(layouts, -1)  end),
  427.     awful.key({ modkey, "Control" }, "n",      awful.client.restore),
  428.  
  429.     -- Standard program
  430.     awful.key({ modkey,           }, "Return", function () awful.util.spawn(terminal) end),
  431.     awful.key({ altkey, modkey, "Control" }, "r",      awesome.restart),
  432.     awful.key({ modkey, "Shift"   }, "q",      awesome.quit),
  433.  
  434.     -- Dropdown terminal
  435.    -- awful.key({ modkey,             }, "z",      function () drop(terminal) end),
  436.  
  437.     -- Widgets popups
  438.     awful.key({ altkey,           }, "c",      function () lain.widgets.calendar:show(7) end),
  439.     awful.key({ altkey,           }, "h",      function () fshome.show(7) end),
  440.     awful.key({ altkey,           }, "w",      function () yawn.show(7) end),
  441.  
  442.     -- ALSA volume control
  443.     --[[awful.key({ altkey }, "Up",
  444.         function ()
  445.             awful.util.spawn("amixer -q set Master 1%+")
  446.             volumewidget.update()
  447.         end),
  448.     awful.key({ altkey }, "Down",
  449.         function ()
  450.             awful.util.spawn("amixer -q set Master 1%-")
  451.             volumewidget.update()
  452.         end),
  453.     awful.key({ altkey }, "m",
  454.         function ()
  455.             awful.util.spawn("amixer -q set Master playback toggle")
  456.             volumewidget.update()
  457.         end),
  458.     awful.key({ altkey, "Control" }, "m",
  459.         function ()
  460.             awful.util.spawn("amixer -q set Master playback 100%")
  461.             volumewidget.update()
  462.         end),]]
  463.      awful.key({ }, "XF86AudioRaiseVolume", function ()
  464.                                        awful.util.spawn("amixer -q set Master 2+ unmute", false )
  465.                                        volumewidget.update()
  466.                                    end),
  467.     awful.key({ }, "XF86AudioLowerVolume", function ()
  468.                                        awful.util.spawn("amixer -q set Master 2- unmute", false )
  469.                                        volumewidget.update()
  470.                                      end),
  471.     awful.key({ }, "XF86AudioMute", function ()
  472.                                        awful.util.spawn("amixer set Master toggle", false )
  473.                                        volumewidget.update()
  474.                                      end),
  475.  
  476.     -- MPD control
  477.     awful.key({ }, "#172",
  478.         function ()
  479.             awful.util.spawn_with_shell("mpc toggle || ncmpcpp toggle || ncmpc toggle || pms toggle")
  480.             mpdwidget.update()
  481.         end),
  482.     awful.key({}, "#174",
  483.         function ()
  484.             awful.util.spawn_with_shell("mpc stop || ncmpcpp stop || ncmpc stop || pms stop")
  485.             mpdwidget.update()
  486.         end),
  487.     awful.key({}, "#173",
  488.         function ()
  489.             awful.util.spawn_with_shell("mpc prev || ncmpcpp prev || ncmpc prev || pms prev")
  490.             mpdwidget.update()
  491.         end),
  492.     awful.key({}, "#171",
  493.         function ()
  494.             awful.util.spawn_with_shell("mpc next || ncmpcpp next || ncmpc next || pms next")
  495.             mpdwidget.update()
  496.         end),
  497.  
  498.     -- Copy to clipboard
  499.     awful.key({ modkey }, "c", function () os.execute("xsel -p -o | xsel -i -b") end),
  500.  
  501.     -- User programs
  502.     awful.key({ modkey }, "q", function () awful.util.spawn(browser) end),
  503.     awful.key({ modkey }, "s", function () awful.util.spawn(gui_editor) end),
  504.     awful.key({ modkey }, "g", function () awful.util.spawn(graphics) end),
  505.     awful.key({ }, "#148", function () awful.util.spawn("speedcrunch", false) end),
  506.     awful.key({ modkey }, "e", function () awful.util.spawn(explorer) end),
  507.    
  508.     --shutdown
  509.     awful.key({}, "#150", function () awful.util.spawn("systemctl suspend", false) end),
  510.     awful.key({ modkey, "Control"  }, "#22", function () awful.util.spawn("systemctl shutdown", false) end),
  511.     awful.key({ modkey, "Control" }, "r", function () awful.util.spawn("systemctl reboot", false) end),
  512.  
  513.     -- Prompt
  514.     awful.key({ modkey }, "r", function () mypromptbox[mouse.screen]:run() end),
  515.     awful.key({ modkey }, "x",
  516.               function ()
  517.                   awful.prompt.run({ prompt = "Run Lua code: " },
  518.                   mypromptbox[mouse.screen].widget,
  519.                   awful.util.eval, nil,
  520.                   awful.util.getdir("cache") .. "/history_eval")
  521.               end)
  522. )
  523.  
  524. clientkeys = awful.util.table.join(
  525.     awful.key({ modkey,           }, "f",      function (c) c.fullscreen = not c.fullscreen  end),
  526.     awful.key({ altkey   }, "q",      function (c) c:kill()                         end),
  527.     awful.key({ modkey, "Control" }, "space",  awful.client.floating.toggle                     ),
  528.     awful.key({ modkey, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end),
  529.     awful.key({ modkey,           }, "o",      awful.client.movetoscreen                        ),
  530.     awful.key({ modkey,           }, "t",      function (c) c.ontop = not c.ontop            end),
  531.     awful.key({ modkey,           }, "n",
  532.         function (c)
  533.             -- The client currently has the input focus, so it cannot be
  534.             -- minimized, since minimized clients can't have the focus.
  535.             c.minimized = true
  536.         end),
  537.     awful.key({ modkey,           }, "m",
  538.         function (c)
  539.             c.maximized_horizontal = not c.maximized_horizontal
  540.             c.maximized_vertical   = not c.maximized_vertical
  541.         end)
  542. )
  543.  
  544. -- Bind all key numbers to tags.
  545. -- Be careful: we use keycodes to make it works on any keyboard layout.
  546. -- This should map on the top row of your keyboard, usually 1 to 9.
  547. for i = 1, 9 do
  548.     globalkeys = awful.util.table.join(globalkeys,
  549.         awful.key({ modkey }, "#" .. i + 9,
  550.                   function ()
  551.                         local screen = mouse.screen
  552.                         local tag = awful.tag.gettags(screen)[i]
  553.                         if tag then
  554.                            awful.tag.viewonly(tag)
  555.                         end
  556.                   end),
  557.         awful.key({ modkey, "Control" }, "#" .. i + 9,
  558.                   function ()
  559.                       local screen = mouse.screen
  560.                       local tag = awful.tag.gettags(screen)[i]
  561.                       if tag then
  562.                          awful.tag.viewtoggle(tag)
  563.                       end
  564.                   end),
  565.         awful.key({ modkey, "Shift" }, "#" .. i + 9,
  566.                   function ()
  567.                       local tag = awful.tag.gettags(client.focus.screen)[i]
  568.                       if client.focus and tag then
  569.                           awful.client.movetotag(tag)
  570.                      end
  571.                   end),
  572.         awful.key({ modkey, "Control", "Shift" }, "#" .. i + 9,
  573.                   function ()
  574.                       local tag = awful.tag.gettags(client.focus.screen)[i]
  575.                       if client.focus and tag then
  576.                           awful.client.toggletag(tag)
  577.                       end
  578.                   end))
  579. end
  580.  
  581. clientbuttons = awful.util.table.join(
  582.     awful.button({ }, 1, function (c) client.focus = c; c:raise() end),
  583.     awful.button({ modkey }, 1, awful.mouse.client.move),
  584.     awful.button({ modkey }, 3, awful.mouse.client.resize))
  585.  
  586. -- Set keys
  587. root.keys(globalkeys)
  588. -- }}}
  589.  
  590. -- {{{ Rules
  591. awful.rules.rules = {
  592.     -- All clients will match this rule.
  593.     { rule = { },
  594.       properties = { border_width = beautiful.border_width,
  595.                      border_color = beautiful.border_normal,
  596.                      focus = awful.client.focus.filter,
  597.                      keys = clientkeys,
  598.                      buttons = clientbuttons,
  599.                        size_hints_honor = false } },
  600.     { rule = { class = "URxvt" },
  601.           properties = { opacity = 0.99 } },
  602.  
  603.     { rule = { class = "MPlayer" },
  604.           properties = { floating = true } },
  605.  
  606.     { rule = { class = "Dwb" },
  607.           properties = { tag = tags[1][1] } },
  608.  
  609.     { rule = { class = "Iron" },
  610.           properties = { tag = tags[1][1] } },
  611.  
  612.     { rule = { instance = "plugin-container" },
  613.           properties = { tag = tags[1][1] } },
  614.  
  615.       { rule = { class = "Gimp" },
  616.             properties = { tag = tags[1][4] } },
  617.  
  618.     { rule = { class = "Gimp", role = "gimp-image-window" },
  619.           properties = { maximized_horizontal = true,
  620.                          maximized_vertical = true } },
  621. }
  622. -- }}}
  623.  
  624. -- {{{ Signals
  625. -- Signal function to execute when a new client appears.
  626. client.connect_signal("manage", function (c, startup)
  627.     -- Enable sloppy focus
  628.     c:connect_signal("mouse::enter", function(c)
  629.         if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier
  630.             and awful.client.focus.filter(c) then
  631.             client.focus = c
  632.         end
  633.     end)
  634.  
  635.     if not startup and not c.size_hints.user_position
  636.        and not c.size_hints.program_position then
  637.         awful.placement.no_overlap(c)
  638.         awful.placement.no_offscreen(c)
  639.     end
  640. end)
  641.  
  642. -- No border for maximized clients
  643. client.connect_signal("focus",
  644.     function(c)
  645.         if c.maximized_horizontal == true and c.maximized_vertical == true then
  646.             c.border_width = 0
  647.             c.border_color = beautiful.border_normal
  648.         else
  649.             c.border_width = beautiful.border_width
  650.             c.border_color = beautiful.border_focus
  651.         end
  652.     end)
  653. client.connect_signal("unfocus", function(c) c.border_color = beautiful.border_normal end)
  654. -- }}}
  655.  
  656. -- {{{ Arrange signal handler
  657. for s = 1, screen.count() do screen[s]:connect_signal("arrange", function ()
  658.         local clients = awful.client.visible(s)
  659.         local layout  = awful.layout.getname(awful.layout.get(s))
  660.  
  661.         if #clients > 0 then -- Fine grained borders and floaters control
  662.             for _, c in pairs(clients) do -- Floaters always have borders
  663.                 if awful.client.floating.get(c) or layout == "floating" then
  664.                     c.border_width = beautiful.border_width
  665.  
  666.                 -- No borders with only one visible client
  667.                 elseif #clients == 1 or layout == "max" then
  668.                     clients[1].border_width = 0
  669.                     awful.client.moveresize(0, 0, 2, 2, clients[1])
  670.                 else
  671.                     c.border_width = beautiful.border_width
  672.                 end
  673.             end
  674.         end
  675.       end)
  676. end
  677. -- }}}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement