You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							678 lines
						
					
					
						
							24 KiB
						
					
					
				
			
		
		
	
	
							678 lines
						
					
					
						
							24 KiB
						
					
					
				| --[[ | |
|                                     | |
|      Dremora Awesome WM config 2.0  | |
|      github.com/copycat-killer      | |
|                                     | |
| --]] | |
|  | |
| -- {{{ Required libraries | |
| local gears     = require("gears") | |
| local awful     = require("awful") | |
| awful.rules     = require("awful.rules") | |
|                   require("awful.autofocus") | |
| local wibox     = require("wibox") | |
| local beautiful = require("beautiful") | |
| local naughty   = require("naughty") | |
| local drop      = require("scratchdrop") | |
| local lain      = require("lain") | |
| -- }}} | |
|  | |
| -- {{{ Error handling | |
| if awesome.startup_errors then | |
|     naughty.notify({ preset = naughty.config.presets.critical, | |
|                      title = "Oops, there were errors during startup!", | |
|                      text = awesome.startup_errors }) | |
| end | |
|  | |
| do | |
|     local in_error = false | |
|     awesome.connect_signal("debug::error", function (err) | |
|         if in_error then return end | |
|         in_error = true | |
|  | |
|         naughty.notify({ preset = naughty.config.presets.critical, | |
|                          title = "Oops, an error happened!", | |
|                          text = err }) | |
|         in_error = false | |
|     end) | |
| end | |
| -- }}} | |
|  | |
| -- {{{ Autostart applications | |
| function run_once(cmd) | |
|   findme = cmd | |
|   firstspace = cmd:find(" ") | |
|   if firstspace then | |
|      findme = cmd:sub(0, firstspace-1) | |
|   end | |
|   awful.util.spawn_with_shell("pgrep -u $USER -x " .. findme .. " > /dev/null || (" .. cmd .. ")") | |
| end | |
|  | |
| run_once("urxvtd") | |
| run_once("unclutter -root") | |
| -- }}} | |
|  | |
| -- {{{ Variable definitions | |
|  | |
| -- beautiful init | |
| beautiful.init(os.getenv("HOME") .. "/.config/awesome/themes/dremora/theme.lua") | |
|  | |
| -- common | |
| modkey     = "Mod4" | |
| altkey     = "Mod1" | |
| terminal   = "urxvtc" or "xterm" | |
| editor     = os.getenv("EDITOR") or "nano" or "vi" | |
| editor_cmd = terminal .. " -e " .. editor | |
|  | |
| -- user defined | |
| browser    = "dwb" | |
| browser2   = "iron" | |
| gui_editor = "gvim" | |
| graphics   = "gimp" | |
|  | |
| local layouts = { | |
|     awful.layout.suit.floating, | |
|     lain.layout.uselesstile, | |
|     awful.layout.suit.fair, | |
|     lain.layout.uselesstile.left, | |
|     lain.layout.uselesstile.top | |
| } | |
| -- }}} | |
|  | |
| -- {{{ Tags | |
| tags = { | |
|    names = { "ƀ", "Ƅ", "Ɗ", "ƈ", "ƙ" }, | |
|    layout = { layouts[1], layouts[3], layouts[2], layouts[1], layouts[5] } | |
| } | |
| for s = 1, screen.count() do | |
|    tags[s] = awful.tag(tags.names, s, tags.layout) | |
| end | |
| -- }}} | |
|  | |
| -- {{{ Wallpaper | |
| if beautiful.wallpaper then | |
|     for s = 1, screen.count() do | |
|         gears.wallpaper.maximized(beautiful.wallpaper, s, true) | |
|     end | |
| end | |
| -- }}} | |
|  | |
| -- {{{ Menu | |
| mymainmenu = awful.menu.new({ items = require("menugen").build_menu(), | |
|                               theme = { height = 16, width = 130 }}) | |
| -- }}} | |
|  | |
| -- {{{ Wibox | |
| markup = lain.util.markup | |
| white  = beautiful.fg_focus | |
| gray   = "#858585" | |
|  | |
| -- Textclock | |
| mytextclock = awful.widget.textclock(markup(gray, " %a") | |
| .. markup(white, " %d ") .. markup(gray, "%b ") ..  markup(white, "%H:%M ")) | |
|  | |
| -- Calendar | |
| lain.widgets.calendar:attach(mytextclock, { fg = white }) | |
|  | |
| --[[ Mail IMAP check | |
| -- commented because it needs to be set before use | |
| mailwidget = lain.widgets.imap({ | |
|     timeout  = 180, | |
|     server   = "server", | |
|     mail     = "mail", | |
|     password = "keyring get mail", | |
|     settings = function() | |
|         mail_notification_preset.fg = white | |
|         mail  = "" | |
|         count = "" | |
|  | |
|         if mailcount > 0 then | |
|             mail = "Mail " | |
|             count = mailcount .. " " | |
|         end | |
|  | |
|         widget:set_markup(markup(gray, mail) .. markup(white, count)) | |
|     end | |
| }) | |
| ]] | |
|  | |
| -- MPD | |
| mpdwidget = lain.widgets.mpd({ | |
|     settings = function() | |
|         mpd_notification_preset.fg = white | |
|         artist = mpd_now.artist .. " " | |
|         title  = mpd_now.title  .. " " | |
|  | |
|         if mpd_now.state == "pause" then | |
|             artist = "mpd " | |
|             title  = "paused " | |
|         elseif mpd_now.state == "stop" then | |
|             artist = "" | |
|             title  = "" | |
|         end | |
|  | |
|         widget:set_markup(markup(gray, artist) .. markup(white, title)) | |
|     end | |
| }) | |
|  | |
| -- /home fs | |
| fshome = lain.widgets.fs({ | |
|     partition = "/home", | |
|     settings  = function() | |
|         fs_notification_preset.fg = white | |
|         fs_header = "" | |
|         fs_p      = "" | |
|  | |
|         if fs_now.used >= 90 then | |
|             fs_header = " Hdd " | |
|             fs_p      = fs_now.used | |
|         end | |
|  | |
|         widget:set_markup(markup(gray, fs_header) .. markup(white, fs_p)) | |
|     end | |
| }) | |
|  | |
| -- Battery | |
| batwidget = lain.widgets.bat({ | |
|     settings = function() | |
|         bat_header = " Bat " | |
|         bat_p      = bat_now.perc .. " " | |
|  | |
|         if bat_now.status == "Not present" then | |
|             bat_header = "" | |
|             bat_p      = "" | |
|         end | |
|  | |
|         widget:set_markup(markup(gray, bat_header) .. markup(white, bat_p)) | |
|     end | |
| }) | |
|  | |
| -- ALSA volume | |
| volumewidget = lain.widgets.alsa({ | |
|     settings = function() | |
|         header = " Vol " | |
|         vlevel  = volume_now.level | |
|  | |
|         if volume_now.status == "off" then | |
|             vlevel = vlevel .. "M " | |
|         else | |
|             vlevel = vlevel .. " " | |
|         end | |
|  | |
|         widget:set_markup(markup(gray, header) .. markup(white, vlevel)) | |
|     end | |
| }) | |
|  | |
| -- Weather | |
| myweather = lain.widgets.weather({ | |
|     city_id = 123456, -- placeholder | |
|     settings = function() | |
|         w_notification_preset.fg = white | |
|     end | |
| }) | |
|  | |
| -- Separators | |
| first = wibox.widget.textbox('<span font="Tamsyn 4"> </span>') | |
| arrl_pre = wibox.widget.imagebox() | |
| arrl_pre:set_image(beautiful.arrl_lr_pre) | |
| arrl_post = wibox.widget.imagebox() | |
| arrl_post:set_image(beautiful.arrl_lr_post) | |
|  | |
| -- Create a wibox for each screen and add it | |
| mywibox = {} | |
| mypromptbox = {} | |
| mylayoutbox = {} | |
| mytaglist = {} | |
| mytaglist.buttons = awful.util.table.join( | |
|                     awful.button({ }, 1, awful.tag.viewonly), | |
|                     awful.button({ modkey }, 1, awful.client.movetotag), | |
|                     awful.button({ }, 3, awful.tag.viewtoggle), | |
|                     awful.button({ modkey }, 3, awful.client.toggletag), | |
|                     awful.button({ }, 4, function(t) awful.tag.viewnext(awful.tag.getscreen(t)) end), | |
|                     awful.button({ }, 5, function(t) awful.tag.viewprev(awful.tag.getscreen(t)) end) | |
|                     ) | |
| mytasklist = {} | |
| mytasklist.buttons = awful.util.table.join( | |
|                      awful.button({ }, 1, function (c) | |
|                                               if c == client.focus then | |
|                                                   c.minimized = true | |
|                                               else | |
|                                                   -- Without this, the following | |
|                                                   -- :isvisible() makes no sense | |
|                                                   c.minimized = false | |
|                                                   if not c:isvisible() then | |
|                                                       awful.tag.viewonly(c:tags()[1]) | |
|                                                   end | |
|                                                   -- This will also un-minimize | |
|                                                   -- the client, if needed | |
|                                                   client.focus = c | |
|                                                   c:raise() | |
|                                               end | |
|                                           end), | |
|                      awful.button({ }, 3, function () | |
|                                               if instance then | |
|                                                   instance:hide() | |
|                                                   instance = nil | |
|                                               else | |
|                                                   instance = awful.menu.clients({ width=250 }) | |
|                                               end | |
|                                           end), | |
|                      awful.button({ }, 4, function () | |
|                                               awful.client.focus.byidx(1) | |
|                                               if client.focus then client.focus:raise() end | |
|                                           end), | |
|                      awful.button({ }, 5, function () | |
|                                               awful.client.focus.byidx(-1) | |
|                                               if client.focus then client.focus:raise() end | |
|                                           end)) | |
|  | |
| for s = 1, screen.count() do | |
|     -- Create a promptbox for each screen | |
|     mypromptbox[s] = awful.widget.prompt() | |
|     -- Create an imagebox widget which will contains an icon indicating which layout we're using. | |
|     -- We need one layoutbox per screen. | |
|     mylayoutbox[s] = awful.widget.layoutbox(s) | |
|     mylayoutbox[s]:buttons(awful.util.table.join( | |
|                            awful.button({ }, 1, function () awful.layout.inc(layouts, 1) end), | |
|                            awful.button({ }, 3, function () awful.layout.inc(layouts, -1) end), | |
|                            awful.button({ }, 4, function () awful.layout.inc(layouts, 1) end), | |
|                            awful.button({ }, 5, function () awful.layout.inc(layouts, -1) end))) | |
|     -- Create a taglist widget | |
|     mytaglist[s] = awful.widget.taglist(s, awful.widget.taglist.filter.all, mytaglist.buttons) | |
|  | |
|     -- Create a tasklist widget | |
|     mytasklist[s] = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, mytasklist.buttons) | |
|  | |
|     -- Create the wibox | |
|     mywibox[s] = awful.wibox({ position = "top", screen = s, height = 18 }) | |
|  | |
|     -- Widgets that are aligned to the left | |
|     local left_layout = wibox.layout.fixed.horizontal() | |
|     left_layout:add(first) | |
|     left_layout:add(mytaglist[s]) | |
|     left_layout:add(arrl_pre) | |
|     left_layout:add(mylayoutbox[s]) | |
|     left_layout:add(arrl_post) | |
|     left_layout:add(mypromptbox[s]) | |
|     left_layout:add(first) | |
|  | |
|     -- Widgets that are aligned to the right | |
|     local right_layout = wibox.layout.fixed.horizontal() | |
|     if s == 1 then right_layout:add(wibox.widget.systray()) end | |
|     right_layout:add(first) | |
|     right_layout:add(mpdwidget) | |
|     --right_layout:add(mailwidget) | |
|     right_layout:add(fshome) | |
|     right_layout:add(batwidget) | |
|     right_layout:add(volumewidget) | |
|     right_layout:add(mytextclock) | |
|  | |
|     -- Now bring it all together (with the tasklist in the middle) | |
|     local layout = wibox.layout.align.horizontal() | |
|     layout:set_left(left_layout) | |
|     layout:set_middle(mytasklist[s]) | |
|     layout:set_right(right_layout) | |
|  | |
|     mywibox[s]:set_widget(layout) | |
| end | |
| -- }}} | |
|  | |
| -- {{{ Mouse bindings | |
| root.buttons(awful.util.table.join( | |
|     awful.button({ }, 3, function () mymainmenu:toggle() end), | |
|     awful.button({ }, 4, awful.tag.viewnext), | |
|     awful.button({ }, 5, awful.tag.viewprev) | |
| )) | |
| -- }}} | |
|  | |
| -- {{{ Key bindings | |
| globalkeys = awful.util.table.join( | |
|     -- Take a screenshot | |
|     -- https://github.com/copycat-killer/dots/blob/master/bin/screenshot | |
|     awful.key({ altkey }, "p", function() os.execute("screenshot") end), | |
|  | |
|     -- Tag browsing | |
|     awful.key({ modkey }, "Left",   awful.tag.viewprev       ), | |
|     awful.key({ modkey }, "Right",  awful.tag.viewnext       ), | |
|     awful.key({ modkey }, "Escape", awful.tag.history.restore), | |
|  | |
|     -- Non-empty tag browsing | |
|     awful.key({ altkey }, "Left", function () lain.util.tag_view_nonempty(-1) end), | |
|     awful.key({ altkey }, "Right", function () lain.util.tag_view_nonempty(1) end), | |
|  | |
|     -- Default client focus | |
|     awful.key({ altkey }, "k", | |
|         function () | |
|             awful.client.focus.byidx( 1) | |
|             if client.focus then client.focus:raise() end | |
|         end), | |
|     awful.key({ altkey }, "j", | |
|         function () | |
|             awful.client.focus.byidx(-1) | |
|             if client.focus then client.focus:raise() end | |
|         end), | |
|  | |
|     -- By direction client focus | |
|     awful.key({ modkey }, "j", | |
|         function() | |
|             awful.client.focus.bydirection("down") | |
|             if client.focus then client.focus:raise() end | |
|         end), | |
|     awful.key({ modkey }, "k", | |
|         function() | |
|             awful.client.focus.bydirection("up") | |
|             if client.focus then client.focus:raise() end | |
|         end), | |
|     awful.key({ modkey }, "h", | |
|         function() | |
|             awful.client.focus.bydirection("left") | |
|             if client.focus then client.focus:raise() end | |
|         end), | |
|     awful.key({ modkey }, "l", | |
|         function() | |
|             awful.client.focus.bydirection("right") | |
|             if client.focus then client.focus:raise() end | |
|         end), | |
|  | |
|     -- Show Menu | |
|     awful.key({ modkey }, "w", | |
|         function () | |
|             mymainmenu:show({ keygrabber = true }) | |
|         end), | |
|  | |
|     -- Show/Hide Wibox | |
|     awful.key({ modkey }, "b", function () | |
|         mywibox[mouse.screen].visible = not mywibox[mouse.screen].visible | |
|     end), | |
|  | |
|     -- On the fly useless gaps change | |
|     awful.key({ altkey, "Control" }, "+", function () lain.util.useless_gaps_resize(1) end), | |
|     awful.key({ altkey, "Control" }, "-", function () lain.util.useless_gaps_resize(-1) end), | |
|  | |
|     -- Layout manipulation | |
|     awful.key({ modkey, "Shift"   }, "j", function () awful.client.swap.byidx(  1)    end), | |
|     awful.key({ modkey, "Shift"   }, "k", function () awful.client.swap.byidx( -1)    end), | |
|     awful.key({ modkey, "Control" }, "j", function () awful.screen.focus_relative( 1) end), | |
|     awful.key({ modkey, "Control" }, "k", function () awful.screen.focus_relative(-1) end), | |
|     awful.key({ modkey,           }, "u", awful.client.urgent.jumpto), | |
|     awful.key({ modkey,           }, "Tab", | |
|         function () | |
|             awful.client.focus.history.previous() | |
|             if client.focus then | |
|                 client.focus:raise() | |
|             end | |
|         end), | |
|     awful.key({ altkey, "Shift"   }, "l",      function () awful.tag.incmwfact( 0.05)     end), | |
|     awful.key({ altkey, "Shift"   }, "h",      function () awful.tag.incmwfact(-0.05)     end), | |
|     awful.key({ modkey, "Shift"   }, "l",      function () awful.tag.incnmaster(-1)       end), | |
|     awful.key({ modkey, "Shift"   }, "h",      function () awful.tag.incnmaster( 1)       end), | |
|     awful.key({ modkey, "Control" }, "l",      function () awful.tag.incncol(-1)          end), | |
|     awful.key({ modkey, "Control" }, "h",      function () awful.tag.incncol( 1)          end), | |
|     awful.key({ modkey,           }, "space",  function () awful.layout.inc(layouts,  1)  end), | |
|     awful.key({ modkey, "Shift"   }, "space",  function () awful.layout.inc(layouts, -1)  end), | |
|     awful.key({ modkey, "Control" }, "n",      awful.client.restore), | |
|  | |
|     -- Standard program | |
|     awful.key({ modkey,           }, "Return", function () awful.util.spawn(terminal) end), | |
|     awful.key({ modkey, "Control" }, "r",      awesome.restart), | |
|     awful.key({ modkey, "Shift"   }, "q",      awesome.quit), | |
|  | |
|     -- Dropdown terminal | |
|     awful.key({ modkey,	          }, "z",      function () drop(terminal) end), | |
|  | |
|     -- Widgets popups | |
|     awful.key({ altkey,           }, "c",      function () lain.widgets.calendar:show(7) end), | |
|     awful.key({ altkey,           }, "h",      function () fshome.show(7) end), | |
|     awful.key({ altkey,           }, "w",      function () myweather.show(7) end), | |
|  | |
|     -- ALSA volume control | |
|     awful.key({ altkey }, "Up", | |
|         function () | |
|             os.execute(string.format("amixer set %s 1%%+", volumewidget.channel)) | |
|             volumewidget.update() | |
|         end), | |
|     awful.key({ altkey }, "Down", | |
|         function () | |
|             os.execute(string.format("amixer set %s 1%%-", volumewidget.channel)) | |
|             volumewidget.update() | |
|         end), | |
|     awful.key({ altkey }, "m", | |
|         function () | |
|             os.execute(string.format("amixer set %s toggle", volumewidget.channel)) | |
|             volumewidget.update() | |
|         end), | |
|     awful.key({ altkey, "Control" }, "m", | |
|         function () | |
|             os.execute(string.format("amixer set %s 100%%", volumewidget.channel)) | |
|             volumewidget.update() | |
|         end), | |
|  | |
|     -- MPD control | |
|     awful.key({ altkey, "Control" }, "Up", | |
|         function () | |
|             awful.util.spawn_with_shell("mpc toggle || ncmpc toggle || pms toggle") | |
|             mpdwidget.update() | |
|         end), | |
|     awful.key({ altkey, "Control" }, "Down", | |
|         function () | |
|             awful.util.spawn_with_shell("mpc stop || ncmpc stop || pms stop") | |
|             mpdwidget.update() | |
|         end), | |
|     awful.key({ altkey, "Control" }, "Left", | |
|         function () | |
|             awful.util.spawn_with_shell("mpc prev || ncmpc prev || pms prev") | |
|             mpdwidget.update() | |
|         end), | |
|     awful.key({ altkey, "Control" }, "Right", | |
|         function () | |
|             awful.util.spawn_with_shell("mpc next || ncmpc next || pms next") | |
|             mpdwidget.update() | |
|         end), | |
|  | |
|     -- Copy to clipboard | |
|     awful.key({ modkey }, "c", function () os.execute("xsel -p -o | xsel -i -b") end), | |
|  | |
|     -- User programs | |
|     awful.key({ modkey }, "q", function () awful.util.spawn(browser) end), | |
|     awful.key({ modkey }, "i", function () awful.util.spawn(browser2) end), | |
|     awful.key({ modkey }, "s", function () awful.util.spawn(gui_editor) end), | |
|     awful.key({ modkey }, "g", function () awful.util.spawn(graphics) end), | |
|  | |
|     -- Prompt | |
|     awful.key({ modkey }, "r", function () mypromptbox[mouse.screen]:run() end), | |
|     awful.key({ modkey }, "x", | |
|               function () | |
|                   awful.prompt.run({ prompt = "Run Lua code: " }, | |
|                   mypromptbox[mouse.screen].widget, | |
|                   awful.util.eval, nil, | |
|                   awful.util.getdir("cache") .. "/history_eval") | |
|               end) | |
| ) | |
|  | |
| clientkeys = awful.util.table.join( | |
|     awful.key({ modkey,           }, "f",      function (c) c.fullscreen = not c.fullscreen  end), | |
|     awful.key({ modkey, "Shift"   }, "c",      function (c) c:kill()                         end), | |
|     awful.key({ modkey, "Control" }, "space",  awful.client.floating.toggle                     ), | |
|     awful.key({ modkey, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end), | |
|     awful.key({ modkey,           }, "o",      awful.client.movetoscreen                        ), | |
|     awful.key({ modkey,           }, "t",      function (c) c.ontop = not c.ontop            end), | |
|     awful.key({ modkey,           }, "n", | |
|         function (c) | |
|             -- The client currently has the input focus, so it cannot be | |
|             -- minimized, since minimized clients can't have the focus. | |
|             c.minimized = true | |
|         end), | |
|     awful.key({ modkey,           }, "m", | |
|         function (c) | |
|             c.maximized_horizontal = not c.maximized_horizontal | |
|             c.maximized_vertical   = not c.maximized_vertical | |
|         end) | |
| ) | |
|  | |
| -- Bind all key numbers to tags. | |
| -- be careful: we use keycodes to make it works on any keyboard layout. | |
| -- This should map on the top row of your keyboard, usually 1 to 9. | |
| for i = 1, 9 do | |
|     globalkeys = awful.util.table.join(globalkeys, | |
|         -- View tag only. | |
|         awful.key({ modkey }, "#" .. i + 9, | |
|                   function () | |
|                         local screen = mouse.screen | |
|                         local tag = awful.tag.gettags(screen)[i] | |
|                         if tag then | |
|                            awful.tag.viewonly(tag) | |
|                         end | |
|                   end), | |
|         -- Toggle tag. | |
|         awful.key({ modkey, "Control" }, "#" .. i + 9, | |
|                   function () | |
|                       local screen = mouse.screen | |
|                       local tag = awful.tag.gettags(screen)[i] | |
|                       if tag then | |
|                          awful.tag.viewtoggle(tag) | |
|                       end | |
|                   end), | |
|         -- Move client to tag. | |
|         awful.key({ modkey, "Shift" }, "#" .. i + 9, | |
|                   function () | |
|                       if client.focus then | |
|                           local tag = awful.tag.gettags(client.focus.screen)[i] | |
|                           if tag then | |
|                               awful.client.movetotag(tag) | |
|                           end | |
|                      end | |
|                   end), | |
|         -- Toggle tag. | |
|         awful.key({ modkey, "Control", "Shift" }, "#" .. i + 9, | |
|                   function () | |
|                       if client.focus then | |
|                           local tag = awful.tag.gettags(client.focus.screen)[i] | |
|                           if tag then | |
|                               awful.client.toggletag(tag) | |
|                           end | |
|                       end | |
|                   end)) | |
| end | |
|  | |
| clientbuttons = awful.util.table.join( | |
|     awful.button({ }, 1, function (c) client.focus = c; c:raise() end), | |
|     awful.button({ modkey }, 1, awful.mouse.client.move), | |
|     awful.button({ modkey }, 3, awful.mouse.client.resize)) | |
|  | |
| -- Set keys | |
| root.keys(globalkeys) | |
| -- }}} | |
|  | |
| -- {{{ Rules | |
| awful.rules.rules = { | |
|     -- All clients will match this rule. | |
|     { rule = { }, | |
|       properties = { border_width = beautiful.border_width, | |
|                      border_color = beautiful.border_normal, | |
|                      focus = awful.client.focus.filter, | |
|                      keys = clientkeys, | |
|                      buttons = clientbuttons, | |
| 	                   size_hints_honor = false } }, | |
|     { rule = { class = "URxvt" }, | |
|           properties = { opacity = 0.99 } }, | |
|  | |
|     { rule = { class = "MPlayer" }, | |
|           properties = { floating = true } }, | |
|  | |
|     { rule = { class = "Dwb" }, | |
|           properties = { tag = tags[1][1] } }, | |
|  | |
|     { rule = { class = "Iron" }, | |
|           properties = { tag = tags[1][1] } }, | |
|  | |
|     { rule = { instance = "plugin-container" }, | |
|           properties = { tag = tags[1][1] } }, | |
|  | |
| 	  { rule = { class = "Gimp" }, | |
|      	    properties = { tag = tags[1][4] } }, | |
|  | |
|     { rule = { class = "Gimp", role = "gimp-image-window" }, | |
|           properties = { maximized_horizontal = true, | |
|                          maximized_vertical = true } }, | |
| } | |
| -- }}} | |
|  | |
| -- {{{ Signals | |
| -- Signal function to execute when a new client appears. | |
| local sloppyfocus_last = {c=nil} | |
| client.connect_signal("manage", function (c, startup) | |
|     -- Enable sloppy focus | |
|     client.connect_signal("mouse::enter", function(c) | |
|          if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier | |
|             and awful.client.focus.filter(c) then | |
|              -- Skip focusing the client if the mouse wasn't moved. | |
|              if c ~= sloppyfocus_last.c then | |
|                  client.focus = c | |
|                  sloppyfocus_last.c = c | |
|              end | |
|          end | |
|      end) | |
|  | |
|     local titlebars_enabled = true | |
|     if titlebars_enabled and (c.type == "normal" or c.type == "dialog") then | |
|         -- buttons for the titlebar | |
|         local buttons = awful.util.table.join( | |
|                 awful.button({ }, 1, function() | |
|                     client.focus = c | |
|                     c:raise() | |
|                     awful.mouse.client.move(c) | |
|                 end), | |
|                 awful.button({ }, 3, function() | |
|                     client.focus = c | |
|                     c:raise() | |
|                     awful.mouse.client.resize(c) | |
|                 end) | |
|                 ) | |
|  | |
|         -- Title in the middle | |
|         local middle_layout = wibox.layout.flex.horizontal() | |
|         local title = awful.titlebar.widget.titlewidget(c) | |
|         title:set_align("center") | |
|         middle_layout:add(title) | |
|         middle_layout:buttons(buttons) | |
|  | |
|         local layout = wibox.layout.align.horizontal() | |
|         layout:set_middle(middle_layout) | |
|  | |
|         awful.titlebar(c,{size=18}):set_widget(layout) | |
|     end | |
| end) | |
|  | |
| -- No border for maximized clients | |
| client.connect_signal("focus", | |
|     function(c) | |
|         if c.maximized_horizontal == true and c.maximized_vertical == true then | |
|             c.border_color = beautiful.border_normal | |
|         else | |
|             c.border_color = beautiful.border_focus | |
|         end | |
|     end) | |
| client.connect_signal("unfocus", function(c) c.border_color = beautiful.border_normal end) | |
| -- }}} | |
|  | |
| -- {{{ Arrange signal handler | |
| for s = 1, screen.count() do screen[s]:connect_signal("arrange", function () | |
|         local clients = awful.client.visible(s) | |
|         local layout  = awful.layout.getname(awful.layout.get(s)) | |
|  | |
|         if #clients > 0 then -- Fine grained borders and floaters control | |
|             for _, c in pairs(clients) do -- Floaters always have borders | |
|                 if awful.client.floating.get(c) or layout == "floating" then | |
|                     c.border_width = beautiful.border_width | |
|  | |
|                 -- No borders with only one visible client | |
|                 elseif #clients == 1 or layout == "max" then | |
|                     c.border_width = 0 | |
|                 else | |
|                     c.border_width = beautiful.border_width | |
|                 end | |
|             end | |
|         end | |
|       end) | |
| end | |
| -- }}}
 | |
| 
 |