about summary refs log tree commit diff
path: root/awesome
diff options
context:
space:
mode:
authorRaphael McSinyx <vn.mcsinyx@gmail.com>2017-02-09 10:34:15 +0700
committerRaphael McSinyx <vn.mcsinyx@gmail.com>2017-02-09 10:34:15 +0700
commita295db54fbe539abda4542195fa3b5781d13806d (patch)
treeedefbd95590f1976419deaff71ae827e2c4e7410 /awesome
parent3722d3e087637b952e34dfd326b0b4d362705bef (diff)
downloaddotfiles-a295db54fbe539abda4542195fa3b5781d13806d.tar.gz
Update 20170209. Highlights: awesome 4.0, gruvbox dark -> light
Diffstat (limited to 'awesome')
-rw-r--r--awesome/.config/awesome/rc.lua1236
-rw-r--r--awesome/.config/awesome/themes/gruvbox/README.md4
-rw-r--r--awesome/.config/awesome/themes/gruvbox/arrows/0.pngbin276 -> 272 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/arrows/1.pngbin337 -> 270 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/arrows/2.pngbin274 -> 270 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/arrows/3.pngbin276 -> 272 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/arrows/4.pngbin276 -> 271 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/arrows/5.pngbin277 -> 268 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/arrows/6.pngbin0 -> 272 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/awesome.pngbin184 -> 187 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/background-2048x1152.pngbin12473 -> 12466 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/background-2048x1280.pngbin13752 -> 13749 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/background-2048x1536.pngbin16391 -> 16388 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/background.pngbin6232 -> 0 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/layouts/cornerne.pngbin0 -> 229 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/layouts/cornernw.pngbin0 -> 227 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/layouts/cornerse.pngbin0 -> 232 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/layouts/cornersw.pngbin0 -> 231 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/layouts/dwindle.pngbin228 -> 189 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/layouts/fairh.pngbin217 -> 212 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/layouts/fairv.pngbin223 -> 231 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/layouts/floating.pngbin231 -> 219 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/layouts/fullscreen.pngbin245 -> 278 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/layouts/magnifier.pngbin222 -> 238 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/layouts/max.pngbin290 -> 277 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/layouts/spiral.pngbin225 -> 187 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/layouts/tile.pngbin213 -> 225 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/layouts/tilebottom.pngbin208 -> 217 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/layouts/tileleft.pngbin209 -> 234 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/layouts/tiletop.pngbin206 -> 206 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/submenu.pngbin184 -> 172 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/taglist/square.pngbin162 -> 149 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/taglist/squaref.pngbin166 -> 151 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/theme.lua149
-rw-r--r--awesome/.config/awesome/themes/gruvbox/titlebar/close.pngbin0 -> 399 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/titlebar/close_focus.pngbin161 -> 0 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/titlebar/floating_active.pngbin0 -> 382 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/titlebar/floating_focus_active.pngbin161 -> 0 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/titlebar/floating_focus_inactive.pngbin161 -> 0 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/titlebar/floating_inactive.pngbin0 -> 383 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/titlebar/maximized_active.pngbin0 -> 383 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/titlebar/maximized_focus_active.pngbin161 -> 0 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/titlebar/maximized_focus_inactive.pngbin161 -> 0 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/titlebar/maximized_inactive.pngbin0 -> 376 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/titlebar/minimize.pngbin0 -> 395 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/titlebar/normal.pngbin161 -> 310 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/titlebar/ontop_active.pngbin0 -> 396 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/titlebar/ontop_focus_active.pngbin161 -> 0 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/titlebar/ontop_focus_inactive.pngbin161 -> 0 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/titlebar/ontop_inactive.pngbin0 -> 397 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/titlebar/sticky_active.pngbin0 -> 384 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/titlebar/sticky_focus_active.pngbin161 -> 0 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/titlebar/sticky_focus_inactive.pngbin161 -> 0 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/titlebar/sticky_inactive.pngbin0 -> 383 bytes
54 files changed, 662 insertions, 727 deletions
diff --git a/awesome/.config/awesome/rc.lua b/awesome/.config/awesome/rc.lua
index 0175440..4c9ce02 100644
--- a/awesome/.config/awesome/rc.lua
+++ b/awesome/.config/awesome/rc.lua
@@ -1,16 +1,17 @@
 -- Standard awesome library
 local gears = require("gears")
 local awful = require("awful")
-awful.rules = require("awful.rules")
 require("awful.autofocus")
 -- Widget and layout library
 local wibox = require("wibox")
-local vicious = require("vicious")
 -- Theme handling library
 local beautiful = require("beautiful")
 -- Notification library
 local naughty = require("naughty")
 local menubar = require("menubar")
+local hotkeys_popup = require("awful.hotkeys_popup").widget
+-- System data library
+local vicious = require("vicious")
 
 -- Load Debian menu entries
 require("debian.menu")
@@ -19,46 +20,48 @@ require("debian.menu")
 -- Check if awesome encountered an error during startup and fell back to
 -- another config (This code will only ever execute for the fallback config)
 if awesome.startup_errors then
-    naughty.notify({
-        preset = naughty.config.presets.critical,
-        title = "Oops, there were errors during startup!",
-        text = awesome.startup_errors
-    })
+  naughty.notify({preset = naughty.config.presets.critical,
+                  title = "Oops, there were errors during startup!",
+                  text = awesome.startup_errors})
 end
 
 -- Handle runtime errors after startup
 do
