]> git.donarmstrong.com Git - x_base.git/blobdiff - .config/awesome/rc.lua
only show battery information if there is a battery
[x_base.git] / .config / awesome / rc.lua
index 0c3b1f541b113e44a56b341964b49c8d69f977b7..ac7ab6f63026dc2218317cab45138a5dae75474a 100644 (file)
@@ -1,26 +1,56 @@
 -- Standard awesome library
-require("awful")
+local gears = require("gears")
+local awful = require("awful")
+awful.rules = require("awful.rules")
 require("awful.autofocus")
-require("awful.rules")
+-- Widget and layout library
+local wibox = require("wibox")
 -- Theme handling library
-require("beautiful")
+local beautiful = require("beautiful")
 -- Notification library
-require("naughty")
-
-require("obvious.volume_alsa")
-require("obvious.battery")
-
+local naughty = require("naughty")
+local menubar = require("menubar")
 -- Load Debian menu entries
 require("debian.menu")
 
+-- from https://github.com/tony/awesome-config/blob/master/helpers.lua
+
+function file_exists(file)
+   s = awful.util.pread("/bin/dash -c 'if [ -e " .. file .. " ]; then echo true; fi;'"):gsub("\n","")
+   if s == 'true' then return true else return nil end
+end
+
+
 -- {{{ Variable definitions
 -- Themes define colours, icons, and wallpapers
 beautiful.init("/usr/share/awesome/themes/default/theme.lua")
 
+-- local APW
+-- if file_exists("apw/widget.lua") then
+local APW = require("apw/widget")
+-- end
+
+-- local vicious
+local vicious = require("vicious")
+
+local cpuwidget = wibox.widget.textbox()
+vicious.register(cpuwidget, vicious.widgets.cpu, "$1%CPU ")
+local batwidget = wibox.widget.textbox()
+local has_battery = false
+if file_exists("/sys/class/power_supply/BAT1") then
+   vicious.register(batwidget,vicious.widgets.bat," $2%$1 $3",120,"BAT1")
+   has_battery = true
+elseif file_exists("/sys/class/power_supply/BAT0") then
+   vicious.register(batwidget,vicious.widgets.bat," $2%$1 $3",120,"BAT0")
+   has_battery = true
+end
 -- This is used later as the default terminal and editor to run.
 terminal = "x-terminal-emulator"
 editor = os.getenv("EDITOR") or "editor"
 editor_cmd = terminal .. " -e " .. editor
+home = os.getenv("HOME")
+
+hostname = awful.util.pread("hostname -f"):gsub("\n", "")
 
 -- Default modkey.
 -- Usually, Mod4 is the key with a logo between Control and Alt.
@@ -30,7 +60,7 @@ editor_cmd = terminal .. " -e " .. editor
 modkey = "Mod4"
 
 -- Table of layouts to cover with awful.layout.inc, order matters.
-layouts =
+local layouts =
 {
     awful.layout.suit.tile,
     awful.layout.suit.tile.left,
@@ -49,10 +79,12 @@ layouts =
 
 -- {{{ Tags
 -- Define a tag table which hold all screen tags.
-tags = {}
+tags = {names={"mail","emacs","www","remotes",5,6,7,8,9}
+       }
 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])
+   local defaultlayout=layouts[9]
+   tags[s] = awful.tag(tags.names, s, defaultlayout)
 end
 -- }}}
 
@@ -71,19 +103,17 @@ mymainmenu = awful.menu({ items = { { "awesome", myawesomemenu, beautiful.awesom
                                   }
                         })
 
-mylauncher = awful.widget.launcher({ image = image(beautiful.awesome_icon),
+mylauncher = awful.widget.launcher({ image = beautiful.awesome_icon,
                                      menu = mymainmenu })
 -- }}}
 
 -- {{{ Wibox
 -- Create a textclock widget
-mytextclock = awful.widget.textclock({ align = "right" }, " %c ", 1)
+mytextclock = awful.widget.textclock() --{ align = "right" }, " %c ", 1)
 
-myvolumealsa = obvious.volume_alsa()
-mybattery = obvious.battery()
+-- mybattery = obvious.battery()
 
--- Create a systray
-mysystray = widget({ type = "systray" })
+-- mytemp = obvious.temp_info()
 
 -- Create a wibox for each screen and add it
 mywibox = {}
@@ -126,7 +156,7 @@ mytasklist.buttons = awful.util.table.join(
 
 for s = 1, screen.count() do
     -- Create a promptbox for each screen
-    mypromptbox[s] = awful.widget.prompt({ layout = awful.widget.layout.horizontal.leftright })
+    mypromptbox[s] = awful.widget.prompt()
     -- Create an imagebox widget which will contains an icon indicating which layout we're using.
     -- We need one layoutbox per screen.
     mylayoutbox[s] = awful.widget.layoutbox(s)
@@ -136,31 +166,38 @@ for s = 1, screen.count() do
                            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.label.all, mytaglist.buttons)
+    mytaglist[s] = awful.widget.taglist(s, awful.widget.taglist.filter.all, mytaglist.buttons)
 
     -- Create a tasklist widget
-    mytasklist[s] = awful.widget.tasklist(function(c)
-                                              return awful.widget.tasklist.label.currenttags(c, s)
-                                          end, mytasklist.buttons)
+    mytasklist[s] = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, mytasklist.buttons)
 
     -- Create the wibox
     mywibox[s] = awful.wibox({ position = "top", screen = s })
-    -- Add widgets to the wibox - order matters
-    mywibox[s].widgets = {
-        {
-            mylauncher,
-            mytaglist[s],
-            mypromptbox[s],
-            layout = awful.widget.layout.horizontal.leftright
-        },
-        mylayoutbox[s],
-        mytextclock,
-       myvolumealsa,
-       mybattery,
-        s == 1 and mysystray or nil,
-        mytasklist[s],
-        layout = awful.widget.layout.horizontal.rightleft
-    }
+
+    -- Widgets that are aligned to the left
+    local left_layout = wibox.layout.fixed.horizontal()
+    left_layout:add(mylauncher)
+    left_layout:add(mytaglist[s])
+    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(cpuwidget)
+    if has_battery then
+       right_layout:add(batwidget)
+    end
+    right_layout:add(mytextclock)
+    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
 -- }}}
 
