From 2e51c26322fd124d56e79590980eda8c1baeb1b6 Mon Sep 17 00:00:00 2001 From: streetturtle Date: Sat, 22 Feb 2020 13:50:30 -0500 Subject: [fs-widget] rename storage to fs --- fs-widget/README.md | 24 ++++++ fs-widget/fs-widget.lua | 156 ++++++++++++++++++++++++++++++++++++++ fs-widget/out.gif | Bin 0 -> 103946 bytes storage-widget/README.md | 24 ------ storage-widget/out.gif | Bin 103946 -> 0 bytes storage-widget/storage-widget.lua | 156 -------------------------------------- 6 files changed, 180 insertions(+), 180 deletions(-) create mode 100644 fs-widget/README.md create mode 100644 fs-widget/fs-widget.lua create mode 100644 fs-widget/out.gif delete mode 100644 storage-widget/README.md delete mode 100644 storage-widget/out.gif delete mode 100644 storage-widget/storage-widget.lua diff --git a/fs-widget/README.md b/fs-widget/README.md new file mode 100644 index 0000000..48d2ffe --- /dev/null +++ b/fs-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/fs-widget/fs-widget.lua b/fs-widget/fs-widget.lua new file mode 100644 index 0000000..d719f60 --- /dev/null +++ b/fs-widget/fs-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 = 'Mount', + forced_width = 150, + align = 'left', + widget = wibox.widget.textbox, + }, + { + markup = 'Used', + 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/fs-widget/out.gif b/fs-widget/out.gif new file mode 100644 index 0000000..736f894 Binary files /dev/null and b/fs-widget/out.gif differ diff --git a/storage-widget/README.md b/storage-widget/README.md deleted file mode 100644 index 48d2ffe..0000000 --- a/storage-widget/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# 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 deleted file mode 100644 index 736f894..0000000 Binary files a/storage-widget/out.gif and /dev/null differ diff --git a/storage-widget/storage-widget.lua b/storage-widget/storage-widget.lua deleted file mode 100644 index d719f60..0000000 --- a/storage-widget/storage-widget.lua +++ /dev/null @@ -1,156 +0,0 @@ -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 = 'Mount', - forced_width = 150, - align = 'left', - widget = wibox.widget.textbox, - }, - { - markup = 'Used', - 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 }) -- cgit v1.2.3