aboutsummaryrefslogtreecommitdiff
path: root/widgets/pkg.lua
diff options
context:
space:
mode:
Diffstat (limited to 'widgets/pkg.lua')
-rw-r--r--widgets/pkg.lua41
1 files changed, 41 insertions, 0 deletions
diff --git a/widgets/pkg.lua b/widgets/pkg.lua
new file mode 100644
index 0000000..fa2375b
--- /dev/null
+++ b/widgets/pkg.lua
@@ -0,0 +1,41 @@
+---------------------------------------------------
+-- Licensed under the GNU General Public License v2
+-- * (c) 2010, Adrian C. <anrxc@sysphere.org>
+---------------------------------------------------
+
+-- {{{ Grab environment
+local io = { popen = io.popen }
+local math = { max = math.max }
+local setmetatable = setmetatable
+-- }}}
+
+
+-- Pkg: provides number of pending updates on GNU/Linux
+module("vicious.widgets.pkg")
+
+
+-- {{{ Packages widget type
+local function worker(format, dist)
+ -- Initialise counters
+ local updates = 0
+ local manager = {
+ ["Arch"] = { cmd = "pacman -Qu" },
+ ["Arch S"] = { cmd = "yes | pacman -Sup", sub = 2 },
+ ["Debian"] = { cmd = "apt-show-versions -u -b" },
+ ["Fedora"] = { cmd = "yum list updates", sub = 3 }
+ }
+
+ -- Check if updates are available
+ local pkg = manager[dist]
+ local f = io.popen(pkg.cmd)
+
+ for line in f:lines() do
+ updates = updates + 1
+ end
+ f:close()
+
+ return {pkg.sub and math.max(updates-pkg.sub, 0) or updates}
+end
+-- }}}
+
+setmetatable(_M, { __call = function(_, ...) return worker(...) end })