aboutsummaryrefslogtreecommitdiff
path: root/awesome/.config/awesome/lain/widget/contrib/redshift.lua
diff options
context:
space:
mode:
Diffstat (limited to 'awesome/.config/awesome/lain/widget/contrib/redshift.lua')
-rw-r--r--awesome/.config/awesome/lain/widget/contrib/redshift.lua54
1 files changed, 54 insertions, 0 deletions
diff --git a/awesome/.config/awesome/lain/widget/contrib/redshift.lua b/awesome/.config/awesome/lain/widget/contrib/redshift.lua
new file mode 100644
index 0000000..d91d941
--- /dev/null
+++ b/awesome/.config/awesome/lain/widget/contrib/redshift.lua
@@ -0,0 +1,54 @@
+--[[
+
+ Licensed under GNU General Public License v2
+ * (c) 2017, Luca CPZ
+ * (c) 2014, blueluke <http://github.com/blueluke>
+
+--]]
+
+local async = require("lain.helpers").async
+local awful = require("awful")
+local execute = os.execute
+local type = type
+
+-- Redshift
+-- lain.widget.contrib.redshift
+local redshift = { active = false, pid = nil }
+
+function redshift.start()
+ execute("pkill redshift")
+ awful.spawn.with_shell("redshift -x") -- clear adjustments
+ redshift.pid = awful.spawn.with_shell("redshift")
+ redshift.active = true
+ if type(redshift.update_fun) == "function" then
+ redshift.update_fun(redshift.active)
+ end
+end
+
+function redshift.toggle()
+ async({ awful.util.shell, "-c", string.format("ps -p %d -o pid=", redshift.pid) }, function(f)
+ if f and #f > 0 then -- redshift is running
+ -- Sending -USR1 toggles redshift (See project website)
+ execute("pkill -USR1 redshift")
+ redshift.active = not redshift.active
+ else -- not started or killed, (re)start it
+ redshift.start()
+ end
+ redshift.update_fun(redshift.active)
+ end)
+end
+
+-- Attach to a widget
+-- Provides a button which toggles redshift on/off on click
+-- @param widget: Widget to attach to.
+-- @param fun: Function to be run each time redshift is toggled (optional).
+-- Use it to update widget text or icons on status change.
+function redshift.attach(widget, fun)
+ redshift.update_fun = fun or function() end
+ if not redshift.pid then redshift.start() end
+ if widget then
+ widget:buttons(awful.util.table.join(awful.button({}, 1, function () redshift.toggle() end)))
+ end
+end
+
+return redshift