about summary refs log tree commit diff
path: root/awesome
diff options
context:
space:
mode:
authorMcSinyx <vn.mcsinyx@gmail.com>2016-05-18 14:25:25 +0700
committerRaphael McSinyx <vn.mcsinyx@gmail.com>2016-11-20 16:36:30 +0700
commit57a8d8360c85528fb477e76ef1a5f2eeb151be14 (patch)
tree78de696741ad906e48e488e1968efcce984631c4 /awesome
parent095074967392b3b4c21891693a6ac9e40d1958d4 (diff)
downloaddotfiles-57a8d8360c85528fb477e76ef1a5f2eeb151be14.tar.gz
Initial commit
Diffstat (limited to 'awesome')
-rw-r--r--awesome/.config/awesome/rc.lua555
-rw-r--r--awesome/.config/awesome/themes/gruvbox/arrows/0.pngbin0 -> 276 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/arrows/1.pngbin0 -> 337 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/arrows/2.pngbin0 -> 274 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/arrows/3.pngbin0 -> 276 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/arrows/4.pngbin0 -> 276 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/arrows/5.pngbin0 -> 277 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/awesome-icon.pngbin0 -> 184 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/background-1280x800.pngbin0 -> 6232 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/background-2048x1152.pngbin0 -> 12473 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/background-2048x1280.pngbin0 -> 13752 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/background-2048x1536.pngbin0 -> 16391 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/gradient-debian-big.pngbin0 -> 352996 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/gradient-debian.pngbin0 -> 305404 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/layouts/dwindle.pngbin0 -> 228 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/layouts/fairh.pngbin0 -> 217 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/layouts/fairv.pngbin0 -> 223 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/layouts/floating.pngbin0 -> 231 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/layouts/fullscreen.pngbin0 -> 245 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/layouts/magnifier.pngbin0 -> 222 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/layouts/max.pngbin0 -> 290 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/layouts/spiral.pngbin0 -> 225 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/layouts/tile.pngbin0 -> 213 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/layouts/tilebottom.pngbin0 -> 208 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/layouts/tileleft.pngbin0 -> 209 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/layouts/tiletop.pngbin0 -> 206 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/submenu.pngbin0 -> 184 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/taglist/squarefz.pngbin0 -> 166 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/taglist/squarez.pngbin0 -> 162 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/theme.lua153
-rw-r--r--awesome/.config/awesome/themes/gruvbox/titlebar/close_focus.pngbin0 -> 272 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/titlebar/floating_focus_active.pngbin0 -> 273 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/titlebar/floating_focus_inactive.pngbin0 -> 273 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/titlebar/maximized_focus_active.pngbin0 -> 271 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/titlebar/maximized_focus_inactive.pngbin0 -> 269 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/titlebar/normal.pngbin0 -> 272 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/titlebar/ontop_focus_active.pngbin0 -> 272 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/titlebar/ontop_focus_inactive.pngbin0 -> 272 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/titlebar/sticky_focus_active.pngbin0 -> 273 bytes
-rw-r--r--awesome/.config/awesome/themes/gruvbox/titlebar/sticky_focus_inactive.pngbin0 -> 272 bytes
40 files changed, 708 insertions, 0 deletions
diff --git a/awesome/.config/awesome/rc.lua b/awesome/.config/awesome/rc.lua
new file mode 100644
index 0000000..7b41742
--- /dev/null
+++ b/awesome/.config/awesome/rc.lua
@@ -0,0 +1,555 @@
+-- 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")
+-- Theme handling library
+local beautiful = require("beautiful")
+-- Notification library
+local naughty = require("naughty")
+local menubar = require("menubar")
+-- Vicious and Lain
+local vicious = require("vicious")
+
+-- Load Debian menu entries
+require("debian.menu")
+
+-- Launch a composting manager
+--awful.util.spawn_with_shell("compton -r 6 -o .50 -l -9 -t -9 -c -C &")
+
+-- {{{ Error handling
+-- 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 })
+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)
+end
+-- }}}
+
+-- {{{ Variable definitions
+-- Themes define colours, icons, font and wallpapers.
+beautiful.init("~/.config/awesome/themes/gruvbox/theme.lua")
+
+modkey = "Mod4"
+
+-- Table of layouts to cover with awful.layout.inc, order matters.
+local layouts =
+{
+    --lain.layout.uselessfair,
+    --lain.layout.uselessfair.horizontal,
+    awful.layout.suit.fair,
+    awful.layout.suit.fair.horizontal,
+    awful.layout.suit.magnifier,
+    awful.layout.suit.max.fullscreen,
+    awful.layout.suit.tile.bottom,
+    awful.layout.suit.tile,
+    --lain.layout.uselesstile.bottom,
+    --lain.layout.uselesstile
+}
+-- }}}
+
+-- {{{ 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
+-- }}}
+
+-- {{{ 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])
+end
+-- }}}
+
+-- {{{ Menu
+-- Create a laucher widget and a main menu
+mymainmenu = awful.menu( debian.menu.Debian_menu.Debian )
+
+-- Menubar configuration
+--menubar.utils.terminal = "uxterm" -- Set the terminal for applications that require it
+-- }}}
+
+-- {{{ Wibox
+-- 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)
+                    )
+
+-- Create a textclock widget
+myclock_text = awful.widget.textclock(
+    "<span color='#3c3836'> #%u %FT%R</span>",
+    60)
+myclock = wibox.widget.background()
+myclock:set_widget(myclock_text)
+myclock:set_bg("#d65d0e")
+
+-- 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,
+    5)
+mycpuwidget = wibox.widget.background()
+mycpuwidget:set_widget(mycpuwidget_text)
+mycpuwidget:set_bg("#d79921")
+
+-- Create a memory usage widget
+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,
+    5)
+mymemwidget = wibox.widget.background()
+mymemwidget:set_widget(mymemwidget_text)
+mymemwidget:set_bg("#98971a")
+
+-- 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")
+
+-- Create a volume widget
+--function update_volume(widget)
+--   local fd = io.popen("amixer sget Master")
+--   local status = fd:read("*all")
+--   fd:close()
+--   -- local volume = tonumber(string.match(status, "(%d?%d?%d)%%")) / 100
+--   local volume = string.match(status, "(%d?%d?%d)%%")
+--   volume = string.format("VOL%03d", volume)
+--   status = string.match(status, "%[(o[^%]]*)%]")
+--   if string.find(status, "on", 1, true) then
+--       volume = volume .. "%"
+--   else
+--       volume = volume .. "M"
+--   end
+--   widget:set_markup("<span color='#3c3836'> " .. volume .. "</span>")
+--end
+ 
+myvolwidget_text = wibox.widget.textbox()
+--update_volume(myvolwidget_text)
+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")
+
+-- Create network usage widgets
+--myupwidget_text = wibox.widget.textbox()
+--vicious.register(
+--    myupwidget_text,
+--    vicious.widgets.net,
+--    function (widget, args)
+--        return ("<span color='#3c3836'> ↑%04.0fkB</span>"):format(args["{wlp2s2 up_kb}"])
+--    end,
+--    1)
+--myupwidget = wibox.widget.background()
+--myupwidget:set_widget(myupwidget_text)
+--myupwidget:set_bg("#689d6a")
+--
+--mydownwidget_text = wibox.widget.textbox()
+--vicious.register(
+--    mydownwidget_text,
+--    vicious.widgets.net,
+--    function (widget, args)
+--        return ("<span color='#3c3836'> ↓%04.0fkB</span>"):format(args["{wlp2s2 down_kb}"])
+--    end,
+--    1)
+--mydownwidget = wibox.widget.background()
+--mydownwidget:set_widget(mydownwidget_text)
+--mydownwidget: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)
+
+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 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(myclock)
+    --left_layout:add(myarrow0)
+    left_layout:add(myarrow1)
+    left_layout:add(mycpuwidget)
+    left_layout:add(myarrow2)
+    left_layout:add(mymemwidget)
+    left_layout:add(myarrow3)
+    --left_layout:add(myupwidget)
+    left_layout:add(mybatwidget)
+    left_layout:add(myarrow4)
+    left_layout:add(myvolwidget)
+    --left_layout:add(mydownwidget)
+    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_right(right_layout)
+
+    mywibox[s]:set_widget(layout)
+end
+-- }}}
+
+-- {{{ Mouse bindings
+root.buttons(awful.util.table.join(
+    awful.button({ }, 3, function () mymainmenu:toggle() end),
+    awful.button({ }, 4, awful.tag.viewnext),
+    awful.button({ }, 5, awful.tag.viewprev)
+))
+-- }}}
+
+-- {{{ Key bindings
+globalkeys = awful.util.table.join(
+    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,           }, "0",      function () awful.screen.focus_relative( 1) end),
+    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, "Shift"   }, "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,           }, "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,           }, "t",     function () awful.util.spawn("uxterm") end),
+    awful.key({ modkey, "Shift"   }, "t",     function () awful.util.spawn("uxterm -e su -") end),
+    awful.key({ modkey,           }, "b",     function () awful.util.spawn("x-www-browser") end),
+    awful.key({ modkey,           }, "v",     function () awful.util.spawn("gvim") end),
+    awful.key({ modkey,           }, "f",     function () awful.util.spawn("spacefm") end),
+    awful.key({ modkey,           }, "p",     function () awful.util.spawn("uxterm -e python3") end),
+    awful.key({ modkey,           }, "m",     function () awful.util.spawn("uxterm -e mutt") end),
+    awful.key({ modkey,           }, "r",     function () awful.util.spawn("uxterm -e ranger") end),
+    awful.key({ modkey,           }, "c",     function () awful.util.spawn("uxterm -e cmus") end),
+    awful.key({ modkey,           }, "w",     function () awful.util.spawn("uxterm -e weechat") end),
+    awful.key({ modkey,           }, "s",     function () awful.util.spawn("slock xset dpms force off") end),
+    awful.key({ modkey, "Shift"   }, "s",     function () awful.util.spawn("slock systemctl suspend -i") end),
+    awful.key({ modkey, "Shift"   }, "r", awesome.restart),
+    awful.key({ modkey, "Shift"   }, "q", awesome.quit),
+
+    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),
+
+    awful.key({ modkey, "Shift"   }, "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 }, "p", function() menubar.show() end)
+)
+
+-- Adjusting volumes
+globalkeys = awful.util.table.join(globalkeys, awful.key({ }, "XF86AudioRaiseVolume", function()
+    awful.util.spawn("amixer sset Master 5%+", false)
+    --update_volume(myvolwidget_text)
+end))
+globalkeys = awful.util.table.join(globalkeys, awful.key({ }, "XF86AudioLowerVolume", function()
+    awful.util.spawn("amixer sset Master 5%-", false)
+    --update_volume(myvolwidget_text)
+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)
+    --update_volume(myvolwidget_text)
+end))
+
+clientkeys = awful.util.table.join(
+    awful.key({ modkey, "Shift"   }, "f",      function (c) c.fullscreen = not c.fullscreen  end),
+    awful.key({ modkey,           }, "q",      function (c) c:kill()                         end),
+    --awful.key({ modkey, "Control" }, "Return",  awful.client.floating.toggle                     ),
+    awful.key({ modkey, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end),
+    awful.key({ modkey, "Shift"   }, "0",      awful.client.movetoscreen                        ),
+    --awful.key({ modkey,           }, "t",      function (c) c.ontop = not c.ontop            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,           }, "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)
+)
+
+-- Bind all key numbers to tags.
+-- Be careful: we use keycodes to make it works on any keyboard layout.
+-- This should map on the top row of your keyboard, usually 1 to 9.
+for i = 1, 9 do
+    globalkeys = awful.util.table.join(globalkeys,
+        -- View tag only.
+        awful.key({ modkey }, "#" .. i + 9,
+                  function ()
+                        local screen = mouse.screen
+                        local tag = awful.tag.gettags(screen)[i]
+                        if tag then
+                           awful.tag.viewonly(tag)
+                        end
+                  end),
+        -- Toggle tag.
+        awful.key({ modkey, "Control" }, "#" .. i + 9,
+                  function ()
+                      local screen = mouse.screen
+                      local tag = awful.tag.gettags(screen)[i]
+                      if tag then
+                         awful.tag.viewtoggle(tag)
+                      end
+                  end),
+        -- Move client to tag.
+        awful.key({ modkey, "Shift" }, "#" .. i + 9,
+                  function ()
+                      if client.focus then
+                          local tag = awful.tag.gettags(client.focus.screen)[i]
+                          if tag then
+                              awful.client.movetotag(tag)
+                          end
+                     end
+                  end),
+        -- Toggle tag.
+        awful.key({ modkey, "Control", "Shift" }, "#" .. i + 9,
+                  function ()
+                      if client.focus then
+                          local tag = awful.tag.gettags(client.focus.screen)[i]
+                          if tag then
+                              awful.client.toggletag(tag)
+                          end
+                      end
+                  end))
+end
+
+clientbuttons = awful.util.table.join(
+    awful.button({ }, 1, function (c) client.focus = c; c:raise() end),
+    awful.button({ modkey }, 1, awful.mouse.client.move),
+    awful.button({ modkey }, 3, awful.mouse.client.resize))
+
+-- Set keys
+root.keys(globalkeys)
+-- }}}
+
+-- {{{ Rules
+-- 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,
+                     focus = awful.client.focus.filter,
+                     size_hints_honor = false,
+                     raise = true,
+                     keys = clientkeys,
+                     buttons = clientbuttons } },
+    --{ rule = { class = "X-terminal-emulator" }, 
+    --  properties = { size_hints_honor = false } },
+    --{ rule = { class = "Gvim" }, 
+    --  properties = { size_hints_honor = false } },
+    { rule = { class = "Volti-mixer" },
+      properties = { floating = true } },
+    { rule = { class = "vlc" },
+      properties = { floating = true } },
+    { rule = { class = "Gcolor2" },
+      properties = { floating = true } },
+    { rule = { class = "pinentry" },
+      properties = { floating = true } },
+    { rule = { class = "Twf" },
+      properties = { floating = true } },
+    { rule = { class = "Galculator" },
+      properties = { floating = true } },
+    -- Set Firefox to always map on tags number 2 of screen 1.
+    -- { rule = { class = "Firefox" },
+    --   properties = { tag = tags[1][2] } },
+}
+-- }}}
+
+-- {{{ Signals
+-- 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)
+    end
+
+    --local titlebars_enabled = true
+    --if titlebars_enabled and (c.type == "normal" or c.type == "dialog") then
+    if awful.client.floating.get(c) 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 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_middle(middle_layout)
+
+        awful.titlebar(c):set_widget(layout)
+    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)
+-- }}}
diff --git a/awesome/.config/awesome/themes/gruvbox/arrows/0.png b/awesome/.config/awesome/themes/gruvbox/arrows/0.png
new file mode 100644
index 0000000..9acbc37
--- /dev/null
+++ 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
new file mode 100644
index 0000000..29ad5b0
--- /dev/null
+++ 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
new file mode 100644
index 0000000..4b6a25f
--- /dev/null
+++ 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
new file mode 100644
index 0000000..5d40ead
--- /dev/null
+++ 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
new file mode 100644
index 0000000..c821055
--- /dev/null
+++ 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
new file mode 100644
index 0000000..47c8db0
--- /dev/null
+++ b/awesome/.config/awesome/themes/gruvbox/arrows/5.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/awesome-icon.png b/awesome/.config/awesome/themes/gruvbox/awesome-icon.png
new file mode 100644
index 0000000..6ce854b
--- /dev/null
+++ b/awesome/.config/awesome/themes/gruvbox/awesome-icon.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/background-1280x800.png b/awesome/.config/awesome/themes/gruvbox/background-1280x800.png
new file mode 100644
index 0000000..a8d6ff0
--- /dev/null
+++ b/awesome/.config/awesome/themes/gruvbox/background-1280x800.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/background-2048x1152.png b/awesome/.config/awesome/themes/gruvbox/background-2048x1152.png
new file mode 100644
index 0000000..f138a11
--- /dev/null
+++ 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
new file mode 100644
index 0000000..9ad4338
--- /dev/null
+++ 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
new file mode 100644
index 0000000..66de69d
--- /dev/null
+++ b/awesome/.config/awesome/themes/gruvbox/background-2048x1536.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/gradient-debian-big.png b/awesome/.config/awesome/themes/gruvbox/gradient-debian-big.png
new file mode 100644
index 0000000..6c51fff
--- /dev/null
+++ b/awesome/.config/awesome/themes/gruvbox/gradient-debian-big.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/gradient-debian.png b/awesome/.config/awesome/themes/gruvbox/gradient-debian.png
new file mode 100644
index 0000000..6e3928f
--- /dev/null
+++ b/awesome/.config/awesome/themes/gruvbox/gradient-debian.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/layouts/dwindle.png b/awesome/.config/awesome/themes/gruvbox/layouts/dwindle.png
new file mode 100644
index 0000000..914b0da
--- /dev/null
+++ 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
new file mode 100644
index 0000000..c68b04c
--- /dev/null
+++ 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
new file mode 100644
index 0000000..f71d011
--- /dev/null
+++ 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
new file mode 100644
index 0000000..fbebe75
--- /dev/null
+++ 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
new file mode 100644
index 0000000..d7b5615
--- /dev/null
+++ 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
new file mode 100644
index 0000000..cfaa4be
--- /dev/null
+++ 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
new file mode 100644
index 0000000..c975785
--- /dev/null
+++ 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
new file mode 100644
index 0000000..873cd18
--- /dev/null
+++ 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
new file mode 100644
index 0000000..731cdef
--- /dev/null
+++ 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
new file mode 100644
index 0000000..064e429
--- /dev/null
+++ 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
new file mode 100644
index 0000000..0bf6785
--- /dev/null
+++ 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
new file mode 100644
index 0000000..781f2ee
--- /dev/null
+++ 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
new file mode 100644
index 0000000..6f9e9c5
--- /dev/null
+++ b/awesome/.config/awesome/themes/gruvbox/submenu.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/taglist/squarefz.png b/awesome/.config/awesome/themes/gruvbox/taglist/squarefz.png
new file mode 100644
index 0000000..a780e55
--- /dev/null
+++ b/awesome/.config/awesome/themes/gruvbox/taglist/squarefz.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/taglist/squarez.png b/awesome/.config/awesome/themes/gruvbox/taglist/squarez.png
new file mode 100644
index 0000000..f49944e
--- /dev/null
+++ b/awesome/.config/awesome/themes/gruvbox/taglist/squarez.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/theme.lua b/awesome/.config/awesome/themes/gruvbox/theme.lua
new file mode 100644
index 0000000..4f1bceb
--- /dev/null
+++ b/awesome/.config/awesome/themes/gruvbox/theme.lua
@@ -0,0 +1,153 @@
+-------------------------------
+--  "gruvbox" awesome theme  --
+--      By McSinyx (cnx)     --
+-------------------------------
+
+-- Alternative icon sets and widget icons:
+--  * http://awesome.naquadah.org/wiki/Nice_Icons
+
+-- {{{ Main
+theme = {}
+--theme.wallpaper = mythemedir .. "gradient-debian-big.png"
+theme.wallpaper_cmd = { "hsetroot -solid '#282828'" }
+-- }}}
+
+-- {{{ Styles
+theme.font  = "Droid Sans Mono Slashed 11"
+mybg        = "#282828"
+mybg_alt    = "#3c3836"
+myfg        = "#ebdbb2"
+myred       = "#cc241d"
+mypurple    = "#b16286"
+
+-- {{{ Colors
+theme.fg_normal  = myfg
+theme.fg_focus   = myfg
+theme.fg_urgent  = "#d3869b"
+theme.bg_normal  = mybg
+theme.bg_focus   = mybg_alt
+theme.bg_urgent  = theme.bg_normal
+theme.bg_systray = theme.bg_normal
+-- }}}
+
+-- {{{ Borders
+theme.border_width  = 1
+theme.border_normal = "#3c3836"
+theme.border_focus  = "#b16286"
+theme.border_marked = "#d3869b"
+-- }}}
+
+-- {{{ Titlebars
+theme.titlebar_bg_focus  = "#282828"
+theme.titlebar_bg_normal = "#282828"
+-- }}}
+
+-- There are other variable sets
+-- overriding the default one when
+-- defined, the sets are:
+-- [taglist|tasklist]_[bg|fg]_[focus|urgent]
+-- titlebar_[normal|focus]
+-- tooltip_[font|opacity|fg_color|bg_color|border_width|border_color]
+-- Example:
+--theme.taglist_bg_focus = "#d3869b"
+-- }}}
+
+-- {{{ Widgets
+-- You can add as many variables as
+-- you wish and access them by using
+-- beautiful.variable in your rc.lua
+--theme.fg_widget        = "#AECF96"
+--theme.fg_center_widget = "#88A175"
+--theme.fg_end_widget    = "#FF5656"
+--theme.bg_widget        = "#494B4F"
+--theme.border_widget    = "#282828"
+-- }}}
+
+-- {{{ Mouse finder
+theme.mouse_finder_color = "#d3869b"
+-- mouse_finder_[timeout|animate_timeout|radius|factor]
+-- }}}
+
+-- {{{ Menu
+-- Variables set for theming the menu:
+-- menu_[bg|fg]_[normal|focus]
+-- menu_[border_color|border_width]
+theme.menu_height = 20
+theme.menu_width  = 160
+-- }}}
+
+-- {{{ Icons
+mythemedir = "~/.config/awesome/themes/gruvbox/"
+-- {{{ Taglist
+theme.taglist_squares_sel   = mythemedir .. "taglist/squarefz.png"
+theme.taglist_squares_unsel = mythemedir .. "taglist/squarez.png"
+--theme.taglist_squares_resize = "false"
+-- }}}
+
+-- {{{ Misc
+theme.awesome_icon           = mythemedir .. "awesome-icon.png"
+theme.menu_submenu_icon      = mythemedir .. "submenu.png"
+-- }}}
+
+-- {{{ Layout
+theme.layout_tile       = mythemedir .. "layouts/tile.png"
+theme.layout_tileleft   = mythemedir .. "layouts/tileleft.png"
+theme.layout_tilebottom = mythemedir .. "layouts/tilebottom.png"
+theme.layout_tiletop    = mythemedir .. "layouts/tiletop.png"
+theme.layout_fairv      = mythemedir .. "layouts/fairv.png"
+theme.layout_fairh      = mythemedir .. "layouts/fairh.png"
+theme.layout_spiral     = mythemedir .. "layouts/spiral.png"
+theme.layout_dwindle    = mythemedir .. "layouts/dwindle.png"
+theme.layout_max        = mythemedir .. "layouts/max.png"
+theme.layout_fullscreen = mythemedir .. "layouts/fullscreen.png"
+theme.layout_magnifier  = mythemedir .. "layouts/magnifier.png"
+theme.layout_floating   = mythemedir .. "layouts/floating.png"
+
+-- Lain's useless layouts
+theme.layout_uselesstile        = theme.layout_tile
+theme.layout_uselesstileleft    = theme.layout_tileleft
+theme.layout_uselesstilebottom  = theme.layout_tilebottom
+theme.layout_uselesstiletop     = theme.layout_tiletop
+theme.layout_uselessfair        = theme.layout_fairv
+theme.layout_uselessfairh       = theme.layout_fairh
+theme.layout_uselesspiral       = theme.layout_spiral
+theme.layout_uselessdwindle     = theme.layout_dwindle
+theme.useless_gap_width = 12
+-- }}}
+
+-- {{{ Titlebar
+theme.titlebar_close_button_focus  = mythemedir .. "titlebar/close_focus.png"
+theme.titlebar_close_button_normal = mythemedir .. "titlebar/normal.png"
+
+theme.titlebar_ontop_button_focus_active  = mythemedir .. "titlebar/ontop_focus_active.png"
+theme.titlebar_ontop_button_normal_active = mythemedir .. "titlebar/normal.png"
+theme.titlebar_ontop_button_focus_inactive  = mythemedir .. "titlebar/ontop_focus_inactive.png"
+theme.titlebar_ontop_button_normal_inactive = mythemedir .. "titlebar/normal.png"
+
+theme.titlebar_sticky_button_focus_active  = mythemedir .. "titlebar/sticky_focus_active.png"
+theme.titlebar_sticky_button_normal_active = mythemedir .. "titlebar/normal.png"
+theme.titlebar_sticky_button_focus_inactive  = mythemedir .. "titlebar/sticky_focus_inactive.png"
+theme.titlebar_sticky_button_normal_inactive = mythemedir .. "titlebar/normal.png"
+
+theme.titlebar_floating_button_focus_active  = mythemedir .. "titlebar/floating_focus_active.png"
+theme.titlebar_floating_button_normal_active = mythemedir .. "titlebar/normal.png"
+theme.titlebar_floating_button_focus_inactive  = mythemedir .. "titlebar/floating_focus_inactive.png"
+theme.titlebar_floating_button_normal_inactive = mythemedir .. "titlebar/normal.png"
+
+theme.titlebar_maximized_button_focus_active  = mythemedir .. "titlebar/maximized_focus_active.png"
+theme.titlebar_maximized_button_normal_active = mythemedir .. "titlebar/normal.png"
+theme.titlebar_maximized_button_focus_inactive  = mythemedir .. "titlebar/maximized_focus_inactive.png"
+theme.titlebar_maximized_button_normal_inactive = mythemedir .. "titlebar/normal.png"
+-- }}}
+
+-- {{{ 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"
+-- }}}
+-- }}}
+
+return theme
diff --git a/awesome/.config/awesome/themes/gruvbox/titlebar/close_focus.png b/awesome/.config/awesome/themes/gruvbox/titlebar/close_focus.png
new file mode 100644
index 0000000..e100e4a
--- /dev/null
+++ b/awesome/.config/awesome/themes/gruvbox/titlebar/close_focus.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
new file mode 100644
index 0000000..a6f0042
--- /dev/null
+++ b/awesome/.config/awesome/themes/gruvbox/titlebar/floating_focus_active.png
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
new file mode 100644
index 0000000..f70fa67
--- /dev/null
+++ b/awesome/.config/awesome/themes/gruvbox/titlebar/floating_focus_inactive.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
new file mode 100644
index 0000000..0a73987
--- /dev/null
+++ b/awesome/.config/awesome/themes/gruvbox/titlebar/maximized_focus_active.png
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
new file mode 100644
index 0000000..802061a
--- /dev/null
+++ b/awesome/.config/awesome/themes/gruvbox/titlebar/maximized_focus_inactive.png
Binary files differdiff --git a/awesome/.config/awesome/themes/gruvbox/titlebar/normal.png b/awesome/.config/awesome/themes/gruvbox/titlebar/normal.png
new file mode 100644
index 0000000..89f68b4
--- /dev/null
+++ b/awesome/.config/awesome/themes/gruvbox/titlebar/normal.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
new file mode 100644
index 0000000..efd96c6
--- /dev/null
+++ b/awesome/.config/awesome/themes/gruvbox/titlebar/ontop_focus_active.png
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
new file mode 100644
index 0000000..bb85b1c
--- /dev/null
+++ b/awesome/.config/awesome/themes/gruvbox/titlebar/ontop_focus_inactive.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
new file mode 100644
index 0000000..53b1394
--- /dev/null
+++ b/awesome/.config/awesome/themes/gruvbox/titlebar/sticky_focus_active.png
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
new file mode 100644
index 0000000..2787cbe
--- /dev/null
+++ b/awesome/.config/awesome/themes/gruvbox/titlebar/sticky_focus_inactive.png
Binary files differ