diff options
-rw-r--r-- | batteryarc-widget/README.md | 2 | ||||
-rw-r--r-- | cpu-widget/cpu-png | bin | 0 -> 90688 bytes | |||
-rw-r--r-- | cpu-widget/cpu-widget.lua | 136 | ||||
-rw-r--r-- | cpu-widget/cpu.gif | bin | 4913 -> 261200 bytes | |||
-rw-r--r-- | cpu-widget/out.gif | bin | 3505 -> 0 bytes | |||
-rw-r--r-- | jira-widget/jira.lua | 4 | ||||
-rw-r--r-- | storage-widget/README.md | 24 | ||||
-rw-r--r-- | storage-widget/out.gif | bin | 0 -> 103946 bytes | |||
-rw-r--r-- | storage-widget/storage-widget.lua | 156 | ||||
-rw-r--r-- | volume-widget/volume.lua | 2 | ||||
-rw-r--r-- | weather-widget/weather.lua | 4 |
11 files changed, 281 insertions, 47 deletions
diff --git a/batteryarc-widget/README.md b/batteryarc-widget/README.md index 97f5bcc..de83f6e 100644 --- a/batteryarc-widget/README.md +++ b/batteryarc-widget/README.md @@ -50,7 +50,7 @@ s.mytasklist, -- Middle widget --[[or customized]] batteryarc_widget({ show_current_level = true, - arc_thickness = '1', + arc_thickness = 1, }), } ... diff --git a/cpu-widget/cpu-png b/cpu-widget/cpu-png Binary files differnew file mode 100644 index 0000000..96ba29f --- /dev/null +++ b/cpu-widget/cpu-png diff --git a/cpu-widget/cpu-widget.lua b/cpu-widget/cpu-widget.lua index d256147..7dfc5a7 100644 --- a/cpu-widget/cpu-widget.lua +++ b/cpu-widget/cpu-widget.lua @@ -16,6 +16,21 @@ local gears = require("gears") local widget = {} +local function split(string_to_split, separator) + if separator == nil then separator = "%s" end + local t={} + + for str in string.gmatch(string_to_split, "([^".. separator .."]+)") do + table.insert(t, str) + end + + return t +end + +local function starts_with(str, start) + return str:sub(1, #start) == start +end + local function worker(args) local args = args or {} @@ -36,17 +51,41 @@ local function worker(args) } local cpu_rows = { - { widget = wibox.widget.textbox }, spacing = 4, layout = wibox.layout.fixed.vertical, - } + local is_update = true local process_rows = { - { widget = wibox.widget.textbox }, - spacing = 4, + spacing = 8, layout = wibox.layout.fixed.vertical, + } + local process_header = { + { + markup = '<b>PID</b>', + forced_width = 40, + widget = wibox.widget.textbox + }, + { + markup = '<b>Name</b>', + forced_width = 40, + widget = wibox.widget.textbox + }, + { + { + markup = '<b>%CPU</b>', + forced_width = 40, + widget = wibox.widget.textbox + }, + { + markup = '<b>%MEM</b>', + forced_width = 40, + widget = wibox.widget.textbox + }, + layout = wibox.layout.fixed.horizontal + }, + layout = wibox.layout.align.horizontal } local popup = awful.popup{ @@ -60,6 +99,9 @@ local function worker(args) widget = {} } + popup:connect_signal("mouse::enter", function(c) is_update = false end) + popup:connect_signal("mouse::leave", function(c) is_update = true end) + cpugraph_widget:buttons( awful.util.table.join( awful.button({}, 1, function() @@ -77,12 +119,8 @@ local function worker(args) --- By default graph widget goes from left to right, so we mirror it and push up a bit local cpu_widget = wibox.container.margin(wibox.container.mirror(cpugraph_widget, { horizontal = true }), 0, 0, 0, 2) - local function starts_with(str, start) - return str:sub(1, #start) == start - end - local cpus = {} - watch([[bash -c "cat /proc/stat | grep '^cpu.' ; ps -eo pid,comm,%cpu,%mem --sort=-%cpu | head"]], 1, + watch([[bash -c "cat /proc/stat | grep '^cpu.' ; ps -eo '%p|%c|%C|' -o "%mem" -o '|%a' --sort=-%cpu | head -11 | tail -n +2"]], 1, function(widget, stdout) local i = 1 local j = 1 @@ -141,56 +179,67 @@ local function worker(args) cpu_rows[i] = row i = i + 1 else - local pid, cmd, cpu, mem = line:match('(%d+)%s+(%w+)%s+([%d.]+)%s+([%d.]+)') - - if pid == nil then - pid = 'PID' - cmd = 'Name' - cpu = '%CPU' - mem = '%MEM' + if is_update == true then - end + local columns = split(line, '|') + local pid = columns[1] + local comm = columns[2] + local cpu = columns[3] + local mem = columns[4] + local cmd = columns[5] - local row = wibox.widget { - { - { - text = pid, - forced_width = 40, - widget = wibox.widget.textbox - }, - { - text = cmd, - forced_width = 40, - widget = wibox.widget.textbox - }, + local row = wibox.widget { { { - text = cpu, + text = pid, forced_width = 40, widget = wibox.widget.textbox }, { - text = mem, + text = comm, forced_width = 40, widget = wibox.widget.textbox }, + { + { + text = cpu, + forced_width = 40, + widget = wibox.widget.textbox + }, + { + text = mem, + forced_width = 40, + widget = wibox.widget.textbox + }, + layout = wibox.layout.align.horizontal + }, layout = wibox.layout.align.horizontal }, - layout = wibox.layout.align.horizontal - }, - widget = wibox.container.background - } - - row:connect_signal("mouse::enter", function(c) c:set_bg(beautiful.bg_focus) end) - row:connect_signal("mouse::leave", function(c) c:set_bg(beautiful.bg_normal) end) - - - process_rows[j] = row + widget = wibox.container.background + } + + -- Do not update process rows when mouse cursor is over the widget + row:connect_signal("mouse::enter", function(c) c:set_bg(beautiful.bg_focus) end) + row:connect_signal("mouse::leave", function(c) c:set_bg(beautiful.bg_normal) end) + + awful.tooltip { + objects = { row }, + mode = 'outside', + preferred_positions = {'bottom'}, + timer_function = function() + return cmd + :gsub('%s%-', '\n\t-') -- put arguments on a new line + :gsub(':/', '\n\t\t:/') -- java classpath uses : to separate jars + end, + } + + process_rows[j] = row + + j = j + 1 + end - j = j + 1 end - end popup:setup { { @@ -201,6 +250,7 @@ local function worker(args) color = beautiful.bg_focus, widget = wibox.widget.separator }, + process_header, process_rows, layout = wibox.layout.fixed.vertical, }, diff --git a/cpu-widget/cpu.gif b/cpu-widget/cpu.gif Binary files differindex 086e618..cb97262 100644 --- a/cpu-widget/cpu.gif +++ b/cpu-widget/cpu.gif diff --git a/cpu-widget/out.gif b/cpu-widget/out.gif Binary files differdeleted file mode 100644 index ac7542d..0000000 --- a/cpu-widget/out.gif +++ /dev/null diff --git a/jira-widget/jira.lua b/jira-widget/jira.lua index 652767a..b876c0b 100644 --- a/jira-widget/jira.lua +++ b/jira-widget/jira.lua @@ -97,13 +97,13 @@ local function worker(args) for i = 0, #rows do rows[i]=nil end for _, issue in ipairs(result.issues) do - local path_to_avatar = os.getenv("HOME") ..'/.cache/awmw/jira-widget/avatars/' .. issue.fields.assignee.key + local path_to_avatar = os.getenv("HOME") ..'/.cache/awmw/jira-widget/avatars/' .. issue.fields.assignee.accountId if not gfs.file_readable(path_to_avatar) then spawn.easy_async(string.format( DOWNLOAD_AVATAR_CMD, HOME_DIR, - issue.fields.assignee.key, + issue.fields.assignee.accountId, issue.fields.assignee.avatarUrls['48x48'])) end diff --git a/storage-widget/README.md b/storage-widget/README.md new file mode 100644 index 0000000..48d2ffe --- /dev/null +++ b/storage-widget/README.md @@ -0,0 +1,24 @@ +# Storage Widget + +This widget shows disk usage. When clicked another widget appears with more detailed information. By default it monitors the "/" mount. It can be configured with a +list of mounts to monitor though only the first will show in the wibar. To have +multiple mounts displayed on the wibar simply define multiple `storage_widgets` +with different mounts as arguments. + + +```lua + local storage_widget = require("awesome-wm-widgets.storage-widget.storage-widget") + ... + s.mywibox:setup { + s.mytasklist, -- Middle widget + { -- Right widgets + storage_widget(), --default + wibox.widget.textbox(':'), + storage_widget({ mounts = { '/', '/mnt/musicj' } }), -- multiple mounts + ... + +``` + +## Installation + +Please refer to the [installation](https://github.com/streetturtle/awesome-wm-widgets#installation) section of the repo. diff --git a/storage-widget/out.gif b/storage-widget/out.gif Binary files differnew file mode 100644 index 0000000..736f894 --- /dev/null +++ b/storage-widget/out.gif diff --git a/storage-widget/storage-widget.lua b/storage-widget/storage-widget.lua new file mode 100644 index 0000000..d719f60 --- /dev/null +++ b/storage-widget/storage-widget.lua @@ -0,0 +1,156 @@ +local awful = require("awful") +local watch = require("awful.widget.watch") +local wibox = require("wibox") +local beautiful = require("beautiful") +local gears = require("gears") + +local storage_graph_widget = {} + +local function worker(args) + local args = args or {} + local mounts = args.mounts or {'/'} + + storage_graph_widget = wibox.widget { + max_value = 100, + forced_height = 20, + forced_width = 35, + paddings = 1, + margins = 4, + border_width = 0.5, + border_color = beautiful.fg_normal, + background_color = beautiful.bg_normal, + bar_border_width = 1, + bar_border_color = beautiful.bg_focus, + color = "linear:150,0:0,0:0," + .. beautiful.fg_normal + .. ":0.3," .. beautiful.bg_urgent .. ":0.6," + .. beautiful.fg_normal, + widget = wibox.widget.progressbar, + } + + local disk_rows = { + { widget = wibox.widget.textbox }, + spacing = 4, + layout = wibox.layout.fixed.vertical, + } + + local disk_header = { + { + markup = '<b>Mount</b>', + forced_width = 150, + align = 'left', + widget = wibox.widget.textbox, + }, + { + markup = '<b>Used</b>', + align = 'left', + widget = wibox.widget.textbox, + }, + layout = wibox.layout.align.horizontal + } + + local popup = awful.popup{ + ontop = true, + visible = false, + shape = gears.shape.rounded_rect, + border_width = 1, + border_color = beautiful.bg_normal, + bg = beautiful.bg_focus, + maximum_width = 400, + offset = { y = 5 }, + widget = {} + } + popup:connect_signal("mouse::enter", function(c) is_update = false end) + popup:connect_signal("mouse::leave", function(c) is_update = true end) + + storage_graph_widget:buttons( + awful.util.table.join( + awful.button({}, 1, function() + if popup.visible then + popup.visible = not popup.visible + else + popup:move_next_to(mouse.current_widget_geometry) + end + end) + ) + ) + + local disk_widget = wibox.container.margin(wibox.container.mirror(storage_graph_widget, { horizontal = true }), 0, 0, 0, 2) + + local disks = {} + watch([[bash -c "df | tail -n +2"]], 60, + function(widget, stdout) + for line in stdout:gmatch("[^\r\n$]+") do + local filesystem, size, used, avail, perc, mount = + line:match('([%p%w]+)%s+([%d%w]+)%s+([%d%w]+)%s+([%d%w]+)%s+([%d]+)%%%s+([%p%w]+)') + + disks[mount] = {} + disks[mount].filesystem = filesystem + disks[mount].size = size + disks[mount].used = used + disks[mount].avail = avail + disks[mount].perc = perc + disks[mount].mount = mount + + if disks[mount].mount == mounts[1] then + widget.value = tonumber(disks[mount].perc) + end + end + + for k,v in ipairs(mounts) do + + local row = wibox.widget{ + { + text = disks[v].mount, + forced_width = 150, + widget = wibox.widget.textbox + }, + { + max_value = 100, + value = tonumber(disks[v].perc), + forced_height = 20, + paddings = 1, + margins = 4, + border_width = 1, + border_color = beautiful.bg_focus, + background_color = beautiful.bg_normal, + bar_border_width = 1, + bar_border_color = beautiful.bg_focus, + color = "linear:150,0:0,0:0," + .. beautiful.fg_normal + .. ":0.3," .. beautiful.bg_urgent .. ":0.6," + .. beautiful.fg_normal, + widget = wibox.widget.progressbar, + + }, + { + text = math.floor(disks[v].used/1024/1024) + .. '/' + .. math.floor(disks[v].size/1024/1024) .. 'GB(' + .. math.floor(disks[v].perc) .. '%)', + widget = wibox.widget.textbox + }, + layout = wibox.layout.align.horizontal + } + + disk_rows[k] = row + end + popup:setup { + { + disk_header, + disk_rows, + layout = wibox.layout.fixed.vertical, + }, + margins = 8, + widget = wibox.container.margin + } + end, + storage_graph_widget + ) + + return disk_widget +end + +return setmetatable(storage_graph_widget, { __call = function(_, ...) + return worker(...) +end }) diff --git a/volume-widget/volume.lua b/volume-widget/volume.lua index b2748e1..749f1f6 100644 --- a/volume-widget/volume.lua +++ b/volume-widget/volume.lua @@ -57,7 +57,7 @@ local function worker(args) end } - local notification = {} + local notification local volume_icon_name="audio-volume-high-symbolic" local function get_notification_text(txt) diff --git a/weather-widget/weather.lua b/weather-widget/weather.lua index a1075f6..6fafa97 100644 --- a/weather-widget/weather.lua +++ b/weather-widget/weather.lua @@ -144,6 +144,8 @@ local function worker(args) end local function error_display(resp_json) + weather_timer.timeout = math.min(15 * 60, weather_timer.timeout * 2) + weather_timer:again() local err_resp = json.decode(resp_json) naughty.notify{ title = 'Weather Widget Error', @@ -185,6 +187,8 @@ local function worker(args) resp = json.decode(resp_json) icon_widget.image = path_to_icons .. icon_map[resp.weather[1].icon] temp_widget:set_text(gen_temperature_str(resp.main.temp, '%.0f', both_units_widget)) + weather_timer.timeout = 60 + weather_timer:again() end end) weather_timer:start() |