Merge pull request #224 from streetturtle/comply-with-luacheck
Comply with luacheck
This commit is contained in:
commit
d4971690ce
|
@ -20,10 +20,11 @@ local dpi = require('beautiful').xresources.apply_dpi
|
||||||
-- Battery 0: Charging, 53%, 00:57:43 until charged
|
-- Battery 0: Charging, 53%, 00:57:43 until charged
|
||||||
|
|
||||||
local HOME = os.getenv("HOME")
|
local HOME = os.getenv("HOME")
|
||||||
|
local WIDGET_DIR = HOME .. '/.config/awesome/awesome-wm-widgets/battery-widget'
|
||||||
|
|
||||||
local battery_widget = {}
|
local battery_widget = {}
|
||||||
local function worker(args)
|
local function worker(user_args)
|
||||||
local args = args or {}
|
local args = user_args or {}
|
||||||
|
|
||||||
local font = args.font or 'Play 8'
|
local font = args.font or 'Play 8'
|
||||||
local path_to_icons = args.path_to_icons or "/usr/share/icons/Arc/status/symbolic/"
|
local path_to_icons = args.path_to_icons or "/usr/share/icons/Arc/status/symbolic/"
|
||||||
|
@ -39,7 +40,7 @@ local function worker(args)
|
||||||
local warning_msg_title = args.warning_msg_title or 'Huston, we have a problem'
|
local warning_msg_title = args.warning_msg_title or 'Huston, we have a problem'
|
||||||
local warning_msg_text = args.warning_msg_text or 'Battery is dying'
|
local warning_msg_text = args.warning_msg_text or 'Battery is dying'
|
||||||
local warning_msg_position = args.warning_msg_position or 'bottom_right'
|
local warning_msg_position = args.warning_msg_position or 'bottom_right'
|
||||||
local warning_msg_icon = args.warning_msg_icon or HOME .. '/.config/awesome/awesome-wm-widgets/batteryarc-widget/spaceman.jpg'
|
local warning_msg_icon = args.warning_msg_icon or WIDGET_DIR .. '/spaceman.jpg'
|
||||||
local enable_battery_warning = args.enable_battery_warning
|
local enable_battery_warning = args.enable_battery_warning
|
||||||
if enable_battery_warning == nil then
|
if enable_battery_warning == nil then
|
||||||
enable_battery_warning = true
|
enable_battery_warning = true
|
||||||
|
@ -59,7 +60,8 @@ local function worker(args)
|
||||||
widget = wibox.widget.imagebox,
|
widget = wibox.widget.imagebox,
|
||||||
resize = false
|
resize = false
|
||||||
},
|
},
|
||||||
layout = wibox.container.margin(_, 0, 0, 3)
|
bottom = 3,
|
||||||
|
layout = wibox.container.margin
|
||||||
}
|
}
|
||||||
local level_widget = wibox.widget {
|
local level_widget = wibox.widget {
|
||||||
font = font,
|
font = font,
|
||||||
|
@ -119,11 +121,11 @@ local function worker(args)
|
||||||
local batteryType = "battery-good-symbolic"
|
local batteryType = "battery-good-symbolic"
|
||||||
|
|
||||||
watch("acpi -i", timeout,
|
watch("acpi -i", timeout,
|
||||||
function(widget, stdout, stderr, exitreason, exitcode)
|
function(widget, stdout)
|
||||||
local battery_info = {}
|
local battery_info = {}
|
||||||
local capacities = {}
|
local capacities = {}
|
||||||
for s in stdout:gmatch("[^\r\n]+") do
|
for s in stdout:gmatch("[^\r\n]+") do
|
||||||
local status, charge_str, time = string.match(s, '.+: (%a+), (%d?%d?%d)%%,?(.*)')
|
local status, charge_str, _ = string.match(s, '.+: (%a+), (%d?%d?%d)%%,?(.*)')
|
||||||
if status ~= nil then
|
if status ~= nil then
|
||||||
table.insert(battery_info, {status = status, charge = tonumber(charge_str)})
|
table.insert(battery_info, {status = status, charge = tonumber(charge_str)})
|
||||||
else
|
else
|
||||||
|
@ -133,7 +135,7 @@ local function worker(args)
|
||||||
end
|
end
|
||||||
|
|
||||||
local capacity = 0
|
local capacity = 0
|
||||||
for i, cap in ipairs(capacities) do
|
for _, cap in ipairs(capacities) do
|
||||||
capacity = capacity + cap
|
capacity = capacity + cap
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -15,12 +15,13 @@ local wibox = require("wibox")
|
||||||
local watch = require("awful.widget.watch")
|
local watch = require("awful.widget.watch")
|
||||||
|
|
||||||
local HOME = os.getenv("HOME")
|
local HOME = os.getenv("HOME")
|
||||||
|
local WIDGET_DIR = HOME .. '/.config/awesome/awesome-wm-widgets/batteryarc-widget'
|
||||||
|
|
||||||
local widget = {}
|
local batteryarc_widget = {}
|
||||||
|
|
||||||
local function worker(args)
|
local function worker(user_args)
|
||||||
|
|
||||||
local args = args or {}
|
local args = user_args or {}
|
||||||
|
|
||||||
local font = args.font or 'Play 6'
|
local font = args.font or 'Play 6'
|
||||||
local arc_thickness = args.arc_thickness or 2
|
local arc_thickness = args.arc_thickness or 2
|
||||||
|
@ -38,7 +39,7 @@ local function worker(args)
|
||||||
local warning_msg_title = args.warning_msg_title or 'Houston, we have a problem'
|
local warning_msg_title = args.warning_msg_title or 'Houston, we have a problem'
|
||||||
local warning_msg_text = args.warning_msg_text or 'Battery is dying'
|
local warning_msg_text = args.warning_msg_text or 'Battery is dying'
|
||||||
local warning_msg_position = args.warning_msg_position or 'bottom_right'
|
local warning_msg_position = args.warning_msg_position or 'bottom_right'
|
||||||
local warning_msg_icon = args.warning_msg_icon or HOME .. '/.config/awesome/awesome-wm-widgets/batteryarc-widget/spaceman.jpg'
|
local warning_msg_icon = args.warning_msg_icon or WIDGET_DIR .. '/spaceman.jpg'
|
||||||
local enable_battery_warning = args.enable_battery_warning
|
local enable_battery_warning = args.enable_battery_warning
|
||||||
if enable_battery_warning == nil then
|
if enable_battery_warning == nil then
|
||||||
enable_battery_warning = true
|
enable_battery_warning = true
|
||||||
|
@ -53,7 +54,7 @@ local function worker(args)
|
||||||
|
|
||||||
local text_with_background = wibox.container.background(text)
|
local text_with_background = wibox.container.background(text)
|
||||||
|
|
||||||
widget = wibox.widget {
|
batteryarc_widget = wibox.widget {
|
||||||
text_with_background,
|
text_with_background,
|
||||||
max_value = 100,
|
max_value = 100,
|
||||||
rounded_edge = true,
|
rounded_edge = true,
|
||||||
|
@ -88,7 +89,7 @@ local function worker(args)
|
||||||
local charge = 0
|
local charge = 0
|
||||||
local status
|
local status
|
||||||
for s in stdout:gmatch("[^\r\n]+") do
|
for s in stdout:gmatch("[^\r\n]+") do
|
||||||
local cur_status, charge_str, time = string.match(s, '.+: (%a+), (%d?%d?%d)%%,?(.*)')
|
local cur_status, charge_str, _ = string.match(s, '.+: (%a+), (%d?%d?%d)%%,?(.*)')
|
||||||
if cur_status ~= nil and charge_str ~=nil then
|
if cur_status ~= nil and charge_str ~=nil then
|
||||||
local cur_charge = tonumber(charge_str)
|
local cur_charge = tonumber(charge_str)
|
||||||
if cur_charge > charge then
|
if cur_charge > charge then
|
||||||
|
@ -132,7 +133,7 @@ local function worker(args)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
watch("acpi", timeout, update_widget, widget)
|
watch("acpi", timeout, update_widget, batteryarc_widget)
|
||||||
|
|
||||||
-- Popup with battery info
|
-- Popup with battery info
|
||||||
local notification
|
local notification
|
||||||
|
@ -150,18 +151,18 @@ local function worker(args)
|
||||||
end
|
end
|
||||||
|
|
||||||
if show_notification_mode == 'on_hover' then
|
if show_notification_mode == 'on_hover' then
|
||||||
widget:connect_signal("mouse::enter", function() show_battery_status() end)
|
batteryarc_widget:connect_signal("mouse::enter", function() show_battery_status() end)
|
||||||
widget:connect_signal("mouse::leave", function() naughty.destroy(notification) end)
|
batteryarc_widget:connect_signal("mouse::leave", function() naughty.destroy(notification) end)
|
||||||
elseif show_notification_mode == 'on_click' then
|
elseif show_notification_mode == 'on_click' then
|
||||||
widget:connect_signal('button::press', function(_, _, _, button)
|
batteryarc_widget:connect_signal('button::press', function(_, _, _, button)
|
||||||
if (button == 1) then show_battery_status() end
|
if (button == 1) then show_battery_status() end
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
return widget
|
return batteryarc_widget
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
return setmetatable(widget, { __call = function(_, ...)
|
return setmetatable(batteryarc_widget, { __call = function(_, ...)
|
||||||
return worker(...)
|
return worker(...)
|
||||||
end })
|
end })
|
||||||
|
|
|
@ -21,7 +21,12 @@ local gfs = require("gears.filesystem")
|
||||||
local HOME_DIR = os.getenv("HOME")
|
local HOME_DIR = os.getenv("HOME")
|
||||||
local WIDGET_DIR = HOME_DIR .. '/.config/awesome/awesome-wm-widgets/bitbucket-widget/'
|
local WIDGET_DIR = HOME_DIR .. '/.config/awesome/awesome-wm-widgets/bitbucket-widget/'
|
||||||
|
|
||||||
local GET_PRS_CMD= [[bash -c "curl -s --show-error -n '%s/2.0/repositories/%s/%s/pullrequests?fields=values.participants.approved,values.title,values.links.html,values.author.display_name,values.author.uuid,values.author.links.avatar,values.source.branch,values.destination.branch,values.comment_count,values.created_on&q=reviewers.uuid+%%3D+%%22%s%%22+AND+state+%%3D+%%22OPEN%%22' | jq '.[] '"]]
|
local GET_PRS_CMD= [[bash -c "curl -s --show-error -n ]]
|
||||||
|
.. [['%s/2.0/repositories/%s/%s/pullrequests]]
|
||||||
|
.. [[?fields=values.participants.approved,values.title,values.links.html,values.author.display_name,]]
|
||||||
|
.. [[values.author.uuid,values.author.links.avatar,values.source.branch,values.destination.branch,]]
|
||||||
|
.. [[values.comment_count,values.created_on&q=reviewers.uuid+%%3D+%%22%s%%22+AND+state+%%3D+%%22OPEN%%22']]
|
||||||
|
.. [[ | jq '.[] '"]]
|
||||||
local DOWNLOAD_AVATAR_CMD = [[bash -c "curl -L -n --create-dirs -o %s/.cache/awmw/bitbucket-widget/avatars/%s %s"]]
|
local DOWNLOAD_AVATAR_CMD = [[bash -c "curl -L -n --create-dirs -o %s/.cache/awmw/bitbucket-widget/avatars/%s %s"]]
|
||||||
|
|
||||||
local bitbucket_widget = wibox.widget {
|
local bitbucket_widget = wibox.widget {
|
||||||
|
@ -71,7 +76,7 @@ local popup = awful.popup{
|
||||||
--- Converts string representation of date (2020-06-02T11:25:27Z) to date
|
--- Converts string representation of date (2020-06-02T11:25:27Z) to date
|
||||||
local function parse_date(date_str)
|
local function parse_date(date_str)
|
||||||
local pattern = "(%d+)%-(%d+)%-(%d+)T(%d+):(%d+):(%d+)%Z"
|
local pattern = "(%d+)%-(%d+)%-(%d+)T(%d+):(%d+):(%d+)%Z"
|
||||||
local y, m, d, h, min, sec, mil = date_str:match(pattern)
|
local y, m, d, h, min, sec, _ = date_str:match(pattern)
|
||||||
|
|
||||||
return os.time{year = y, month = m, day = d, hour = h, min = min, sec = sec}
|
return os.time{year = y, month = m, day = d, hour = h, min = min, sec = sec}
|
||||||
end
|
end
|
||||||
|
@ -111,9 +116,9 @@ local function count_approves(participants)
|
||||||
return res
|
return res
|
||||||
end
|
end
|
||||||
|
|
||||||
local function worker(args)
|
local function worker(user_args)
|
||||||
|
|
||||||
local args = args or {}
|
local args = user_args or {}
|
||||||
|
|
||||||
local icon = args.icon or WIDGET_DIR .. '/bitbucket-icon-gradient-blue.svg'
|
local icon = args.icon or WIDGET_DIR .. '/bitbucket-icon-gradient-blue.svg'
|
||||||
local host = args.host or show_warning('Bitbucket host is not set')
|
local host = args.host or show_warning('Bitbucket host is not set')
|
||||||
|
@ -279,11 +284,8 @@ local function worker(args)
|
||||||
}
|
}
|
||||||
|
|
||||||
if not gfs.file_readable(path_to_avatar) then
|
if not gfs.file_readable(path_to_avatar) then
|
||||||
spawn.easy_async(string.format(
|
local cmd = string.format(DOWNLOAD_AVATAR_CMD, HOME_DIR, pr.author.uuid, pr.author.links.avatar.href)
|
||||||
DOWNLOAD_AVATAR_CMD,
|
spawn.easy_async(cmd, function() row:get_children_by_id('avatar')[1]:set_image(path_to_avatar) end)
|
||||||
HOME_DIR,
|
|
||||||
pr.author.uuid,
|
|
||||||
pr.author.links.avatar.href), function() row:get_children_by_id('avatar')[1]:set_image(path_to_avatar) end)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -299,34 +301,36 @@ local function worker(args)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
row:get_children_by_id('avatar')[1]:buttons(
|
row:get_children_by_id('avatar')[1]:buttons(
|
||||||
awful.util.table.join(
|
awful.util.table.join(
|
||||||
awful.button({}, 1, function()
|
awful.button({}, 1, function()
|
||||||
spawn.with_shell(string.format('xdg-open "https://bitbucket.org/%s/%s/pull-requests?state=OPEN&author=%s"', workspace, repo_slug, pr.author.uuid))
|
spawn.with_shell(
|
||||||
popup.visible = false
|
string.format('xdg-open "https://bitbucket.org/%s/%s/pull-requests?state=OPEN&author=%s"',
|
||||||
end)
|
workspace, repo_slug, pr.author.uuid)
|
||||||
)
|
)
|
||||||
|
popup.visible = false
|
||||||
|
end)
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
local old_cursor, old_wibox
|
local old_cursor, old_wibox
|
||||||
row:get_children_by_id('title')[1]:connect_signal("mouse::enter", function(c)
|
row:get_children_by_id('title')[1]:connect_signal("mouse::enter", function()
|
||||||
local wb = mouse.current_wibox
|
local wb = mouse.current_wibox
|
||||||
old_cursor, old_wibox = wb.cursor, wb
|
old_cursor, old_wibox = wb.cursor, wb
|
||||||
wb.cursor = "hand1"
|
wb.cursor = "hand1"
|
||||||
end)
|
end)
|
||||||
row:get_children_by_id('title')[1]:connect_signal("mouse::leave", function(c)
|
row:get_children_by_id('title')[1]:connect_signal("mouse::leave", function()
|
||||||
if old_wibox then
|
if old_wibox then
|
||||||
old_wibox.cursor = old_cursor
|
old_wibox.cursor = old_cursor
|
||||||
old_wibox = nil
|
old_wibox = nil
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
local old_cursor, old_wibox
|
row:get_children_by_id('avatar')[1]:connect_signal("mouse::enter", function()
|
||||||
row:get_children_by_id('avatar')[1]:connect_signal("mouse::enter", function(c)
|
|
||||||
local wb = mouse.current_wibox
|
local wb = mouse.current_wibox
|
||||||
old_cursor, old_wibox = wb.cursor, wb
|
old_cursor, old_wibox = wb.cursor, wb
|
||||||
wb.cursor = "hand1"
|
wb.cursor = "hand1"
|
||||||
end)
|
end)
|
||||||
row:get_children_by_id('avatar')[1]:connect_signal("mouse::leave", function(c)
|
row:get_children_by_id('avatar')[1]:connect_signal("mouse::leave", function()
|
||||||
if old_wibox then
|
if old_wibox then
|
||||||
old_wibox.cursor = old_cursor
|
old_wibox.cursor = old_cursor
|
||||||
old_wibox = nil
|
old_wibox = nil
|
||||||
|
|
|
@ -17,11 +17,11 @@ local GET_BRIGHTNESS_CMD = "light -G" -- "xbacklight -get"
|
||||||
local INC_BRIGHTNESS_CMD = "light -A 5" -- "xbacklight -inc 5"
|
local INC_BRIGHTNESS_CMD = "light -A 5" -- "xbacklight -inc 5"
|
||||||
local DEC_BRIGHTNESS_CMD = "light -U 5" -- "xbacklight -dec 5"
|
local DEC_BRIGHTNESS_CMD = "light -U 5" -- "xbacklight -dec 5"
|
||||||
|
|
||||||
local widget = {}
|
local brightness_widget = {}
|
||||||
|
|
||||||
local function worker(args)
|
local function worker(user_args)
|
||||||
|
|
||||||
local args = args or {}
|
local args = user_args or {}
|
||||||
|
|
||||||
local get_brightness_cmd = args.get_brightness_cmd or GET_BRIGHTNESS_CMD
|
local get_brightness_cmd = args.get_brightness_cmd or GET_BRIGHTNESS_CMD
|
||||||
local inc_brightness_cmd = args.inc_brightness_cmd or INC_BRIGHTNESS_CMD
|
local inc_brightness_cmd = args.inc_brightness_cmd or INC_BRIGHTNESS_CMD
|
||||||
|
@ -43,7 +43,7 @@ local function worker(args)
|
||||||
widget = wibox.container.margin
|
widget = wibox.container.margin
|
||||||
}
|
}
|
||||||
|
|
||||||
widget = wibox.widget {
|
brightness_widget = wibox.widget {
|
||||||
brightness_icon,
|
brightness_icon,
|
||||||
brightness_text,
|
brightness_text,
|
||||||
layout = wibox.layout.fixed.horizontal,
|
layout = wibox.layout.fixed.horizontal,
|
||||||
|
@ -52,9 +52,9 @@ local function worker(args)
|
||||||
local update_widget = function(widget, stdout, _, _, _)
|
local update_widget = function(widget, stdout, _, _, _)
|
||||||
local brightness_level = tonumber(string.format("%.0f", stdout))
|
local brightness_level = tonumber(string.format("%.0f", stdout))
|
||||||
widget:set_text(" " .. brightness_level .. "%")
|
widget:set_text(" " .. brightness_level .. "%")
|
||||||
end,
|
end
|
||||||
|
|
||||||
widget:connect_signal("button::press", function(_, _, _, button)
|
brightness_widget:connect_signal("button::press", function(_, _, _, button)
|
||||||
if (button == 4) then
|
if (button == 4) then
|
||||||
spawn(inc_brightness_cmd, false)
|
spawn(inc_brightness_cmd, false)
|
||||||
elseif (button == 5) then
|
elseif (button == 5) then
|
||||||
|
@ -64,9 +64,9 @@ local function worker(args)
|
||||||
|
|
||||||
watch(get_brightness_cmd, timeout, update_widget, brightness_text)
|
watch(get_brightness_cmd, timeout, update_widget, brightness_text)
|
||||||
|
|
||||||
return widget
|
return brightness_widget
|
||||||
end
|
end
|
||||||
|
|
||||||
return setmetatable(widget, { __call = function(_, ...)
|
return setmetatable(brightness_widget, { __call = function(_, ...)
|
||||||
return worker(...)
|
return worker(...)
|
||||||
end })
|
end })
|
||||||
|
|
|
@ -18,11 +18,11 @@ local GET_BRIGHTNESS_CMD = "light -G" -- "xbacklight -get"
|
||||||
local INC_BRIGHTNESS_CMD = "light -A 5" -- "xbacklight -inc 5"
|
local INC_BRIGHTNESS_CMD = "light -A 5" -- "xbacklight -inc 5"
|
||||||
local DEC_BRIGHTNESS_CMD = "light -U 5" -- "xbacklight -dec 5"
|
local DEC_BRIGHTNESS_CMD = "light -U 5" -- "xbacklight -dec 5"
|
||||||
|
|
||||||
local widget = {}
|
local brightness_widget = {}
|
||||||
|
|
||||||
local function worker(args)
|
local function worker(user_args)
|
||||||
|
|
||||||
local args = args or {}
|
local args = user_args or {}
|
||||||
|
|
||||||
local get_brightness_cmd = args.get_brightness_cmd or GET_BRIGHTNESS_CMD
|
local get_brightness_cmd = args.get_brightness_cmd or GET_BRIGHTNESS_CMD
|
||||||
local inc_brightness_cmd = args.inc_brightness_cmd or INC_BRIGHTNESS_CMD
|
local inc_brightness_cmd = args.inc_brightness_cmd or INC_BRIGHTNESS_CMD
|
||||||
|
@ -39,7 +39,7 @@ local function worker(args)
|
||||||
widget = wibox.widget.imagebox,
|
widget = wibox.widget.imagebox,
|
||||||
}
|
}
|
||||||
|
|
||||||
widget = wibox.widget {
|
brightness_widget = wibox.widget {
|
||||||
icon,
|
icon,
|
||||||
max_value = 1,
|
max_value = 1,
|
||||||
thickness = 2,
|
thickness = 2,
|
||||||
|
@ -57,9 +57,9 @@ local function worker(args)
|
||||||
brightness_level = tonumber(string.format("% 3d", brightness_level))
|
brightness_level = tonumber(string.format("% 3d", brightness_level))
|
||||||
|
|
||||||
widget.value = brightness_level / 100;
|
widget.value = brightness_level / 100;
|
||||||
end,
|
end
|
||||||
|
|
||||||
widget:connect_signal("button::press", function(_, _, _, button)
|
brightness_widget:connect_signal("button::press", function(_, _, _, button)
|
||||||
if (button == 4) then
|
if (button == 4) then
|
||||||
spawn(inc_brightness_cmd, false)
|
spawn(inc_brightness_cmd, false)
|
||||||
elseif (button == 5) then
|
elseif (button == 5) then
|
||||||
|
@ -67,11 +67,11 @@ local function worker(args)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
watch(get_brightness_cmd, timeout, update_widget, widget)
|
watch(get_brightness_cmd, timeout, update_widget, brightness_widget)
|
||||||
|
|
||||||
return widget
|
return brightness_widget
|
||||||
end
|
end
|
||||||
|
|
||||||
return setmetatable(widget, { __call = function(_, ...)
|
return setmetatable(brightness_widget, { __call = function(_, ...)
|
||||||
return worker(...)
|
return worker(...)
|
||||||
end })
|
end })
|
||||||
|
|
|
@ -16,7 +16,7 @@ local naughty = require("naughty")
|
||||||
|
|
||||||
local calendar_widget = {}
|
local calendar_widget = {}
|
||||||
|
|
||||||
local function worker(args)
|
local function worker(user_args)
|
||||||
|
|
||||||
local calendar_themes = {
|
local calendar_themes = {
|
||||||
nord = {
|
nord = {
|
||||||
|
@ -82,7 +82,7 @@ local function worker(args)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
local args = args or {}
|
local args = user_args or {}
|
||||||
|
|
||||||
if args.theme ~= nil and calendar_themes[args.theme] == nil then
|
if args.theme ~= nil and calendar_themes[args.theme] == nil then
|
||||||
naughty.notify({
|
naughty.notify({
|
||||||
|
@ -154,7 +154,9 @@ local function worker(args)
|
||||||
-- Change bg color for weekends
|
-- Change bg color for weekends
|
||||||
local d = { year = date.year, month = (date.month or 1), day = (date.day or 1) }
|
local d = { year = date.year, month = (date.month or 1), day = (date.day or 1) }
|
||||||
local weekday = tonumber(os.date('%w', os.time(d)))
|
local weekday = tonumber(os.date('%w', os.time(d)))
|
||||||
local default_bg = (weekday == 0 or weekday == 6) and calendar_themes[theme].weekend_day_bg or calendar_themes[theme].bg
|
local default_bg = (weekday == 0 or weekday == 6)
|
||||||
|
and calendar_themes[theme].weekend_day_bg
|
||||||
|
or calendar_themes[theme].bg
|
||||||
local ret = wibox.widget {
|
local ret = wibox.widget {
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
|
@ -228,7 +230,8 @@ local function worker(args)
|
||||||
elseif placement == 'top_right' then
|
elseif placement == 'top_right' then
|
||||||
awful.placement.top_right(popup, { margins = { top = 30, right = 10}, parent = awful.screen.focused() })
|
awful.placement.top_right(popup, { margins = { top = 30, right = 10}, parent = awful.screen.focused() })
|
||||||
elseif placement == 'bottom_right' then
|
elseif placement == 'bottom_right' then
|
||||||
awful.placement.bottom_right(popup, { margins = { bottom = 30, right = 10}, parent = awful.screen.focused() })
|
awful.placement.bottom_right(popup, { margins = { bottom = 30, right = 10},
|
||||||
|
parent = awful.screen.focused() })
|
||||||
else
|
else
|
||||||
awful.placement.top(popup, { margins = { top = 30 }, parent = awful.screen.focused() })
|
awful.placement.top(popup, { margins = { top = 30 }, parent = awful.screen.focused() })
|
||||||
end
|
end
|
||||||
|
|
|
@ -14,10 +14,13 @@ local wibox = require("wibox")
|
||||||
local beautiful = require("beautiful")
|
local beautiful = require("beautiful")
|
||||||
local gears = require("gears")
|
local gears = require("gears")
|
||||||
|
|
||||||
|
local CMD = [[sh -c "grep '^cpu.' /proc/stat; ps -eo '%p|%c|%C|' -o "%mem" -o '|%a' --sort=-%cpu ]]
|
||||||
|
.. [[| head -11 | tail -n +2"]]
|
||||||
|
|
||||||
local HOME_DIR = os.getenv("HOME")
|
local HOME_DIR = os.getenv("HOME")
|
||||||
local WIDGET_DIR = HOME_DIR .. '/.config/awesome/awesome-wm-widgets/cpu-widget'
|
local WIDGET_DIR = HOME_DIR .. '/.config/awesome/awesome-wm-widgets/cpu-widget'
|
||||||
|
|
||||||
local widget = {}
|
local cpu_widget = {}
|
||||||
local cpu_rows = {
|
local cpu_rows = {
|
||||||
spacing = 4,
|
spacing = 4,
|
||||||
layout = wibox.layout.fixed.vertical,
|
layout = wibox.layout.fixed.vertical,
|
||||||
|
@ -86,9 +89,9 @@ local function create_kill_process_button()
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
local function worker(args)
|
local function worker(user_args)
|
||||||
|
|
||||||
local args = args or {}
|
local args = user_args or {}
|
||||||
|
|
||||||
local width = args.width or 50
|
local width = args.width or 50
|
||||||
local step_width = args.step_width or 2
|
local step_width = args.step_width or 2
|
||||||
|
@ -120,8 +123,8 @@ local function worker(args)
|
||||||
}
|
}
|
||||||
|
|
||||||
-- Do not update process rows when mouse cursor is over the widget
|
-- Do not update process rows when mouse cursor is over the widget
|
||||||
popup:connect_signal("mouse::enter", function(c) is_update = false end)
|
popup:connect_signal("mouse::enter", function() is_update = false end)
|
||||||
popup:connect_signal("mouse::leave", function(c) is_update = true end)
|
popup:connect_signal("mouse::leave", function() is_update = true end)
|
||||||
|
|
||||||
cpugraph_widget:buttons(
|
cpugraph_widget:buttons(
|
||||||
awful.util.table.join(
|
awful.util.table.join(
|
||||||
|
@ -136,155 +139,162 @@ local function worker(args)
|
||||||
)
|
)
|
||||||
|
|
||||||
--- By default graph widget goes from left to right, so we mirror it and push up a bit
|
--- 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)
|
cpu_widget = wibox.widget {
|
||||||
|
{
|
||||||
|
cpugraph_widget,
|
||||||
|
reflection = {horizontal = true},
|
||||||
|
layout = wibox.container.mirror
|
||||||
|
},
|
||||||
|
bottom = 2,
|
||||||
|
widget = wibox.container.margin
|
||||||
|
}
|
||||||
|
|
||||||
local cpus = {}
|
local cpus = {}
|
||||||
watch([[sh -c "grep '^cpu.' /proc/stat; ps -eo '%p|%c|%C|' -o "%mem" -o '|%a' --sort=-%cpu | head -11 | tail -n +2"]], timeout,
|
watch(CMD, timeout, function(widget, stdout)
|
||||||
function(widget, stdout)
|
local i = 1
|
||||||
local i = 1
|
local j = 1
|
||||||
local j = 1
|
for line in stdout:gmatch("[^\r\n]+") do
|
||||||
for line in stdout:gmatch("[^\r\n]+") do
|
if starts_with(line, 'cpu') then
|
||||||
if starts_with(line, 'cpu') then
|
|
||||||
|
|
||||||
if cpus[i] == nil then cpus[i] = {} end
|
if cpus[i] == nil then cpus[i] = {} end
|
||||||
|
|
||||||
local name, user, nice, system, idle, iowait, irq, softirq, steal, guest, guest_nice =
|
local name, user, nice, system, idle, iowait, irq, softirq, steal, _, _ =
|
||||||
line:match('(%w+)%s+(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)')
|
line:match('(%w+)%s+(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)')
|
||||||
|
|
||||||
local total = user + nice + system + idle + iowait + irq + softirq + steal
|
local total = user + nice + system + idle + iowait + irq + softirq + steal
|
||||||
|
|
||||||
local diff_idle = idle - tonumber(cpus[i]['idle_prev'] == nil and 0 or cpus[i]['idle_prev'])
|
local diff_idle = idle - tonumber(cpus[i]['idle_prev'] == nil and 0 or cpus[i]['idle_prev'])
|
||||||
local diff_total = total - tonumber(cpus[i]['total_prev'] == nil and 0 or cpus[i]['total_prev'])
|
local diff_total = total - tonumber(cpus[i]['total_prev'] == nil and 0 or cpus[i]['total_prev'])
|
||||||
local diff_usage = (1000 * (diff_total - diff_idle) / diff_total + 5) / 10
|
local diff_usage = (1000 * (diff_total - diff_idle) / diff_total + 5) / 10
|
||||||
|
|
||||||
cpus[i]['total_prev'] = total
|
cpus[i]['total_prev'] = total
|
||||||
cpus[i]['idle_prev'] = idle
|
cpus[i]['idle_prev'] = idle
|
||||||
|
|
||||||
if i == 1 then
|
if i == 1 then
|
||||||
widget:add_value(diff_usage)
|
widget:add_value(diff_usage)
|
||||||
end
|
end
|
||||||
|
|
||||||
local row = wibox.widget
|
local row = wibox.widget
|
||||||
|
{
|
||||||
|
create_textbox{text = name},
|
||||||
|
create_textbox{text = math.floor(diff_usage) .. '%'},
|
||||||
|
{
|
||||||
|
max_value = 100,
|
||||||
|
value = diff_usage,
|
||||||
|
forced_height = 20,
|
||||||
|
forced_width = 150,
|
||||||
|
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,#D08770:0.3,#BF616A:0.6," .. beautiful.fg_normal,
|
||||||
|
widget = wibox.widget.progressbar,
|
||||||
|
|
||||||
|
},
|
||||||
|
layout = wibox.layout.ratio.horizontal
|
||||||
|
}
|
||||||
|
row:ajust_ratio(2, 0.15, 0.15, 0.7)
|
||||||
|
cpu_rows[i] = row
|
||||||
|
i = i + 1
|
||||||
|
else
|
||||||
|
if is_update == true then
|
||||||
|
|
||||||
|
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 kill_proccess_button = enable_kill_button and create_kill_process_button() or nil
|
||||||
|
|
||||||
|
local pid_name_rest = wibox.widget{
|
||||||
|
create_textbox{text = pid},
|
||||||
|
create_textbox{text = comm},
|
||||||
{
|
{
|
||||||
create_textbox{text = name},
|
create_textbox{text = cpu, align = 'center'},
|
||||||
create_textbox{text = math.floor(diff_usage) .. '%'},
|
create_textbox{text = mem, align = 'center'},
|
||||||
{
|
kill_proccess_button,
|
||||||
max_value = 100,
|
layout = wibox.layout.fixed.horizontal
|
||||||
value = diff_usage,
|
},
|
||||||
forced_height = 20,
|
layout = wibox.layout.ratio.horizontal
|
||||||
forced_width = 150,
|
}
|
||||||
paddings = 1,
|
pid_name_rest:ajust_ratio(2, 0.2, 0.47, 0.33)
|
||||||
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,#D08770:0.3,#BF616A:0.6," .. beautiful.fg_normal,
|
|
||||||
widget = wibox.widget.progressbar,
|
|
||||||
|
|
||||||
},
|
local row = wibox.widget {
|
||||||
layout = wibox.layout.ratio.horizontal
|
{
|
||||||
}
|
pid_name_rest,
|
||||||
row:ajust_ratio(2, 0.15, 0.15, 0.7)
|
top = 4,
|
||||||
cpu_rows[i] = row
|
bottom = 4,
|
||||||
i = i + 1
|
widget = wibox.container.margin
|
||||||
else
|
},
|
||||||
if is_update == true then
|
widget = wibox.container.background
|
||||||
|
}
|
||||||
|
|
||||||
local columns = split(line, '|')
|
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)
|
||||||
|
|
||||||
local pid = columns[1]
|
if enable_kill_button then
|
||||||
local comm = columns[2]
|
row:connect_signal("mouse::enter", function() kill_proccess_button.icon.opacity = 1 end)
|
||||||
local cpu = columns[3]
|
row:connect_signal("mouse::leave", function() kill_proccess_button.icon.opacity = 0.1 end)
|
||||||
local mem = columns[4]
|
|
||||||
local cmd = columns[5]
|
|
||||||
|
|
||||||
local kill_proccess_button = enable_kill_button and create_kill_process_button() or nil
|
kill_proccess_button:buttons(
|
||||||
|
awful.util.table.join( awful.button({}, 1, function()
|
||||||
|
row:set_bg('#ff0000')
|
||||||
|
awful.spawn.with_shell('kill -9 ' .. pid)
|
||||||
|
end) ) )
|
||||||
|
end
|
||||||
|
|
||||||
local pid_name_rest = wibox.widget{
|
awful.tooltip {
|
||||||
create_textbox{text = pid},
|
objects = { row },
|
||||||
create_textbox{text = comm},
|
mode = 'outside',
|
||||||
{
|
preferred_positions = {'bottom'},
|
||||||
create_textbox{text = cpu, align = 'center'},
|
timer_function = function()
|
||||||
create_textbox{text = mem, align = 'center'},
|
local text = cmd
|
||||||
kill_proccess_button,
|
if process_info_max_length > 0 and text:len() > process_info_max_length then
|
||||||
layout = wibox.layout.fixed.horizontal
|
text = text:sub(0, process_info_max_length - 3) .. '...'
|
||||||
},
|
|
||||||
layout = wibox.layout.ratio.horizontal
|
|
||||||
}
|
|
||||||
pid_name_rest:ajust_ratio(2, 0.2, 0.47, 0.33)
|
|
||||||
|
|
||||||
local row = wibox.widget {
|
|
||||||
{
|
|
||||||
pid_name_rest,
|
|
||||||
top = 4,
|
|
||||||
bottom = 4,
|
|
||||||
widget = wibox.container.margin
|
|
||||||
},
|
|
||||||
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)
|
|
||||||
|
|
||||||
if enable_kill_button then
|
|
||||||
row:connect_signal("mouse::enter", function(c) kill_proccess_button.icon.opacity = 1 end)
|
|
||||||
row:connect_signal("mouse::leave", function(c) kill_proccess_button.icon.opacity = 0.1 end)
|
|
||||||
|
|
||||||
kill_proccess_button:buttons(
|
|
||||||
awful.util.table.join( awful.button({}, 1, function()
|
|
||||||
row:set_bg('#ff0000')
|
|
||||||
awful.spawn.with_shell('kill -9 ' .. pid)
|
|
||||||
end) ) )
|
|
||||||
end
|
end
|
||||||
|
|
||||||
awful.tooltip {
|
return text
|
||||||
objects = { row },
|
:gsub('%s%-', '\n\t-') -- put arguments on a new line
|
||||||
mode = 'outside',
|
:gsub(':/', '\n\t\t:/') -- java classpath uses : to separate jars
|
||||||
preferred_positions = {'bottom'},
|
end,
|
||||||
timer_function = function()
|
}
|
||||||
local text = cmd
|
|
||||||
if process_info_max_length > 0 and text:len() > process_info_max_length then
|
|
||||||
text = text:sub(0, process_info_max_length - 3) .. '...'
|
|
||||||
end
|
|
||||||
|
|
||||||
return text
|
process_rows[j] = row
|
||||||
: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
|
||||||
|
|
||||||
j = j + 1
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
popup:setup {
|
|
||||||
{
|
end
|
||||||
cpu_rows,
|
end
|
||||||
{
|
popup:setup {
|
||||||
orientation = 'horizontal',
|
{
|
||||||
forced_height = 15,
|
cpu_rows,
|
||||||
color = beautiful.bg_focus,
|
{
|
||||||
widget = wibox.widget.separator
|
orientation = 'horizontal',
|
||||||
},
|
forced_height = 15,
|
||||||
create_process_header{with_action_column = enable_kill_button},
|
color = beautiful.bg_focus,
|
||||||
process_rows,
|
widget = wibox.widget.separator
|
||||||
layout = wibox.layout.fixed.vertical,
|
},
|
||||||
},
|
create_process_header{with_action_column = enable_kill_button},
|
||||||
margins = 8,
|
process_rows,
|
||||||
widget = wibox.container.margin
|
layout = wibox.layout.fixed.vertical,
|
||||||
}
|
},
|
||||||
end,
|
margins = 8,
|
||||||
cpugraph_widget
|
widget = wibox.container.margin
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
cpugraph_widget
|
||||||
)
|
)
|
||||||
|
|
||||||
return cpu_widget
|
return cpu_widget
|
||||||
end
|
end
|
||||||
|
|
||||||
return setmetatable(widget, { __call = function(_, ...)
|
return setmetatable(cpu_widget, { __call = function(_, ...)
|
||||||
return worker(...)
|
return worker(...)
|
||||||
end })
|
end })
|
||||||
|
|
|
@ -19,7 +19,8 @@ local HOME_DIR = os.getenv("HOME")
|
||||||
local WIDGET_DIR = HOME_DIR .. '/.config/awesome/awesome-wm-widgets/docker-widget'
|
local WIDGET_DIR = HOME_DIR .. '/.config/awesome/awesome-wm-widgets/docker-widget'
|
||||||
local ICONS_DIR = WIDGET_DIR .. '/icons/'
|
local ICONS_DIR = WIDGET_DIR .. '/icons/'
|
||||||
|
|
||||||
local LIST_CONTAINERS_CMD = [[bash -c "docker container ls -a -s -n %s --format '{{.Names}}::{{.ID}}::{{.Image}}::{{.Status}}::{{.Size}}'"]]
|
local LIST_CONTAINERS_CMD = [[bash -c "docker container ls -a -s -n %s]]
|
||||||
|
.. [[ --format '{{.Names}}::{{.ID}}::{{.Image}}::{{.Status}}::{{.Size}}'"]]
|
||||||
|
|
||||||
--- Utility function to show warning messages
|
--- Utility function to show warning messages
|
||||||
local function show_warning(message)
|
local function show_warning(message)
|
||||||
|
@ -83,9 +84,9 @@ local status_to_icon_name = {
|
||||||
Paused = ICONS_DIR .. 'pause.svg'
|
Paused = ICONS_DIR .. 'pause.svg'
|
||||||
}
|
}
|
||||||
|
|
||||||
local function worker(args)
|
local function worker(user_args)
|
||||||
|
|
||||||
local args = args or {}
|
local args = user_args or {}
|
||||||
|
|
||||||
local icon = args.icon or ICONS_DIR .. 'docker.svg'
|
local icon = args.icon or ICONS_DIR .. 'docker.svg'
|
||||||
local number_of_containers = args.number_of_containers or -1
|
local number_of_containers = args.number_of_containers or -1
|
||||||
|
@ -97,15 +98,15 @@ local function worker(args)
|
||||||
layout = wibox.layout.fixed.vertical,
|
layout = wibox.layout.fixed.vertical,
|
||||||
}
|
}
|
||||||
|
|
||||||
local function rebuild_widget(stdout, stderr, _, _)
|
local function rebuild_widget(containers, errors, _, _)
|
||||||
if stderr ~= '' then
|
if errors ~= '' then
|
||||||
show_warning(stderr)
|
show_warning(errors)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
for i = 0, #rows do rows[i]=nil end
|
for i = 0, #rows do rows[i]=nil end
|
||||||
|
|
||||||
for line in stdout:gmatch("[^\r\n]+") do
|
for line in containers:gmatch("[^\r\n]+") do
|
||||||
|
|
||||||
local container = parse_container(line)
|
local container = parse_container(line)
|
||||||
|
|
||||||
|
@ -163,10 +164,12 @@ local function worker(args)
|
||||||
status_icon:set_opacity(0.2)
|
status_icon:set_opacity(0.2)
|
||||||
status_icon:emit_signal('widget::redraw_needed')
|
status_icon:emit_signal('widget::redraw_needed')
|
||||||
|
|
||||||
spawn.easy_async('docker ' .. command .. ' ' .. container['name'], function(stdout, stderr)
|
spawn.easy_async('docker ' .. command .. ' ' .. container['name'], function()
|
||||||
if stderr ~= '' then show_warning(stderr) end
|
if errors ~= '' then show_warning(errors) end
|
||||||
spawn.easy_async(string.format(LIST_CONTAINERS_CMD, number_of_containers), function(stdout, stderr)
|
spawn.easy_async(string.format(LIST_CONTAINERS_CMD, number_of_containers),
|
||||||
rebuild_widget(stdout, stderr) end)
|
function(stdout, stderr)
|
||||||
|
rebuild_widget(stdout, stderr)
|
||||||
|
end)
|
||||||
end)
|
end)
|
||||||
end) ) )
|
end) ) )
|
||||||
else
|
else
|
||||||
|
@ -220,10 +223,12 @@ local function worker(args)
|
||||||
status_icon:set_opacity(0.2)
|
status_icon:set_opacity(0.2)
|
||||||
status_icon:emit_signal('widget::redraw_needed')
|
status_icon:emit_signal('widget::redraw_needed')
|
||||||
|
|
||||||
awful.spawn.easy_async('docker ' .. command .. ' ' .. container['name'], function(stdout, stderr)
|
awful.spawn.easy_async('docker ' .. command .. ' ' .. container['name'], function(_, stderr)
|
||||||
if stderr ~= '' then show_warning(stderr) end
|
if stderr ~= '' then show_warning(stderr) end
|
||||||
spawn.easy_async(string.format(LIST_CONTAINERS_CMD, number_of_containers), function(stdout, stderr)
|
spawn.easy_async(string.format(LIST_CONTAINERS_CMD, number_of_containers),
|
||||||
rebuild_widget(stdout, stderr) end)
|
function(stdout, container_errors)
|
||||||
|
rebuild_widget(stdout, container_errors)
|
||||||
|
end)
|
||||||
end)
|
end)
|
||||||
end) ) )
|
end) ) )
|
||||||
else
|
else
|
||||||
|
@ -250,11 +255,12 @@ local function worker(args)
|
||||||
}
|
}
|
||||||
delete_button:buttons(
|
delete_button:buttons(
|
||||||
awful.util.table.join( awful.button({}, 1, function()
|
awful.util.table.join( awful.button({}, 1, function()
|
||||||
awful.spawn.easy_async('docker rm ' .. container['name'], function(stdout, stderr)
|
awful.spawn.easy_async('docker rm ' .. container['name'], function(_, rm_stderr)
|
||||||
if stderr ~= '' then show_warning(stderr) end
|
if rm_stderr ~= '' then show_warning(rm_stderr) end
|
||||||
spawn.easy_async(string.format(LIST_CONTAINERS_CMD, number_of_containers), function(stdout, stderr)
|
spawn.easy_async(string.format(LIST_CONTAINERS_CMD, number_of_containers),
|
||||||
rebuild_widget(stdout, stderr) end)
|
function(lc_stdout, lc_stderr)
|
||||||
end)
|
rebuild_widget(lc_stdout, lc_stderr) end)
|
||||||
|
end)
|
||||||
end)))
|
end)))
|
||||||
|
|
||||||
local old_cursor, old_wibox
|
local old_cursor, old_wibox
|
||||||
|
@ -350,10 +356,11 @@ local function worker(args)
|
||||||
if popup.visible then
|
if popup.visible then
|
||||||
popup.visible = not popup.visible
|
popup.visible = not popup.visible
|
||||||
else
|
else
|
||||||
spawn.easy_async(string.format(LIST_CONTAINERS_CMD, number_of_containers), function(stdout, stderr)
|
spawn.easy_async(string.format(LIST_CONTAINERS_CMD, number_of_containers),
|
||||||
rebuild_widget(stdout, stderr)
|
function(stdout, stderr)
|
||||||
popup:move_next_to(mouse.current_widget_geometry)
|
rebuild_widget(stdout, stderr)
|
||||||
end)
|
popup:move_next_to(mouse.current_widget_geometry)
|
||||||
|
end)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
)
|
)
|
||||||
|
|
|
@ -5,30 +5,30 @@ local watch = require("awful.widget.watch")
|
||||||
|
|
||||||
local path_to_icons = "/usr/share/icons/Arc/actions/22/"
|
local path_to_icons = "/usr/share/icons/Arc/actions/22/"
|
||||||
|
|
||||||
email_widget = wibox.widget.textbox()
|
local email_widget = wibox.widget.textbox()
|
||||||
email_widget:set_font('Play 9')
|
email_widget:set_font('Play 9')
|
||||||
|
|
||||||
email_icon = wibox.widget.imagebox()
|
local email_icon = wibox.widget.imagebox()
|
||||||
email_icon:set_image(path_to_icons .. "/mail-mark-new.png")
|
email_icon:set_image(path_to_icons .. "/mail-mark-new.png")
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
"python /home/<username>/.config/awesome/email-widget/count_unread_emails.py", 20,
|
"python /home/<username>/.config/awesome/email-widget/count_unread_emails.py", 20,
|
||||||
function(widget, stdout, stderr, exitreason, exitcode)
|
function(_, stdout)
|
||||||
local unread_emails_num = tonumber(stdout) or 0
|
local unread_emails_num = tonumber(stdout) or 0
|
||||||
if (unread_emails_num > 0) then
|
if (unread_emails_num > 0) then
|
||||||
email_icon:set_image(path_to_icons .. "/mail-mark-unread.png")
|
email_icon:set_image(path_to_icons .. "/mail-mark-unread.png")
|
||||||
email_widget:set_text(stdout)
|
email_widget:set_text(stdout)
|
||||||
elseif (unread_emails_num == 0) then
|
elseif (unread_emails_num == 0) then
|
||||||
email_icon:set_image(path_to_icons .. "/mail-message-new.png")
|
email_icon:set_image(path_to_icons .. "/mail-message-new.png")
|
||||||
email_widget:set_text("")
|
email_widget:set_text("")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
function show_emails()
|
local function show_emails()
|
||||||
awful.spawn.easy_async([[bash -c 'python /home/<username>/.config/awesome/email-widget/read_unread_emails.py']],
|
awful.spawn.easy_async([[bash -c 'python /home/<username>/.config/awesome/email-widget/read_unread_emails.py']],
|
||||||
function(stdout, stderr, reason, exit_code)
|
function(stdout)
|
||||||
naughty.notify{
|
naughty.notify{
|
||||||
text = stdout,
|
text = stdout,
|
||||||
title = "Unread Emails",
|
title = "Unread Emails",
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
-- @author Pavel Makhov
|
-- @author Pavel Makhov
|
||||||
-- @copyright 2020 Pavel Makhov
|
-- @copyright 2020 Pavel Makhov
|
||||||
-------------------------------------------------
|
-------------------------------------------------
|
||||||
|
--luacheck:ignore
|
||||||
local awful = require("awful")
|
local awful = require("awful")
|
||||||
local wibox = require("wibox")
|
local wibox = require("wibox")
|
||||||
local watch = require("awful.widget.watch")
|
local watch = require("awful.widget.watch")
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
|
|
||||||
local json = require("json")
|
|
||||||
|
|
||||||
local utils = {}
|
local utils = {}
|
||||||
|
|
||||||
|
|
|
@ -68,7 +68,7 @@ local function build_rows(devices, on_checkbox_click, device_type)
|
||||||
widget = wibox.widget.checkbox
|
widget = wibox.widget.checkbox
|
||||||
}
|
}
|
||||||
|
|
||||||
checkbox:connect_signal("button::press", function(c)
|
checkbox:connect_signal("button::press", function()
|
||||||
spawn.easy_async(string.format([[sh -c 'pacmd set-default-%s "%s"']], device_type, device.name), function()
|
spawn.easy_async(string.format([[sh -c 'pacmd set-default-%s "%s"']], device_type, device.name), function()
|
||||||
on_checkbox_click()
|
on_checkbox_click()
|
||||||
end)
|
end)
|
||||||
|
@ -105,19 +105,19 @@ local function build_rows(devices, on_checkbox_click, device_type)
|
||||||
row:connect_signal("mouse::leave", function(c) c:set_bg(beautiful.bg_normal) end)
|
row:connect_signal("mouse::leave", function(c) c:set_bg(beautiful.bg_normal) end)
|
||||||
|
|
||||||
local old_cursor, old_wibox
|
local old_cursor, old_wibox
|
||||||
row:connect_signal("mouse::enter", function(c)
|
row:connect_signal("mouse::enter", function()
|
||||||
local wb = mouse.current_wibox
|
local wb = mouse.current_wibox
|
||||||
old_cursor, old_wibox = wb.cursor, wb
|
old_cursor, old_wibox = wb.cursor, wb
|
||||||
wb.cursor = "hand1"
|
wb.cursor = "hand1"
|
||||||
end)
|
end)
|
||||||
row:connect_signal("mouse::leave", function(c)
|
row:connect_signal("mouse::leave", function()
|
||||||
if old_wibox then
|
if old_wibox then
|
||||||
old_wibox.cursor = old_cursor
|
old_wibox.cursor = old_cursor
|
||||||
old_wibox = nil
|
old_wibox = nil
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
row:connect_signal("button::press", function(c)
|
row:connect_signal("button::press", function()
|
||||||
spawn.easy_async(string.format([[sh -c 'pacmd set-default-%s "%s"']], device_type, device.name), function()
|
spawn.easy_async(string.format([[sh -c 'pacmd set-default-%s "%s"']], device_type, device.name), function()
|
||||||
on_checkbox_click()
|
on_checkbox_click()
|
||||||
end)
|
end)
|
||||||
|
@ -158,9 +158,9 @@ local function rebuild_popup()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
local function worker(args)
|
local function worker(user_args)
|
||||||
|
|
||||||
local args = args or {}
|
local args = user_args or {}
|
||||||
|
|
||||||
local widget_type = args.widget_type
|
local widget_type = args.widget_type
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ function widget.get_widget()
|
||||||
is_muted = true,
|
is_muted = true,
|
||||||
set_volume_level = function(self, new_value)
|
set_volume_level = function(self, new_value)
|
||||||
self:get_children_by_id('txt')[1]:set_text(new_value)
|
self:get_children_by_id('txt')[1]:set_text(new_value)
|
||||||
local volume_icon_name = ''
|
local volume_icon_name
|
||||||
if self.is_muted then
|
if self.is_muted then
|
||||||
volume_icon_name = 'audio-volume-muted-symbolic.svg'
|
volume_icon_name = 'audio-volume-muted-symbolic.svg'
|
||||||
else
|
else
|
||||||
|
|
|
@ -15,7 +15,7 @@ function widget.get_widget()
|
||||||
valign = 'center',
|
valign = 'center',
|
||||||
layout = wibox.container.place,
|
layout = wibox.container.place,
|
||||||
set_volume_level = function(self, new_value)
|
set_volume_level = function(self, new_value)
|
||||||
local volume_icon_name = ''
|
local volume_icon_name
|
||||||
if self.is_muted then
|
if self.is_muted then
|
||||||
volume_icon_name = 'audio-volume-muted-symbolic.svg'
|
volume_icon_name = 'audio-volume-muted-symbolic.svg'
|
||||||
else
|
else
|
||||||
|
|
|
@ -6,8 +6,8 @@ local gears = require("gears")
|
||||||
|
|
||||||
local storage_bar_widget = {}
|
local storage_bar_widget = {}
|
||||||
|
|
||||||
local function worker(args)
|
local function worker(user_args)
|
||||||
local args = args or {}
|
local args = user_args or {}
|
||||||
local mounts = args.mounts or {'/'}
|
local mounts = args.mounts or {'/'}
|
||||||
local timeout = args.timeout or 60
|
local timeout = args.timeout or 60
|
||||||
|
|
||||||
|
|
|
@ -27,9 +27,9 @@ local DOWNLOAD_AVATAR_CMD = [[bash -c "curl --create-dirs -o %s %s"]]
|
||||||
|
|
||||||
local gerrit_widget = {}
|
local gerrit_widget = {}
|
||||||
|
|
||||||
local function worker(args)
|
local function worker(user_args)
|
||||||
|
|
||||||
local args = args or {}
|
local args = user_args or {}
|
||||||
|
|
||||||
local icon = args.icons or HOME_DIR .. '/.config/awesome/awesome-wm-widgets/gerrit-widget/gerrit_icon.svg'
|
local icon = args.icons or HOME_DIR .. '/.config/awesome/awesome-wm-widgets/gerrit-widget/gerrit_icon.svg'
|
||||||
local host = args.host or naughty.notify{
|
local host = args.host or naughty.notify{
|
||||||
|
@ -93,11 +93,12 @@ local function worker(args)
|
||||||
|
|
||||||
if name_dict[user_id].username == nil then
|
if name_dict[user_id].username == nil then
|
||||||
name_dict[user_id].username = ''
|
name_dict[user_id].username = ''
|
||||||
spawn.easy_async(string.format(GET_USER_CMD, host, user_id), function(stdout, stderr, reason, exit_code)
|
spawn.easy_async(string.format(GET_USER_CMD, host, user_id), function(stdout)
|
||||||
local user = json.decode(stdout)
|
local user = json.decode(stdout)
|
||||||
name_dict[tonumber(user_id)].username = user.name
|
name_dict[tonumber(user_id)].username = user.name
|
||||||
if not gfs.file_readable(PATH_TO_AVATARS .. user_id) then
|
if not gfs.file_readable(PATH_TO_AVATARS .. user_id) then
|
||||||
spawn.easy_async(string.format(DOWNLOAD_AVATAR_CMD, PATH_TO_AVATARS .. user_id, user.avatars[1].url))
|
spawn.easy_async(
|
||||||
|
string.format(DOWNLOAD_AVATAR_CMD, PATH_TO_AVATARS .. user_id, user.avatars[1].url))
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
return name_dict[user_id].username
|
return name_dict[user_id].username
|
||||||
|
@ -124,7 +125,8 @@ local function worker(args)
|
||||||
naughty.notify{
|
naughty.notify{
|
||||||
icon = HOME_DIR ..'/.config/awesome/awesome-wm-widgets/gerrit-widget/gerrit_icon.svg',
|
icon = HOME_DIR ..'/.config/awesome/awesome-wm-widgets/gerrit-widget/gerrit_icon.svg',
|
||||||
title = 'New Incoming Review',
|
title = 'New Incoming Review',
|
||||||
text = reviews[1].project .. '\n' .. get_name_by_user_id(reviews[1].owner._account_id) .. reviews[1].subject .. '\n',
|
text = reviews[1].project .. '\n' .. get_name_by_user_id(reviews[1].owner._account_id) ..
|
||||||
|
reviews[1].subject .. '\n',
|
||||||
run = function() spawn.with_shell("xdg-open https://" .. host .. '/' .. reviews[1]._number) end
|
run = function() spawn.with_shell("xdg-open https://" .. host .. '/' .. reviews[1]._number) end
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
@ -174,7 +176,7 @@ local function worker(args)
|
||||||
widget = wibox.container.background
|
widget = wibox.container.background
|
||||||
}
|
}
|
||||||
|
|
||||||
row:connect_signal("button::release", function(_, _, _, button)
|
row:connect_signal("button::release", function()
|
||||||
spawn.with_shell("xdg-open " .. host .. '/' .. review._number)
|
spawn.with_shell("xdg-open " .. host .. '/' .. review._number)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
|
|
@ -22,9 +22,12 @@ local WIDGET_DIR = HOME_DIR .. '/.config/awesome/awesome-wm-widgets/github-activ
|
||||||
local ICONS_DIR = WIDGET_DIR .. '/icons/'
|
local ICONS_DIR = WIDGET_DIR .. '/icons/'
|
||||||
local CACHE_DIR = HOME_DIR .. '/.cache/awmw/github-activity-widget'
|
local CACHE_DIR = HOME_DIR .. '/.cache/awmw/github-activity-widget'
|
||||||
|
|
||||||
local GET_EVENTS_CMD = [[bash -c "cat %s/activity.json | jq '.[:%d] | [.[] | {type: .type, actor: .actor, repo: .repo, action: .payload.action, issue_url: .payload.issue.html_url, pr_url: .payload.pull_request.html_url, created_at: .created_at}]'"]]
|
local GET_EVENTS_CMD = [[sh -c "cat %s/activity.json | jq '.[:%d] | [.[] ]]
|
||||||
local DOWNLOAD_AVATAR_CMD = [[bash -c "curl -n --create-dirs -o %s/avatars/%s %s"]]
|
.. [[| {type: .type, actor: .actor, repo: .repo, action: .payload.action, issue_url: .payload.issue.html_url, ]]
|
||||||
local UPDATE_EVENTS_CMD = [[bash -c "curl -s --show-error https://api.github.com/users/%s/received_events > %s/activity.json"]]
|
.. [[pr_url: .payload.pull_request.html_url, created_at: .created_at}]'"]]
|
||||||
|
local DOWNLOAD_AVATAR_CMD = [[sh -c "curl -n --create-dirs -o %s/avatars/%s %s"]]
|
||||||
|
local UPDATE_EVENTS_CMD = [[sh -c "curl -s --show-error https://api.github.com/users/%s/received_events ]]
|
||||||
|
..[[> %s/activity.json"]]
|
||||||
|
|
||||||
--- Utility function to show warning messages
|
--- Utility function to show warning messages
|
||||||
local function show_warning(message)
|
local function show_warning(message)
|
||||||
|
@ -37,7 +40,7 @@ end
|
||||||
--- Converts string representation of date (2020-06-02T11:25:27Z) to date
|
--- Converts string representation of date (2020-06-02T11:25:27Z) to date
|
||||||
local function parse_date(date_str)
|
local function parse_date(date_str)
|
||||||
local pattern = "(%d+)%-(%d+)%-(%d+)T(%d+):(%d+):(%d+)%Z"
|
local pattern = "(%d+)%-(%d+)%-(%d+)T(%d+):(%d+):(%d+)%Z"
|
||||||
local y, m, d, h, min, sec, mil = date_str:match(pattern)
|
local y, m, d, h, min, sec, _ = date_str:match(pattern)
|
||||||
|
|
||||||
return os.time{year = y, month = m, day = d, hour = h, min = min, sec = sec}
|
return os.time{year = y, month = m, day = d, hour = h, min = min, sec = sec}
|
||||||
end
|
end
|
||||||
|
@ -129,13 +132,13 @@ local github_widget = wibox.widget {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
local function worker(args)
|
local function worker(user_args)
|
||||||
|
|
||||||
if not gfs.dir_readable(CACHE_DIR) then
|
if not gfs.dir_readable(CACHE_DIR) then
|
||||||
gfs.make_directories(CACHE_DIR)
|
gfs.make_directories(CACHE_DIR)
|
||||||
end
|
end
|
||||||
|
|
||||||
local args = args or {}
|
local args = user_args or {}
|
||||||
|
|
||||||
local icon = args.icon or ICONS_DIR .. 'github.png'
|
local icon = args.icon or ICONS_DIR .. 'github.png'
|
||||||
local username = args.username or show_warning('No username provided')
|
local username = args.username or show_warning('No username provided')
|
||||||
|
@ -147,7 +150,7 @@ local function worker(args)
|
||||||
layout = wibox.layout.fixed.vertical,
|
layout = wibox.layout.fixed.vertical,
|
||||||
}
|
}
|
||||||
|
|
||||||
local rebuild_widget = function(widget, stdout, stderr, _, _)
|
local rebuild_widget = function(stdout, stderr, _, _)
|
||||||
if stderr ~= '' then
|
if stderr ~= '' then
|
||||||
show_warning(stderr)
|
show_warning(stderr)
|
||||||
return
|
return
|
||||||
|
@ -197,7 +200,8 @@ local function worker(args)
|
||||||
|
|
||||||
local repo_info = wibox.widget {
|
local repo_info = wibox.widget {
|
||||||
{
|
{
|
||||||
markup = '<b> ' .. event.actor.display_login .. '</b> ' .. action_and_link.action_string .. ' <b>' .. event.repo.name .. '</b>',
|
markup = '<b> ' .. event.actor.display_login .. '</b> ' .. action_and_link.action_string
|
||||||
|
.. ' <b>' .. event.repo.name .. '</b>',
|
||||||
wrap = 'word',
|
wrap = 'word',
|
||||||
widget = wibox.widget.textbox
|
widget = wibox.widget.textbox
|
||||||
},
|
},
|
||||||
|
@ -261,10 +265,11 @@ local function worker(args)
|
||||||
if popup.visible then
|
if popup.visible then
|
||||||
popup.visible = not popup.visible
|
popup.visible = not popup.visible
|
||||||
else
|
else
|
||||||
spawn.easy_async(string.format(GET_EVENTS_CMD, CACHE_DIR, number_of_events), function (stdout, stderr)
|
spawn.easy_async(string.format(GET_EVENTS_CMD, CACHE_DIR, number_of_events),
|
||||||
rebuild_widget(github_widget, stdout, stderr)
|
function (stdout, stderr)
|
||||||
popup:move_next_to(mouse.current_widget_geometry)
|
rebuild_widget(stdout, stderr)
|
||||||
end)
|
popup:move_next_to(mouse.current_widget_geometry)
|
||||||
|
end)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
)
|
)
|
||||||
|
@ -276,7 +281,7 @@ local function worker(args)
|
||||||
call_now = true,
|
call_now = true,
|
||||||
autostart = true,
|
autostart = true,
|
||||||
callback = function()
|
callback = function()
|
||||||
spawn.easy_async(string.format(UPDATE_EVENTS_CMD, username, CACHE_DIR), function(stdout, stderr)
|
spawn.easy_async(string.format(UPDATE_EVENTS_CMD, username, CACHE_DIR), function(_, stderr)
|
||||||
if stderr ~= '' then show_warning(stderr) return end
|
if stderr ~= '' then show_warning(stderr) return end
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
|
@ -13,7 +13,8 @@ local naughty = require("naughty")
|
||||||
local wibox = require("wibox")
|
local wibox = require("wibox")
|
||||||
local widget_themes = require("awesome-wm-widgets.github-contributions-widget.themes")
|
local widget_themes = require("awesome-wm-widgets.github-contributions-widget.themes")
|
||||||
|
|
||||||
local GET_CONTRIBUTIONS_CMD = [[bash -c "curl -s https://github-contributions.now.sh/api/v1/%s | jq -r '[.contributions[] | select ( .date | strptime(\"%%Y-%%m-%%d\") | mktime < now)][:%s]| .[].color'"]]
|
local GET_CONTRIBUTIONS_CMD = [[bash -c "curl -s https://github-contributions.now.sh/api/v1/%s]]
|
||||||
|
.. [[ | jq -r '[.contributions[] | select ( .date | strptime(\"%%Y-%%m-%%d\") | mktime < now)][:%s]| .[].color'"]]
|
||||||
|
|
||||||
local github_contributions_widget = wibox.widget{
|
local github_contributions_widget = wibox.widget{
|
||||||
reflection = {
|
reflection = {
|
||||||
|
@ -30,9 +31,9 @@ local function show_warning(message)
|
||||||
text = message}
|
text = message}
|
||||||
end
|
end
|
||||||
|
|
||||||
local function worker(args)
|
local function worker(user_args)
|
||||||
|
|
||||||
local args = args or {}
|
local args = user_args or {}
|
||||||
|
|
||||||
local username = args.username or 'streetturtle'
|
local username = args.username or 'streetturtle'
|
||||||
local days = args.days or 365
|
local days = args.days or 365
|
||||||
|
@ -62,10 +63,10 @@ local function worker(args)
|
||||||
local r, g, b = hex2rgb(color)
|
local r, g, b = hex2rgb(color)
|
||||||
|
|
||||||
return wibox.widget{
|
return wibox.widget{
|
||||||
fit = function(self, context, width, height)
|
fit = function()
|
||||||
return 3, 3
|
return 3, 3
|
||||||
end,
|
end,
|
||||||
draw = function(self, context, cr, width, height)
|
draw = function(_, _, cr, _, _)
|
||||||
cr:set_source_rgb(r/255, g/255, b/255)
|
cr:set_source_rgb(r/255, g/255, b/255)
|
||||||
cr:rectangle(0, 0, with_border and 2 or 3, with_border and 2 or 3)
|
cr:rectangle(0, 0, with_border and 2 or 3, with_border and 2 or 3)
|
||||||
cr:fill()
|
cr:fill()
|
||||||
|
@ -77,11 +78,11 @@ local function worker(args)
|
||||||
local col = {layout = wibox.layout.fixed.vertical}
|
local col = {layout = wibox.layout.fixed.vertical}
|
||||||
local row = {layout = wibox.layout.fixed.horizontal}
|
local row = {layout = wibox.layout.fixed.horizontal}
|
||||||
local a = 5 - os.date('%w')
|
local a = 5 - os.date('%w')
|
||||||
for i = 0, a do
|
for _ = 0, a do
|
||||||
table.insert(col, get_square(color_of_empty_cells))
|
table.insert(col, get_square(color_of_empty_cells))
|
||||||
end
|
end
|
||||||
|
|
||||||
local update_widget = function(widget, stdout, _, _, _)
|
local update_widget = function(_, stdout, _, _, _)
|
||||||
for colors in stdout:gmatch("[^\r\n]+") do
|
for colors in stdout:gmatch("[^\r\n]+") do
|
||||||
if a%7 == 0 then
|
if a%7 == 0 then
|
||||||
table.insert(row, col)
|
table.insert(row, col)
|
||||||
|
@ -100,7 +101,7 @@ local function worker(args)
|
||||||
end
|
end
|
||||||
|
|
||||||
awful.spawn.easy_async(string.format(GET_CONTRIBUTIONS_CMD, username, days),
|
awful.spawn.easy_async(string.format(GET_CONTRIBUTIONS_CMD, username, days),
|
||||||
function(stdout, stderr)
|
function(stdout)
|
||||||
update_widget(github_contributions_widget, stdout)
|
update_widget(github_contributions_widget, stdout)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
|
|
@ -21,8 +21,9 @@ local color = require("gears.color")
|
||||||
|
|
||||||
local HOME_DIR = os.getenv("HOME")
|
local HOME_DIR = os.getenv("HOME")
|
||||||
local WIDGET_DIR = HOME_DIR .. '/.config/awesome/awesome-wm-widgets/gitlab-widget/'
|
local WIDGET_DIR = HOME_DIR .. '/.config/awesome/awesome-wm-widgets/gitlab-widget/'
|
||||||
local GET_PRS_CMD= [[bash -c "curl -s --connect-timeout 5 --show-error --header 'PRIVATE-TOKEN: %s' '%s/api/v4/merge_requests?state=opened'"]]
|
local GET_PRS_CMD= [[sh -c "curl -s --connect-timeout 5 --show-error --header 'PRIVATE-TOKEN: %s']]
|
||||||
local DOWNLOAD_AVATAR_CMD = [[bash -c "curl -L --create-dirs -o %s/.cache/awmw/gitlab-widget/avatars/%s %s"]]
|
..[[ '%s/api/v4/merge_requests?state=opened'"]]
|
||||||
|
local DOWNLOAD_AVATAR_CMD = [[sh -c "curl -L --create-dirs -o %s/.cache/awmw/gitlab-widget/avatars/%s %s"]]
|
||||||
|
|
||||||
local gitlab_widget = wibox.widget {
|
local gitlab_widget = wibox.widget {
|
||||||
{
|
{
|
||||||
|
@ -33,7 +34,7 @@ local gitlab_widget = wibox.widget {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id = 'error_marker',
|
id = 'error_marker',
|
||||||
draw = function(self, context, cr, width, height)
|
draw = function(_, _, cr, _, height)
|
||||||
cr:set_source(color(beautiful.fg_urgent))
|
cr:set_source(color(beautiful.fg_urgent))
|
||||||
cr:arc(height/4, height/4, height/4, 0, math.pi*2)
|
cr:arc(height/4, height/4, height/4, 0, math.pi*2)
|
||||||
cr:fill()
|
cr:fill()
|
||||||
|
@ -96,7 +97,7 @@ local popup = awful.popup{
|
||||||
--- Converts string representation of date (2020-06-02T11:25:27Z) to date
|
--- Converts string representation of date (2020-06-02T11:25:27Z) to date
|
||||||
local function parse_date(date_str)
|
local function parse_date(date_str)
|
||||||
local pattern = "(%d+)%-(%d+)%-(%d+)T(%d+):(%d+):(%d+)%Z"
|
local pattern = "(%d+)%-(%d+)%-(%d+)T(%d+):(%d+):(%d+)%Z"
|
||||||
local y, m, d, h, min, sec, mil = date_str:match(pattern)
|
local y, m, d, h, min, sec, _ = date_str:match(pattern)
|
||||||
|
|
||||||
return os.time{year = y, month = m, day = d, hour = h, min = min, sec = sec}
|
return os.time{year = y, month = m, day = d, hour = h, min = min, sec = sec}
|
||||||
end
|
end
|
||||||
|
@ -134,9 +135,9 @@ local tooltip = awful.tooltip {
|
||||||
preferred_positions = {'bottom'},
|
preferred_positions = {'bottom'},
|
||||||
}
|
}
|
||||||
|
|
||||||
local function worker(args)
|
local function worker(user_args)
|
||||||
|
|
||||||
local args = args or {}
|
local args = user_args or {}
|
||||||
|
|
||||||
local icon = args.icon or WIDGET_DIR .. '/icons/gitlab-icon.svg'
|
local icon = args.icon or WIDGET_DIR .. '/icons/gitlab-icon.svg'
|
||||||
local api_token = args.api_token or show_warning('API Token is not set')
|
local api_token = args.api_token or show_warning('API Token is not set')
|
||||||
|
@ -318,7 +319,9 @@ local function worker(args)
|
||||||
DOWNLOAD_AVATAR_CMD,
|
DOWNLOAD_AVATAR_CMD,
|
||||||
HOME_DIR,
|
HOME_DIR,
|
||||||
pr.author.id,
|
pr.author.id,
|
||||||
pr.author.avatar_url), function() row:get_children_by_id('avatar')[1]:set_image(path_to_avatar) end)
|
pr.author.avatar_url), function()
|
||||||
|
row:get_children_by_id('avatar')[1]:set_image(path_to_avatar)
|
||||||
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
row:connect_signal("mouse::enter", function(c) c:set_bg(beautiful.bg_focus) end)
|
row:connect_signal("mouse::enter", function(c) c:set_bg(beautiful.bg_focus) end)
|
||||||
|
@ -342,25 +345,24 @@ local function worker(args)
|
||||||
)
|
)
|
||||||
|
|
||||||
local old_cursor, old_wibox
|
local old_cursor, old_wibox
|
||||||
row:get_children_by_id('title')[1]:connect_signal("mouse::enter", function(c)
|
row:get_children_by_id('title')[1]:connect_signal("mouse::enter", function()
|
||||||
local wb = mouse.current_wibox
|
local wb = mouse.current_wibox
|
||||||
old_cursor, old_wibox = wb.cursor, wb
|
old_cursor, old_wibox = wb.cursor, wb
|
||||||
wb.cursor = "hand1"
|
wb.cursor = "hand1"
|
||||||
end)
|
end)
|
||||||
row:get_children_by_id('title')[1]:connect_signal("mouse::leave", function(c)
|
row:get_children_by_id('title')[1]:connect_signal("mouse::leave", function()
|
||||||
if old_wibox then
|
if old_wibox then
|
||||||
old_wibox.cursor = old_cursor
|
old_wibox.cursor = old_cursor
|
||||||
old_wibox = nil
|
old_wibox = nil
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
local old_cursor, old_wibox
|
row:get_children_by_id('avatar')[1]:connect_signal("mouse::enter", function()
|
||||||
row:get_children_by_id('avatar')[1]:connect_signal("mouse::enter", function(c)
|
|
||||||
local wb = mouse.current_wibox
|
local wb = mouse.current_wibox
|
||||||
old_cursor, old_wibox = wb.cursor, wb
|
old_cursor, old_wibox = wb.cursor, wb
|
||||||
wb.cursor = "hand1"
|
wb.cursor = "hand1"
|
||||||
end)
|
end)
|
||||||
row:get_children_by_id('avatar')[1]:connect_signal("mouse::leave", function(c)
|
row:get_children_by_id('avatar')[1]:connect_signal("mouse::leave", function()
|
||||||
if old_wibox then
|
if old_wibox then
|
||||||
old_wibox.cursor = old_cursor
|
old_wibox.cursor = old_cursor
|
||||||
old_wibox = nil
|
old_wibox = nil
|
||||||
|
|
|
@ -17,12 +17,12 @@ local naughty = require("naughty")
|
||||||
local gears = require("gears")
|
local gears = require("gears")
|
||||||
local beautiful = require("beautiful")
|
local beautiful = require("beautiful")
|
||||||
local gfs = require("gears.filesystem")
|
local gfs = require("gears.filesystem")
|
||||||
local gs = require("gears.string")
|
|
||||||
local color = require("gears.color")
|
local color = require("gears.color")
|
||||||
|
|
||||||
local HOME_DIR = os.getenv("HOME")
|
local HOME_DIR = os.getenv("HOME")
|
||||||
|
|
||||||
local GET_ISSUES_CMD = [[bash -c "curl -s --show-error -X GET -n '%s/rest/api/2/search?%s&fields=id,assignee,summary,status'"]]
|
local GET_ISSUES_CMD =
|
||||||
|
[[bash -c "curl -s --show-error -X GET -n '%s/rest/api/2/search?%s&fields=id,assignee,summary,status'"]]
|
||||||
local DOWNLOAD_AVATAR_CMD = [[bash -c "curl -n --create-dirs -o %s/.cache/awmw/jira-widget/avatars/%s %s"]]
|
local DOWNLOAD_AVATAR_CMD = [[bash -c "curl -n --create-dirs -o %s/.cache/awmw/jira-widget/avatars/%s %s"]]
|
||||||
|
|
||||||
local function show_warning(message)
|
local function show_warning(message)
|
||||||
|
@ -41,7 +41,7 @@ local jira_widget = wibox.widget {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id = 'd',
|
id = 'd',
|
||||||
draw = function(self, context, cr, width, height)
|
draw = function(_, _, cr, _, height)
|
||||||
cr:set_source(color(beautiful.fg_urgent))
|
cr:set_source(color(beautiful.fg_urgent))
|
||||||
cr:arc(height/4, height/4, height/4, 0, math.pi*2)
|
cr:arc(height/4, height/4, height/4, 0, math.pi*2)
|
||||||
cr:fill()
|
cr:fill()
|
||||||
|
@ -100,9 +100,9 @@ local tooltip = awful.tooltip {
|
||||||
preferred_positions = {'bottom'},
|
preferred_positions = {'bottom'},
|
||||||
}
|
}
|
||||||
|
|
||||||
local function worker(args)
|
local function worker(user_args)
|
||||||
|
|
||||||
local args = args or {}
|
local args = user_args or {}
|
||||||
|
|
||||||
local icon = args.icon or HOME_DIR .. '/.config/awesome/awesome-wm-widgets/jira-widget/jira-mark-gradient-blue.svg'
|
local icon = args.icon or HOME_DIR .. '/.config/awesome/awesome-wm-widgets/jira-widget/jira-mark-gradient-blue.svg'
|
||||||
local host = args.host or show_warning('Jira host is unknown')
|
local host = args.host or show_warning('Jira host is unknown')
|
||||||
|
@ -149,7 +149,7 @@ local function worker(args)
|
||||||
|
|
||||||
for i = 0, #rows do rows[i]=nil end
|
for i = 0, #rows do rows[i]=nil end
|
||||||
for _, issue in ipairs(result.issues) do
|
for _, issue in ipairs(result.issues) do
|
||||||
local path_to_avatar = os.getenv("HOME") ..'/.cache/awmw/jira-widget/avatars/' .. issue.fields.assignee.accountId
|
local path_to_avatar = HOME_DIR ..'/.cache/awmw/jira-widget/avatars/' .. issue.fields.assignee.accountId
|
||||||
|
|
||||||
if not gfs.file_readable(path_to_avatar) then
|
if not gfs.file_readable(path_to_avatar) then
|
||||||
spawn.easy_async(string.format(
|
spawn.easy_async(string.format(
|
||||||
|
|
|
@ -54,8 +54,8 @@ local function create_button(icon_name, action_name, color, onclick, icon_size,
|
||||||
capi.keygrabber.stop()
|
capi.keygrabber.stop()
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
button:connect_signal("mouse::enter", function(c) action:set_text(action_name) end)
|
button:connect_signal("mouse::enter", function() action:set_text(action_name) end)
|
||||||
button:connect_signal("mouse::leave", function(c) action:set_text(' ') end)
|
button:connect_signal("mouse::leave", function() action:set_text(' ') end)
|
||||||
return button
|
return button
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -76,7 +76,8 @@ local function launch(args)
|
||||||
|
|
||||||
w:set_bg(bg_color)
|
w:set_bg(bg_color)
|
||||||
if #phrases > 0 then
|
if #phrases > 0 then
|
||||||
phrase_widget:set_markup('<span color="'.. text_color .. '" size="20000">' .. phrases[ math.random( #phrases ) ] .. '</span>')
|
phrase_widget:set_markup(
|
||||||
|
'<span color="'.. text_color .. '" size="20000">' .. phrases[ math.random( #phrases ) ] .. '</span>')
|
||||||
end
|
end
|
||||||
|
|
||||||
w:setup {
|
w:setup {
|
||||||
|
|
|
@ -93,7 +93,7 @@ mpdarc:connect_signal("button::press", function(_, _, _, button)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
local notification
|
local notification
|
||||||
function show_MPD_status()
|
local function show_MPD_status()
|
||||||
spawn.easy_async(GET_MPD_CMD,
|
spawn.easy_async(GET_MPD_CMD,
|
||||||
function(stdout, _, _, _)
|
function(stdout, _, _, _)
|
||||||
notification = naughty.notify {
|
notification = naughty.notify {
|
||||||
|
|
|
@ -29,7 +29,7 @@ local LIBRARY_ICON_NAME = PATH_TO_ICONS .. "/actions/24/music-library.png"
|
||||||
|
|
||||||
local mpdarc_widget = {}
|
local mpdarc_widget = {}
|
||||||
|
|
||||||
local function worker(args)
|
local function worker()
|
||||||
|
|
||||||
-- retriving song info
|
-- retriving song info
|
||||||
local current_song, artist, mpdstatus, art, artUrl
|
local current_song, artist, mpdstatus, art, artUrl
|
||||||
|
@ -123,7 +123,7 @@ local function worker(args)
|
||||||
|
|
||||||
local notification
|
local notification
|
||||||
local function show_MPD_status()
|
local function show_MPD_status()
|
||||||
spawn.easy_async(GET_MPD_CMD, function(stdout, _, _, _)
|
spawn.easy_async(GET_MPD_CMD, function()
|
||||||
notification = naughty.notification {
|
notification = naughty.notification {
|
||||||
margin = 10,
|
margin = 10,
|
||||||
timeout = 5,
|
timeout = 5,
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
-- @copyright 2020 Pavel Makhov
|
-- @copyright 2020 Pavel Makhov
|
||||||
-------------------------------------------------
|
-------------------------------------------------
|
||||||
|
|
||||||
local naughty = require("naughty")
|
|
||||||
local watch = require("awful.widget.watch")
|
local watch = require("awful.widget.watch")
|
||||||
local wibox = require("wibox")
|
local wibox = require("wibox")
|
||||||
|
|
||||||
|
@ -16,14 +15,6 @@ local HOME_DIR = os.getenv("HOME")
|
||||||
local WIDGET_DIR = HOME_DIR .. '/.config/awesome/awesome-wm-widgets/net-speed-widget/'
|
local WIDGET_DIR = HOME_DIR .. '/.config/awesome/awesome-wm-widgets/net-speed-widget/'
|
||||||
local ICONS_DIR = WIDGET_DIR .. 'icons/'
|
local ICONS_DIR = WIDGET_DIR .. 'icons/'
|
||||||
|
|
||||||
local function show_warning(message)
|
|
||||||
naughty.notify {
|
|
||||||
preset = naughty.config.presets.critical,
|
|
||||||
title = 'Net Speed Widget',
|
|
||||||
text = message
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
local net_speed_widget = wibox.widget {
|
local net_speed_widget = wibox.widget {
|
||||||
{
|
{
|
||||||
id = 'rx_speed',
|
id = 'rx_speed',
|
||||||
|
@ -91,21 +82,21 @@ local function split(string_to_split, separator)
|
||||||
return t
|
return t
|
||||||
end
|
end
|
||||||
|
|
||||||
local function worker(args)
|
local function worker(user_args)
|
||||||
|
|
||||||
local args = args or {}
|
local args = user_args or {}
|
||||||
|
|
||||||
local interface = args.interface or '*'
|
local interface = args.interface or '*'
|
||||||
local timeout = args.timeout or 1
|
local timeout = args.timeout or 1
|
||||||
|
|
||||||
local update_widget = function(widget, stdout, stderr)
|
local update_widget = function(widget, stdout)
|
||||||
|
|
||||||
local cur_vals = split(stdout, '\r\n')
|
local cur_vals = split(stdout, '\r\n')
|
||||||
|
|
||||||
local cur_rx = 0
|
local cur_rx = 0
|
||||||
local cur_tx = 0
|
local cur_tx = 0
|
||||||
|
|
||||||
for i, v in ipairs(cur_vals) do
|
for i, _ in ipairs(cur_vals) do
|
||||||
if i%2 == 1 then cur_rx = cur_rx + cur_vals[i] end
|
if i%2 == 1 then cur_rx = cur_rx + cur_vals[i] end
|
||||||
if i%2 == 0 then cur_tx = cur_tx + cur_vals[i] end
|
if i%2 == 0 then cur_tx = cur_tx + cur_vals[i] end
|
||||||
end
|
end
|
||||||
|
@ -120,7 +111,8 @@ local function worker(args)
|
||||||
prev_tx = cur_tx
|
prev_tx = cur_tx
|
||||||
end
|
end
|
||||||
|
|
||||||
watch(string.format([[bash -c "cat /sys/class/net/%s/statistics/*_bytes"]], interface), timeout, update_widget, net_speed_widget)
|
watch(string.format([[bash -c "cat /sys/class/net/%s/statistics/*_bytes"]], interface),
|
||||||
|
timeout, update_widget, net_speed_widget)
|
||||||
|
|
||||||
return net_speed_widget
|
return net_speed_widget
|
||||||
|
|
||||||
|
|
|
@ -114,7 +114,7 @@ pomodoroarc:connect_signal("button::press", function(_, _, _, button)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
local notification
|
local notification
|
||||||
function show_pomodoro_status()
|
local function show_pomodoro_status()
|
||||||
spawn.easy_async(GET_pomodoro_CMD,
|
spawn.easy_async(GET_pomodoro_CMD,
|
||||||
function(stdout, _, _, _)
|
function(stdout, _, _, _)
|
||||||
notification = naughty.notify {
|
notification = naughty.notify {
|
||||||
|
|
|
@ -8,8 +8,8 @@ local wibox = require("wibox")
|
||||||
local ramgraph_widget = {}
|
local ramgraph_widget = {}
|
||||||
|
|
||||||
|
|
||||||
local function worker(args)
|
local function worker(user_args)
|
||||||
local args = args or {}
|
local args = user_args or {}
|
||||||
local timeout = args.timeout or 1
|
local timeout = args.timeout or 1
|
||||||
|
|
||||||
--- Main ram widget shown on wibar
|
--- Main ram widget shown on wibar
|
||||||
|
@ -43,6 +43,7 @@ local function worker(args)
|
||||||
offset = { y = 5 },
|
offset = { y = 5 },
|
||||||
}
|
}
|
||||||
|
|
||||||
|
--luacheck:ignore 231
|
||||||
local total, used, free, shared, buff_cache, available, total_swap, used_swap, free_swap
|
local total, used, free, shared, buff_cache, available, total_swap, used_swap, free_swap
|
||||||
|
|
||||||
local function getPercentage(value)
|
local function getPercentage(value)
|
||||||
|
@ -50,7 +51,7 @@ local function worker(args)
|
||||||
end
|
end
|
||||||
|
|
||||||
watch('bash -c "LANGUAGE=en_US.UTF-8 free | grep -z Mem.*Swap.*"', timeout,
|
watch('bash -c "LANGUAGE=en_US.UTF-8 free | grep -z Mem.*Swap.*"', timeout,
|
||||||
function(widget, stdout, stderr, exitreason, exitcode)
|
function(widget, stdout)
|
||||||
total, used, free, shared, buff_cache, available, total_swap, used_swap, free_swap =
|
total, used, free, shared, buff_cache, available, total_swap, used_swap, free_swap =
|
||||||
stdout:match('(%d+)%s*(%d+)%s*(%d+)%s*(%d+)%s*(%d+)%s*(%d+)%s*Swap:%s*(%d+)%s*(%d+)%s*(%d+)')
|
stdout:match('(%d+)%s*(%d+)%s*(%d+)%s*(%d+)%s*(%d+)%s*(%d+)%s*Swap:%s*(%d+)%s*(%d+)%s*(%d+)')
|
||||||
|
|
||||||
|
|
|
@ -1,16 +0,0 @@
|
||||||
local wibox = require("wibox")
|
|
||||||
local awful = require("awful")
|
|
||||||
local watch = require("awful.widget.watch")
|
|
||||||
|
|
||||||
rhythmbox_widget = wibox.widget.textbox()
|
|
||||||
rhythmbox_widget:set_font('Play 9')
|
|
||||||
|
|
||||||
rhythmbox_icon = wibox.widget.imagebox()
|
|
||||||
rhythmbox_icon:set_image("/usr/share/icons/Arc/devices/22/audio-speakers.png")
|
|
||||||
|
|
||||||
watch(
|
|
||||||
"rhythmbox-client --no-start --print-playing", 1,
|
|
||||||
function(widget, stdout, stderr, exitreason, exitcode)
|
|
||||||
rhythmbox_widget:set_text(stdout)
|
|
||||||
end
|
|
||||||
)
|
|
|
@ -8,10 +8,6 @@
|
||||||
-- @copyright 2019 Pavel Makhov
|
-- @copyright 2019 Pavel Makhov
|
||||||
-------------------------------------------------
|
-------------------------------------------------
|
||||||
|
|
||||||
local capi = {
|
|
||||||
screen = screen,
|
|
||||||
client = client,
|
|
||||||
}
|
|
||||||
local awful = require("awful")
|
local awful = require("awful")
|
||||||
local gfs = require("gears.filesystem")
|
local gfs = require("gears.filesystem")
|
||||||
local wibox = require("wibox")
|
local wibox = require("wibox")
|
||||||
|
@ -26,8 +22,10 @@ local widget = {}
|
||||||
function widget.new()
|
function widget.new()
|
||||||
local widget_instance = {
|
local widget_instance = {
|
||||||
_cached_wiboxes = {},
|
_cached_wiboxes = {},
|
||||||
_cmd_pixelate = [[bash -c 'ffmpeg -loglevel panic -f x11grab -video_size 1920x1060 -y -i :0.0+%s,20 -vf frei0r=pixeliz0r -vframes 1 /tmp/i3lock-%s.png ; echo done']],
|
_cmd_pixelate = [[sh -c 'ffmpeg -loglevel panic -f x11grab -video_size 1920x1060 -y -i :0.0+%s,20 -vf ]]
|
||||||
_cmd_blur = [[bash -c 'ffmpeg -loglevel panic -f x11grab -video_size 1920x1060 -y -i :0.0+%s,20 -filter_complex "boxblur=9" -vframes 1 /tmp/i3lock-%s.png ; echo done']]
|
.. [[frei0r=pixeliz0r -vframes 1 /tmp/i3lock-%s.png ; echo done']],
|
||||||
|
_cmd_blur = [[sh -c 'ffmpeg -loglevel panic -f x11grab -video_size 1920x1060 -y -i :0.0+%s,20 ]]
|
||||||
|
.. [[-filter_complex "boxblur=9" -vframes 1 /tmp/i3lock-%s.png ; echo done']]
|
||||||
}
|
}
|
||||||
|
|
||||||
function widget_instance:_create_wibox()
|
function widget_instance:_create_wibox()
|
||||||
|
@ -74,22 +72,19 @@ function widget.new()
|
||||||
return w
|
return w
|
||||||
end
|
end
|
||||||
|
|
||||||
function widget_instance:launch(s, c)
|
function widget_instance:launch()
|
||||||
c = c or capi.client.focus
|
local s = mouse.screen
|
||||||
s = mouse.screen
|
|
||||||
-- naughty.notify { text = 'screen ' .. s.index }
|
|
||||||
if not self._cached_wiboxes[s] then
|
if not self._cached_wiboxes[s] then
|
||||||
self._cached_wiboxes[s] = {}
|
self._cached_wiboxes[s] = {}
|
||||||
-- naughty.notify { text = 'nope' }
|
|
||||||
end
|
end
|
||||||
if not self._cached_wiboxes[s][1] then
|
if not self._cached_wiboxes[s][1] then
|
||||||
self._cached_wiboxes[s][1] = self:_create_wibox()
|
self._cached_wiboxes[s][1] = self:_create_wibox()
|
||||||
-- naughty.notify { text = 'nope' }
|
|
||||||
end
|
end
|
||||||
local w = self._cached_wiboxes[s][1]
|
local w = self._cached_wiboxes[s][1]
|
||||||
local rnd = math.random()
|
local rnd = math.random()
|
||||||
awful.spawn.with_line_callback(string.format(self._cmd_blur, tostring(awful.screen.focused().geometry.x), rnd), {
|
awful.spawn.with_line_callback(
|
||||||
stdout = function(line)
|
string.format(self._cmd_blur, tostring(awful.screen.focused().geometry.x), rnd), {
|
||||||
|
stdout = function()
|
||||||
w.visible = true
|
w.visible = true
|
||||||
w.bgimage = '/tmp/i3lock-' .. rnd ..'.png'
|
w.bgimage = '/tmp/i3lock-' .. rnd ..'.png'
|
||||||
awful.placement.top(w, { margins = { top = 20 }, parent = awful.screen.focused() })
|
awful.placement.top(w, { margins = { top = 20 }, parent = awful.screen.focused() })
|
||||||
|
|
|
@ -45,6 +45,7 @@ function widget.new()
|
||||||
widget = wibox.widget.imagebox,
|
widget = wibox.widget.imagebox,
|
||||||
resize = false,
|
resize = false,
|
||||||
opacity = 0.2,
|
opacity = 0.2,
|
||||||
|
--luacheck:ignore 432
|
||||||
set_hover = function(self, opacity)
|
set_hover = function(self, opacity)
|
||||||
self.opacity = opacity
|
self.opacity = opacity
|
||||||
self.image = '/usr/share/icons/Arc/actions/symbolic/system-shutdown-symbolic.svg'
|
self.image = '/usr/share/icons/Arc/actions/symbolic/system-shutdown-symbolic.svg'
|
||||||
|
|
|
@ -11,7 +11,6 @@
|
||||||
local awful = require("awful")
|
local awful = require("awful")
|
||||||
local wibox = require("wibox")
|
local wibox = require("wibox")
|
||||||
local watch = require("awful.widget.watch")
|
local watch = require("awful.widget.watch")
|
||||||
local naughty = require("naughty")
|
|
||||||
|
|
||||||
local GET_SPOTIFY_STATUS_CMD = 'sp status'
|
local GET_SPOTIFY_STATUS_CMD = 'sp status'
|
||||||
local GET_CURRENT_SONG_CMD = 'sp current'
|
local GET_CURRENT_SONG_CMD = 'sp current'
|
||||||
|
@ -24,9 +23,9 @@ end
|
||||||
|
|
||||||
local spotify_widget = {}
|
local spotify_widget = {}
|
||||||
|
|
||||||
local function worker(args)
|
local function worker(user_args)
|
||||||
|
|
||||||
local args = args or {}
|
local args = user_args or {}
|
||||||
|
|
||||||
local play_icon = args.play_icon or '/usr/share/icons/Arc/actions/24/player_play.png'
|
local play_icon = args.play_icon or '/usr/share/icons/Arc/actions/24/player_play.png'
|
||||||
local pause_icon = args.pause_icon or '/usr/share/icons/Arc/actions/24/player_pause.png'
|
local pause_icon = args.pause_icon or '/usr/share/icons/Arc/actions/24/player_pause.png'
|
||||||
|
@ -100,7 +99,7 @@ local function worker(args)
|
||||||
end
|
end
|
||||||
|
|
||||||
local escaped = string.gsub(stdout, "&", '&')
|
local escaped = string.gsub(stdout, "&", '&')
|
||||||
local album, album_artist, artist, title =
|
local album, _, artist, title =
|
||||||
string.match(escaped, 'Album%s*(.*)\nAlbumArtist%s*(.*)\nArtist%s*(.*)\nTitle%s*(.*)\n')
|
string.match(escaped, 'Album%s*(.*)\nAlbumArtist%s*(.*)\nArtist%s*(.*)\nTitle%s*(.*)\n')
|
||||||
|
|
||||||
if album ~= nil and title ~=nil and artist ~= nil then
|
if album ~= nil and title ~=nil and artist ~= nil then
|
||||||
|
|
|
@ -18,13 +18,15 @@ local beautiful = require("beautiful")
|
||||||
|
|
||||||
local HOME_DIR = os.getenv("HOME")
|
local HOME_DIR = os.getenv("HOME")
|
||||||
|
|
||||||
local GET_QUESTIONS_CMD = [[bash -c "curl --compressed -s -X GET 'http://api.stackexchange.com/2.2/questions/no-answers?page=1&pagesize=%s&order=desc&sort=activity&tagged=%s&site=stackoverflow'"]]
|
local GET_QUESTIONS_CMD = [[bash -c "curl --compressed -s -X GET]]
|
||||||
|
.. [[ 'http://api.stackexchange.com/2.2/questions/no-answers]]
|
||||||
|
.. [[?page=1&pagesize=%s&order=desc&sort=activity&tagged=%s&site=stackoverflow'"]]
|
||||||
|
|
||||||
local stackoverflow_widget = {}
|
local stackoverflow_widget = {}
|
||||||
|
|
||||||
local function worker(args)
|
local function worker(user_args)
|
||||||
|
|
||||||
local args = args or {}
|
local args = user_args or {}
|
||||||
|
|
||||||
local icon = args.icon or HOME_DIR .. '/.config/awesome/awesome-wm-widgets/stackoverflow-widget/so-icon.svg'
|
local icon = args.icon or HOME_DIR .. '/.config/awesome/awesome-wm-widgets/stackoverflow-widget/so-icon.svg'
|
||||||
local limit = args.limit or 5
|
local limit = args.limit or 5
|
||||||
|
@ -43,7 +45,7 @@ local function worker(args)
|
||||||
border_width = 1,
|
border_width = 1,
|
||||||
border_color = beautiful.bg_focus,
|
border_color = beautiful.bg_focus,
|
||||||
maximum_width = 400,
|
maximum_width = 400,
|
||||||
preferred_positions = top,
|
preferred_positions = 'top',
|
||||||
offset = { y = 5 },
|
offset = { y = 5 },
|
||||||
widget = {}
|
widget = {}
|
||||||
}
|
}
|
||||||
|
@ -63,7 +65,7 @@ local function worker(args)
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
|
||||||
local update_widget = function(widget, stdout, stderr, _, _)
|
local update_widget = function(_, stdout, _, _, _)
|
||||||
|
|
||||||
local result = json.decode(stdout)
|
local result = json.decode(stdout)
|
||||||
|
|
||||||
|
@ -91,7 +93,7 @@ local function worker(args)
|
||||||
widget = wibox.container.background
|
widget = wibox.container.background
|
||||||
}
|
}
|
||||||
|
|
||||||
row:connect_signal("button::release", function(_, _, _, button)
|
row:connect_signal("button::release", function()
|
||||||
spawn.with_shell("xdg-open " .. item.link)
|
spawn.with_shell("xdg-open " .. item.link)
|
||||||
popup.visible = false
|
popup.visible = false
|
||||||
end)
|
end)
|
||||||
|
|
|
@ -11,7 +11,6 @@ local awful = require("awful")
|
||||||
local wibox = require("wibox")
|
local wibox = require("wibox")
|
||||||
local json = require("json")
|
local json = require("json")
|
||||||
local spawn = require("awful.spawn")
|
local spawn = require("awful.spawn")
|
||||||
local naughty = require("naughty")
|
|
||||||
local gears = require("gears")
|
local gears = require("gears")
|
||||||
local beautiful = require("beautiful")
|
local beautiful = require("beautiful")
|
||||||
local gfs = require("gears.filesystem")
|
local gfs = require("gears.filesystem")
|
||||||
|
@ -24,7 +23,7 @@ local GET_TODO_ITEMS = 'bash -c "cat ' .. STORAGE .. '"'
|
||||||
|
|
||||||
local rows = { layout = wibox.layout.fixed.vertical }
|
local rows = { layout = wibox.layout.fixed.vertical }
|
||||||
local todo_widget = {}
|
local todo_widget = {}
|
||||||
|
local update_widget
|
||||||
todo_widget.widget = wibox.widget {
|
todo_widget.widget = wibox.widget {
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
|
@ -89,7 +88,7 @@ local add_button = wibox.widget {
|
||||||
widget = wibox.container.background
|
widget = wibox.container.background
|
||||||
}
|
}
|
||||||
|
|
||||||
add_button:connect_signal("button::press", function(c)
|
add_button:connect_signal("button::press", function()
|
||||||
local pr = awful.widget.prompt()
|
local pr = awful.widget.prompt()
|
||||||
|
|
||||||
table.insert(rows, wibox.widget {
|
table.insert(rows, wibox.widget {
|
||||||
|
@ -116,7 +115,7 @@ add_button:connect_signal("button::press", function(c)
|
||||||
local res = json.decode(stdout)
|
local res = json.decode(stdout)
|
||||||
table.insert(res.todo_items, {todo_item = input_text, status = false})
|
table.insert(res.todo_items, {todo_item = input_text, status = false})
|
||||||
spawn.easy_async_with_shell("echo '" .. json.encode(res) .. "' > " .. STORAGE, function()
|
spawn.easy_async_with_shell("echo '" .. json.encode(res) .. "' > " .. STORAGE, function()
|
||||||
spawn.easy_async(GET_TODO_ITEMS, function(stdout) update_widget(stdout) end)
|
spawn.easy_async(GET_TODO_ITEMS, function(items) update_widget(items) end)
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
@ -126,9 +125,9 @@ end)
|
||||||
add_button:connect_signal("mouse::enter", function(c) c:set_bg(beautiful.bg_focus) end)
|
add_button:connect_signal("mouse::enter", function(c) c:set_bg(beautiful.bg_focus) end)
|
||||||
add_button:connect_signal("mouse::leave", function(c) c:set_bg(beautiful.bg_normal) end)
|
add_button:connect_signal("mouse::leave", function(c) c:set_bg(beautiful.bg_normal) end)
|
||||||
|
|
||||||
local function worker(args)
|
local function worker(user_args)
|
||||||
|
|
||||||
local args = args or {}
|
local args = user_args or {}
|
||||||
|
|
||||||
local icon = args.icon or WIDGET_DIR .. '/checkbox-checked-symbolic.svg'
|
local icon = args.icon or WIDGET_DIR .. '/checkbox-checked-symbolic.svg'
|
||||||
|
|
||||||
|
@ -200,10 +199,10 @@ local function worker(args)
|
||||||
widget = wibox.container.background
|
widget = wibox.container.background
|
||||||
}
|
}
|
||||||
|
|
||||||
trash_button:connect_signal("button::press", function(c)
|
trash_button:connect_signal("button::press", function()
|
||||||
table.remove(result.todo_items, i)
|
table.remove(result.todo_items, i)
|
||||||
spawn.easy_async_with_shell("printf '" .. json.encode(result) .. "' > " .. STORAGE, function ()
|
spawn.easy_async_with_shell("printf '" .. json.encode(result) .. "' > " .. STORAGE, function ()
|
||||||
spawn.easy_async(GET_TODO_ITEMS, function(stdout) update_widget(stdout) end)
|
spawn.easy_async(GET_TODO_ITEMS, function(items) update_widget(items) end)
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
@ -214,12 +213,12 @@ local function worker(args)
|
||||||
widget = wibox.widget.imagebox
|
widget = wibox.widget.imagebox
|
||||||
}
|
}
|
||||||
|
|
||||||
move_up:connect_signal("button::press", function(c)
|
move_up:connect_signal("button::press", function()
|
||||||
local temp = result.todo_items[i]
|
local temp = result.todo_items[i]
|
||||||
result.todo_items[i] = result.todo_items[i-1]
|
result.todo_items[i] = result.todo_items[i-1]
|
||||||
result.todo_items[i-1] = temp
|
result.todo_items[i-1] = temp
|
||||||
spawn.easy_async_with_shell("printf '" .. json.encode(result) .. "' > " .. STORAGE, function ()
|
spawn.easy_async_with_shell("printf '" .. json.encode(result) .. "' > " .. STORAGE, function ()
|
||||||
spawn.easy_async(GET_TODO_ITEMS, function(stdout) update_widget(stdout) end)
|
spawn.easy_async(GET_TODO_ITEMS, function(items) update_widget(items) end)
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
@ -229,12 +228,12 @@ local function worker(args)
|
||||||
widget = wibox.widget.imagebox
|
widget = wibox.widget.imagebox
|
||||||
}
|
}
|
||||||
|
|
||||||
move_down:connect_signal("button::press", function(c)
|
move_down:connect_signal("button::press", function()
|
||||||
local temp = result.todo_items[i]
|
local temp = result.todo_items[i]
|
||||||
result.todo_items[i] = result.todo_items[i+1]
|
result.todo_items[i] = result.todo_items[i+1]
|
||||||
result.todo_items[i+1] = temp
|
result.todo_items[i+1] = temp
|
||||||
spawn.easy_async_with_shell("printf '" .. json.encode(result) .. "' > " .. STORAGE, function ()
|
spawn.easy_async_with_shell("printf '" .. json.encode(result) .. "' > " .. STORAGE, function ()
|
||||||
spawn.easy_async(GET_TODO_ITEMS, function(stdout) update_widget(stdout) end)
|
spawn.easy_async(GET_TODO_ITEMS, function(items) update_widget(items) end)
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
@ -243,13 +242,11 @@ local function worker(args)
|
||||||
layout = wibox.layout.fixed.vertical
|
layout = wibox.layout.fixed.vertical
|
||||||
}
|
}
|
||||||
|
|
||||||
if 1 == #result.todo_items then
|
if i == 1 and #result.todo_items > 1 then
|
||||||
-- one item, no need in arrows
|
|
||||||
elseif i == 1 then
|
|
||||||
table.insert(move_buttons, move_down)
|
table.insert(move_buttons, move_down)
|
||||||
elseif i == #result.todo_items then
|
elseif i == #result.todo_items and #result.todo_items > 1 then
|
||||||
table.insert(move_buttons, move_up)
|
table.insert(move_buttons, move_up)
|
||||||
else
|
elseif #result.todo_items > 1 then
|
||||||
table.insert(move_buttons, move_up)
|
table.insert(move_buttons, move_up)
|
||||||
table.insert(move_buttons, move_down)
|
table.insert(move_buttons, move_down)
|
||||||
end
|
end
|
||||||
|
@ -322,7 +319,8 @@ local function worker(args)
|
||||||
end
|
end
|
||||||
|
|
||||||
if not gfs.file_readable(STORAGE) then
|
if not gfs.file_readable(STORAGE) then
|
||||||
spawn.easy_async(string.format([[bash -c "dirname %s | xargs mkdir -p && echo '{\"todo_items\":{}}' > %s"]], STORAGE, STORAGE))
|
spawn.easy_async(string.format([[bash -c "dirname %s | xargs mkdir -p && echo '{\"todo_items\":{}}' > %s"]],
|
||||||
|
STORAGE, STORAGE))
|
||||||
end
|
end
|
||||||
|
|
||||||
return setmetatable(todo_widget, { __call = function(_, ...) return worker(...) end })
|
return setmetatable(todo_widget, { __call = function(_, ...) return worker(...) end })
|
||||||
|
|
|
@ -16,7 +16,8 @@ local wibox = require("wibox")
|
||||||
local gears = require("gears")
|
local gears = require("gears")
|
||||||
local gfs = require("gears.filesystem")
|
local gfs = require("gears.filesystem")
|
||||||
|
|
||||||
local TRANSLATE_CMD = [[bash -c 'curl -s -u "apikey:%s" -H "Content-Type: application/json" -d '\''{"text": ["%s"], "model_id":"%s"}'\'' "%s/v3/translate?version=2018-05-01"']]
|
local TRANSLATE_CMD = [[bash -c 'curl -s -u "apikey:%s" -H "Content-Type: application/json"]]
|
||||||
|
..[[ -d '\''{"text": ["%s"], "model_id":"%s"}'\'' "%s/v3/translate?version=2018-05-01"']]
|
||||||
local ICON = os.getenv("HOME") .. '/.config/awesome/awesome-wm-widgets/translate-widget/gnome-translate.svg'
|
local ICON = os.getenv("HOME") .. '/.config/awesome/awesome-wm-widgets/translate-widget/gnome-translate.svg'
|
||||||
|
|
||||||
--- Returns two values - string to translate and direction:
|
--- Returns two values - string to translate and direction:
|
||||||
|
@ -82,12 +83,14 @@ local function translate(to_translate, lang, api_key, url)
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
id = 'src',
|
id = 'src',
|
||||||
markup = '<b>' .. lang:sub(1,2) .. '</b>: <span color="#FFFFFF"> ' .. to_translate .. '</span>',
|
markup = '<b>' .. lang:sub(1,2) .. '</b>: <span color="#FFFFFF"> '
|
||||||
|
.. to_translate .. '</span>',
|
||||||
widget = wibox.widget.textbox
|
widget = wibox.widget.textbox
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id = 'res',
|
id = 'res',
|
||||||
markup = '<b>' .. lang:sub(4) .. '</b>: <span color="#FFFFFF"> ' .. resp.translations[1].translation .. '</span>',
|
markup = '<b>' .. lang:sub(4) .. '</b>: <span color="#FFFFFF"> '
|
||||||
|
.. resp.translations[1].translation .. '</span>',
|
||||||
widget = wibox.widget.textbox
|
widget = wibox.widget.textbox
|
||||||
},
|
},
|
||||||
id = 'text',
|
id = 'text',
|
||||||
|
@ -110,11 +113,11 @@ local function translate(to_translate, lang, api_key, url)
|
||||||
w:buttons(
|
w:buttons(
|
||||||
awful.util.table.join(
|
awful.util.table.join(
|
||||||
awful.button({}, 1, function()
|
awful.button({}, 1, function()
|
||||||
awful.spawn.with_shell("echo '" .. resp.translations[1].translation .. "' | xclip -selection clipboard")
|
spawn.with_shell("echo '" .. resp.translations[1].translation .. "' | xclip -selection clipboard")
|
||||||
w.visible = false
|
w.visible = false
|
||||||
end),
|
end),
|
||||||
awful.button({}, 3, function()
|
awful.button({}, 3, function()
|
||||||
awful.spawn.with_shell("echo '" .. to_translate .."' | xclip -selection clipboard")
|
spawn.with_shell("echo '" .. to_translate .."' | xclip -selection clipboard")
|
||||||
w.visible = false
|
w.visible = false
|
||||||
end)
|
end)
|
||||||
)
|
)
|
||||||
|
@ -159,9 +162,9 @@ input_widget:setup{
|
||||||
widget = wibox.container.margin
|
widget = wibox.container.margin
|
||||||
}
|
}
|
||||||
|
|
||||||
local function launch(args)
|
local function launch(user_args)
|
||||||
|
|
||||||
local args = args or {}
|
local args = user_args or {}
|
||||||
|
|
||||||
local api_key = args.api_key
|
local api_key = args.api_key
|
||||||
local url = args.url
|
local url = args.url
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
-------------------------------------------------
|
-------------------------------------------------
|
||||||
|
|
||||||
local wibox = require("wibox")
|
local wibox = require("wibox")
|
||||||
local watch = require("awful.widget.watch")
|
|
||||||
local spawn = require("awful.spawn")
|
local spawn = require("awful.spawn")
|
||||||
local naughty = require("naughty")
|
local naughty = require("naughty")
|
||||||
local gfs = require("gears.filesystem")
|
local gfs = require("gears.filesystem")
|
||||||
|
@ -19,7 +18,13 @@ local PATH_TO_ICONS = "/usr/share/icons/Arc/status/symbolic/"
|
||||||
local volume_icon_name="audio-volume-high-symbolic"
|
local volume_icon_name="audio-volume-high-symbolic"
|
||||||
local GET_VOLUME_CMD = 'amixer sget Master'
|
local GET_VOLUME_CMD = 'amixer sget Master'
|
||||||
|
|
||||||
local volume = {device = '', display_notification = false, display_notification_onClick = true, notification = nil, delta = 5}
|
local volume = {
|
||||||
|
device = '',
|
||||||
|
display_notification = false,
|
||||||
|
display_notification_onClick = true,
|
||||||
|
notification = nil,
|
||||||
|
delta = 5
|
||||||
|
}
|
||||||
|
|
||||||
function volume:toggle()
|
function volume:toggle()
|
||||||
volume:_cmd('amixer ' .. volume.device .. ' sset Master toggle')
|
volume:_cmd('amixer ' .. volume.device .. ' sset Master toggle')
|
||||||
|
@ -88,9 +93,9 @@ end
|
||||||
|
|
||||||
--}}}
|
--}}}
|
||||||
|
|
||||||
local function worker(args)
|
local function worker(user_args)
|
||||||
--{{{ Args
|
--{{{ Args
|
||||||
local args = args or {}
|
local args = user_args or {}
|
||||||
|
|
||||||
local volume_audio_controller = args.volume_audio_controller or 'pulse'
|
local volume_audio_controller = args.volume_audio_controller or 'pulse'
|
||||||
volume.display_notification = args.display_notification or false
|
volume.display_notification = args.display_notification or false
|
||||||
|
@ -120,7 +125,8 @@ local function worker(args)
|
||||||
resize = false,
|
resize = false,
|
||||||
widget = wibox.widget.imagebox,
|
widget = wibox.widget.imagebox,
|
||||||
},
|
},
|
||||||
layout = wibox.container.margin(_, _, _, 3),
|
margins = 3,
|
||||||
|
layout = wibox.container.margin,
|
||||||
set_image = function(self, path)
|
set_image = function(self, path)
|
||||||
self.icon.image = path
|
self.icon.image = path
|
||||||
end
|
end
|
||||||
|
@ -136,7 +142,7 @@ local function worker(args)
|
||||||
|
|
||||||
local function show()
|
local function show()
|
||||||
spawn.easy_async(GET_VOLUME_CMD, function(stdout, _, _, _)
|
spawn.easy_async(GET_VOLUME_CMD, function(stdout, _, _, _)
|
||||||
txt = parse_output(stdout)
|
local txt = parse_output(stdout)
|
||||||
notif(txt, true)
|
notif(txt, true)
|
||||||
end
|
end
|
||||||
)
|
)
|
||||||
|
@ -165,7 +171,7 @@ local function worker(args)
|
||||||
--}}}
|
--}}}
|
||||||
|
|
||||||
--{{{ Set initial icon
|
--{{{ Set initial icon
|
||||||
spawn.easy_async(GET_VOLUME_CMD, function(stdout, stderr, exitreason, exitcode)
|
spawn.easy_async(GET_VOLUME_CMD, function(stdout)
|
||||||
parse_output(stdout)
|
parse_output(stdout)
|
||||||
volume.widget.image = PATH_TO_ICONS .. volume_icon_name .. ".svg"
|
volume.widget.image = PATH_TO_ICONS .. volume_icon_name .. ".svg"
|
||||||
end)
|
end)
|
||||||
|
|
|
@ -23,9 +23,9 @@ local PATH_TO_ICON = "/usr/share/icons/Arc/status/symbolic/audio-volume-muted-sy
|
||||||
|
|
||||||
local widget = {}
|
local widget = {}
|
||||||
|
|
||||||
local function worker(args)
|
local function worker(user_args)
|
||||||
|
|
||||||
local args = args or {}
|
local args = user_args or {}
|
||||||
|
|
||||||
local main_color = args.main_color or beautiful.fg_color
|
local main_color = args.main_color or beautiful.fg_color
|
||||||
local bg_color = args.bg_color or '#ffffff11'
|
local bg_color = args.bg_color or '#ffffff11'
|
||||||
|
@ -59,7 +59,7 @@ local function worker(args)
|
||||||
widget = wibox.container.arcchart
|
widget = wibox.container.arcchart
|
||||||
}
|
}
|
||||||
|
|
||||||
local update_graphic = function(widget, stdout, _, _, _)
|
local update_graphic = function(_, stdout, _, _, _)
|
||||||
local mute = string.match(stdout, "%[(o%D%D?)%]") -- \[(o\D\D?)\] - [on] or [off]
|
local mute = string.match(stdout, "%[(o%D%D?)%]") -- \[(o\D\D?)\] - [on] or [off]
|
||||||
local volume = string.match(stdout, "(%d?%d?%d)%%") -- (\d?\d?\d)\%)
|
local volume = string.match(stdout, "(%d?%d?%d)%%") -- (\d?\d?\d)\%)
|
||||||
volume = tonumber(string.format("% 3d", volume))
|
volume = tonumber(string.format("% 3d", volume))
|
||||||
|
|
|
@ -22,9 +22,9 @@ local TOG_VOLUME_CMD = 'amixer -D pulse sset Master toggle'
|
||||||
|
|
||||||
local widget = {}
|
local widget = {}
|
||||||
|
|
||||||
local function worker(args)
|
local function worker(user_args)
|
||||||
|
|
||||||
local args = args or {}
|
local args = user_args or {}
|
||||||
|
|
||||||
local main_color = args.main_color or beautiful.fg_normal
|
local main_color = args.main_color or beautiful.fg_normal
|
||||||
local mute_color = args.mute_color or beautiful.fg_urgent
|
local mute_color = args.mute_color or beautiful.fg_urgent
|
||||||
|
@ -52,7 +52,7 @@ local function worker(args)
|
||||||
widget = wibox.widget.progressbar
|
widget = wibox.widget.progressbar
|
||||||
}
|
}
|
||||||
|
|
||||||
local update_graphic = function(widget, stdout, _, _, _)
|
local update_graphic = function(_, stdout, _, _, _)
|
||||||
local mute = string.match(stdout, "%[(o%D%D?)%]") -- \[(o\D\D?)\] - [on] or [off]
|
local mute = string.match(stdout, "%[(o%D%D?)%]") -- \[(o\D\D?)\] - [on] or [off]
|
||||||
local volume = string.match(stdout, "(%d?%d?%d)%%") -- (\d?\d?\d)\%)
|
local volume = string.match(stdout, "(%d?%d?%d)%%") -- (\d?\d?\d)\%)
|
||||||
volume = tonumber(string.format("% 3d", volume))
|
volume = tonumber(string.format("% 3d", volume))
|
||||||
|
|
|
@ -27,7 +27,6 @@ end
|
||||||
|
|
||||||
local weather_widget = {}
|
local weather_widget = {}
|
||||||
local warning_shown = false
|
local warning_shown = false
|
||||||
local notification
|
|
||||||
local tooltip = awful.tooltip {
|
local tooltip = awful.tooltip {
|
||||||
mode = 'outside',
|
mode = 'outside',
|
||||||
preferred_positions = {'bottom'}
|
preferred_positions = {'bottom'}
|
||||||
|
@ -115,9 +114,9 @@ local function uvi_index_color(uvi)
|
||||||
return '<span weight="bold" foreground="' .. color .. '">' .. uvi .. '</span>'
|
return '<span weight="bold" foreground="' .. color .. '">' .. uvi .. '</span>'
|
||||||
end
|
end
|
||||||
|
|
||||||
local function worker(args)
|
local function worker(user_args)
|
||||||
|
|
||||||
local args = args or {}
|
local args = user_args or {}
|
||||||
|
|
||||||
--- Validate required parameters
|
--- Validate required parameters
|
||||||
if args.coordinates == nil or args.api_key == nil then
|
if args.coordinates == nil or args.api_key == nil then
|
||||||
|
@ -139,6 +138,7 @@ local function worker(args)
|
||||||
local icons_extension = args.icons_extension or '.png'
|
local icons_extension = args.icons_extension or '.png'
|
||||||
local timeout = args.timeout or 120
|
local timeout = args.timeout or 120
|
||||||
|
|
||||||
|
local ICONS_DIR = WIDGET_DIR .. '/icons/' .. icon_pack_name .. '/'
|
||||||
local owm_one_cal_api =
|
local owm_one_cal_api =
|
||||||
('https://api.openweathermap.org/data/2.5/onecall' ..
|
('https://api.openweathermap.org/data/2.5/onecall' ..
|
||||||
'?lat=' .. coordinates[1] .. '&lon=' .. coordinates[2] .. '&appid=' .. api_key ..
|
'?lat=' .. coordinates[1] .. '&lon=' .. coordinates[2] .. '&appid=' .. api_key ..
|
||||||
|
@ -241,11 +241,14 @@ local function worker(args)
|
||||||
forced_width = 300,
|
forced_width = 300,
|
||||||
layout = wibox.layout.flex.horizontal,
|
layout = wibox.layout.flex.horizontal,
|
||||||
update = function(self, weather)
|
update = function(self, weather)
|
||||||
self:get_children_by_id('icon')[1]:set_image(WIDGET_DIR .. '/icons/' .. icon_pack_name .. '/' .. icon_map[weather.weather[1].icon] .. icons_extension)
|
self:get_children_by_id('icon')[1]:set_image(
|
||||||
|
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('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))
|
self:get_children_by_id('feels_like_temp')[1]:set_text(
|
||||||
|
'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('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('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('humidity')[1]:set_markup('Humidity: <b>' .. weather.humidity .. '%</b>')
|
||||||
self:get_children_by_id('uv')[1]:set_markup('UV: ' .. uvi_index_color(weather.uvi))
|
self:get_children_by_id('uv')[1]:set_markup('UV: ' .. uvi_index_color(weather.uvi))
|
||||||
end
|
end
|
||||||
|
@ -270,7 +273,7 @@ local function worker(args)
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
image = WIDGET_DIR .. '/icons/' .. icon_pack_name .. '/' .. icon_map[day.weather[1].icon] .. icons_extension,
|
image = ICONS_DIR .. icon_map[day.weather[1].icon] .. icons_extension,
|
||||||
resize = true,
|
resize = true,
|
||||||
forced_width = 48,
|
forced_width = 48,
|
||||||
forced_height = 48,
|
forced_height = 48,
|
||||||
|
@ -384,7 +387,7 @@ local function worker(args)
|
||||||
hourly_forecast_negative_graph:set_max_value(math.abs(min_temp))
|
hourly_forecast_negative_graph:set_max_value(math.abs(min_temp))
|
||||||
hourly_forecast_negative_graph:set_min_value(max_temp < 0 and math.abs(max_temp) * 0.7 or 0)
|
hourly_forecast_negative_graph:set_min_value(max_temp < 0 and math.abs(max_temp) * 0.7 or 0)
|
||||||
|
|
||||||
for i, value in ipairs(values) do
|
for _, value in ipairs(values) do
|
||||||
if value >= 0 then
|
if value >= 0 then
|
||||||
hourly_forecast_graph:add_value(value)
|
hourly_forecast_graph:add_value(value)
|
||||||
hourly_forecast_negative_graph:add_value(0)
|
hourly_forecast_negative_graph:add_value(0)
|
||||||
|
@ -470,12 +473,9 @@ local function worker(args)
|
||||||
local function update_widget(widget, stdout, stderr)
|
local function update_widget(widget, stdout, stderr)
|
||||||
if stderr ~= '' then
|
if stderr ~= '' then
|
||||||
if not warning_shown then
|
if not warning_shown then
|
||||||
if (
|
if (stderr ~= 'curl: (52) Empty reply from server'
|
||||||
stderr ~= 'curl: (52) Empty reply from server' and
|
and stderr ~= 'curl: (28) Failed to connect to api.openweathermap.org port 443: Connection timed out'
|
||||||
stderr ~= 'curl: (28) Failed to connect to api.openweathermap.org port 443: Connection timed out' and
|
and stderr:find('^curl: %(18%) transfer closed with %d+ bytes remaining to read$') ~= nil
|
||||||
stderr:find(
|
|
||||||
'^curl: %(18%) transfer closed with %d+ bytes remaining to read$'
|
|
||||||
) ~= nil
|
|
||||||
) then
|
) then
|
||||||
show_warning(stderr)
|
show_warning(stderr)
|
||||||
end
|
end
|
||||||
|
@ -494,7 +494,7 @@ local function worker(args)
|
||||||
|
|
||||||
local result = json.decode(stdout)
|
local result = json.decode(stdout)
|
||||||
|
|
||||||
widget:set_image(WIDGET_DIR .. '/icons/' .. icon_pack_name .. '/' .. icon_map[result.current.weather[1].icon] .. icons_extension)
|
widget:set_image(ICONS_DIR .. icon_map[result.current.weather[1].icon] .. icons_extension)
|
||||||
widget:set_text(gen_temperature_str(result.current.temp, '%.0f', both_units_widget, units))
|
widget:set_text(gen_temperature_str(result.current.temp, '%.0f', both_units_widget, units))
|
||||||
|
|
||||||
current_weather_widget:update(result.current)
|
current_weather_widget:update(result.current)
|
||||||
|
|
|
@ -55,9 +55,9 @@ end
|
||||||
|
|
||||||
local text_clock = {}
|
local text_clock = {}
|
||||||
|
|
||||||
local function worker(args)
|
local function worker(user_args)
|
||||||
|
|
||||||
local args = args or {}
|
local args = user_args or {}
|
||||||
|
|
||||||
local main_color = args.main_color or beautiful.fg_normal
|
local main_color = args.main_color or beautiful.fg_normal
|
||||||
local accent_color = args.accent_color or beautiful.fg_urgent
|
local accent_color = args.accent_color or beautiful.fg_urgent
|
||||||
|
@ -81,7 +81,10 @@ local function worker(args)
|
||||||
local t = split(time)
|
local t = split(time)
|
||||||
local res = ''
|
local res = ''
|
||||||
for i, v in ipairs(t) do
|
for i, v in ipairs(t) do
|
||||||
res = res .. '<span color="' .. ((i % 2 == 0) and accent_color or main_color) .. '">' .. v .. '</span>' .. (with_spaces and ' ' or '')
|
res = res .. '<span color="'
|
||||||
|
.. ((i % 2 == 0) and accent_color or main_color)
|
||||||
|
.. '">' .. v .. '</span>'
|
||||||
|
.. (with_spaces and ' ' or '')
|
||||||
end
|
end
|
||||||
self:get_children_by_id('clock')[1]:set_markup(res)
|
self:get_children_by_id('clock')[1]:set_markup(res)
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue