Compare commits

..

19 Commits

Author SHA1 Message Date
b39eac91a5 Fix battery widget charging/discharging state and use direct io instead of cat command 2021-07-18 16:45:12 +02:00
2d79eb8a5e Fix battery widget layout 2021-07-18 16:33:59 +02:00
ecbf661115 Refresh battery list on change checked every 2s (configurable) 2021-07-18 16:04:07 +02:00
00533c13f6 Add support for coarse representation of battery capacity, refactor battery widget for multiple battery display
https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-class-power
2021-07-18 15:36:09 +02:00
e36d42dfeb Merge pull request 'Fixed battery widget opening missing file' (#1) from lucastarche/simple-awesome:develop into develop
Reviewed-on: https://eternae.ink/ashpie/simple-awesome/pulls/1
2021-07-04 16:25:21 +02:00
Lucas Hernán Tarche
16772da504 Added fileExists() 2021-07-04 10:10:25 -03:00
Lucas Hernán Tarche
7ed0fc7522 Fixed battery widget opening missing file 2021-07-03 16:41:03 -03:00
662a816dd0 default config: update lock command for i3lock-color update 2021-05-31 10:50:51 +02:00
957452c55b Make sure fullscreen clients get a correct fullscreen geometry
Co-authored-by: Mițca Dumitru <dumitru0mitca@gmail.com>
2021-05-15 20:07:32 +02:00
6e94e368ed keyboard_layout.lua: quote command argument 2021-04-08 12:45:16 +02:00
fbc13ab63f media_control.lua: make volume management fully async 2021-04-08 12:45:10 +02:00
5961d734b5 Don't ignore wallpaper aspect ratio 2021-02-21 19:30:58 +01:00
93a3caf5a4 Add hotkey to manually toggle titlebar
Co-authored-by: Arkhist <peyrille.benjamin@gmail.com>
2021-02-17 11:41:17 +01:00
4b93a05fa5 Fix hotkey collision 2021-02-17 11:41:11 +01:00
c8409703e1 Update author name and README.md todo list
Co-authored-by: Arkhist <peyrille.benjamin@gmail.com>
2021-02-17 11:41:06 +01:00
3908cb4058 Hide titlebar for clients that request so
Co-authored-by: Arkhist <peyrille.benjamin@gmail.com>
2021-02-17 11:40:54 +01:00
f3b9ffcaf9 Revert "Disable titlebars on dialogs"
This reverts commit e689f17a56.
2021-02-17 11:40:49 +01:00
37a94eb5ed Add trailing new line to config.lua and theme.lua 2020-12-31 13:30:28 +01:00
e3cbb2f987 Power menu: add sleep, hybrid sleep and hibernate buttons 2020-12-31 13:30:19 +01:00
5 changed files with 178 additions and 187 deletions

View File

@ -1,61 +1,3 @@
local config = require("default_config") local config = require("default_config")
local awful = require("awful")
local gears = require("gears")
config.awesome.tiling.layouts = {
awful.layout.suit.tile,
awful.layout.suit.floating,
awful.layout.suit.tile.left,
awful.layout.suit.tile.bottom,
awful.layout.suit.tile.top,
-- awful.layout.suit.fair,
-- awful.layout.suit.fair.horizontal,
-- awful.layout.suit.spiral,
-- awful.layout.suit.spiral.dwindle,
-- awful.layout.suit.max,
-- awful.layout.suit.max.fullscreen,
-- awful.layout.suit.magnifier,
-- awful.layout.suit.corner.nw,
-- awful.layout.suit.corner.ne,
-- awful.layout.suit.corner.sw,
-- awful.layout.suit.corner.se,
}
config.autostart = gears.table.join(config.autostart,
{
"nextcloud",
"discord-canary",
"/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1",
"tabs-app",
"/usr/lib/kdeconnectd",
"kdeconnect-indicator",
}
)
config.widgets.system_resources.bars.screens = { 1, 2, 3 }
config.keys.custom_keys = {
{
hotkey = {
{ config.keys.modkey, },
"e"
},
action = function()
awful.spawn('pcmanfm')
end,
identity = { description = "pcmanfm", group = "utilities" }
},
{
hotkey = {
{ config.keys.modkey, },
'Print'
},
action = function()
awful.spawn('sh -c ~/scripts/flameshot_upload.sh')
end,
identity = { description = "Upload screeshot", group = "utilities" }
}
};
return config return config

View File

@ -171,7 +171,8 @@ config.widgets = {
battery = { battery = {
enabled = true, enabled = true,
screens = { 1, 2 }, screens = { 1, 2 },
refresh_interval = 30, -- In seconds refresh_interval = 15, -- In seconds
list_refresh_interval = 2, -- In seconds
precision = 0, -- How many decimals precision = 0, -- How many decimals
}, },
}, },