@@ -176,8 +213,11 @@ root.buttons(awful.util.table.join(
 globalkeys = awful.util.table.join(
     -- awful.key({ modkey,           }, "Left",   awful.tag.viewprev       ),
     -- awful.key({ modkey,           }, "Right",  awful.tag.viewnext       ),
-   awful.key({},"XF86AudioRaiseVolume",function () obvious.volume_alsa.raise(0, "Master", 2) end),
-   awful.key({},"XF86AudioLowerVolume",function () obvious.volume_alsa.lower(0, "Master", 2) end),
+   awful.key({},"XF86AudioRaiseVolume",APW.Up),
+   awful.key({},"XF86AudioLowerVolume",APW.Down),
+   awful.key({},"XF86RotateWindows", function () awful.util.spawn("rotate_monitor") end),
+   awful.key({},"XF86MonBrightnessUp",function() awful.util.spawn("xbacklight -inc 5") end),
+   awful.key({},"XF86MonBrightnessDown",function() awful.util.spawn("xbacklight -dec 5") end),
     awful.key({ modkey,           }, "Escape", awful.tag.history.restore),
 
     awful.key({ modkey,           }, "j",
@@ -201,13 +241,22 @@ globalkeys = awful.util.table.join(
     awful.key({ modkey,           }, "Right", 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),
-
+              function ()
+                 -- awful.client.focus.history.previous()
+                 awful.client.focus.byidx(-1)
+                 if client.focus then
+                    client.focus:raise()
+                 end
+              end),
+    
+    awful.key({ modkey, "Shift"   }, "Tab",
+              function ()
+                 -- awful.client.focus.history.previous()
+                 awful.client.focus.byidx(1)
+                 if client.focus then
+                    client.focus:raise()
+                 end
+              end),
     -- Standard program
     awful.key({ modkey,           }, "Return", function () awful.util.spawn(terminal) end),
     awful.key({ modkey, "Control", "Shift" }, "r", awesome.restart),
@@ -223,14 +272,14 @@ globalkeys = awful.util.table.join(
     awful.key({ modkey, "Shift"   }, "n", function () awful.layout.inc(layouts, -1) end),
 
     -- resize floats
-    awful.key({ modkey, "Shift" }, "Down",  function () awful.client.moveresize(0, 20, 0, 0) end),
-    awful.key({ modkey, "Shift" }, "Up",    function () awful.client.moveresize(0, -20, 0, 0) end),
-    awful.key({ modkey, "Shift" }, "Left",  function () awful.client.moveresize(-20, 0, 0, 0) end),
-    awful.key({ modkey, "Shift" }, "Right", function () awful.client.moveresize(20, 0, 0, 0) end),
-    awful.key({ modkey, "Control" }, "Down",  function () awful.client.moveresize(0, 0, 0, -20) end),
-    awful.key({ modkey, "Control" }, "Up",    function () awful.client.moveresize(0, 0, 0, 20) end),
-    awful.key({ modkey, "Control" }, "Left",  function () awful.client.moveresize(0, 0, -20, 0) end),
-    awful.key({ modkey, "Control" }, "Right", function () awful.client.moveresize(0, 0, 20, 0) end),
+    awful.key({ modkey, "Control" }, "Down",  function () awful.client.moveresize(0, 20, 0, 0) end),
+    awful.key({ modkey, "Control" }, "Up",    function () awful.client.moveresize(0, -20, 0, 0) end),
+    awful.key({ modkey, "Control" }, "Left",  function () awful.client.moveresize(-20, 0, 0, 0) end),
+    awful.key({ modkey, "Control" }, "Right", function () awful.client.moveresize(20, 0, 0, 0) end),
+    awful.key({ modkey, "Control" , "Shift" }, "Down",  function () awful.client.moveresize(0, 0, 0, -20) end),
+    awful.key({ modkey, "Control" , "Shift" }, "Up",    function () awful.client.moveresize(0, 0, 0, 20) end),
+    awful.key({ modkey, "Control" , "Shift" }, "Left",  function () awful.client.moveresize(0, 0, -20, 0) end),
+    awful.key({ modkey, "Control" , "Shift" }, "Right", function () awful.client.moveresize(0, 0, 20, 0) end),
    -- Prompt
     awful.key({ modkey },            "r",     function () mypromptbox[mouse.screen]:run() end),
 
@@ -249,6 +298,8 @@ clientkeys = awful.util.table.join(
     awful.key({ modkey, "Control" }, "space",  awful.client.floating.toggle                     ),
     awful.key({ modkey,           }, "space", function (c) c:swap(awful.client.getmaster()) end),
     awful.key({ modkey,           }, "o",      awful.client.movetoscreen                        ),
+    awful.key({ modkey, "Shift"   }, "Right",  function(c) awful.client.movetoscreen(c,c.screen-1 % screen.count())      end),
+    awful.key({ modkey, "Shift"   }, "Left",   function(c) awful.client.movetoscreen(c,c.screen+1 % screen.count())     end),
     awful.key({ modkey,           }, "t",      function (c) c.ontop = not c.ontop            end),
     awful.key({ modkey, "Shift"   }, "r",      function (c) c:redraw()                       end),
     awful.key({ modkey, "Shift"   }, "m",      function (c) c.minimized = not c.minimized    end),
@@ -359,7 +410,7 @@ function warp_mouse()
     c = client.focus
     if c then
         local g = c:geometry()
-        mouse.coords({ x = g.x + 30, y = g.y + 30}, true)
+        mouse.coords({ x = g.x + 1, y = g.y + 1}, true)
     end
 end
 
@@ -373,3 +424,31 @@ end
 client.add_signal("focus", function(c) c.border_color = beautiful.border_focus end)
 client.add_signal("unfocus", function(c) c.border_color = beautiful.border_normal end)
 -- }}}
+
+
+wallpaper_dir = home .. "/media/background"
+if (not file_exists(wallpaper_dir)) then
+   wallpaper_dir = "/usr/share/awesome/themes/default/background.png"
+end
+
+wallpaper_cmd = "find " .. wallpaper_dir ..
+   " -xtype f \\( -iname '*.jpg' -o -iname '*.png' \\) " ..
+   " -not -name '.*' -print0 | shuf -n" .. screen.count() .. " -z | xargs -0 feh --draw-exif -d --bg-max"
+
+-- set up the wallpaper timer
+-- wallpaper_timer = timer({ timeout = 0 })
+-- wallpaper_timer:add_signal("timeout",
+--   function()
+--      -- tell awsetbg to randomly choose a wallpaper from your wallpaper directory
+--      os.execute(wallpaper_cmd)
+--      -- stop the timer (we don't need multiple instances running at the same time)
+--      wallpaper_timer:stop()
+--      
+--      -- define the interval in which the next wallpaper change should occur in seconds
+--      -- (in this case anytime between 10 and 20 minutes)
+--      --restart the timer
+--      wallpaper_timer.timeout = math.random(600,1200)
+--      wallpaper_timer:start()
+--   end
+-- )
+-- wallpaper_timer:start();