-    local in_error = false
-    awesome.connect_signal(
-        "debug::error",
-        function(err)
-            -- Make sure we don't go into an endless error loop
-            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
-    )
+  local in_error = false
+  awesome.connect_signal("debug::error", function(err)
+    -- Make sure we don't go into an endless error loop
+    if in_error then return end
+    in_error = true
+
+    naughty.notify({preset = naughty.config.presets.critical,
+                    title = "Oops, an error happened!",
+                    text = tostring(err)})
+    in_error = false
+  end)
 end
 -- }}}
 
 -- {{{ Variable definitions
 -- Themes define colours, icons, font and wallpapers.
-beautiful.init("/home/cnx/.config/awesome/themes/gruvbox/theme.lua")
+beautiful.init("~/.config/awesome/themes/gruvbox/theme.lua")
 
 -- This is used later as the default terminal and editor to run.
 terminal = "x-terminal-emulator"
 editor = "gvim"
-editor_cmd = terminal .. " -e vim"
+-- And some additional applications
+root_terminal = terminal .. " -e su -"
+ranger = terminal .. " -e ranger"
+python = terminal .. " -e python3"
+mutt = terminal .. " -e mutt"
 cmus = terminal .. " -e cmus"
 cmus_pause = "cmus-remote -u"
 cmus_prev = "cmus-remote -r"
 cmus_next = "cmus-remote -n"
+slock_suspend = "slock systemctl -i suspend"
+function volume_lower() awful.spawn("amixer sset Master 5%-", false) end
+function volume_raise() awful.spawn("amixer sset Master 5%+", false) end
+function volume_mute() awful.util.spawn("amixer sset Master toggle", false) end
+
 
 -- Default modkey.
 -- Usually, Mod4 is the key with a logo between Control and Alt.
@@ -69,521 +72,409 @@ cmus_next = "cmus-remote -n"
 modkey = "Mod4"
 
 -- Table of layouts to cover with awful.layout.inc, order matters.
-local layouts = {
-    --awful.layout.suit.floating,
-    --awful.layout.suit.tile.left,
-    --awful.layout.suit.tile.top,
-    awful.layout.suit.fair,
-    awful.layout.suit.fair.horizontal,
-    --awful.layout.suit.spiral,
-    --awful.layout.suit.spiral.dwindle,
-    --awful.layout.suit.max,
-    awful.layout.suit.max.fullscreen,
-    awful.layout.suit.tile.bottom,
-    awful.layout.suit.tile,
-    awful.layout.suit.magnifier
+awful.layout.layouts = {
+  awful.layout.suit.tile,
+  -- awful.layout.suit.tile.left,
+  awful.layout.suit.tile.bottom,
+  -- awful.layout.suit.tile.top,
+  -- awful.layout.suit.fair,
+  -- awful.layout.suit.fair.horizontal,
+  -- awful.layout.suit.spiral,
+  -- awful.layout.suit.spiral.dwindle,
+  awful.layout.suit.max,
+  -- awful.layout.suit.max.fullscreen,
+  -- awful.layout.suit.magnifier,
+  -- awful.layout.suit.corner.nw,
+  -- awful.layout.suit.corner.ne,
+  -- awful.layout.suit.corner.sw,
+  -- awful.layout.suit.corner.se
+  awful.layout.suit.floating,
 }
 -- }}}
 
--- {{{ Wallpaper
-awful.util.spawn_with_shell("hsetroot -solid '#282828'")
---if beautiful.wallpaper then
---    for s = 1, screen.count() do
---        gears.wallpaper.maximized(beautiful.wallpaper, s, true)
---    end
---end
--- }}}
+-- {{{ Helper functions
+local function client_menu_toggle_fn()
+  local instance = nil
 
--- {{{ Tags
--- Define a tag table which hold all screen tags.
-tags = {}
-for s = 1, screen.count() do
-    -- Each screen has its own tag table.
-    tags[s] = awful.tag({1, 2, 3, 4, 5, 6, 7, 8, 9}, s, layouts[1])
+  return function()
+    if instance and instance.wibox.visible then
+      instance:hide()
+      instance = nil
+    else
+      instance = awful.menu.clients({theme = {width = 250}})
+    end
+  end
 end
 -- }}}
 
 -- {{{ Menu
--- Create a laucher widget and a main menu
+-- Create a launcher widget and a main menu
 myawesomemenu = {
-   {"manual", terminal .. " -e man awesome"},
-   {"edit config", editor_cmd .. " " .. awesome.conffile},
-   {"restart", awesome.restart},
-   {"quit", awesome.quit}
+  {"hotkeys", function() return false, hotkeys_popup.show_help end},
+  {"manual", terminal .. " -e man awesome"},
+  {"edit config", editor .. " " .. awesome.conffile},
+  {"restart", awesome.restart},
+  {"quit", function() awesome.quit() end}
 }
 
 mymainmenu = awful.menu({items = {
-    {"awesome", myawesomemenu, beautiful.awesome_icon},
-    {"Debian", debian.menu.Debian_menu.Debian},
-    {"open terminal", terminal}
+  {"awesome", myawesomemenu, beautiful.awesome_icon},
+  {"debian", debian.menu.Debian_menu.Debian},
+  {"open terminal", terminal}
 }})
 
-mylauncher = awful.widget.launcher({
-    image = beautiful.awesome_icon,
-    menu = mymainmenu
-})
+-- mylauncher = awful.widget.launcher({image = beautiful.awesome_icon,
+--                                     menu = mymainmenu})
 
 -- Menubar configuration
+-- Set geometry so it would overlay the wibox
+menubar.geometry = {y = 0, height = 22}
 -- Set the terminal for applications that require it
 menubar.utils.terminal = terminal
 -- }}}
 
--- {{{ Wibox
+-- Keyboard map indicator and switcher
+-- mykeyboardlayout = awful.widget.keyboardlayout()
+
+-- {{{ Wibar
 -- Create a textclock widget
-myclock_text = awful.widget.textclock(
-    "<span color='#3c3836'> #%u %FT%R</span>",
-    1
-)
-myclock = wibox.widget.background()
-myclock:set_widget(myclock_text)
-myclock:set_bg("#cc241d")
+mytextclock = wibox.widget.textclock(" #%u %FT%R")
 
 -- Create a CPU usage widget
-mycpuwidget_text = wibox.widget.textbox()
-vicious.register(
-    mycpuwidget_text,
-    vicious.widgets.cpu,
-    function(widget, args)
-        return("<span color='#3c3836'> CPU%03d%%</span>"):format(args[1])
-    end,
-    2
-)
-mycpuwidget = wibox.widget.background()
-mycpuwidget:set_widget(mycpuwidget_text)
-mycpuwidget:set_bg("#d65d0e")
+mycpuusage = wibox.widget.textbox()
+vicious.register(mycpuusage, vicious.widgets.cpu,
+                 function(widget, args)
+                   return (" CPU%03d%%"):format(args[1])
+                 end, 2)
 
 -- Create memory usage widgets
-mymemwidget_text = wibox.widget.textbox()
-vicious.register(
-    mymemwidget_text,
-    vicious.widgets.mem,
-    function(widget, args)
-        return("<span color='#3c3836'> MEM%03d%%</span>"):format(args[1])
-    end,
-    2
-)
-mymemwidget = wibox.widget.background()
-mymemwidget:set_widget(mymemwidget_text)
-mymemwidget:set_bg("#d79921")
-
-myswapwidget_text = wibox.widget.textbox()
-vicious.register(
-    myswapwidget_text,
-    vicious.widgets.mem,
-    function(widget, args)
-        return("<span color='#3c3836'> SWP%03d%%</span>"):format(args[5])
-    end,
-    2
-)
-myswapwidget = wibox.widget.background()
-myswapwidget:set_widget(myswapwidget_text)
-myswapwidget:set_bg("#98971a")
+vicious.cache(vicious.widgets.mem)
+mymemusage = wibox.widget.textbox() -- RAM
+vicious.register(mymemusage, vicious.widgets.mem,
+                 function(widget, args)
+                   return (" MEM%03d%%"):format(args[1])
+                 end, 2)
+myswpusage = wibox.widget.textbox() -- swap
+vicious.register(myswpusage, vicious.widgets.mem,
+                 function(widget, args)
+                   return (" SWP%03d%%"):format(args[5])
+                 end, 2)
 
 -- Create a battery widget
-mybatwidget_text = wibox.widget.textbox()
-vicious.register(
-    mybatwidget_text,
-    vicious.widgets.bat,
-    function(widget, args)
-        return("<span color='#3c3836'> %s%03d%%</span>"):format(
-            args[1],
-            args[2]
-        )
-    end,
-    5,
-    "C11F"
-)
-mybatwidget = wibox.widget.background()
-mybatwidget:set_widget(mybatwidget_text)
-mybatwidget:set_bg("#689d6a")
+mybattery = wibox.widget.textbox()
+vicious.register(mybattery, vicious.widgets.bat,
+                 function(widget, args)
+                   return(" %s%03d%%"):format(args[1], args[2])
+                 end, 5, "C11F")
 
 -- Create a volume widget
-myvolwidget_text = wibox.widget.textbox()
-vicious.register(
-    myvolwidget_text,
-    vicious.widgets.volume,
-    function(widget, args)
-        return("<span color='#3c3836'> %s%03d%%</span>"):format(
-            args[2],
-            args[1]
-        )
-    end,
-    1,
-    "Master"
-)
-myvolwidget = wibox.widget.background()
-myvolwidget:set_widget(myvolwidget_text)
-myvolwidget:set_bg("#458588")
-
--- Arrows
-myarrow0 = wibox.widget.imagebox()
-myarrow0:set_image(beautiful.arrow0)
-myarrow1 = wibox.widget.imagebox()
-myarrow1:set_image(beautiful.arrow1)
-myarrow2 = wibox.widget.imagebox()
-myarrow2:set_image(beautiful.arrow2)
-myarrow3 = wibox.widget.imagebox()
-myarrow3:set_image(beautiful.arrow3)
-myarrow4 = wibox.widget.imagebox()
-myarrow4:set_image(beautiful.arrow4)
-myarrow5 = wibox.widget.imagebox()
-myarrow5:set_image(beautiful.arrow5)
+myvolume_text = wibox.widget.textbox()
+vicious.register(myvolume_text, vicious.widgets.volume,
+                 function(widget, args)
+                   return(" %s%03d%%"):format(args[2], args[1])
+                 end, 1, "Master")
+myvolume = wibox.container.background(myvolume_text, "#458588")
+myvolume:buttons(awful.util.table.join(
+  awful.button({}, 1, volume_raise),
+  awful.button({}, 2, volume_mute),
+  awful.button({}, 3, volume_lower),
+  awful.button({}, 4, volume_raise),
+  awful.button({}, 5, volume_lower)
+))
 
 -- 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({
-                    theme = {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
-    )
+local taglist_buttons = awful.util.table.join(
+  awful.button({}, 1, function(t) t:view_only() end),
+  awful.button({modkey}, 1, function(t)
+    if client.focus then client.focus:move_to_tag(t) end
+  end),
+  awful.button({}, 3, awful.tag.viewtoggle),
+  awful.button({modkey}, 3, function(t)
+    if client.focus then client.focus:toggle_tag(t) end
+  end),
+  awful.button({}, 4, function(t) awful.tag.viewnext(t.screen) end),
+  awful.button({}, 5, function(t) awful.tag.viewprev(t.screen) end)
 )
 
-for s = 1, screen.count() do
-    -- Create a promptbox for each screen
-    mypromptbox[s] = awful.widget.prompt({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
-    )
+local tasklist_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() and c.first_tag then c.first_tag:view_only() end
+      -- This will also un-minimize
+      -- the client, if needed
+      client.focus = c
+      c:raise()
+    end
+  end),
+  awful.button({}, 3, client_menu_toggle_fn()),
+  awful.button({}, 4, function() awful.client.focus.byidx(1) end),
+  awful.button({}, 5, function() awful.client.focus.byidx(-1) end)
+)
 
-    -- Create the wibox
-    mywibox[s] = awful.wibox({position = "top", height = "24", screen = s})
-
-    -- Widgets that are aligned to the left
-    local left_layout = wibox.layout.fixed.horizontal()
-    --left_layout:add(mylauncher)
-    left_layout:add(myclock)
-    left_layout:add(myarrow0)
-    left_layout:add(mycpuwidget)
-    left_layout:add(myarrow1)
-    left_layout:add(mymemwidget)
-    left_layout:add(myarrow2)
-    left_layout:add(myswapwidget)
-    left_layout:add(myarrow3)
-    left_layout:add(mybatwidget)
-    left_layout:add(myarrow4)
-    left_layout:add(myvolwidget)
-    left_layout:add(myarrow5)
-    left_layout:add(mypromptbox[s])
-
-    -- 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(mytaglist[s])
-    right_layout:add(mylayoutbox[s])
-
-    -- 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
+--local function set_wallpaper(s)
+--  -- Wallpaper
+--  if beautiful.wallpaper then
+--    local wallpaper = beautiful.wallpaper
+--    -- If wallpaper is a function, call it with the screen
+--    if type(wallpaper) == "function" then
+--      wallpaper = wallpaper(s)
+--    end
+--    gears.wallpaper.maximized(wallpaper, s, true)
+--  end
+--end
+awful.spawn("hsetroot -solid '#fbf1c7'")
+
+-- Re-set wallpaper when a screen's geometry changes (e.g. different resolution)
+-- screen.connect_signal("property::geometry", set_wallpaper)
+
+awful.screen.connect_for_each_screen(function(s)
+  -- Wallpaper
+  -- set_wallpaper(s)
+
+  -- Each screen has its own tag table.
+  awful.tag({"1", "2", "3", "4", "5", "6", "7", "8", "9"}, s,
+            awful.layout.layouts[1])
+
+  -- Create a promptbox for each screen
+  s.mypromptbox = awful.widget.prompt({prompt = " "})
+  -- Create an imagebox widget which will contains an icon indicating which
+  -- layout we're using.
+  -- We need one layoutbox per screen.
+  s.mylayoutbox = awful.widget.layoutbox(s)
+  s.mylayoutbox:buttons(awful.util.table.join(
+    awful.button({}, 1, function() awful.layout.inc(1) end),
+    awful.button({}, 3, function() awful.layout.inc(-1) end),
+    awful.button({}, 4, function() awful.layout.inc(1) end),
+    awful.button({}, 5, function() awful.layout.inc(-1) end)
+  ))
+  -- Create a taglist widget
+  s.mytaglist = awful.widget.taglist(s, awful.widget.taglist.filter.all,
+                                     taglist_buttons)
+
+  -- Create a tasklist widget
+  -- s.mytasklist = awful.widget.tasklist(
+  --   s,
+  --   awful.widget.tasklist.filter.currenttags,
+  --   tasklist_buttons
+  -- )
+
+  -- Create the wibox
+  s.mywibox = awful.wibar({position = "top", height = "22", screen = s})
+
+  -- Add widgets to the wibox
+  s.mywibox:setup {
+    layout = wibox.layout.align.horizontal,
+    { -- Left widgets
+      layout = wibox.layout.fixed.horizontal,
+      -- mylauncher,
+      wibox.container.background(mytextclock, "#cc241d"),
+      wibox.widget.imagebox(beautiful.arrow0),
+      wibox.container.background(mycpuusage, "#d65d0e"),
+      wibox.widget.imagebox(beautiful.arrow1),
+      wibox.container.background(mymemusage, "#d79921"),
+      wibox.widget.imagebox(beautiful.arrow2),
+      wibox.container.background(myswpusage, "#98971a"),
+      wibox.widget.imagebox(beautiful.arrow3),
+      wibox.container.background(mybattery, "#689d6a"),
+      wibox.widget.imagebox(beautiful.arrow4),
+      myvolume,
+      wibox.widget.imagebox(beautiful.arrow5),
+      wibox.container.background(s.mypromptbox, "#b16286"),
+      wibox.widget.imagebox(beautiful.arrow6)
+    },
+    { -- Middle widget
+      layout = wibox.layout.fixed.horizontal,
+    },
+    -- s.mytasklist,
+    { -- Right widgets
+      layout = wibox.layout.fixed.horizontal,
+      -- mykeyboardlayout,
+      wibox.widget.systray(),
+      s.mytaglist,
+      s.mylayoutbox
+    }
+  }
+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)
+  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(
-    awful.key({modkey}, "Left", awful.tag.viewprev),
-    awful.key({modkey}, "Right", awful.tag.viewnext),
-    awful.key({modkey}, "Escape", awful.tag.history.restore),
-
-    awful.key(
-        {modkey},
-        "j",
-        function()
-            awful.client.focus.byidx( 1)
-            if client.focus then client.focus:raise() end
-        end
-    ),
-    awful.key(
-        {modkey},
-        "k",
-        function()
-            awful.client.focus.byidx(-1)
-            if client.focus then client.focus:raise() end
-        end
-    ),
-    awful.key({modkey}, "w", function() mymainmenu:show() 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}, "0", 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
-    ),
-
-    -- Standard program
-    awful.key({modkey, "Control"}, "r", awesome.restart),
-    awful.key({modkey, "Control"}, "q", awesome.quit),
-    -- Not needed
-    awful.key({modkey}, "l", function() awful.tag.incmwfact(0.05) end),
-    awful.key({modkey}, "h", function() awful.tag.incmwfact(-0.05) end),
-    awful.key({modkey, "Shift"}, "h", function() awful.tag.incnmaster(1) end),
-    awful.key({modkey, "Shift"}, "l", function() awful.tag.incnmaster(-1) end),
-    awful.key({modkey, "Control"}, "h", function() awful.tag.incncol(1) end),
-    awful.key({modkey, "Control"}, "l", function() awful.tag.incncol(-1) end),
-    awful.key({modkey}, "Return", function() awful.layout.inc(layouts, 1) end),
-    awful.key(
-        {modkey, "Shift"},
-        "Return",
-        function() awful.layout.inc(layouts, -1) end
-    ),
-    -- Not used
-    --awful.key({modkey, "Control"}, "n", awful.client.restore),
-    -- Prompt
-    awful.key(
-        {modkey, "Shift"},
-        ";",
-        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
-    --),
-    -- Menubar
-    awful.key({modkey, "Shift"}, "p", function() menubar.show() end),
-
-    -- Applications
-    awful.key({modkey}, "x", function() awful.util.spawn(terminal) end),
-    awful.key(
-        {modkey, "Shift"},
-        "x",
-        function() awful.util.spawn(terminal .. " -e su -") end
-    ),
-    awful.key(
-        {modkey},
-        "p",
-        function() awful.util.spawn(terminal .. " -e python3") end
-    ),
-    awful.key(
-        {modkey},
-        "r",
-        function() awful.util.spawn(terminal .. " -e ranger") end
-    ),
-    awful.key(
-        {modkey},
-        "t",
-        function() awful.util.spawn(terminal .. " -e htop") end
-    ),
-    awful.key(
-        {modkey},
-        "c",
-        function() awful.util.spawn(cmus) end
-    ),
-    awful.key(
-        {modkey, "Shift"},
-        "c",
-        function() awful.util.spawn(cmus_pause) end
-    ),
-    awful.key(
-        {modkey, "Control"},
-        "c",
-        function() awful.util.spawn(cmus_prev) end
-    ),
-    awful.key(
-        {modkey, "Mod1"},
-        "c",
-        function() awful.util.spawn(cmus_next) end
-    ),
-    awful.key(
-        {modkey},
-        "m",
-        function() awful.util.spawn(terminal .. " -e mutt") end
-    ),
-    awful.key({modkey}, "v", function() awful.util.spawn(editor) end),
-    awful.key({modkey}, "f", function() awful.util.spawn("firefox") end),
-    awful.key({modkey}, "z", function() awful.util.spawn("zathura") end),
-    awful.key({modkey}, "s", function() awful.util.spawn("slock") end),
-    awful.key(
-        {modkey, "Shift"},
-        "s",
-        function() awful.util.spawn("slock systemctl -i suspend") end
-    )
-)
-
--- Adjusting volumes
-globalkeys = awful.util.table.join(
-    globalkeys,
-    awful.key({}, "XF86AudioRaiseVolume",
-    function() awful.util.spawn("amixer sset Master 5%+", false) end)
-)
-globalkeys = awful.util.table.join(
-    globalkeys,
-    awful.key(
-        {},
-        "XF86AudioLowerVolume",
-        function() awful.util.spawn("amixer sset Master 5%-", false) end
-    )
-)
-globalkeys = awful.util.table.join(
-    globalkeys,
-    awful.key(
-        {},
-        "XF86AudioMute",
-        function()
-            awful.util.spawn("amixer sset Master toggle", false)
-            -- The 2 following lines were needed at least on my configuration,
-            -- otherwise it would get stuck muted. However, if the channel
-            -- you're using is "Speaker" or "Headpphone" instead of "Master",
-            -- you'll have to comment out their corresponding line below.
-            awful.util.spawn("amixer sset Speaker unmute", false)
-            awful.util.spawn("amixer sset Headphone unmute", false)
-        end
-    )
+  awful.key({modkey, "Control"}, "s", hotkeys_popup.show_help,
+            {description="show help", group="awesome"}),
+  awful.key({modkey}, "Left", awful.tag.viewprev,
+            {description = "view previous", group = "tag"}),
+  awful.key({modkey}, "Right", awful.tag.viewnext,
+            {description = "view next", group = "tag"}),
+  awful.key({modkey}, "Escape", awful.tag.history.restore,
+            {description = "go back", group = "tag"}),
+
+  awful.key({modkey}, "j", function() awful.client.focus.byidx(1) end,
+            {description = "focus next by index", group = "client"}),
+  awful.key({modkey}, "k", function() awful.client.focus.byidx(-1) end,
+            {description = "focus previous by index", group = "client"}),
+  awful.key({modkey}, "w", function() mymainmenu:show() end,
+            {description = "show main menu", group = "awesome"}),
+
+  -- Layout manipulation
+  awful.key({modkey, "Shift"}, "j", function() awful.client.swap.byidx(1) end,
+            {description = "swap with next client by index", group = "client"}),
+  awful.key({modkey, "Shift"}, "k", function() awful.client.swap.byidx(-1)end,
+            {description = "swap with previous client by index",
+             group = "client"}),
+  awful.key({modkey}, "0",
+            function() awful.screen.focus_relative(1) end,
+            {description = "focus the next screen", group = "screen"}),
+  awful.key({modkey}, "u", awful.client.urgent.jumpto,
+            {description = "jump to urgent client", group = "client"}),
+  awful.key({modkey}, "Tab",
+            function()
+              awful.client.focus.history.previous()
+              if client.focus then client.focus:raise() end
+            end,
+            {description = "go back", group = "client"}),
+
+  -- Standard program
+  awful.key({modkey}, "x", function() awful.spawn(terminal) end,
+            {description = "open a terminal", group = "launcher"}),
+  awful.key({modkey, "Shift"}, "x", function() awful.spawn(root_terminal) end,
+            {description = "open a root terminal", group = "launcher"}),
+  awful.key({modkey}, "v", function() awful.spawn(editor) end,
+            {description = "open GVim", group = "launcher"}),
+  awful.key({modkey}, "b", function() awful.spawn("torbrowser-launcher") end,
+            {description = "open Tor Browser", group = "launcher"}),
+  awful.key({modkey}, "r", function() awful.spawn(ranger) end,
+            {description = "open ranger file manager", group = "launcher"}),
+  awful.key({modkey}, "p", function() awful.spawn(python) end,
+            {description = "open Python 3 interpreter", group = "launcher"}),
+  awful.key({modkey}, "z", function() awful.spawn("zathura") end,
+            {description = "open zathura document viewer", group = "launcher"}),
+  awful.key({modkey}, "m", function() awful.spawn(mutt) end,
+            {description = "open mutt mail client", group = "launcher"}),
+  awful.key({modkey}, "y", function() awful.spawn("smtube") end,
+            {description = "open YouTube browser", group = "launcher"}),
+  awful.key({modkey}, "s", function() awful.spawn("slock") end,
+            {description = "lock screen", group = "launcher"}),
+  awful.key({modkey, "Shift"}, "s", function() awful.spawn(slock_suspend) end,
+            {description = "lock screen then suspend", group = "launcher"}),
+  awful.key({modkey}, "c", function() awful.spawn(cmus) end,
+            {description = "open cmus music player", group = "launcher"}),
+  awful.key({modkey, "Shift"}, "c", function() awful.spawn(cmus_pause) end,
+            {description = "cmus: pause", group = "multimedia"}),
+  awful.key({modkey, "Control"}, "c", function() awful.spawn(cmus_prev) end,
+            {description = "cmus: previous track", group = "multimedia"}),
+  awful.key({modkey, "Mod1"}, "c", function() awful.spawn(cmus_next) end,
+            {description = "cmus: next track", group = "multimedia"}),
+  awful.key({}, "XF86AudioRaiseVolume", volume_raise,
+            {description = "raise 5% volume", group = "multimedia"}),
+  awful.key({}, "XF86AudioLowerVolume", volume_lower,
+            {description = "lower 5% volume", group = "multimedia"}),
+  awful.key({}, "XF86AudioMute", volume_mute,
+            {description = "(un)mute volume", group = "multimedia"}),
+
+  awful.key({modkey, "Control"}, "r", awesome.restart,
+            {description = "reload awesome", group = "awesome"}),
+  awful.key({modkey, "Shift"}, "q", awesome.quit,
+            {description = "quit awesome", group = "awesome"}),
+
+  awful.key({modkey}, "l", function() awful.tag.incmwfact(0.05) end,
+            {description = "increase master width factor", group = "layout"}),
+  awful.key({modkey}, "h", function() awful.tag.incmwfact(-0.05) end,
+            {description = "decrease master width factor", group = "layout"}),
+  awful.key({modkey, "Shift"}, "h",
+            function() awful.tag.incnmaster(1, nil, true) end,
+            {description = "increase the number of master clients",
+             group = "layout"}),
+  awful.key({modkey, "Shift"}, "l",
+            function() awful.tag.incnmaster(-1, nil, true) end,
+            {description = "decrease the number of master clients",
+             group = "layout"}),
+  awful.key({modkey, "Control"}, "h",
+            function() awful.tag.incncol(1, nil, true) end,
+            {description = "increase the number of columns", group = "layout"}),
+  awful.key({modkey, "Control"}, "l",
+            function() awful.tag.incncol(-1, nil, true) end,
+            {description = "decrease the number of columns", group = "layout"}),
+  awful.key({modkey}, "Return", function() awful.layout.inc(1) end,
+            {description = "select next", group = "layout"}),
+  awful.key({modkey, "Shift"}, "Return", function() awful.layout.inc(-1) end,
+            {description = "select previous", group = "layout"}),
+
+  awful.key({modkey, "Control"}, "n",
+            function()
+              local c = awful.client.restore()
+              -- Focus restored client
+              if c then
+                client.focus = c
+                c:raise()
+              end
+            end,
+            {description = "restore minimized", group = "client"}),
+
+  -- Prompt
+  awful.key({modkey}, ";",
+            function() awful.screen.focused().mypromptbox:run() end,
+            {description = "run prompt", group = "launcher"}),
+  -- Menubar
+  awful.key({modkey, "Shift"}, ";", function() menubar.show() end,
+            {description = "show the menubar", group = "launcher"})
+
+  -- I don't know any Lua.
+  -- awful.key({modkey}, "x",
+  --           function()
+  --             awful.prompt.run {
+  --               prompt = "Run Lua code: ",
+  --               textbox = awful.screen.focused().mypromptbox.widget,
+  --               exe_callback = awful.util.eval,
+  --               history_path = awful.util.get_cache_dir() .. "/history_eval"
+  --             }
+  --           end,
+  --           {description = "lua execute prompt", group = "awesome"}),
 )
 
 clientkeys = awful.util.table.join(
-    awful.key({modkey}, "q", function(c) c:kill() end),
-    awful.key(
-        {modkey, "Control"},
-        "Return",
-        function(c) c:swap(awful.client.getmaster()) end
-    ),
-    awful.key({modkey, "Shift"}, "0", awful.client.movetoscreen),
-    awful.key(
-        {modkey, "Control"},
-        "t",
-        function(c) awful.titlebar.toggle(c) end
-    )
-    -- Not used
-    --awful.key({modkey}, "f", function(c) c.fullscreen = not c.fullscreen end),
-    --awful.key({modkey, "Control"}, "space", awful.client.floating.toggle),
-    --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
-    --)
+  awful.key({modkey}, "f",
+            function(c)
+              c.fullscreen = not c.fullscreen
+              c:raise()
+            end,
+            {description = "toggle fullscreen", group = "client"}),
+  awful.key({modkey}, "q", function(c) c:kill() end,
+            {description = "close", group = "client"}),
+  awful.key({modkey, "Control"}, "Return", awful.client.floating.toggle,
+            {description = "toggle floating", group = "client"}),
+  awful.key({modkey, "Control"}, "space",
+            function(c) c:swap(awful.client.getmaster()) end,
+            {description = "move to master", group = "client"}),
+  awful.key({modkey, "Shift"}, "0", function(c) c:move_to_screen() end,
+            {description = "move to screen", group = "client"}),
+  awful.key({modkey}, "t", function(c) c.ontop = not c.ontop end,
+            {description = "toggle keep on top", group = "client"}),
+  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,
+            {description = "minimize", group = "client"}),
+  awful.key({modkey, "Control"}, "m",
+            function(c)
+              c.maximized = not c.maximized
+              c:raise()
+            end,
+            {description = "maximize", group = "client"})
 )
 
 -- Bind all key numbers to tags.
@@ -591,64 +482,50 @@ clientkeys = awful.util.table.join(
 -- 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)
+      globalkeys,
+      -- View tag only.
+      awful.key({modkey}, "#" .. i + 9,
+                function()
+                  local screen = awful.screen.focused()
+                  local tag = screen.tags[i]
+                  if tag then tag:view_only() end
+                end,
+                {description = "view tag #"..i, group = "tag"}),
+      -- Toggle tag display.
+      awful.key({modkey, "Control"}, "#" .. i + 9,
+                function()
+                  local screen = awful.screen.focused()
+                  local tag = screen.tags[i]
+                  if tag then awful.tag.viewtoggle(tag) end
+                end,
+                {description = "toggle tag #" .. i, group = "tag"}),
+      -- Move client to tag.
+      awful.key({modkey, "Shift"}, "#" .. i + 9,
+                function()
+                  if client.focus then
+                    local tag = client.focus.screen.tags[i]
+                    if tag then client.focus:move_to_tag(tag) end
                   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,
+                {description = "move focused client to tag #"..i,
+                 group = "tag"}),
+      -- Toggle tag on focused client.
+      awful.key({modkey, "Control", "Shift"}, "#" .. i + 9,
+                function()
+                  if client.focus then
+                    local tag = client.focus.screen.tags[i]
+                    if tag then client.focus:toggle_tag(tag) end
+                  end
+                end,
+                {description = "toggle focused client on tag #" .. i,
+                 group = "tag"})
     )
 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)
+  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
@@ -658,128 +535,175 @@ root.keys(globalkeys)
 -- {{{ Rules
 -- Rules to apply to new clients (through the "manage" signal).
 awful.rules.rules = {
-    -- All clients will match this rule.
-    {
-        rule = {},
-        properties = {
-            border_width = beautiful.border_width,
-            border_color = beautiful.border_normal,
-            size_hints_honor = false,
-            focus = awful.client.focus.filter,
-            raise = true,
-            keys = clientkeys,
-            buttons = clientbuttons
-        }
+  -- All clients will match this rule.
+  {rule = {},
+   properties = {
+     border_width = beautiful.border_width,
+     border_color = beautiful.border_normal,
+     focus = awful.client.focus.filter,
+     raise = true,
+     keys = clientkeys,
+     buttons = clientbuttons,
+     screen = awful.screen.preferred,
+     placement = awful.placement.no_overlap + awful.placement.no_offscreen,
+     size_hints_honor = false
+   }},
+
+  -- Floating clients.
+  {rule_any = {
+    instance = {
+      "DTA",  -- Firefox addon DownThemAll.
+      "copyq",  -- Includes session name in class.
+    },
+    class = {
+      "Arandr",
+      "Gpick",
+      "Gcolor2",
+      "Kruler",
+      "MessageWin",  -- kalarm.
+      "Sxiv",
+      "Torbrowser-launcher",
+      "Twf",
+      "Wpa_gui",
+      "ac_client",
+      "flare",
+      "pinentry",
+      "veromix",
+      "xtightvncviewer"
     },
-    --{rule = {class = "MPlayer"}, properties = {floating = true}},
-    --{rule = {class = "pinentry"}, properties = {floating = true}},
-    --{rule = {class = "gimp"}, properties = {floating = true}},
-    {rule = {class = "Gcolor2"}, properties = {floating = true}},
-    {rule = {class = "flare"}, properties = {floating = true}},
-    {rule = {class = "Torbrowser-launcher"}, properties = {floating = true}},
-    {rule = {class = "Twf"}, properties = {floating = true}},
-    -- Set Firefox to always map on tags number 2 of screen 1.
-    --{rule = {class = "Firefox"}, properties = {tag = tags[1][2]}},
+    name = {
+      "Event Tester"  -- xev.
+    },
+    role = {
+      "AlarmWindow",  -- Thunderbird's calendar.
+      "pop-up",       -- e.g. Google Chrome's (detached) Developer Tools.
+    },
+   }, properties = {floating = true}},
+
+  -- Add titlebars to normal clients and dialogs
+  {rule_any = {type = {"normal", "dialog"}},
+   properties = {titlebars_enabled = true}}
+
+  -- Set Firefox to always map on the tag named "2" on screen 1.
+  -- {rule = {class = "Firefox"},
+  --   properties = {screen = 1, tag = "2"}}
 }
 -- }}}
 
 -- {{{ Signals
--- Signal functionto execute when a new client appears.
+-- Signal function to execute when a new client appears.
 client.connect_signal(
-    "manage",
-    function(c, startup)
-        -- Enable sloppy focus
-        c:connect_signal(
-            "mouse::enter",
-            function(c)
-                if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier
-                        and awful.client.focus.filter(c) then
-                    client.focus = c
-                end
-            end
-        )
-
-    if not startup then
-        -- Set the windows at the slave,
-        -- i.e. put it at the end of others instead of setting it master.
-        -- awful.client.setslave(c)
-        -- Put windows in a smart way, only if they does not set an initial
-        -- position.
-        if not c.size_hints.user_position
-                and not c.size_hints.program_position then
-            awful.placement.no_overlap(c)
-            awful.placement.no_offscreen(c)
-        end
-    elseif not c.size_hints.user_position
-            and not c.size_hints.program_position then
-        -- Prevent clients from being unreachable after screen count change
-        awful.placement.no_offscreen(c)
+  "manage",
+  function(c)
+  -- Set the windows at the slave,
+  -- i.e. put it at the end of others instead of setting it master.
+  -- if not awesome.startup then awful.client.setslave(c) end
+    if awesome.startup and
+       not c.size_hints.user_position and
+       not c.size_hints.program_position then
+      -- Prevent clients from being unreachable after screen count changes.
+      awful.placement.no_offscreen(c)
     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
-            )
-        )
-
-        -- Widgets that are aligned to the right
-        local right_layout = wibox.layout.fixed.horizontal()
-        --right_layout:add(awful.titlebar.widget.iconwidget(c))
-        right_layout:buttons(buttons)
-
-        -- Widgets that are aligned to the left
-        local left_layout = wibox.layout.fixed.horizontal()
-        left_layout:add(awful.titlebar.widget.closebutton(c))
-        left_layout:add(awful.titlebar.widget.ontopbutton(c))
-        left_layout:add(awful.titlebar.widget.stickybutton(c))
-        left_layout:add(awful.titlebar.widget.maximizedbutton(c))
-        left_layout:add(awful.titlebar.widget.floatingbutton(c))
-
-        -- The title goes 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)
-
-        -- Now bring it all together
-        local layout = wibox.layout.align.horizontal()
-        layout:set_left(left_layout)
-        layout:set_right(right_layout)
-        layout:set_middle(middle_layout)
-
-        awful.titlebar(c, {size = "6"}):set_widget(layout)
-    end
+-- Add a titlebar if titlebars_enabled is set to true in the rules.
+client.connect_signal(
+  "request::titlebars",
+  function(c)
+    -- 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)
+    )
 
-    if not awful.client.floating.get(c) then
-        awful.titlebar.hide(c)
+    awful.titlebar(c, {size=22}) : setup {
+      { -- Left
+        awful.titlebar.widget.closebutton(c),
+        awful.titlebar.widget.ontopbutton(c),
+        awful.titlebar.widget.stickybutton(c),
+        awful.titlebar.widget.maximizedbutton(c),
+        awful.titlebar.widget.floatingbutton(c),
+        layout  = wibox.layout.fixed.horizontal
+      },
+      { -- Middle
+        { -- Title
+          align  = "center",
+          widget = awful.titlebar.widget.titlewidget(c)
+        },
+        buttons = buttons,
+        layout  = wibox.layout.flex.horizontal
+      },
+      { -- Right
+        awful.titlebar.widget.iconwidget(c),
+        buttons = buttons,
+        layout = wibox.layout.fixed.horizontal
+      },
+      layout = wibox.layout.align.horizontal
+    }
+
+    -- Show titlebar if client is floating, hide otherwise.
+    if not c.floating and
+       awful.screen.focused().selected_tag.layout ~=
+       awful.layout.suit.floating then
+      awful.titlebar.hide(c)
     end
-end)
+  end
+)
 
+-- Show titlebar if client is floating, hide otherwise.
 client.connect_signal(
-    "focus",
-    function(c) c.border_color = beautiful.border_focus end
+  "property::floating",
+  function(c)
+    if c.first_tag == nil then
+      end
+    if c.floating or
+       (c.first_tag ~= nil and
+        c.first_tag.layout == awful.layout.suit.floating) then
+      awful.titlebar.show(c)
+    else
+      awful.titlebar.hide(c)
+    end
+  end
 )
+
+-- Enable sloppy focus, so that focus follows mouse.
 client.connect_signal(
-    "unfocus",
-    function(c) c.border_color = beautiful.border_normal end
+  "mouse::enter",
+  function(c)
+    if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier and
+       awful.client.focus.filter(c) then
+      client.focus = c
+    end
+  end
+)
+
+client.connect_signal("focus",
+                      function(c) c.border_color = beautiful.border_focus end)
+client.connect_signal("unfocus",
+                      function(c) c.border_color = beautiful.border_normal end)
+
+-- Show titlebar if client is floating, hide otherwise.
+tag.connect_signal(
+  "property::layout",
+  function(t)
+    if t.layout == awful.layout.suit.floating then
+      for _, c in pairs(t:clients()) do awful.titlebar.show(c) end
+    else
+      for _, c in pairs(t:clients()) do
+        if not c.floating then awful.titlebar.hide(c) end
+      end
+    end
+  end
 )
 -- }}}
diff --git a/awesome/.config/awesome/themes/gruvbox/README.md b/awesome/.config/awesome/themes/gruvbox/README.md
index 4ed359e..dc3f262 100644
--- a/awesome/.config/awesome/themes/gruvbox/README.md
+++ b/awesome/.config/awesome/themes/gruvbox/README.md
@@ -6,7 +6,7 @@
   proper algorithim, e.g. in GIMP use *None* or *Linear* interpolation.
 
 * Titlebar and wibox use some pixel arts, so please keep theme at the size of
-  24 (wibox) and 6 (titlebar).
+  22px.
 
-* I added some 24-pixel high arrows to the theme. You might wanna use them to
+* I added some 22-pixel high arrows to the theme. You might wanna use them to
   rice your desktop in the *powerarrow* way.
diff --git a/awesome/.config/awesome/themes/gruvbox/arrows/0.png b/awesome/.config/awesome/themes/gruvbox/arrows/0.png
index 9acbc37..44abbcc 100644
--- a/awesome/.config/awesome/themes/gruvbox/arrows/0.png
+++ b/awesome/.config/awesome/themes/gruvbox/arrows/0.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/arrows/1.png b/awesome/.config/awesome/themes/gruvbox/arrows/1.png
index 29ad5b0..a6c21d1 100644
--- a/awesome/.config/awesome/themes/gruvbox/arrows/1.png
+++ b/awesome/.config/awesome/themes/gruvbox/arrows/1.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/arrows/2.png b/awesome/.config/awesome/themes/gruvbox/arrows/2.png
index 4b6a25f..e82ca2c 100644
--- a/awesome/.config/awesome/themes/gruvbox/arrows/2.png
+++ b/awesome/.config/awesome/themes/gruvbox/arrows/2.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/arrows/3.png b/awesome/.config/awesome/themes/gruvbox/arrows/3.png
index 5d40ead..9c51661 100644
--- a/awesome/.config/awesome/themes/gruvbox/arrows/3.png
+++ b/awesome/.config/awesome/themes/gruvbox/arrows/3.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/arrows/4.png b/awesome/.config/awesome/themes/gruvbox/arrows/4.png
index c821055..33b7496 100644
--- a/awesome/.config/awesome/themes/gruvbox/arrows/4.png
+++ b/awesome/.config/awesome/themes/gruvbox/arrows/4.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/arrows/5.png b/awesome/.config/awesome/themes/gruvbox/arrows/5.png
index 47c8db0..d5719a3 100644
--- a/awesome/.config/awesome/themes/gruvbox/arrows/5.png
+++ b/awesome/.config/awesome/themes/gruvbox/arrows/5.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/arrows/6.png b/awesome/.config/awesome/themes/gruvbox/arrows/6.png
new file mode 100644
index 0000000..ab5dd0b
--- /dev/null
+++ b/awesome/.config/awesome/themes/gruvbox/arrows/6.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/awesome.png b/awesome/.config/awesome/themes/gruvbox/awesome.png
index 6ce854b..812060e 100644
--- a/awesome/.config/awesome/themes/gruvbox/awesome.png
+++ b/awesome/.config/awesome/themes/gruvbox/awesome.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/background-2048x1152.png b/awesome/.config/awesome/themes/gruvbox/background-2048x1152.png
index f138a11..f6e56b4 100644
--- a/awesome/.config/awesome/themes/gruvbox/background-2048x1152.png
+++ b/awesome/.config/awesome/themes/gruvbox/background-2048x1152.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/background-2048x1280.png b/awesome/.config/awesome/themes/gruvbox/background-2048x1280.png
index 9ad4338..f977b04 100644
--- a/awesome/.config/awesome/themes/gruvbox/background-2048x1280.png
+++ b/awesome/.config/awesome/themes/gruvbox/background-2048x1280.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/background-2048x1536.png b/awesome/.config/awesome/themes/gruvbox/background-2048x1536.png
index 66de69d..477da23 100644
--- a/awesome/.config/awesome/themes/gruvbox/background-2048x1536.png
+++ b/awesome/.config/awesome/themes/gruvbox/background-2048x1536.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/background.png b/awesome/.config/awesome/themes/gruvbox/background.png
deleted file mode 100644
index a8d6ff0..0000000
--- a/awesome/.config/awesome/themes/gruvbox/background.png
+++ /dev/null
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/layouts/cornerne.png b/awesome/.config/awesome/themes/gruvbox/layouts/cornerne.png
new file mode 100644
index 0000000..b597376
--- /dev/null
+++ b/awesome/.config/awesome/themes/gruvbox/layouts/cornerne.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/layouts/cornernw.png b/awesome/.config/awesome/themes/gruvbox/layouts/cornernw.png
new file mode 100644
index 0000000..3132710
--- /dev/null
+++ b/awesome/.config/awesome/themes/gruvbox/layouts/cornernw.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/layouts/cornerse.png b/awesome/.config/awesome/themes/gruvbox/layouts/cornerse.png
new file mode 100644
index 0000000..ea15307
--- /dev/null
+++ b/awesome/.config/awesome/themes/gruvbox/layouts/cornerse.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/layouts/cornersw.png b/awesome/.config/awesome/themes/gruvbox/layouts/cornersw.png
new file mode 100644
index 0000000..dc93a13
--- /dev/null
+++ b/awesome/.config/awesome/themes/gruvbox/layouts/cornersw.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/layouts/dwindle.png b/awesome/.config/awesome/themes/gruvbox/layouts/dwindle.png
index 914b0da..730fb5f 100644
--- a/awesome/.config/awesome/themes/gruvbox/layouts/dwindle.png
+++ b/awesome/.config/awesome/themes/gruvbox/layouts/dwindle.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/layouts/fairh.png b/awesome/.config/awesome/themes/gruvbox/layouts/fairh.png
index c68b04c..f048c4e 100644
--- a/awesome/.config/awesome/themes/gruvbox/layouts/fairh.png
+++ b/awesome/.config/awesome/themes/gruvbox/layouts/fairh.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/layouts/fairv.png b/awesome/.config/awesome/themes/gruvbox/layouts/fairv.png
index f71d011..802d935 100644
--- a/awesome/.config/awesome/themes/gruvbox/layouts/fairv.png
+++ b/awesome/.config/awesome/themes/gruvbox/layouts/fairv.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/layouts/floating.png b/awesome/.config/awesome/themes/gruvbox/layouts/floating.png
index fbebe75..d3e8274 100644
--- a/awesome/.config/awesome/themes/gruvbox/layouts/floating.png
+++ b/awesome/.config/awesome/themes/gruvbox/layouts/floating.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/layouts/fullscreen.png b/awesome/.config/awesome/themes/gruvbox/layouts/fullscreen.png
index d7b5615..957dee3 100644
--- a/awesome/.config/awesome/themes/gruvbox/layouts/fullscreen.png
+++ b/awesome/.config/awesome/themes/gruvbox/layouts/fullscreen.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/layouts/magnifier.png b/awesome/.config/awesome/themes/gruvbox/layouts/magnifier.png
index cfaa4be..bc1b1a8 100644
--- a/awesome/.config/awesome/themes/gruvbox/layouts/magnifier.png
+++ b/awesome/.config/awesome/themes/gruvbox/layouts/magnifier.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/layouts/max.png b/awesome/.config/awesome/themes/gruvbox/layouts/max.png
index c975785..c1efe5d 100644
--- a/awesome/.config/awesome/themes/gruvbox/layouts/max.png
+++ b/awesome/.config/awesome/themes/gruvbox/layouts/max.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/layouts/spiral.png b/awesome/.config/awesome/themes/gruvbox/layouts/spiral.png
index 873cd18..98749a5 100644
--- a/awesome/.config/awesome/themes/gruvbox/layouts/spiral.png
+++ b/awesome/.config/awesome/themes/gruvbox/layouts/spiral.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/layouts/tile.png b/awesome/.config/awesome/themes/gruvbox/layouts/tile.png
index 731cdef..a2cbf30 100644
--- a/awesome/.config/awesome/themes/gruvbox/layouts/tile.png
+++ b/awesome/.config/awesome/themes/gruvbox/layouts/tile.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/layouts/tilebottom.png b/awesome/.config/awesome/themes/gruvbox/layouts/tilebottom.png
index 064e429..af39eae 100644
--- a/awesome/.config/awesome/themes/gruvbox/layouts/tilebottom.png
+++ b/awesome/.config/awesome/themes/gruvbox/layouts/tilebottom.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/layouts/tileleft.png b/awesome/.config/awesome/themes/gruvbox/layouts/tileleft.png
index 0bf6785..bdff47e 100644
--- a/awesome/.config/awesome/themes/gruvbox/layouts/tileleft.png
+++ b/awesome/.config/awesome/themes/gruvbox/layouts/tileleft.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/layouts/tiletop.png b/awesome/.config/awesome/themes/gruvbox/layouts/tiletop.png
index 781f2ee..681a873 100644
--- a/awesome/.config/awesome/themes/gruvbox/layouts/tiletop.png
+++ b/awesome/.config/awesome/themes/gruvbox/layouts/tiletop.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/submenu.png b/awesome/.config/awesome/themes/gruvbox/submenu.png
index 6f9e9c5..15ca0b8 100644
--- a/awesome/.config/awesome/themes/gruvbox/submenu.png
+++ b/awesome/.config/awesome/themes/gruvbox/submenu.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/taglist/square.png b/awesome/.config/awesome/themes/gruvbox/taglist/square.png
index f49944e..16eb9dc 100644
--- a/awesome/.config/awesome/themes/gruvbox/taglist/square.png
+++ b/awesome/.config/awesome/themes/gruvbox/taglist/square.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/taglist/squaref.png b/awesome/.config/awesome/themes/gruvbox/taglist/squaref.png
index a780e55..ab9e201 100644
--- a/awesome/.config/awesome/themes/gruvbox/taglist/squaref.png
+++ b/awesome/.config/awesome/themes/gruvbox/taglist/squaref.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/theme.lua b/awesome/.config/awesome/themes/gruvbox/theme.lua
index 84c96ca..e1cd7e6 100644
--- a/awesome/.config/awesome/themes/gruvbox/theme.lua
+++ b/awesome/.config/awesome/themes/gruvbox/theme.lua
@@ -1,5 +1,4 @@
 -- gruvbox awesome theme
---
 -- Copyright (C) 2016 Raphael McSinyx
 --
 -- This program is free software: you can redistribute it and/or modify
@@ -15,105 +14,117 @@
 -- You should have received a copy of the GNU General Public License
 -- along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-theme = {}
+local theme = {}
+
+-- Working directory (where you place this theme)
+theme.wd = "~/.config/awesome/themes/gruvbox/"
 
-theme.font = "Droid Sans Mono Slashed 11"
+theme.font          = "Space Mono 10"
 
-theme.bg_normal = "#282828"
-theme.bg_focus = "#3c3836"
-theme.bg_urgent = theme.bg_normal
---theme.bg_minimize = "#444444"
-theme.bg_systray = theme.bg_normal
+theme.bg_normal     = "#fbf1c7"
+theme.bg_focus      = "#ebdbb2"
+theme.bg_urgent     = theme.bg_normal
+theme.bg_minimize   = theme.bg_focus
+theme.bg_systray    = theme.bg_normal
 
-theme.fg_normal = "#ebdbb2"
-theme.fg_focus = theme.fg_normal
-theme.fg_urgent = "#d3869b"
---theme.fg_minimize = "#ffffff"
+theme.fg_normal     = "#3c3836"
+theme.fg_focus      = theme.fg_normal
+theme.fg_urgent     = "#8f3f71"
+theme.fg_minimize   = theme.fg_normal
 
-theme.border_width = 1
-theme.border_normal = "#3c3836"
-theme.border_focus = "#b16286"
-theme.border_marked = "#91231c"
+theme.useless_gap   = 0
+theme.border_width  = 1
+theme.border_normal = theme.bg_focus
+theme.border_focus  = "#b16286"
+theme.border_marked = "#cc241d"
 
--- There are other variable sets overriding the default one when defined,
--- the sets are:
+-- There are other variable sets
+-- overriding the default one when
+-- defined, the sets are:
 -- taglist_[bg|fg]_[focus|urgent|occupied|empty]
 -- tasklist_[bg|fg]_[focus|urgent]
 -- titlebar_[bg|fg]_[normal|focus]
 -- tooltip_[font|opacity|fg_color|bg_color|border_width|border_color]
 -- mouse_finder_[color|timeout|animate_timeout|radius|factor]
-
-theme.titlebar_bg_focus = "#282828"
-
-mythemedir = "~/.config/awesome/themes/gruvbox/"
+-- Example:
+--theme.taglist_bg_focus = "#ff0000"
 
 -- Display the taglist squares
-theme.taglist_squares_sel   = mythemedir .. "taglist/squaref.png"
-theme.taglist_squares_unsel = mythemedir .. "taglist/square.png"
+theme.taglist_squares_sel   = theme.wd .. "taglist/squaref.png"
+theme.taglist_squares_unsel = theme.wd .. "taglist/square.png"
 
 -- Variables set for theming the menu:
 -- menu_[bg|fg]_[normal|focus]
 -- menu_[border_color|border_width]
-theme.menu_submenu_icon = mythemedir .. "submenu.png"
-theme.menu_height = 20
+theme.menu_submenu_icon = theme.wd .. "submenu.png"
+theme.menu_height = 22
 theme.menu_width  = 160
 
--- You can add as many variables as you wish and access them by using
+-- You can add as many variables as
+-- you wish and access them by using
 -- beautiful.variable in your rc.lua
 --theme.bg_widget = "#cc0000"
 
 -- Define the image to load
-theme.titlebar_close_button_normal = mythemedir .. "titlebar/normal.png"
-theme.titlebar_close_button_focus  = mythemedir .. "titlebar/close_focus.png"
+theme.titlebar_close_button_normal = theme.wd .. "titlebar/normal.png"
+theme.titlebar_close_button_focus = theme.wd .. "titlebar/close.png"
+
+theme.titlebar_minimize_button_normal = theme.wd .. "titlebar/normal.png"
+theme.titlebar_minimize_button_focus = theme.wd .. "titlebar/minimize.png"
 
-theme.titlebar_ontop_button_normal_inactive = mythemedir .. "titlebar/normal.png"
-theme.titlebar_ontop_button_focus_inactive  = mythemedir .. "titlebar/ontop_focus_inactive.png"
-theme.titlebar_ontop_button_normal_active = mythemedir .. "titlebar/normal.png"
-theme.titlebar_ontop_button_focus_active  = mythemedir .. "titlebar/ontop_focus_active.png"
+theme.titlebar_ontop_button_normal_inactive = theme.wd .. "titlebar/normal.png"
+theme.titlebar_ontop_button_focus_inactive = theme.wd .. "titlebar/ontop_inactive.png"
+theme.titlebar_ontop_button_normal_active = theme.wd .. "titlebar/normal.png"
+theme.titlebar_ontop_button_focus_active = theme.wd .. "titlebar/ontop_active.png"
 
-theme.titlebar_sticky_button_normal_inactive = mythemedir .. "titlebar/normal.png"
-theme.titlebar_sticky_button_focus_inactive  = mythemedir .. "titlebar/sticky_focus_inactive.png"
-theme.titlebar_sticky_button_normal_active = mythemedir .. "titlebar/normal.png"
-theme.titlebar_sticky_button_focus_active  = mythemedir .. "titlebar/sticky_focus_active.png"
+theme.titlebar_sticky_button_normal_inactive = theme.wd .. "titlebar/normal.png"
+theme.titlebar_sticky_button_focus_inactive = theme.wd .. "titlebar/sticky_inactive.png"
+theme.titlebar_sticky_button_normal_active = theme.wd .. "titlebar/normal.png"
+theme.titlebar_sticky_button_focus_active = theme.wd .. "titlebar/sticky_active.png"
 
-theme.titlebar_floating_button_normal_inactive = mythemedir .. "titlebar/normal.png"
-theme.titlebar_floating_button_focus_inactive  = mythemedir .. "titlebar/floating_focus_inactive.png"
-theme.titlebar_floating_button_normal_active = mythemedir .. "titlebar/normal.png"
-theme.titlebar_floating_button_focus_active  = mythemedir .. "titlebar/floating_focus_active.png"
+theme.titlebar_floating_button_normal_inactive = theme.wd .. "titlebar/normal.png"
+theme.titlebar_floating_button_focus_inactive = theme.wd .. "titlebar/floating_inactive.png"
+theme.titlebar_floating_button_normal_active = theme.wd .. "titlebar/normal.png"
+theme.titlebar_floating_button_focus_active = theme.wd .. "titlebar/floating_active.png"
 
-theme.titlebar_maximized_button_normal_inactive = mythemedir .. "titlebar/normal.png"
-theme.titlebar_maximized_button_focus_inactive  = mythemedir .. "titlebar/maximized_focus_inactive.png"
-theme.titlebar_maximized_button_normal_active = mythemedir .. "titlebar/normal.png"
-theme.titlebar_maximized_button_focus_active  = mythemedir .. "titlebar/maximized_focus_active.png"
+theme.titlebar_maximized_button_normal_inactive = theme.wd .. "titlebar/normal.png"
+theme.titlebar_maximized_button_focus_inactive = theme.wd .. "titlebar/maximized_inactive.png"
+theme.titlebar_maximized_button_normal_active = theme.wd .. "titlebar/normal.png"
+theme.titlebar_maximized_button_focus_active = theme.wd .. "titlebar/maximized_active.png"
 
-theme.wallpaper = mythemedir .. "background.png"
+--theme.wallpaper = theme.wd .. "background.png"
 
 -- You can use your own layout icons like this:
-theme.layout_fairh = mythemedir .. "layouts/fairh.png"
-theme.layout_fairv = mythemedir .. "layouts/fairv.png"
-theme.layout_floating  = mythemedir .. "layouts/floating.png"
-theme.layout_magnifier = mythemedir .. "layouts/magnifier.png"
-theme.layout_max = mythemedir .. "layouts/max.png"
-theme.layout_fullscreen = mythemedir .. "layouts/fullscreen.png"
-theme.layout_tilebottom = mythemedir .. "layouts/tilebottom.png"
-theme.layout_tileleft   = mythemedir .. "layouts/tileleft.png"
-theme.layout_tile = mythemedir .. "layouts/tile.png"
-theme.layout_tiletop = mythemedir .. "layouts/tiletop.png"
-theme.layout_spiral  = mythemedir .. "layouts/spiral.png"
-theme.layout_dwindle = mythemedir .. "layouts/dwindle.png"
-
-theme.awesome_icon = mythemedir .. "awesome.png"
-
--- Define the icon theme for application icons. If not set then the icons from
--- /usr/share/icons and /usr/share/icons/hicolor will be used.
+theme.layout_fairh = theme.wd .. "layouts/fairh.png"
+theme.layout_fairv = theme.wd .. "layouts/fairv.png"
+theme.layout_floating  = theme.wd .. "layouts/floating.png"
+theme.layout_magnifier = theme.wd .. "layouts/magnifier.png"
+theme.layout_max = theme.wd .. "layouts/max.png"
+theme.layout_fullscreen = theme.wd .. "layouts/fullscreen.png"
+theme.layout_tilebottom = theme.wd .. "layouts/tilebottom.png"
+theme.layout_tileleft   = theme.wd .. "layouts/tileleft.png"
+theme.layout_tile = theme.wd .. "layouts/tile.png"
+theme.layout_tiletop = theme.wd .. "layouts/tiletop.png"
+theme.layout_spiral  = theme.wd .. "layouts/spiral.png"
+theme.layout_dwindle = theme.wd .. "layouts/dwindle.png"
+theme.layout_cornernw = theme.wd .. "layouts/cornernw.png"
+theme.layout_cornerne = theme.wd .. "layouts/cornerne.png"
+theme.layout_cornersw = theme.wd .. "layouts/cornersw.png"
+theme.layout_cornerse = theme.wd .. "layouts/cornerse.png"
+
+theme.awesome_icon = theme.wd .. "awesome.png"
+
+-- Define the icon theme for application icons. If not set then the icons
+-- from /usr/share/icons and /usr/share/icons/hicolor will be used.
 theme.icon_theme = nil
 
 -- Arrows
-theme.arrow0 = mythemedir .. "arrows/0.png"
-theme.arrow1 = mythemedir .. "arrows/1.png"
-theme.arrow2 = mythemedir .. "arrows/2.png"
-theme.arrow3 = mythemedir .. "arrows/3.png"
-theme.arrow4 = mythemedir .. "arrows/4.png"
-theme.arrow5 = mythemedir .. "arrows/5.png"
+theme.arrow0 = theme.wd .. "arrows/0.png"
+theme.arrow1 = theme.wd .. "arrows/1.png"
+theme.arrow2 = theme.wd .. "arrows/2.png"
+theme.arrow3 = theme.wd .. "arrows/3.png"
+theme.arrow4 = theme.wd .. "arrows/4.png"
+theme.arrow5 = theme.wd .. "arrows/5.png"
+theme.arrow6 = theme.wd .. "arrows/6.png"
 
 return theme
diff --git a/awesome/.config/awesome/themes/gruvbox/titlebar/close.png b/awesome/.config/awesome/themes/gruvbox/titlebar/close.png
new file mode 100644
index 0000000..6c5c53f
--- /dev/null
+++ b/awesome/.config/awesome/themes/gruvbox/titlebar/close.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/titlebar/close_focus.png b/awesome/.config/awesome/themes/gruvbox/titlebar/close_focus.png
deleted file mode 100644
index 36300e2..0000000
--- a/awesome/.config/awesome/themes/gruvbox/titlebar/close_focus.png
+++ /dev/null
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/titlebar/floating_active.png b/awesome/.config/awesome/themes/gruvbox/titlebar/floating_active.png
new file mode 100644
index 0000000..bbaebb9
--- /dev/null
+++ b/awesome/.config/awesome/themes/gruvbox/titlebar/floating_active.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/titlebar/floating_focus_active.png b/awesome/.config/awesome/themes/gruvbox/titlebar/floating_focus_active.png
deleted file mode 100644
index dcf5363..0000000
--- a/awesome/.config/awesome/themes/gruvbox/titlebar/floating_focus_active.png
+++ /dev/null
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/titlebar/floating_focus_inactive.png b/awesome/.config/awesome/themes/gruvbox/titlebar/floating_focus_inactive.png
deleted file mode 100644
index 072f114..0000000
--- a/awesome/.config/awesome/themes/gruvbox/titlebar/floating_focus_inactive.png
+++ /dev/null
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/titlebar/floating_inactive.png b/awesome/.config/awesome/themes/gruvbox/titlebar/floating_inactive.png
new file mode 100644
index 0000000..0988a71
--- /dev/null
+++ b/awesome/.config/awesome/themes/gruvbox/titlebar/floating_inactive.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/titlebar/maximized_active.png b/awesome/.config/awesome/themes/gruvbox/titlebar/maximized_active.png
new file mode 100644
index 0000000..de6bc5b
--- /dev/null
+++ b/awesome/.config/awesome/themes/gruvbox/titlebar/maximized_active.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/titlebar/maximized_focus_active.png b/awesome/.config/awesome/themes/gruvbox/titlebar/maximized_focus_active.png
deleted file mode 100644
index 3481363..0000000
--- a/awesome/.config/awesome/themes/gruvbox/titlebar/maximized_focus_active.png
+++ /dev/null
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/titlebar/maximized_focus_inactive.png b/awesome/.config/awesome/themes/gruvbox/titlebar/maximized_focus_inactive.png
deleted file mode 100644
index 6bed56d..0000000
--- a/awesome/.config/awesome/themes/gruvbox/titlebar/maximized_focus_inactive.png
+++ /dev/null
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/titlebar/maximized_inactive.png b/awesome/.config/awesome/themes/gruvbox/titlebar/maximized_inactive.png
new file mode 100644
index 0000000..0d701bd
--- /dev/null
+++ b/awesome/.config/awesome/themes/gruvbox/titlebar/maximized_inactive.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/titlebar/minimize.png b/awesome/.config/awesome/themes/gruvbox/titlebar/minimize.png
new file mode 100644
index 0000000..464c553
--- /dev/null
+++ b/awesome/.config/awesome/themes/gruvbox/titlebar/minimize.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/titlebar/normal.png b/awesome/.config/awesome/themes/gruvbox/titlebar/normal.png
index a8d94cf..4c54de3 100644
--- a/awesome/.config/awesome/themes/gruvbox/titlebar/normal.png
+++ b/awesome/.config/awesome/themes/gruvbox/titlebar/normal.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/titlebar/ontop_active.png b/awesome/.config/awesome/themes/gruvbox/titlebar/ontop_active.png
new file mode 100644
index 0000000..e1f42fd
--- /dev/null
+++ b/awesome/.config/awesome/themes/gruvbox/titlebar/ontop_active.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/titlebar/ontop_focus_active.png b/awesome/.config/awesome/themes/gruvbox/titlebar/ontop_focus_active.png
deleted file mode 100644
index 7b938f0..0000000
--- a/awesome/.config/awesome/themes/gruvbox/titlebar/ontop_focus_active.png
+++ /dev/null
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/titlebar/ontop_focus_inactive.png b/awesome/.config/awesome/themes/gruvbox/titlebar/ontop_focus_inactive.png
deleted file mode 100644
index 9b6727f..0000000
--- a/awesome/.config/awesome/themes/gruvbox/titlebar/ontop_focus_inactive.png
+++ /dev/null
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/titlebar/ontop_inactive.png b/awesome/.config/awesome/themes/gruvbox/titlebar/ontop_inactive.png
new file mode 100644
index 0000000..1cf8e20
--- /dev/null
+++ b/awesome/.config/awesome/themes/gruvbox/titlebar/ontop_inactive.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/titlebar/sticky_active.png b/awesome/.config/awesome/themes/gruvbox/titlebar/sticky_active.png
new file mode 100644
index 0000000..7ed573e
--- /dev/null
+++ b/awesome/.config/awesome/themes/gruvbox/titlebar/sticky_active.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/titlebar/sticky_focus_active.png b/awesome/.config/awesome/themes/gruvbox/titlebar/sticky_focus_active.png
deleted file mode 100644
index 5f627db..0000000
--- a/awesome/.config/awesome/themes/gruvbox/titlebar/sticky_focus_active.png
+++ /dev/null
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/titlebar/sticky_focus_inactive.png b/awesome/.config/awesome/themes/gruvbox/titlebar/sticky_focus_inactive.png
deleted file mode 100644
index 8f484ad..0000000
--- a/awesome/.config/awesome/themes/gruvbox/titlebar/sticky_focus_inactive.png
+++ /dev/null
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/titlebar/sticky_inactive.png b/awesome/.config/awesome/themes/gruvbox/titlebar/sticky_inactive.png
new file mode 100644
index 0000000..cc03ad4
--- /dev/null
+++ b/awesome/.config/awesome/themes/gruvbox/titlebar/sticky_inactive.png
Binary files differ