View File

@ -132,9 +132,6 @@ if config.widgets.keyboard_layout.enabled then
end end
hotkey.registerKeys(keyboard_layout.getKeys(config.keys.global_keys.keyboard_layout)) hotkey.registerKeys(keyboard_layout.getKeys(config.keys.global_keys.keyboard_layout))
-- Force set default keyboard layout
awful.spawn(config.widgets.keyboard_layout.layout_switch_command .. ' ' .. config.widgets.keyboard_layout.layouts[1])
-- --
-- Auto start -- Auto start
@ -200,24 +197,23 @@ os_menu = awful.widget.launcher({
-- {{{ Wibar -- {{{ Wibar
-- Create a textclock widget -- Create a textclock widget
main_clock = wibox.widget.textclock(" %F · %R ") mytextclock = wibox.widget.textclock()
utc_clock = wibox.widget.textclock(" %T UTC ¤ ", 1, "Z")
-- Create a wibox for each screen and add it -- Create a wibox for each screen and add it
-- local taglist_buttons = gears.table.join(awful.button({}, 1, function(t) t:view_only() end), local taglist_buttons = gears.table.join(awful.button({}, 1, function(t) t:view_only() end),
-- awful.button({ config.keys.modkey }, 1, function(t) awful.button({ config.keys.modkey }, 1, function(t)
-- if client.focus then if client.focus then
-- client.focus:move_to_tag(t) client.focus:move_to_tag(t)
-- end end
-- end), end),
-- awful.button({}, 3, awful.tag.viewtoggle), awful.button({}, 3, awful.tag.viewtoggle),
-- awful.button({ config.keys.modkey }, 3, function(t) awful.button({ config.keys.modkey }, 3, function(t)
-- if client.focus then if client.focus then
-- client.focus:toggle_tag(t) client.focus:toggle_tag(t)
-- end end
-- end), end),
-- awful.button({}, 4, function(t) awful.tag.viewnext(t.screen) end), awful.button({}, 4, function(t) awful.tag.viewnext(t.screen) end),
-- awful.button({}, 5, function(t) awful.tag.viewprev(t.screen) end)) awful.button({}, 5, function(t) awful.tag.viewprev(t.screen) end))
local tasklist_buttons = gears.table.join(awful.button({}, 1, function(c) local tasklist_buttons = gears.table.join(awful.button({}, 1, function(c)
if c == client.focus then if c == client.focus then
@ -270,11 +266,11 @@ awful.screen.connect_for_each_screen(function(s)
awful.button({}, 4, function() awful.layout.inc(1) end), awful.button({}, 4, function() awful.layout.inc(1) end),
awful.button({}, 5, function() awful.layout.inc(-1) end))) awful.button({}, 5, function() awful.layout.inc(-1) end)))
-- Create a taglist widget -- Create a taglist widget
-- s.mytaglist = awful.widget.taglist { s.mytaglist = awful.widget.taglist {
-- screen = s, screen = s,
-- filter = awful.widget.taglist.filter.all, filter = awful.widget.taglist.filter.all,
-- buttons = taglist_buttons buttons = taglist_buttons
-- } }
-- Create a tasklist widget -- Create a tasklist widget
s.mytasklist = awful.widget.tasklist { s.mytasklist = awful.widget.tasklist {
@ -334,7 +330,7 @@ awful.screen.connect_for_each_screen(function(s)
-- Left widgets -- Left widgets
layout = wibox.layout.fixed.horizontal, layout = wibox.layout.fixed.horizontal,
launcher, launcher,
-- s.mytaglist, s.mytaglist,
s.mypromptbox, s.mypromptbox,
}, },
s.mytasklist, -- Middle widget s.mytasklist, -- Middle widget
@ -345,8 +341,7 @@ awful.screen.connect_for_each_screen(function(s)
matchesScreen(config.widgets.system_resources.battery.screens) and system_resources_widget.battery or nil, matchesScreen(config.widgets.system_resources.battery.screens) and system_resources_widget.battery or nil,
keyboard_layout_widget, keyboard_layout_widget,
wibox.widget.systray(), wibox.widget.systray(),
utc_clock, mytextclock,
main_clock,
s.mylayoutbox, s.mylayoutbox,
os_menu, os_menu,
}, },
@ -551,50 +546,50 @@ clientkeys = gears.table.join(-- tiling
-- Bind all key numbers to tags. -- Bind all key numbers to tags.
-- Be careful: we use keycodes to make it work on any keyboard layout. -- Be careful: we use keycodes to make it work on any keyboard layout.
-- This should map on the top row of your keyboard, usually 1 to 9. -- This should map on the top row of your keyboard, usually 1 to 9.
-- for i = 1, 9 do for i = 1, 9 do
-- hotkey.registerKeys(-- View tag only. hotkey.registerKeys(-- View tag only.
-- awful.key({ config.keys.modkey }, "#" .. i + 9, awful.key({ config.keys.modkey }, "#" .. i + 9,
-- function() function()
-- local screen = awful.screen.focused() local screen = awful.screen.focused()
-- local tag = screen.tags[i] local tag = screen.tags[i]
-- if tag then if tag then
-- tag:view_only() tag:view_only()
-- end end
-- end, end,
-- { description = "view tag #" .. i, group = "tag" }), { description = "view tag #" .. i, group = "tag" }),
-- -- Toggle tag display. -- Toggle tag display.
-- awful.key({ config.keys.modkey, "Control" }, "#" .. i + 9, awful.key({ config.keys.modkey, "Control" }, "#" .. i + 9,
-- function() function()
-- local screen = awful.screen.focused() local screen = awful.screen.focused()
-- local tag = screen.tags[i] local tag = screen.tags[i]
-- if tag then if tag then
-- awful.tag.viewtoggle(tag) awful.tag.viewtoggle(tag)
-- end end
-- end, end,
-- { description = "toggle tag #" .. i, group = "tag" }), { description = "toggle tag #" .. i, group = "tag" }),
-- -- Move client to tag. -- Move client to tag.
-- awful.key({ config.keys.modkey, "Shift" }, "#" .. i + 9, awful.key({ config.keys.modkey, "Shift" }, "#" .. i + 9,
-- function() function()
-- if client.focus then if client.focus then
-- local tag = client.focus.screen.tags[i] local tag = client.focus.screen.tags[i]
-- if tag then if tag then
-- client.focus:move_to_tag(tag) client.focus:move_to_tag(tag)
-- end end
-- end end
-- end, end,
-- { description = "move focused client to tag #" .. i, group = "tag" }), { description = "move focused client to tag #" .. i, group = "tag" }),
-- -- Toggle tag on focused client. -- Toggle tag on focused client.
-- awful.key({ config.keys.modkey, "Control", "Shift" }, "#" .. i + 9, awful.key({ config.keys.modkey, "Control", "Shift" }, "#" .. i + 9,
-- function() function()
-- if client.focus then if client.focus then
-- local tag = client.focus.screen.tags[i] local tag = client.focus.screen.tags[i]
-- if tag then if tag then
-- client.focus:toggle_tag(tag) client.focus:toggle_tag(tag)
-- end end
-- end end
-- end, end,
-- { description = "toggle focused client on tag #" .. i, group = "tag" })) { description = "toggle focused client on tag #" .. i, group = "tag" }))
-- end end
clientbuttons = gears.table.join(awful.button({}, 1, function(c) clientbuttons = gears.table.join(awful.button({}, 1, function(c)
c:emit_signal("request::activate", "mouse_click", { raise = true }) c:emit_signal("request::activate", "mouse_click", { raise = true })
@ -674,7 +669,7 @@ awful.rules.rules = {
rule_any = { rule_any = {
type = { "normal", "dialog" } type = { "normal", "dialog" }
}, },
properties = { titlebars_enabled = false } properties = { titlebars_enabled = true }
}, },
-- Set Firefox to always map on the tag named "2" on screen 1. -- Set Firefox to always map on the tag named "2" on screen 1.

View File

@ -1,3 +1,4 @@
local awful = require("awful")
local beautiful = require("beautiful") local beautiful = require("beautiful")
local gears = require("gears") local gears = require("gears")
local naughty = require("naughty") local naughty = require("naughty")
@ -34,6 +35,15 @@ local bars = wibox.widget {
layout = wibox.layout.flex.horizontal layout = wibox.layout.flex.horizontal
} }
function fileExists(name)
local f = io.open(name, "r")
if f ~= nil then
io.close(f)
return true
end
return false
end
function readCommand(command) function readCommand(command)
local handle = io.popen(command, "r") local handle = io.popen(command, "r")
local r = handle:read("*a") local r = handle:read("*a")
@ -41,6 +51,13 @@ function readCommand(command)
return r return r
end end
function readFile(file)
local handle = io.open(file, "r")
local r = handle:read("*a")
handle:close()
return r
end
local cpuBar = bars:get_children()[1]:get_children()[1]:get_children()[1] local cpuBar = bars:get_children()[1]:get_children()[1]:get_children()[1]
function getCpuData() function getCpuData()
@ -122,67 +139,106 @@ gears.timer {
---
local battery = wibox.widget { --- Batteries
{ ---
markup = "-- %", rawBatteries = {}
align = "center", function refreshRawBatteries()
valign = "center", rawBatteries = readCommand("ls -A1 /sys/class/power_supply")
widget = wibox.widget.textbox,
},
margins = beautiful.system_resources_widget_battery_margin,
widget = wibox.container.margin,
}
local batteryText = battery:get_children()[1]
local rawBatteries = readCommand("ls -A1 /sys/class/power_supply")
function getBatteries()
return rawBatteries:gmatch("([^\n]+)")
end end
function hasBattery() function getBatteryLevel(battery)
return rawBatteries:len() > 0
end
function getBatteryCapacity()
local charge = 0 local charge = 0
local capacity = 0 local capacity = 0
for b in getBatteries() do if fileExists(battery .. "/energy_now") then
if b:sub(1,3) ~= 'hid' and readCommand("cat /sys/class/power_supply/" .. b .. "/type"):match("Battery") then charge = charge + readFile(battery .. "/energy_now")
charge = charge + readCommand("cat /sys/class/power_supply/" .. b .. "/energy_now") capacity = capacity + readFile(battery .. "/energy_full")
capacity = capacity + readCommand("cat /sys/class/power_supply/" .. b .. "/energy_full") elseif fileExists(battery .. "/charge_now") then
end charge = charge + readFile(battery .. "/charge_now")
capacity = capacity + readFile(battery .. "/charge_full")
elseif fileExists(battery .. "/capacity_level") then
return readFile(battery .. "/capacity_level")
else
return "Unsupported"
end end
return charge / capacity return string.format("%." .. config.battery.precision .. "f", (charge / capacity) * 100) .. "%"
end end
function isCharging() function isCharging(battery)
for b in getBatteries() do return readFile(battery .. "/status") == "Charging\n"
if readCommand("cat /sys/class/power_supply/" .. b .. "/type"):match("Battery") then end
return readCommand("cat /sys/class/power_supply/" .. b .. "/status") ~= "Discharging"
end
local batteryContainer = wibox.widget {
layout = wibox.layout.fixed.horizontal
}
local timers = {}
function refreshBatteries()
-- refresh raw batteries and check for change
local oldBatteries = rawBatteries
refreshRawBatteries()
if rawBatteries == oldBatteries then
return
end
-- clear timers
for i,v in ipairs(timers) do
v:stop()
end
timers = {};
-- clear layout
batteryContainer:set_children({})
for battery in rawBatteries:gmatch("([^\n]+)") do
local path = "/sys/class/power_supply/" .. battery
if readFile(path .. "/type"):match("Battery") then
-- widget
local widget = wibox.widget {
{
markup = "-- %",
align = "center",
valign = "center",
widget = wibox.widget.textbox,
},
margins = beautiful.system_resources_widget_battery_margin,
widget = wibox.container.margin,
}
-- tooltip
local name = readFile(path .. "/model_name")
local tooltip = awful.tooltip {
text = name
}
tooltip:add_to_object(widget)
-- update battery level
local batteryText = widget:get_children()[1]
local timer = gears.timer {
timeout = config.battery.refresh_interval,
call_now = true,
autostart = true,
callback = function()
batteryText.markup = (isCharging(path) and "+" or "") .. getBatteryLevel(path)
end
}
table.insert(timers, timer)
batteryContainer:add(widget)
end
end
end
gears.timer {
timeout = config.battery.list_refresh_interval,
call_now = true,
autostart = true,
callback = function()
refreshBatteries()
end end
return nil }
end
if hasBattery() then
gears.timer {
timeout = config.battery.refresh_interval,
call_now = true,
autostart = true,
callback = function()
batteryText.markup = string.format("%." .. config.battery.precision .. "f", getBatteryCapacity() * 100) .. "%"
end
}
else
battery = nil
end
return { return {
bars = bars, bars = bars,
battery = battery, battery = batteryContainer,
} }

View File

@ -1,6 +1,3 @@
local theme = require("default_theme") local theme = require("default_theme")
theme.useless_gap = 4
theme.border_width = 0
return theme return theme