diff options
-rw-r--r-- | fs-widget/fs-widget.lua | 275 | ||||
-rw-r--r-- | weather-widget/locale/de.lua | 13 | ||||
-rw-r--r-- | weather-widget/locale/en.lua | 14 | ||||
-rw-r--r-- | weather-widget/locale/fr.lua | 14 | ||||
-rw-r--r-- | weather-widget/weather.lua | 35 |
5 files changed, 217 insertions, 134 deletions
diff --git a/fs-widget/fs-widget.lua b/fs-widget/fs-widget.lua index 0c12a3a..ca76193 100644 --- a/fs-widget/fs-widget.lua +++ b/fs-widget/fs-widget.lua @@ -6,28 +6,64 @@ local gears = require("gears") local storage_bar_widget = {} +--- Table with widget configuration, consists of three sections: +--- - general - general configuration +--- - widget - configuration of the widget displayed on the wibar +--- - popup - configuration of the popup +local config = {} + +-- general +config.mounts = { '/' } +config.refresh_rate = 60 + +-- wibar widget +config.widget_width = 40 +config.widget_bar_color = '#aaaaaa' +config.widget_onclick_bg = '#ff0000' +config.widget_border_color = '#535d6c66' +config.widget_background_color = '#22222233' + +-- popup +config.popup_bg = '#22222233' +config.popup_border_width = 1 +config.popup_border_color = '#535d6c66' +config.popup_bar_color = '#aaaaaa' +config.popup_bar_background_color = '#22222233' +config.popup_bar_border_color = '#535d6c66' + local function worker(user_args) local args = user_args or {} - local mounts = args.mounts or {'/'} - local timeout = args.timeout or 60 + + -- Setup config for the widget instance. + -- The `_config` table will keep the first existing value after checking + -- in this order: user parameter > beautiful > module default. + local _config = {} + for prop, value in pairs(config) do + _config[prop] = args[prop] or beautiful[prop] or value + end storage_bar_widget = wibox.widget { - max_value = 100, - forced_height = 20, - forced_width = 35, - paddings = 1, - margins = 4, - border_width = 1, - border_radius = 2, - 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, + { + id = 'progressbar', + color = _config.widget_bar_color, + max_value = 100, + forced_height = 20, + forced_width = _config.widget_width, + paddings = 2, + margins = 4, + border_width = 1, + border_radius = 2, + border_color = _config.widget_border_color, + background_color = _config.widget_background_color, + widget = wibox.widget.progressbar + }, + shape = function(cr, width, height) + gears.shape.rounded_rect(cr, width, height, 4) + end, + widget = wibox.container.background, + set_value = function(self, new_value) + self:get_children_by_id("progressbar")[1].value = new_value + end } local disk_rows = { @@ -36,120 +72,117 @@ local function worker(user_args) layout = wibox.layout.fixed.vertical, } - local disk_header = wibox.widget{ - { - 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.ratio.horizontal + local disk_header = wibox.widget { + { + 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.ratio.horizontal } disk_header:ajust_ratio(1, 0, 0.3, 0.7) - local popup = awful.popup{ - ontop = true, - visible = false, - shape = gears.shape.rounded_rect, - border_width = 1, - border_color = beautiful.bg_normal, + local popup = awful.popup { + bg = _config.popup_bg, + ontop = true, + visible = false, + shape = gears.shape.rounded_rect, + border_width = _config.popup_border_width, + border_color = _config.popup_border_color, maximum_width = 400, - offset = { y = 5 }, - widget = {} + offset = { y = 5 }, + widget = {} } storage_bar_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(storage_bar_widget, 0, 0, 0, 0) + awful.util.table.join( + awful.button({}, 1, function() + if popup.visible then + popup.visible = not popup.visible + storage_bar_widget:set_bg('#00000000') + else + storage_bar_widget:set_bg(_config.widget_background_color) + popup:move_next_to(mouse.current_widget_geometry) + end + end) + ) + ) local disks = {} - watch([[bash -c "df | tail -n +2"]], timeout, - 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.ratio.horizontal - } - row:ajust_ratio(2, 0.3, 0.3, 0.4) - - disk_rows[k] = row - end - popup:setup { - { - disk_header, - disk_rows, - layout = wibox.layout.fixed.vertical, - }, - margins = 8, - widget = wibox.container.margin - } - end, - storage_bar_widget + watch([[bash -c "df | tail -n +2"]], _config.refresh_rate, + 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 == _config.mounts[1] then + widget:set_value(tonumber(disks[mount].perc)) + end + end + + for k, v in ipairs(_config.mounts) do + + local row = wibox.widget { + { + text = disks[v].mount, + forced_width = 150, + widget = wibox.widget.textbox + }, + { + color = _config.popup_bar_color, + max_value = 100, + value = tonumber(disks[v].perc), + forced_height = 20, + paddings = 1, + margins = 4, + border_width = 1, + border_color = _config.popup_bar_border_color, + background_color = _config.popup_bar_background_color, + bar_border_width = 1, + bar_border_color = _config.popup_bar_border_color, + 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.ratio.horizontal + } + row:ajust_ratio(2, 0.3, 0.3, 0.4) + + disk_rows[k] = row + end + popup:setup { + { + disk_header, + disk_rows, + layout = wibox.layout.fixed.vertical, + }, + margins = 8, + widget = wibox.container.margin + } + end, + storage_bar_widget ) - return disk_widget + return storage_bar_widget end return setmetatable(storage_bar_widget, { __call = function(_, ...) diff --git a/weather-widget/locale/de.lua b/weather-widget/locale/de.lua new file mode 100644 index 0000000..2a9236a --- /dev/null +++ b/weather-widget/locale/de.lua @@ -0,0 +1,13 @@ +local de = { + warning_title = "Wetter Widget", + parameter_warning = "Folgende benötigte Parameter fehlen: ", + directions = { + "N", "NNO", "NO", "ONO", "O", "OSO", "SO", "SSO", "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW", "N" + }, + feels_like = "Gefühlt: ", + wind = "Wind: ", + humidity = "Luftfeuchtigkeit: ", + uv = "UV-Index: " +} + +return de diff --git a/weather-widget/locale/en.lua b/weather-widget/locale/en.lua new file mode 100644 index 0000000..377dc6f --- /dev/null +++ b/weather-widget/locale/en.lua @@ -0,0 +1,14 @@ +local en = { + warning_title = "Weather Widget", + parameter_warning = "Required parameters are not set: ", + directions = { + "N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSW", "SW", + "WSW", "W", "WNW", "NW", "NNW", "N" + }, + feels_like = "Feels like ", + wind = "Wind: ", + humidity = "Humidity: ", + uv = "UV: " +} + +return en diff --git a/weather-widget/locale/fr.lua b/weather-widget/locale/fr.lua new file mode 100644 index 0000000..de50814 --- /dev/null +++ b/weather-widget/locale/fr.lua @@ -0,0 +1,14 @@ +local fr = { + warning_title = "Widget Météo", + parameter_warning = "Les paramètres suivants sont obligatoires : ", + directions = { + "N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSO", "SO", + "OSO", "O", "ONO", "NO", "NNO", "N" + }, + feels_like = "ressentie à ", + wind = "Vent : ", + humidity = "Humidité : ", + uv = "Indice UV : " +} + +return fr diff --git a/weather-widget/weather.lua b/weather-widget/weather.lua index 1847fd4..9daabf1 100644 --- a/weather-widget/weather.lua +++ b/weather-widget/weather.lua @@ -17,14 +17,25 @@ local HOME_DIR = os.getenv("HOME") local WIDGET_DIR = HOME_DIR .. '/.config/awesome/awesome-wm-widgets/weather-widget' local GET_FORECAST_CMD = [[bash -c "curl -s --show-error -X GET '%s'"]] +local SYS_LANG = os.getenv("LANG"):sub(1, 2) +-- default language is ENglish +local LANG = gears.filesystem.file_readable(WIDGET_DIR .. "/" .. "locale/" .. + SYS_LANG .. ".lua") and SYS_LANG or "en" +local LCLE = require("awesome-wm-widgets.weather-widget.locale." .. LANG) + + local function show_warning(message) naughty.notify { preset = naughty.config.presets.critical, - title = 'Weather Widget', + title = LCLE.warning_title, text = message } end +if SYS_LANG ~= LANG then + show_warning("Your language is not supported yet. Language set to English") +end + local weather_widget = {} local warning_shown = false local tooltip = awful.tooltip { @@ -69,10 +80,7 @@ local icon_map = { local function to_direction(degrees) -- Ref: https://www.campbellsci.eu/blog/convert-wind-directions if degrees == nil then return "Unknown dir" end - local directions = { - "N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSW", "SW", - "WSW", "W", "WNW", "NW", "NNW", "N" - } + local directions = LCLE.directions return directions[math.floor((degrees % 360) / 22.5) + 1] end @@ -120,9 +128,9 @@ local function worker(user_args) --- Validate required parameters if args.coordinates == nil or args.api_key == nil then - show_warning('Required parameters are not set: ' .. - (args.coordinates == nil and '<b>coordinates</b>' or '') .. - (args.api_key == nil and ', <b>api_key</b> ' or '')) + show_warning(LCLE.parameter_warning .. + (args.coordinates == nil and '<b>coordinates</b>' or '') .. + (args.api_key == nil and ', <b>api_key</b> ' or '')) return end @@ -144,7 +152,8 @@ local function worker(user_args) '?lat=' .. coordinates[1] .. '&lon=' .. coordinates[2] .. '&appid=' .. api_key .. '&units=' .. units .. '&exclude=minutely' .. (show_hourly_forecast == false and ',hourly' or '') .. - (show_daily_forecast == false and ',daily' or '')) + (show_daily_forecast == false and ',daily' or '') .. + '&lang=' .. LANG) weather_widget = wibox.widget { { @@ -256,12 +265,12 @@ local function worker(user_args) ICONS_DIR .. icon_map[weather.weather[1].icon] .. icons_extension) self:get_children_by_id('temp')[1]:set_text(gen_temperature_str(weather.temp, '%.0f', false, units)) self:get_children_by_id('feels_like_temp')[1]:set_text( - 'Feels like ' .. gen_temperature_str(weather.feels_like, '%.0f', false, units)) + LCLE.feels_like .. gen_temperature_str(weather.feels_like, '%.0f', false, units)) self:get_children_by_id('description')[1]:set_text(weather.weather[1].description) self:get_children_by_id('wind')[1]:set_markup( - 'Wind: <b>' .. weather.wind_speed .. 'm/s (' .. to_direction(weather.wind_deg) .. ')</b>') - self:get_children_by_id('humidity')[1]:set_markup('Humidity: <b>' .. weather.humidity .. '%</b>') - self:get_children_by_id('uv')[1]:set_markup('UV: ' .. uvi_index_color(weather.uvi)) + LCLE.wind .. '<b>' .. weather.wind_speed .. 'm/s (' .. to_direction(weather.wind_deg) .. ')</b>') + self:get_children_by_id('humidity')[1]:set_markup(LCLE.humidity .. '<b>' .. weather.humidity .. '%</b>') + self:get_children_by_id('uv')[1]:set_markup(LCLE.uv .. uvi_index_color(weather.uvi)) end } |