All patches and comments are welcome. Please squash your changes to logical
commits before using git-format-patch and git-send-email to
patches@git.madduck.net.
If you'd read over the Git project's submission guidelines and adhered to them,
I'd be especially grateful.
2 -- Standard awesome library
3 local gears = require("gears")
4 local awful = require("awful")
5 require("awful.autofocus")
6 -- Widget and layout library
7 local wibox = require("wibox")
8 -- Theme handling library
9 local beautiful = require("beautiful")
10 local xrdb = beautiful.xresources
11 -- Notification library
12 local naughty = require("naughty")
13 local menubar = require("menubar")
14 local hotkeys_popup = require("awful.hotkeys_popup").widget
15 -- Enable hotkeys help widget for VIM and other apps
16 -- when client with a matching name is opened:
17 require("awful.hotkeys_popup.keys")
19 -- Load Debian menu entries
20 local debian = require("debian.menu")
21 local has_fdo, freedesktop = pcall(require, "freedesktop")
23 local tblutils = require("tblutils")
24 local lain = require("lain")
25 local ccwidgets = require("cryptocoin_widgets")
26 local luatz = require("luatz")
30 -- Check if awesome encountered an error during startup and fell back to
31 -- another config (This code will only ever execute for the fallback config)
32 if awesome.startup_errors then
33 naughty.notify({ preset = naughty.config.presets.critical,
34 title = "Oops, there were errors during startup!",
35 text = awesome.startup_errors })
38 -- Handle runtime errors after startup
40 local in_error = false
41 awesome.connect_signal("debug::error", function (err)
42 -- Make sure we don't go into an endless error loop
43 if in_error then return end
46 naughty.notify({ preset = naughty.config.presets.critical,
47 title = "Oops, an error happened!",
48 text = tostring(err) })
54 -- {{{ Variable definitions
55 --xrdb.set_dpi(95, screen[1])
56 --xrdb.set_dpi(120, screen[2])
58 -- Themes define colours, icons, font and wallpapers.
59 beautiful.init(gears.filesystem.get_themes_dir() .. "default/theme.lua")
60 beautiful.font = 'Sans 10'
62 -- This is used later as the default terminal and editor to run.
63 terminal = "x-terminal-emulator"
64 editor = os.getenv("EDITOR") or "editor"
65 editor_cmd = terminal .. " -e " .. editor
68 -- Usually, Mod4 is the key with a logo between Control and Alt.
69 -- If you do not like this or do not have such a key,
70 -- I suggest you to remap Mod4 to another key using xmodmap or other tools.
71 -- However, you can use another modifier like Mod1, but it may interact with others.
75 -- Table of layouts to cover with awful.layout.inc, order matters.
76 awful.layout.layouts = {
77 awful.layout.suit.floating,
78 awful.layout.suit.tile,
79 awful.layout.suit.tile.left,
80 awful.layout.suit.tile.bottom,
81 awful.layout.suit.tile.top,
82 awful.layout.suit.fair,
83 awful.layout.suit.fair.horizontal,
84 awful.layout.suit.spiral,
85 awful.layout.suit.spiral.dwindle,
86 awful.layout.suit.max,
87 awful.layout.suit.max.fullscreen,
88 awful.layout.suit.magnifier,
89 awful.layout.suit.corner.nw,
90 -- awful.layout.suit.corner.ne,
91 -- awful.layout.suit.corner.sw,
92 -- awful.layout.suit.corner.se,
95 layout_default = awful.layout.layouts[6]
96 layout_tiled = awful.layout.layouts[2]
97 layout_maximised = awful.layout.layouts[10]
98 layout_floating = awful.layout.layouts[1]
101 -- {{{ Helper functions
102 local function client_menu_toggle_fn()
106 if instance and instance.wibox.visible then
110 instance = awful.menu.clients({ theme = { width = 250 } })
115 local function set_wallpaper(s)
117 if beautiful.wallpaper then
118 local wallpaper = beautiful.wallpaper
119 -- If wallpaper is a function, call it with the screen
120 if type(wallpaper) == "function" then
121 wallpaper = wallpaper(s)
123 gears.wallpaper.maximized(wallpaper, s, true)
127 local lain_bat = lain.widget.bat({
128 batteries = {"BAT0", "BAT1"},
129 settings = function()
131 if bat_now.status == "Charging" then delim = "↑"
132 elseif bat_now.status == "Unknown" then delim = "٭" end
133 widget:set_text(bat_now.perc .. "% " .. delim .. " " .. bat_now.time)
139 -- Create a launcher widget and a main menu
141 { "hotkeys", function() return false, hotkeys_popup.show_help end},
142 { "manual", terminal .. " -e man awesome" },
143 { "edit config", editor_cmd .. " " .. awesome.conffile },
144 { "restart", awesome.restart },
145 { "quit", function() awesome.quit() end}
148 local menu_awesome = { "awesome", myawesomemenu, beautiful.awesome_icon }
149 local menu_terminal = { "open terminal", terminal }
152 mymainmenu = freedesktop.menu.build({
153 before = { menu_awesome },
154 after = { menu_terminal }
157 mymainmenu = awful.menu({
160 { "Debian", debian.menu.Debian_menu.Debian },
167 mylauncher = awful.widget.launcher({ image = beautiful.awesome_icon,
170 -- Menubar configuration
171 menubar.utils.terminal = terminal -- Set the terminal for applications that require it
175 local spacer = wibox.widget.textbox()
176 spacer:set_text(' │ ')
178 -- Keyboard map indicator and switcher
179 mykeyboardlayout = awful.widget.keyboardlayout()
181 -- Create a textclock widget
182 clocks = { wibox.widget.textclock("%a %d %b %H:%M:%S %Z", 1) }
185 ["NZ"] = "Pacific/Auckland",
186 ["DE"] = "Europe/Berlin"
188 local now = luatz.time_in(nil)
189 for c, tz in tblutils.sorted_pairs(ZONES) do
190 local t = luatz.time_in(tz)
191 if math.abs(os.difftime(t, now)) > 10 then
192 local widget = wibox.widget.textclock(c .. ": %H:%M (%a)", 60, tz)
193 table.insert(clocks, 1, spacer)
194 table.insert(clocks, 1, widget)
198 -- Create a wibox for each screen and add it
199 local taglist_buttons = gears.table.join(
200 awful.button({ }, 1, function(t) t:view_only() end),
201 awful.button({ modkey }, 1, function(t)
203 client.focus:move_to_tag(t)
206 awful.button({ }, 3, awful.tag.viewtoggle),
207 awful.button({ modkey }, 3, function(t)
209 client.focus:toggle_tag(t)
212 awful.button({ }, 4, function(t) awful.tag.viewnext(t.screen) end),
213 awful.button({ }, 5, function(t) awful.tag.viewprev(t.screen) end)
216 local tasklist_buttons = gears.table.join(
217 awful.button({ }, 1, function (c)
218 if c == client.focus then
219 -- I don't like click-minimising
220 -- c.minimized = true
222 -- Without this, the following
223 -- :isvisible() makes no sense
225 if not c:isvisible() and c.first_tag then
226 c.first_tag:view_only()
228 -- This will also un-minimize
229 -- the client, if needed
234 awful.button({ }, 3, client_menu_toggle_fn()),
235 awful.button({ }, 4, function ()
236 awful.client.focus.byidx(1)
238 awful.button({ }, 5, function ()
239 awful.client.focus.byidx(-1)
243 -- Re-set wallpaper when a screen's geometry changes (e.g. different resolution)
244 screen.connect_signal("property::geometry", set_wallpaper)
249 tags.config["main"] = {
250 t1 = { layout = layout_default, selected = true },
251 t2 = { layout = layout_default },
252 t3 = { layout = layout_tiled },
253 t4 = { layout = layout_tiled },
254 t5 = { layout = layout_tiled },
255 t6 = { layout = layout_floating },
256 t7 = { layout = layout_maximised },
257 t8 = { layout = layout_maximised },
258 t9 = { layout = layout_maximised },
260 tags.config["aux"] = {
261 t1 = { layout = layout_default, selected = true },
262 t2 = { layout = layout_default },
263 t3 = { layout = layout_tiled },
264 t4 = { layout = layout_floating },
265 t5 = { layout = layout_floating },
266 t6 = { layout = layout_floating },
267 t7 = { layout = layout_floating },
268 t8 = { layout = layout_floating },
269 t9 = { layout = layout_maximised },
273 screentags[1] = tags.config["main"]
274 if screen.count() == 2 then -- aux screen is on the right
275 screentags[2] = tags.config["aux"]
276 elseif screen.count() == 3 then -- main screen is still #1 in the middle
277 screentags[2] = tags.config["aux"]
278 screentags[3] = tags.config["aux"]
281 awful.screen.connect_for_each_screen(function(s)
282 -- local fontsize = math.floor(250 * xrdb.get_dpi(s)/s.geometry.width)
283 -- beautiful.font = "Sans " .. tostring(fontsize)
285 if not tags[s.index] then
288 for n,p in tblutils.sorted_pairs(screentags[s.index]) do
290 n = string.sub(n, 2) -- remove leading 't' needed for syntax in table
291 table.insert(tags[s.index], awful.tag.add(n, p))
294 -- Create a promptbox for each screen
295 mypromptbox[s] = awful.widget.prompt()
296 -- Create an imagebox widget which will contains an icon indicating which layout we're using.
297 -- We need one layoutbox per screen.
298 mylayoutbox[s] = awful.widget.layoutbox(s)
299 mylayoutbox[s]:buttons(awful.util.table.join(
300 awful.button({ }, 1, function () awful.layout.inc( 1) end),
301 awful.button({ }, 3, function () awful.layout.inc(-1) end),
302 awful.button({ }, 4, function () awful.layout.inc( 1) end),
303 awful.button({ }, 5, function () awful.layout.inc(-1) end)))
304 -- Create a taglist widget
305 mytaglist[s] = awful.widget.taglist(s, awful.widget.taglist.filter.all, mytaglist.buttons)
307 -- Create a tasklist widget
308 mytasklist[s] = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, mytasklist.buttons)
311 mywibox[s] = awful.wibar({ position = "top", screen = s })
313 -- Add widgets to the wibox
315 layout = wibox.layout.align.horizontal,
317 layout = wibox.layout.fixed.horizontal,
322 mytasklist[s], -- Middle widget
323 awful.util.table.join( -- Right widgets
325 layout = wibox.layout.fixed.horizontal,
327 wibox.widget.systray(),
328 ccwidgets.btc_widget,
330 ccwidgets.eth_widget,
344 -- {{{ Mouse bindings
345 root.buttons(gears.table.join(
346 awful.button({ }, 3, function () mymainmenu:toggle() end),
347 awful.button({ }, 4, awful.tag.viewnext),
348 awful.button({ }, 5, awful.tag.viewprev)
353 globalkeys = gears.table.join(
354 awful.key({ modkey, }, "s", hotkeys_popup.show_help,
355 {description="show help", group="awesome"}),
356 awful.key({ modkey, }, "Left", awful.tag.viewprev,
357 {description = "view previous", group = "tag"}),
358 awful.key({ modkey, }, "Right", awful.tag.viewnext,
359 {description = "view next", group = "tag"}),
360 awful.key({ modkey, }, "Escape", awful.tag.history.restore,
361 {description = "go back", group = "tag"}),
363 awful.key({ modkey, }, "k",
365 awful.client.focus.byidx( 1)
367 {description = "focus next by index", group = "client"}
369 awful.key({ modkey, }, "j",
371 awful.client.focus.byidx(-1)
373 {description = "focus previous by index", group = "client"}
375 awful.key({ modkey, }, "w", function () mymainmenu:show() end,
376 {description = "show main menu", group = "awesome"}),
378 -- Layout manipulation
379 awful.key({ modkey, "Shift" }, "k", function () awful.client.swap.byidx( 1) end,
380 {description = "swap with next client by index", group = "client"}),
381 awful.key({ modkey, "Shift" }, "j", function () awful.client.swap.byidx( -1) end,
382 {description = "swap with previous client by index", group = "client"}),
383 awful.key({ modkey, "Control" }, "k", function () awful.screen.focus_relative( 1) end,
384 {description = "focus the next screen", group = "screen"}),
385 awful.key({ modkey, "Control" }, "j", function () awful.screen.focus_relative(-1) end,
386 {description = "focus the previous screen", group = "screen"}),
387 awful.key({ modkey, }, "u", awful.client.urgent.jumpto,
388 {description = "jump to urgent client", group = "client"}),
389 awful.key({ modkey, }, "Tab",
391 awful.client.focus.history.previous()
396 {description = "go back", group = "client"}),
399 awful.key({ modkey, }, "Return", function () awful.spawn(terminal) end,
400 {description = "open a terminal", group = "launcher"}),
401 awful.key({ modkey, "Control" }, "r", awesome.restart,
402 {description = "reload awesome", group = "awesome"}),
403 awful.key({ modkey, "Shift" }, "q", awesome.quit,
404 {description = "quit awesome", group = "awesome"}),
406 awful.key({ modkey, }, "l", function () awful.tag.incmwfact( 0.05) end,
407 {description = "increase master width factor", group = "layout"}),
408 awful.key({ modkey, }, "h", function () awful.tag.incmwfact(-0.05) end,
409 {description = "decrease master width factor", group = "layout"}),
410 awful.key({ modkey, "Shift" }, "h", function () awful.tag.incnmaster( 1, nil, true) end,
411 {description = "increase the number of master clients", group = "layout"}),
412 awful.key({ modkey, "Shift" }, "l", function () awful.tag.incnmaster(-1, nil, true) end,
413 {description = "decrease the number of master clients", group = "layout"}),
414 awful.key({ modkey, "Control" }, "h", function () awful.tag.incncol( 1, nil, true) end,
415 {description = "increase the number of columns", group = "layout"}),
416 awful.key({ modkey, "Control" }, "l", function () awful.tag.incncol(-1, nil, true) end,
417 {description = "decrease the number of columns", group = "layout"}),
418 awful.key({ modkey, }, "space", function () awful.layout.inc( 1) end,
419 {description = "select next", group = "layout"}),
420 awful.key({ modkey, "Shift" }, "space", function () awful.layout.inc(-1) end,
421 {description = "select previous", group = "layout"}),
423 awful.key({ modkey, "Control" }, "n",
425 local c = awful.client.restore()
426 -- Focus restored client
432 {description = "restore minimized", group = "client"}),
435 awful.key({ modkey }, "r", function () awful.screen.focused().mypromptbox:run() end,
436 {description = "run prompt", group = "launcher"}),
438 awful.key({ modkey }, "x",
441 prompt = "Run Lua code: ",
442 textbox = awful.screen.focused().mypromptbox.widget,
443 exe_callback = awful.util.eval,
444 history_path = awful.util.get_cache_dir() .. "/history_eval"
447 {description = "lua execute prompt", group = "awesome"}),
449 awful.key({ modkey }, "p", function() menubar.show() end,
450 {description = "show the menubar", group = "launcher"})
453 clientkeys = gears.table.join(
454 awful.key({ modkey, }, "f",
456 c.fullscreen = not c.fullscreen
459 {description = "toggle fullscreen", group = "client"}),
460 awful.key({ modkey, "Shift" }, "c", function (c) c:kill() end,
461 {description = "close", group = "client"}),
462 awful.key({ modkey, "Control" }, "space", awful.client.floating.toggle ,
463 {description = "toggle floating", group = "client"}),
464 awful.key({ modkey, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end,
465 {description = "move to master", group = "client"}),
466 awful.key({ modkey, }, "o", function (c) c:move_to_screen() end,
467 {description = "move to screen", group = "client"}),
468 awful.key({ modkey, }, "t", function (c) c.ontop = not c.ontop end,
469 {description = "toggle keep on top", group = "client"}),
470 awful.key({ modkey, }, "n",
472 -- The client currently has the input focus, so it cannot be
473 -- minimized, since minimized clients can't have the focus.
476 {description = "minimize", group = "client"}),
477 awful.key({ modkey, }, "m",
479 c.maximized = not c.maximized
480 c.maximized_horizontal = false
481 c.maximized_vertical = false
484 {description = "(un)maximize", group = "client"}),
485 awful.key({ modkey, "Control" }, "m",
487 c.maximized_vertical = not c.maximized_vertical
490 {description = "(un)maximize vertically", group = "client"}),
491 awful.key({ modkey, "Shift" }, "m",
493 c.maximized_horizontal = not c.maximized_horizontal
496 {description = "(un)maximize horizontally", group = "client"})
499 -- Bind all key numbers to tags.
500 -- Be careful: we use keycodes to make it work on any keyboard layout.
501 -- This should map on the top row of your keyboard, usually 1 to 9.
503 globalkeys = gears.table.join(globalkeys,
505 awful.key({ modkey }, "#" .. i + 9,
507 local screen = awful.screen.focused()
508 local tag = screen.tags[i]
513 {description = "view tag #"..i, group = "tag"}),
514 -- Toggle tag display.
515 awful.key({ modkey, "Control" }, "#" .. i + 9,
517 local screen = awful.screen.focused()
518 local tag = screen.tags[i]
520 awful.tag.viewtoggle(tag)
523 {description = "toggle tag #" .. i, group = "tag"}),
524 -- Move client to tag.
525 awful.key({ modkey, "Shift" }, "#" .. i + 9,
528 local tag = client.focus.screen.tags[i]
530 client.focus:move_to_tag(tag)
534 {description = "move focused client to tag #"..i, group = "tag"}),
535 -- Toggle tag on focused client.
536 awful.key({ modkey, "Control", "Shift" }, "#" .. i + 9,
539 local tag = client.focus.screen.tags[i]
541 client.focus:toggle_tag(tag)
545 {description = "toggle focused client on tag #" .. i, group = "tag"})
549 clientbuttons = gears.table.join(
550 awful.button({ }, 1, function (c) client.focus = c; c:raise() end),
551 awful.button({ modkey }, 1, awful.mouse.client.move),
552 awful.button({ modkey }, 3, awful.mouse.client.resize))
555 globalkeys = awful.util.table.join(globalkeys,
556 awful.key({ cmdkey }, "n", function () awful.spawn("firefox") end),
557 awful.key({ cmdkey }, "m", function () awful.spawn("chromium --enable-remote-extensions") end),
558 awful.key({ cmdkey }, "y", function () awful.spawn(terminal .. " -e python") end),
559 awful.key({ cmdkey }, "c", function () awful.spawn("thunderbird") end),
560 awful.key({ cmdkey }, "r", function () mypromptbox[mouse.screen]:run() end),
561 awful.key({ cmdkey }, "g", function () awful.spawn("gscan2pdf") end),
562 awful.key({ cmdkey }, "v", function () awful.spawn("virt-manager") end),
563 awful.key({ cmdkey }, "l", function () awful.spawn("libreoffice") end),
564 awful.key({ cmdkey }, "f", function () awful.spawn("thunar") end),
565 awful.key({ cmdkey }, "i", function () awful.spawn(terminal .. " -name irc -e env MOSH_TITLE_NOPREFIX=true mosh -4 -- irc-host tmux new -As irc irssi") end),
566 awful.key({ cmdkey }, "x", function () awful.spawn.with_shell("/sbin/start-stop-daemon --start --background --exec /usr/bin/xscreensaver -- -no-capture-stderr; sleep 2; xscreensaver-command -lock") end),
567 awful.key({ cmdkey, "Shift" }, "x", function () awful.spawn("xscreensaver-command -exit") end),
570 awful.key(nil, "XF86ScreenSaver", function () awful.spawn("xset dpms force off") end),
571 awful.key(nil, "XF86AudioMute", function () awful.spawn("pactl set-sink-mute 0 toggle") end),
572 awful.key({ cmdkey }, "End", function () awful.spawn("pactl set-sink-mute 0 toggle") end),
573 awful.key(nil, "XF86AudioLowerVolume", function () awful.spawn("pactl set-sink-volume 0 -2%") end),
574 awful.key({ cmdkey }, "Next", function () awful.spawn("pactl set-sink-volume 0 -2%") end),
575 awful.key(nil, "XF86AudioRaiseVolume", function () awful.spawn("pactl set-sink-volume 0 +2%") end),
576 awful.key({ cmdkey }, "Prior", function () awful.spawn("pactl set-sink-volume 0 +2%") end),
577 awful.key(nil, "XF86AudioMicMute", function () awful.spawn("pactl set-source-mute 1 toggle") end),
578 awful.key({ cmdkey }, "Home", function () awful.spawn("pactl set-source-mute 1 toggle") end),
579 awful.key(nil, "XF86MonBrightnessDown", function () awful.spawn("xbacklight -dec 5%") end),
580 awful.key(nil, "XF86MonBrightnessUp", function () awful.spawn("xbacklight -inc 5%") end),
581 awful.key(nil, "XF86Display", function () awful.spawn("") end),
582 awful.key(nil, "XF86WLAN", function () awful.spawn("") end),
583 awful.key(nil, "XF86Tools", function () awful.spawn("") end),
584 awful.key(nil, "XF86Search", function () awful.spawn("") end),
585 awful.key(nil, "XF86LaunchA", function () awful.spawn("") end),
586 awful.key(nil, "XF86Explorer", function () awful.spawn("") end)
590 root.keys(globalkeys)
594 -- Rules to apply to new clients (through the "manage" signal).
596 local function move_to_tag(s, t)
598 c:move_to_tag(tags[s][t])
602 awful.rules.rules = {
603 -- All clients will match this rule.
605 properties = { border_width = beautiful.border_width,
606 border_color = beautiful.border_normal,
607 focus = awful.client.focus.filter,
610 buttons = clientbuttons,
611 screen = awful.screen.preferred,
612 placement = awful.placement.no_overlap+awful.placement.no_offscreen,
617 -- Add titlebars to normal clients and dialogs
618 --DISABLED-- { rule_any = {type = { "normal", "dialog" }
619 --DISABLED-- }, properties = { titlebars_enabled = true }
622 { rule = { type = "dialog" },
623 properties = { floating = true,
624 placement = awful.placement.centered
628 { rule = { class = "URxvt" },
631 size_hints_honor = false
633 { rule = { class = "URxvt", instance = "irc" },
637 callback = move_to_tag(screen.count(), screen.count() == 1 and 2 or 1)
639 { rule = { class = "Firefox", instance = "Navigator" },
643 callback = move_to_tag(screen.count() == 1 and 1 or 2, 9)
645 { rule = { class = "Firefox-esr", instance = "Navigator" },
649 callback = move_to_tag(screen.count() == 1 and 1 or 2, 9)
651 { rule = { class = "Thunderbird", instance = "Mail" },
655 callback = move_to_tag(screen.count() == 1 and 1 or 2, 8)
657 { rule = { class = "Chromium", instance = "chromium" },
661 callback = move_to_tag(screen.count() == 1 and 1 or 2, 9)
663 { rule = { class = "Gscan2pdf" },
667 callback = move_to_tag(1, 5)
669 { rule = { name = "gscan2pdf .*" },
674 { rule = { class = "Thunar", type = "normal" },
679 { rule = { class = "MuPDF", instance = "mupdf" },
684 { rule = { class = "Pinentry", instance = "pinentry" },
689 { rule = { class = "Gxmessage" },
698 -- Signal function to execute when a new client appears.
699 client.connect_signal("manage", function (c)
700 -- Set the windows at the slave,
701 -- i.e. put it at the end of others instead of setting it master.
702 if not awesome.startup then awful.client.setslave(c) end
704 if awesome.startup and
705 not c.size_hints.user_position
706 and not c.size_hints.program_position then
707 -- Prevent clients from being unreachable after screen count changes.
708 awful.placement.no_offscreen(c)
711 c.maximized_horizontal = false
712 c.maximized_vertical = false
715 -- Add a titlebar if titlebars_enabled is set to true in the rules.
716 client.connect_signal("request::titlebars", function(c)
717 -- buttons for the titlebar
718 local buttons = gears.table.join(
719 awful.button({ }, 1, function()
722 awful.mouse.client.move(c)
724 awful.button({ }, 3, function()
727 awful.mouse.client.resize(c)
731 awful.titlebar(c) : setup {
733 awful.titlebar.widget.iconwidget(c),
735 layout = wibox.layout.fixed.horizontal
740 widget = awful.titlebar.widget.titlewidget(c)
743 layout = wibox.layout.flex.horizontal
746 awful.titlebar.widget.floatingbutton (c),
747 awful.titlebar.widget.maximizedbutton(c),
748 awful.titlebar.widget.stickybutton (c),
749 awful.titlebar.widget.ontopbutton (c),
750 awful.titlebar.widget.closebutton (c),
751 layout = wibox.layout.fixed.horizontal()
753 layout = wibox.layout.align.horizontal
757 -- Enable sloppy focus, so that focus follows mouse.
758 client.connect_signal("mouse::enter", function(c)
759 if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier
760 and awful.client.focus.filter(c) then
765 client.connect_signal("focus", function(c) c.border_color = beautiful.border_focus end)
766 client.connect_signal("unfocus", function(c) c.border_color = beautiful.border_normal end)
768 awful.ewmh.add_activate_filter(function(c, context, hints)
769 if context == "ewmh" and (c.class == "Firefox-esr" or c.class == "Firefox") then return false end
772 -- vim:ft=lua:sw=4:sts=4:ts=4:et