summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fs-widget/fs-widget.lua275
-rw-r--r--weather-widget/locale/de.lua13
-rw-r--r--weather-widget/locale/en.lua14
-rw-r--r--weather-widget/locale/fr.lua14
-rw-r--r--weather-widget/weather.lua35
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
}