local awful = require "awful" local wibox = require("wibox") local gears = require("gears") local beautiful = require("beautiful") local longpress = require("awesome-longpress") local powermenu = { buttonsize = 128, spacing = 5, iconPath = gears.filesystem.get_configuration_dir() .. "/awesome-powermenu/", lock = function() error("Lock requested, but no function specified") end, suspend = function() error("Suspend requested, but no function specified") end, logout = function() error("Logout requested, but no function specified") end, poweroff = function() error("Power off requested, but no function specified") end, reboot = function() error("Reboot requested, but no function specified") end, fullscreen = function(self) self.screen.navbar.visible = not self.screen.navbar.visible end, rotateLeft = function(self) for k,v in pairs(self.screen.outputs) do awful.spawn(gears.filesystem.get_configuration_dir() .. "/awesome-powermenu/rotate.lua left " .. tostring(k)) end awesome.restart() end, rotateRight = function(self) for k,v in pairs(self.screen.outputs) do awful.spawn(gears.filesystem.get_configuration_dir() .. "/awesome-powermenu/rotate.lua right " .. tostring(k)) end awesome.restart() end, brightnessUp = function() awful.spawn.easy_async_with_shell("ls /sys/class/backlight/",function(stdout,stderr,_,_) local devices = {} for line in stdout:gmatch("%S+") do local f = io.open(string.format("/sys/class/backlight/%s/brightness",line),"rb") if not f then error("wtf") end local brightness = tonumber(f:read("*a")) f:close() local f = io.open(string.format("/sys/class/backlight/%s/max_brightness",line),"rb") local max_brightness = tonumber(f:read("*a")) f:close() devices[line]={["brightness"]=brightness,["max_brightness"]=max_brightness} end for k,v in pairs(devices) do v.stepsize = math.floor(v.max_brightness / 10) v.currentstep = math.floor(v.brightness / v.stepsize) local f = io.open(string.format("/sys/class/backlight/%s/brightness",k),"wb") f:write(v.stepsize * math.min(10,(v.currentstep+1))) f:close() end end) end, brightnessDown = function() awful.spawn.easy_async_with_shell("ls /sys/class/backlight/",function(stdout,stderr,_,_) local devices = {} for line in stdout:gmatch("%S+") do local f = io.open(string.format("/sys/class/backlight/%s/brightness",line),"rb") if not f then error("wtf") end local brightness = tonumber(f:read("*a")) f:close() local f = io.open(string.format("/sys/class/backlight/%s/max_brightness",line),"rb") local max_brightness = tonumber(f:read("*a")) f:close() devices[line]={["brightness"]=brightness,["max_brightness"]=max_brightness} end for k,v in pairs(devices) do v.stepsize = math.floor(v.max_brightness / 10) v.currentstep = math.floor(v.brightness / v.stepsize) local f = io.open(string.format("/sys/class/backlight/%s/brightness",k),"wb") f:write(v.stepsize * math.max(1,(v.currentstep-1))) f:close() end end) end } function powermenu.new(s) local powermenuWidget = wibox.widget{ layout = wibox.layout.grid.vertical(3), spacing = powermenu.spacing, } local powermenuPopup = awful.popup{ layout = wibox.layout.fixed.vertical, widget = powermenuWidget, border_color = beautiful.border_focus, border_width = 2, ontop = true, placement = awful.placement.centered, screen = s, visible = false, } local function addButton(icon, fn, lfn, hide) if hide == nil then hide = true end local newButton = awful.widget.button{ image = powermenu.iconPath .. "/" .. icon, } newButton:set_forced_width(powermenu.buttonsize) newButton:set_forced_height(powermenu.buttonsize) longpress.add(newButton, function() fn(powermenuPopup) if hide then powermenuPopup:hide() end end, function() lfn(powermenuPopup) if hide then powermenuPopup:hide() end end ) powermenuWidget:add(newButton) end addButton("system-log-out.svg", powermenu.logout, powermenu.poweroff) addButton("system-lock-screen.svg", powermenu.lock) addButton("system-reboot.svg", awesome.restart, powermenu.reboot) addButton("object-rotate-left.svg", powermenu.rotateLeft) addButton("system-suspend.svg", powermenu.suspend) addButton("object-rotate-right.svg", powermenu.rotateRight) addButton("brightness-up.svg", powermenu.brightnessUp, nil, false) addButton("view-fullscreen.svg", powermenu.fullscreen) addButton("brightness-down.svg", powermenu.brightnessDown, nil, false) function powermenuPopup.show(self) self.visible = true end function powermenuPopup.hide(self) self.visible = false end function powermenuPopup.toggle(self) self.visible = not self.visible end return powermenuPopup end return powermenu