Fuxx
121
home/.config/awesome/widgets/battery.lua
Normal file
|
@ -0,0 +1,121 @@
|
|||
-- ## Battery ##
|
||||
-- ~~~~~~~~~~~~~
|
||||
|
||||
-- requirements
|
||||
-- ~~~~~~~~~~~~
|
||||
local awful = require('awful')
|
||||
local watch = require('awful.widget.watch')
|
||||
local wibox = require('wibox')
|
||||
local beautiful = require('beautiful')
|
||||
local dpi = require('beautiful').xresources.apply_dpi
|
||||
|
||||
-- acpi sample outputs
|
||||
-- Battery 0: Discharging, 75%, 01:51:38 remaining
|
||||
-- Battery 0: Charging, 53%, 00:57:43 until charged
|
||||
|
||||
local percentage = wibox.widget.textbox()
|
||||
local battery_icon = wibox.widget.textbox()
|
||||
battery_icon.font = theme.font
|
||||
|
||||
local battery_popup = awful.tooltip({
|
||||
objects = {percentage},
|
||||
mode = 'outside',
|
||||
align = 'left',
|
||||
preferred_positions = {'right', 'left', 'top', 'bottom'}
|
||||
})
|
||||
|
||||
watch('acpi -i', 10, function(_, stdout)
|
||||
local battery_info = {}
|
||||
local capacities = {}
|
||||
for s in stdout:gmatch('[^\r\n]+') do
|
||||
local status, charge_str, time = string.match(s, '.+: (%a+), (%d?%d?%d)%%,?.*')
|
||||
if status ~= nil then
|
||||
table.insert(battery_info, {
|
||||
status = status,
|
||||
charge = tonumber(charge_str)
|
||||
})
|
||||
else
|
||||
local cap_str = string.match(s, '.+:.+last full capacity (%d+)')
|
||||
table.insert(capacities, tonumber(cap_str))
|
||||
end
|
||||
end
|
||||
|
||||
local capacity = 0
|
||||
for _, cap in ipairs(capacities) do
|
||||
capacity = capacity + cap
|
||||
end
|
||||
|
||||
local charge = 0
|
||||
local status
|
||||
for i, batt in ipairs(battery_info) do
|
||||
if batt.charge >= charge then
|
||||
status = batt.status -- use most charged battery status
|
||||
-- this is arbitrary, and maybe another metric should be used
|
||||
end
|
||||
|
||||
charge = charge + batt.charge * capacities[i]
|
||||
end
|
||||
charge = charge / capacity
|
||||
|
||||
battery_popup.text = string.gsub(stdout, '\n$', '')
|
||||
percentage.text = math.floor(charge)
|
||||
|
||||
if status == 'Charging' then
|
||||
battery_icon.text = ''
|
||||
if math.floor(charge) <= 20 then
|
||||
battery_icon.text = ''
|
||||
elseif math.floor(charge) <= 30 then
|
||||
battery_icon.text = ''
|
||||
elseif math.floor(charge) <= 40 then
|
||||
battery_icon.text = ''
|
||||
elseif math.floor(charge) <= 60 then
|
||||
battery_icon.text = ''
|
||||
elseif math.floor(charge) <= 80 then
|
||||
battery_icon.text = ''
|
||||
elseif math.floor(charge) <= 90 then
|
||||
battery_icon.text = ''
|
||||
elseif math.floor(charge) <= 100 then
|
||||
battery_icon.text = ''
|
||||
end
|
||||
elseif status == 'Full' then
|
||||
battery_icon.text = ''
|
||||
else
|
||||
if math.floor(charge) <= 10 then
|
||||
battery_icon.text = ''
|
||||
elseif math.floor(charge) <= 20 then
|
||||
battery_icon.text = ''
|
||||
elseif math.floor(charge) <= 30 then
|
||||
battery_icon.text = ''
|
||||
elseif math.floor(charge) <= 40 then
|
||||
battery_icon.text = ''
|
||||
elseif math.floor(charge) <= 50 then
|
||||
battery_icon.text = ''
|
||||
elseif math.floor(charge) <= 60 then
|
||||
battery_icon.text = ''
|
||||
elseif math.floor(charge) <= 60 then
|
||||
battery_icon.text = ''
|
||||
elseif math.floor(charge) <= 80 then
|
||||
battery_icon.text = ''
|
||||
elseif math.floor(charge) <= 90 then
|
||||
battery_icon.text = ''
|
||||
elseif math.floor(charge) <= 100 then
|
||||
battery_icon.text = ''
|
||||
end
|
||||
end
|
||||
collectgarbage('collect')
|
||||
end)
|
||||
|
||||
return wibox.widget {
|
||||
wibox.widget{
|
||||
battery_icon,
|
||||
fg = colors.blue,
|
||||
widget = wibox.container.background
|
||||
},
|
||||
wibox.widget{
|
||||
percentage,
|
||||
fg = colors.blue,
|
||||
widget = wibox.container.background
|
||||
},
|
||||
spacing = dpi(4),
|
||||
layout = wibox.layout.fixed.horizontal
|
||||
}
|
34
home/.config/awesome/widgets/brightness.lua
Normal file
|
@ -0,0 +1,34 @@
|
|||
-- ## Brightness ##
|
||||
-- ~~~~~~~~~~~~~
|
||||
|
||||
-- requirements
|
||||
-- ~~~~~~~~~~~~
|
||||
local wibox = require('wibox')
|
||||
local watch = require('awful.widget.watch')
|
||||
local beautiful = require('beautiful')
|
||||
local dpi = require('beautiful').xresources.apply_dpi
|
||||
|
||||
local brightness = wibox.widget.textbox()
|
||||
brightness.font = beautiful.font
|
||||
|
||||
watch([[bash -c "brightnessctl | grep -oP '[^()]+%'"]], 2, function(_, stdout)
|
||||
brightness.text = stdout
|
||||
collectgarbage('collect')
|
||||
end)
|
||||
|
||||
|
||||
brightness_icon = wibox.widget {
|
||||
markup = '<span font="' .. theme.icon_font .. '"foreground="'.. colors.brightblue ..'"> </span>',
|
||||
widget = wibox.widget.textbox,
|
||||
}
|
||||
|
||||
return wibox.widget {
|
||||
brightness_icon,
|
||||
wibox.widget{
|
||||
brightness,
|
||||
fg = colors.brightyellow,
|
||||
widget = wibox.container.background
|
||||
},
|
||||
spacing = dpi(2),
|
||||
layout = wibox.layout.fixed.horizontal
|
||||
}
|
64
home/.config/awesome/widgets/clickable-container.lua
Normal file
|
@ -0,0 +1,64 @@
|
|||
-- ## Clickable Container ##
|
||||
-- ~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
-- requirements
|
||||
-- ~~~~~~~~~~~~
|
||||
local wibox = require('wibox')
|
||||
local beautiful = require('beautiful')
|
||||
|
||||
local create_click_events = function(widget)
|
||||
|
||||
local container = wibox.widget {
|
||||
widget,
|
||||
widget = wibox.container.background
|
||||
}
|
||||
|
||||
-- Old and new widget
|
||||
local old_cursor, old_wibox
|
||||
|
||||
-- Mouse hovers on the widget
|
||||
container:connect_signal(
|
||||
'mouse::enter',
|
||||
function()
|
||||
container.bg = beautiful.groups_bg
|
||||
-- Hm, no idea how to get the wibox from this signal's arguments...
|
||||
local w = mouse.current_wibox
|
||||
if w then
|
||||
old_cursor, old_wibox = w.cursor, w
|
||||
w.cursor = 'hand1'
|
||||
end
|
||||
end
|
||||
)
|
||||
|
||||
-- Mouse leaves the widget
|
||||
container:connect_signal(
|
||||
'mouse::leave',
|
||||
function()
|
||||
container.bg = beautiful.leave_event
|
||||
if old_wibox then
|
||||
old_wibox.cursor = old_cursor
|
||||
old_wibox = nil
|
||||
end
|
||||
end
|
||||
)
|
||||
|
||||
-- Mouse pressed the widget
|
||||
container:connect_signal(
|
||||
'button::press',
|
||||
function()
|
||||
container.bg = beautiful.press_event
|
||||
end
|
||||
)
|
||||
|
||||
-- Mouse releases the widget
|
||||
container:connect_signal(
|
||||
'button::release',
|
||||
function()
|
||||
container.bg = beautiful.release_event
|
||||
end
|
||||
)
|
||||
|
||||
return container
|
||||
end
|
||||
|
||||
return create_click_events
|
27
home/.config/awesome/widgets/clock.lua
Normal file
|
@ -0,0 +1,27 @@
|
|||
-- ## Clock ##
|
||||
-- ~~~~~~~~~~~~~
|
||||
|
||||
-- requirements
|
||||
-- ~~~~~~~~~~~~
|
||||
local wibox = require('wibox')
|
||||
local beautiful = require('beautiful')
|
||||
local dpi = require('beautiful').xresources.apply_dpi
|
||||
|
||||
local clock = wibox.widget.textclock('<span font="' .. theme.font .. '">%a %d %b | %H:%M</span>')
|
||||
|
||||
--return clock
|
||||
clock_icon = wibox.widget {
|
||||
markup = '<span font="' .. theme.icon_font .. '"foreground="'.. colors.brightblue ..'"> </span>',
|
||||
widget = wibox.widget.textbox,
|
||||
}
|
||||
|
||||
return wibox.widget {
|
||||
clock_icon,
|
||||
wibox.widget{
|
||||
clock,
|
||||
fg = colors.brightwhite,
|
||||
widget = wibox.container.background
|
||||
},
|
||||
spacing = dpi(2),
|
||||
layout = wibox.layout.fixed.horizontal
|
||||
}
|
48
home/.config/awesome/widgets/cpu.lua
Normal file
|
@ -0,0 +1,48 @@
|
|||
-- ## Cpu ##
|
||||
-- ~~~~~~~~~
|
||||
|
||||
-- requirements
|
||||
-- ~~~~~~~~~~~~
|
||||
local wibox = require('wibox')
|
||||
local beautiful = require('beautiful')
|
||||
local dpi = require('beautiful').xresources.apply_dpi
|
||||
local watch = require('awful.widget.watch')
|
||||
|
||||
local cpu = wibox.widget.textbox()
|
||||
local total_prev = 0
|
||||
local idle_prev = 0
|
||||
|
||||
watch([[bash -c "cat /proc/stat | grep '^cpu '"]], 2, function(_, stdout)
|
||||
local user, nice, system, idle, iowait, irq, softirq, steal, guest, guest_nice =
|
||||
stdout:match('(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s(%d+)%s')
|
||||
|
||||
local total = user + nice + system + idle + iowait + irq + softirq + steal
|
||||
|
||||
local diff_idle = idle - idle_prev
|
||||
local diff_total = total - total_prev
|
||||
local diff_usage = (1000 * (diff_total - diff_idle) / diff_total + 5) / 10
|
||||
|
||||
cpu.text = math.floor(diff_usage) .. '%'
|
||||
if diff_usage < 10 then cpu.text = '0' .. cpu.text end
|
||||
|
||||
total_prev = total
|
||||
idle_prev = idle
|
||||
collectgarbage('collect')
|
||||
end)
|
||||
|
||||
--return cpu
|
||||
cpu_icon = wibox.widget {
|
||||
markup = '<span font="' .. theme.icon_font .. '"foreground="'.. colors.brightblue ..'"> </span>',
|
||||
widget = wibox.widget.textbox,
|
||||
}
|
||||
|
||||
return wibox.widget {
|
||||
cpu_icon,
|
||||
wibox.widget{
|
||||
cpu,
|
||||
fg = colors.brightwhite,
|
||||
widget = wibox.container.background
|
||||
},
|
||||
spacing = dpi(2),
|
||||
layout = wibox.layout.fixed.horizontal
|
||||
}
|
29
home/.config/awesome/widgets/keyboardlayout.lua
Normal file
|
@ -0,0 +1,29 @@
|
|||
-- ## Keyboard layout ##
|
||||
-- ~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
-- requirements
|
||||
-- ~~~~~~~~~~~~
|
||||
local wibox = require('wibox')
|
||||
local awful = require("awful")
|
||||
local beautiful = require('beautiful')
|
||||
local dpi = require('beautiful').xresources.apply_dpi
|
||||
|
||||
-- Keyboard :
|
||||
keyboardlayout = awful.widget.keyboardlayout()
|
||||
keyboardlayout.widget.font = theme.font
|
||||
|
||||
keyboard_icon = wibox.widget {
|
||||
markup = '<span font="' .. theme.icon_font .. '"foreground="'.. colors.brightblue ..'"></span>',
|
||||
widget = wibox.widget.textbox,
|
||||
}
|
||||
|
||||
return wibox.widget {
|
||||
keyboard_icon,
|
||||
wibox.widget{
|
||||
keyboardlayout,
|
||||
fg = colors.brightwhite,
|
||||
widget = wibox.container.background
|
||||
},
|
||||
spacing = dpi(2),
|
||||
layout = wibox.layout.fixed.horizontal
|
||||
}
|
152
home/.config/awesome/widgets/logout-menu.lua
Normal file
|
@ -0,0 +1,152 @@
|
|||
-------------------------------------------------
|
||||
-- Logout Menu Widget for Awesome Window Manager
|
||||
-- More details could be found here:
|
||||
-- https://github.com/streetturtle/awesome-wm-widgets/tree/master/logout-menu-widget
|
||||
|
||||
-- @author Pavel Makhov
|
||||
-- @copyright 2020 Pavel Makhov
|
||||
-------------------------------------------------
|
||||
|
||||
local awful = require("awful")
|
||||
local wibox = require("wibox")
|
||||
local gears = require("gears")
|
||||
local beautiful = require("beautiful")
|
||||
|
||||
local HOME = os.getenv('HOME')
|
||||
local ICON_DIR = HOME .. '/.config/awesome/themes/icons/logout-menu/'
|
||||
|
||||
local logout_menu_widget = wibox.widget {
|
||||
{
|
||||
{
|
||||
image = ICON_DIR .. 'power_w.svg',
|
||||
resize = true,
|
||||
widget = wibox.widget.imagebox,
|
||||
},
|
||||
margins = 4,
|
||||
layout = wibox.container.margin
|
||||
},
|
||||
shape = function(cr, width, height)
|
||||
gears.shape.rounded_rect(cr, width, height, 4)
|
||||
end,
|
||||
widget = wibox.container.background,
|
||||
}
|
||||
|
||||
local popup = awful.popup {
|
||||
ontop = true,
|
||||
visible = false,
|
||||
shape = function(cr, width, height)
|
||||
gears.shape.rounded_rect(cr, width, height, 4)
|
||||
end,
|
||||
border_width = 1,
|
||||
border_color = colors.bg_focus,
|
||||
maximum_width = 400,
|
||||
offset = { y = -10 },
|
||||
widget = {}
|
||||
}
|
||||
|
||||
local function worker(user_args)
|
||||
local rows = { layout = wibox.layout.fixed.vertical }
|
||||
|
||||
local args = user_args or {}
|
||||
|
||||
local font = args.font or beautiful.font
|
||||
|
||||
--local onlogout = args.onlogout or function () awesome.quit() end
|
||||
--local onlock = args.onlock or function() awful.spawn.with_shell("betterlockscreen -l") end
|
||||
--local onreboot = args.onreboot or function() awful.spawn.with_shell("reboot") end
|
||||
--local onsuspend = args.onsuspend or function() awful.spawn.with_shell("systemctl suspend") end
|
||||
--local onpoweroff = args.onpoweroff or function() awful.spawn.with_shell("shutdown now") end
|
||||
|
||||
local onlogout = args.onlogout or function () awesome.quit() end
|
||||
local onlock = args.onlock or function() awful.spawn.with_shell("notify-send '👉 Locking system ' && sleep 1 && betterlockscreen -l") end
|
||||
local onreboot = args.onreboot or function() awful.spawn.with_shell("notify-send '👉 Rebooting ' && sleep 1 && reboot") end
|
||||
local onsuspend = args.onsuspend or function() awful.spawn.with_shell("notify-send '👉 Locking system ' && sleep 1 && systemctl suspend") end
|
||||
local onpoweroff = args.onpoweroff or function() awful.spawn.with_shell("notify-send '👉 Powering Off ' && sleep 1 && shutdown now") end
|
||||
|
||||
local menu_items = {
|
||||
{ name = 'Log out', icon_name = 'log-out.svg', command = onlogout },
|
||||
{ name = 'Lock', icon_name = 'lock.svg', command = onlock },
|
||||
{ name = 'Reboot', icon_name = 'refresh-cw.svg', command = onreboot },
|
||||
{ name = 'Suspend', icon_name = 'moon.svg', command = onsuspend },
|
||||
{ name = 'Power off', icon_name = 'power.svg', command = onpoweroff },
|
||||
}
|
||||
|
||||
for _, item in ipairs(menu_items) do
|
||||
|
||||
local row = wibox.widget {
|
||||
{
|
||||
{
|
||||
{
|
||||
image = ICON_DIR .. item.icon_name,
|
||||
resize = false,
|
||||
widget = wibox.widget.imagebox
|
||||
},
|
||||
{
|
||||
text = item.name,
|
||||
font = font,
|
||||
widget = wibox.widget.textbox
|
||||
},
|
||||
spacing = 12,
|
||||
layout = wibox.layout.fixed.horizontal
|
||||
},
|
||||
margins = 8,
|
||||
layout = wibox.container.margin
|
||||
},
|
||||
bg = colors.black,
|
||||
widget = wibox.container.background
|
||||
}
|
||||
|
||||
row:connect_signal("mouse::enter", function(c) c:set_bg(colors.brightblack) end)
|
||||
row:connect_signal("mouse::leave", function(c) c:set_bg(colors.black) end)
|
||||
|
||||
local old_cursor, old_wibox
|
||||
row:connect_signal("mouse::enter", function()
|
||||
local wb = mouse.current_wibox
|
||||
old_cursor, old_wibox = wb.cursor, wb
|
||||
wb.cursor = "hand1"
|
||||
end)
|
||||
row:connect_signal("mouse::leave", function()
|
||||
if old_wibox then
|
||||
old_wibox.cursor = old_cursor
|
||||
old_wibox = nil
|
||||
end
|
||||
end)
|
||||
|
||||
row:buttons(awful.util.table.join(awful.button({}, 1, function()
|
||||
popup.visible = not popup.visible
|
||||
item.command()
|
||||
end)))
|
||||
|
||||
table.insert(rows, row)
|
||||
end
|
||||
popup:setup(rows)
|
||||
|
||||
logout_menu_widget:buttons(
|
||||
awful.util.table.join(
|
||||
awful.button({}, 1, function()
|
||||
if popup.visible then
|
||||
popup.visible = not popup.visible
|
||||
logout_menu_widget:set_bg(colors.container)
|
||||
else
|
||||
popup:move_next_to(mouse.current_widget_geometry)
|
||||
logout_menu_widget:set_bg(colors.container)
|
||||
end
|
||||
end)
|
||||
)
|
||||
)
|
||||
--logout_menu_widget:connect_signal("mouse::enter", function()
|
||||
-- local wb = mouse.current_wibox
|
||||
-- old_cursor, old_wibox = wb.cursor, wb
|
||||
-- wb.cursor = "hand1"
|
||||
-- end)
|
||||
--logout_menu_widget:connect_signal("mouse::leave", function()
|
||||
-- if old_wibox then
|
||||
-- old_wibox.cursor = old_cursor
|
||||
-- old_wibox = nil
|
||||
-- end
|
||||
--end)
|
||||
return logout_menu_widget
|
||||
|
||||
end
|
||||
|
||||
return worker
|
48
home/.config/awesome/widgets/memory.lua
Normal file
|
@ -0,0 +1,48 @@
|
|||
-- ## Memory ##
|
||||
-- ~~~~~~~~~
|
||||
|
||||
-- requirements
|
||||
-- ~~~~~~~~~~~~
|
||||
local wibox = require('wibox')
|
||||
local beautiful = require('beautiful')
|
||||
local watch = require('awful.widget.watch')
|
||||
local dpi = require('beautiful').xresources.apply_dpi
|
||||
|
||||
|
||||
local memory = wibox.widget.textbox()
|
||||
memory.font = theme.font
|
||||
|
||||
--function round(exact, quantum)
|
||||
-- local quant,frac = math.modf(exact/quantum)
|
||||
-- return quantum * (quant + (frac > 0.5 and 1 or 0))
|
||||
--end
|
||||
|
||||
--watch('bash -c "free | grep -z Mem.*Swap.*"', 2, function(_, stdout)
|
||||
-- local 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+)')
|
||||
--
|
||||
-- memory.text = round((used / 1048576), 0.01) .. ' GB'
|
||||
-- collectgarbage('collect')
|
||||
--end)
|
||||
|
||||
watch([[bash -c "free -h | awk '/^Mem/ { print $3 }' | sed s/i//g"]], 2, function(_, stdout)
|
||||
memory.text = stdout
|
||||
end)
|
||||
|
||||
|
||||
--return memory
|
||||
memory_icon = wibox.widget {
|
||||
markup = '<span font="' .. theme.icon_font .. '"foreground="'.. colors.brightblue ..'"> </span>',
|
||||
widget = wibox.widget.textbox,
|
||||
}
|
||||
|
||||
return wibox.widget {
|
||||
memory_icon,
|
||||
wibox.widget{
|
||||
memory,
|
||||
fg = colors.brightwhite,
|
||||
widget = wibox.container.background
|
||||
},
|
||||
spacing = dpi(2),
|
||||
layout = wibox.layout.fixed.horizontal
|
||||
}
|
125
home/.config/awesome/widgets/net.lua
Normal file
|
@ -0,0 +1,125 @@
|
|||
local watch = require("awful.widget.watch")
|
||||
local wibox = require("wibox")
|
||||
|
||||
local HOME_DIR = os.getenv("HOME")
|
||||
local WIDGET_DIR = HOME_DIR .. '/.config/awesome/awesome-wm-widgets/net-speed-widget/'
|
||||
local ICONS_DIR = HOME_DIR .. '/.config/awesome/themes/icons/net-speed/'
|
||||
|
||||
|
||||
upload_icon = wibox.widget {
|
||||
markup = '<span font="' .. theme.icon_font .. '"foreground="'.. colors.brightblue ..'"> </span>',
|
||||
widget = wibox.widget.textbox,
|
||||
}
|
||||
|
||||
download_icon = wibox.widget {
|
||||
markup = '<span font="' .. theme.icon_font .. '"foreground="'.. colors.brightblue ..'"> </span>',
|
||||
widget = wibox.widget.textbox,
|
||||
}
|
||||
|
||||
local net_speed_widget = {}
|
||||
|
||||
local function convert_to_h(bytes)
|
||||
local speed
|
||||
local dim
|
||||
local bits = bytes * 8
|
||||
if bits < 1000 then
|
||||
speed = bits
|
||||
dim = 'b/s'
|
||||
elseif bits < 1000000 then
|
||||
speed = bits/1000
|
||||
dim = 'kb/s'
|
||||
elseif bits < 1000000000 then
|
||||
speed = bits/1000000
|
||||
dim = 'mb/s'
|
||||
elseif bits < 1000000000000 then
|
||||
speed = bits/1000000000
|
||||
dim = 'gb/s'
|
||||
else
|
||||
speed = tonumber(bits)
|
||||
dim = 'b/s'
|
||||
end
|
||||
return math.floor(speed + 0.5) .. dim
|
||||
end
|
||||
|
||||
local function split(string_to_split, separator)
|
||||
if separator == nil then separator = "%s" end
|
||||
local t = {}
|
||||
|
||||
for str in string.gmatch(string_to_split, "([^".. separator .."]+)") do
|
||||
table.insert(t, str)
|
||||
end
|
||||
|
||||
return t
|
||||
end
|
||||
|
||||
local function worker(user_args)
|
||||
|
||||
local args = user_args or {}
|
||||
|
||||
local interface = args.interface or '*'
|
||||
local timeout = args.timeout or 1
|
||||
local width = args.width or 55
|
||||
|
||||
net_speed_widget = wibox.widget {
|
||||
{
|
||||
widget = download_icon
|
||||
},
|
||||
{
|
||||
id = 'rx_speed',
|
||||
forced_width = width,
|
||||
--align = 'right',
|
||||
widget = wibox.widget.textbox
|
||||
},
|
||||
{
|
||||
widget = upload_icon
|
||||
},
|
||||
{
|
||||
id = 'tx_speed',
|
||||
forced_width = width,
|
||||
--align = 'left',
|
||||
widget = wibox.widget.textbox
|
||||
},
|
||||
layout = wibox.layout.fixed.horizontal,
|
||||
set_rx_text = function(self, new_rx_speed)
|
||||
self:get_children_by_id('rx_speed')[1]:set_text(tostring(new_rx_speed))
|
||||
end,
|
||||
set_tx_text = function(self, new_tx_speed)
|
||||
self:get_children_by_id('tx_speed')[1]:set_text(tostring(new_tx_speed))
|
||||
end
|
||||
}
|
||||
|
||||
-- make sure these are not shared across different worker/widgets (e.g. two monitors)
|
||||
-- otherwise the speed will be randomly split among the worker in each monitor
|
||||
local prev_rx = 0
|
||||
local prev_tx = 0
|
||||
|
||||
local update_widget = function(widget, stdout)
|
||||
|
||||
local cur_vals = split(stdout, '\r\n')
|
||||
|
||||
local cur_rx = 0
|
||||
local cur_tx = 0
|
||||
|
||||
for i, v in ipairs(cur_vals) do
|
||||
if i%2 == 1 then cur_rx = cur_rx + v end
|
||||
if i%2 == 0 then cur_tx = cur_tx + v end
|
||||
end
|
||||
|
||||
local speed_rx = (cur_rx - prev_rx) / timeout
|
||||
local speed_tx = (cur_tx - prev_tx) / timeout
|
||||
|
||||
widget:set_rx_text(convert_to_h(speed_rx))
|
||||
widget:set_tx_text(convert_to_h(speed_tx))
|
||||
|
||||
prev_rx = cur_rx
|
||||
prev_tx = cur_tx
|
||||
end
|
||||
|
||||
watch(string.format([[bash -c "cat /sys/class/net/%s/statistics/*_bytes"]], interface),
|
||||
timeout, update_widget, net_speed_widget)
|
||||
|
||||
return net_speed_widget
|
||||
|
||||
end
|
||||
|
||||
return setmetatable(net_speed_widget, { __call = function(_, ...) return worker(...) end })
|
110
home/.config/awesome/widgets/separators.lua
Normal file
|
@ -0,0 +1,110 @@
|
|||
local wibox = require("wibox")
|
||||
local gears = require("gears")
|
||||
|
||||
-- Lain Cairo separators util submodule
|
||||
-- lain.util.separators
|
||||
local separators = { height = 0, width = 9 }
|
||||
|
||||
-- [[ Arrow
|
||||
|
||||
-- Right
|
||||
function separators.arrow_right(col1, col2)
|
||||
local widget = wibox.widget.base.make_widget()
|
||||
widget.col1 = col1
|
||||
widget.col2 = col2
|
||||
|
||||
widget.fit = function(m, w, h)
|
||||
return separators.width, separators.height
|
||||
end
|
||||
|
||||
widget.update = function(col1, col2)
|
||||
widget.col1 = col1
|
||||
widget.col2 = col2
|
||||
widget:emit_signal("widget::redraw_needed")
|
||||
end
|
||||
|
||||
widget.draw = function(mycross, wibox, cr, width, height)
|
||||
if widget.col2 ~= "alpha" then
|
||||
cr:set_source_rgb(gears.color.parse_color(widget.col2))
|
||||
cr:new_path()
|
||||
cr:move_to(0, 0)
|
||||
cr:line_to(width, height/2)
|
||||
cr:line_to(width, 0)
|
||||
cr:close_path()
|
||||
cr:fill()
|
||||
|
||||
cr:new_path()
|
||||
cr:move_to(0, height)
|
||||
cr:line_to(width, height/2)
|
||||
cr:line_to(width, height)
|
||||
cr:close_path()
|
||||
cr:fill()
|
||||
end
|
||||
|
||||
if widget.col1 ~= "alpha" then
|
||||
cr:set_source_rgb(gears.color.parse_color(widget.col1))
|
||||
cr:new_path()
|
||||
cr:move_to(0, 0)
|
||||
cr:line_to(width, height/2)
|
||||
cr:line_to(0, height)
|
||||
cr:close_path()
|
||||
cr:fill()
|
||||
end
|
||||
end
|
||||
|
||||
return widget
|
||||
end
|
||||
|
||||
-- Left
|
||||
function separators.arrow_left(col1, col2)
|
||||
local widget = wibox.widget.base.make_widget()
|
||||
widget.col1 = col1
|
||||
widget.col2 = col2
|
||||
|
||||
widget.fit = function(m, w, h)
|
||||
return separators.width, separators.height
|
||||
end
|
||||
|
||||
widget.update = function(col1, col2)
|
||||
widget.col1 = col1
|
||||
widget.col2 = col2
|
||||
widget:emit_signal("widget::redraw_needed")
|
||||
end
|
||||
|
||||
widget.draw = function(mycross, wibox, cr, width, height)
|
||||
if widget.col1 ~= "alpha" then
|
||||
cr:set_source_rgb(gears.color.parse_color(widget.col1))
|
||||
cr:new_path()
|
||||
cr:move_to(width, 0)
|
||||
cr:line_to(0, height/2)
|
||||
cr:line_to(0, 0)
|
||||
cr:close_path()
|
||||
cr:fill()
|
||||
|
||||
cr:new_path()
|
||||
cr:move_to(width, height)
|
||||
cr:line_to(0, height/2)
|
||||
cr:line_to(0, height)
|
||||
cr:close_path()
|
||||
cr:fill()
|
||||
end
|
||||
|
||||
if widget.col2 ~= "alpha" then
|
||||
cr:new_path()
|
||||
cr:move_to(width, 0)
|
||||
cr:line_to(0, height/2)
|
||||
cr:line_to(width, height)
|
||||
cr:close_path()
|
||||
|
||||
cr:set_source_rgb(gears.color.parse_color(widget.col2))
|
||||
cr:fill()
|
||||
end
|
||||
end
|
||||
|
||||
return widget
|
||||
end
|
||||
|
||||
-- ]]
|
||||
|
||||
return separators
|
||||
|
17
home/.config/awesome/widgets/storage.lua
Normal file
|
@ -0,0 +1,17 @@
|
|||
-- ## Storage ##
|
||||
-- ~~~~~~~~~~~~~
|
||||
|
||||
-- requirements
|
||||
-- ~~~~~~~~~~~~
|
||||
local wibox = require('wibox')
|
||||
local watch = require('awful.widget.watch')
|
||||
local beautiful = require('beautiful')
|
||||
|
||||
local storage = wibox.widget.textbox()
|
||||
storage.font = beautiful.font
|
||||
|
||||
watch('bash -c "df -h $HOME | awk \'/[0-9]/ {print $2-$3}\'"', 30, function(_, stdout)
|
||||
storage.text = stdout
|
||||
end)
|
||||
|
||||
return storage
|
33
home/.config/awesome/widgets/temprature.lua
Normal file
|
@ -0,0 +1,33 @@
|
|||
-- ## Temprature ##
|
||||
-- ~~~~~~~~~~~~~~~~
|
||||
|
||||
-- requirements
|
||||
-- ~~~~~~~~~~~~
|
||||
local wibox = require('wibox')
|
||||
local watch = require('awful.widget.watch')
|
||||
local beautiful = require('beautiful')
|
||||
local dpi = require('beautiful').xresources.apply_dpi
|
||||
|
||||
local temprature = wibox.widget.textbox()
|
||||
temprature.font = theme.font
|
||||
|
||||
watch('bash -c "sensors | awk \'/Core 0/ {print substr($3, 2) }\'"', 30, function(_, stdout)
|
||||
temprature.text = stdout
|
||||
end)
|
||||
|
||||
--return temprature
|
||||
temprature_icon = wibox.widget {
|
||||
markup = '<span font="' .. theme.icon_font .. '"foreground="'.. colors.brightblue ..'"> </span>',
|
||||
widget = wibox.widget.textbox,
|
||||
}
|
||||
|
||||
return wibox.widget {
|
||||
temprature_icon,
|
||||
wibox.widget{
|
||||
temprature,
|
||||
fg = colors.brightwhite,
|
||||
widget = wibox.container.background
|
||||
},
|
||||
spacing = dpi(2),
|
||||
layout = wibox.layout.fixed.horizontal
|
||||
}
|
|
@ -0,0 +1,57 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="240"
|
||||
height="240"
|
||||
viewBox="0 0 240 240"
|
||||
version="1.1"
|
||||
id="svg4"
|
||||
sodipodi:docname="ic_chevron_left_48px.svg"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14">
|
||||
<metadata
|
||||
id="metadata10">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs8" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1321"
|
||||
inkscape:window-height="740"
|
||||
id="namedview6"
|
||||
showgrid="false"
|
||||
inkscape:pagecheckerboard="true"
|
||||
inkscape:zoom="0.86915209"
|
||||
inkscape:cx="-182.41294"
|
||||
inkscape:cy="-30.651111"
|
||||
inkscape:window-x="45"
|
||||
inkscape:window-y="28"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="svg4" />
|
||||
<path
|
||||
d="M 181.79166,43.583333 158.20833,20 58.208335,120 158.20833,220 181.79166,196.41667 105.375,120 Z"
|
||||
id="path2"
|
||||
inkscape:connector-curvature="0"
|
||||
style="stroke-width:8.33333302;fill:#ffffff;fill-opacity:1" />
|
||||
</svg>
|
After Width: | Height: | Size: 1.7 KiB |
|
@ -0,0 +1,57 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="240"
|
||||
height="240"
|
||||
viewBox="0 0 240 240"
|
||||
version="1.1"
|
||||
id="svg4"
|
||||
sodipodi:docname="ic_chevron_right_48px.svg"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14">
|
||||
<metadata
|
||||
id="metadata10">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs8" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1321"
|
||||
inkscape:window-height="740"
|
||||
id="namedview6"
|
||||
showgrid="false"
|
||||
inkscape:pagecheckerboard="true"
|
||||
inkscape:zoom="4.9166667"
|
||||
inkscape:cx="-14.542373"
|
||||
inkscape:cy="24"
|
||||
inkscape:window-x="45"
|
||||
inkscape:window-y="28"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="svg4" />
|
||||
<path
|
||||
d="M 81.791668,20 58.208335,43.583333 134.625,120 58.208335,196.41667 81.791668,220 181.79166,120 Z"
|
||||
id="path2"
|
||||
inkscape:connector-curvature="0"
|
||||
style="stroke-width:8.33333302;fill:#ffffff;fill-opacity:1" />
|
||||
</svg>
|
After Width: | Height: | Size: 1.7 KiB |
68
home/.config/awesome/widgets/tray-toggle/init.lua
Normal file
|
@ -0,0 +1,68 @@
|
|||
local awful = require('awful')
|
||||
local wibox = require('wibox')
|
||||
local gears = require('gears')
|
||||
local dpi = require('beautiful').xresources.apply_dpi
|
||||
local clickable_container = require('widget.clickable-container')
|
||||
local config_dir = gears.filesystem.get_configuration_dir()
|
||||
local widget_icon_dir = config_dir .. 'widget/tray-toggle/icons/'
|
||||
|
||||
local widget = wibox.widget {
|
||||
{
|
||||
id = 'icon',
|
||||
image = widget_icon_dir .. 'right-arrow' .. '.svg',
|
||||
widget = wibox.widget.imagebox,
|
||||
resize = true
|
||||
},
|
||||
layout = wibox.layout.align.horizontal
|
||||
}
|
||||
|
||||
local widget_button = wibox.widget {
|
||||
{
|
||||
widget,
|
||||
margins = dpi(7),
|
||||
widget = wibox.container.margin
|
||||
},
|
||||
widget = clickable_container
|
||||
}
|
||||
|
||||
widget_button:buttons(
|
||||
gears.table.join(
|
||||
awful.button(
|
||||
{},
|
||||
1,
|
||||
nil,
|
||||
function()
|
||||
awesome.emit_signal('widget::systray:toggle')
|
||||
end
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
-- Listen to signal
|
||||
awesome.connect_signal(
|
||||
'widget::systray:toggle',
|
||||
function()
|
||||
if screen.primary.systray then
|
||||
|
||||
if not screen.primary.systray.visible then
|
||||
|
||||
widget.icon:set_image(gears.surface.load_uncached(widget_icon_dir .. 'left-arrow.svg'))
|
||||
else
|
||||
|
||||
widget.icon:set_image(gears.surface.load_uncached(widget_icon_dir .. 'right-arrow.svg'))
|
||||
end
|
||||
|
||||
screen.primary.systray.visible = not screen.primary.systray.visible
|
||||
end
|
||||
end
|
||||
)
|
||||
|
||||
-- Update icon on start-up
|
||||
if screen.primary.systray then
|
||||
if screen.primary.systray.visible then
|
||||
widget.icon:set_image(widget_icon_dir .. 'right-arrow' .. '.svg')
|
||||
end
|
||||
end
|
||||
|
||||
-- Show only the tray button in the primary screen
|
||||
return awful.widget.only_on_screen(widget_button, 'primary')
|
44
home/.config/awesome/widgets/updates.lua
Normal file
|
@ -0,0 +1,44 @@
|
|||
-- ## Updates ##
|
||||
-- ~~~~~~~~~~~~~
|
||||
|
||||
-- requirements
|
||||
-- ~~~~~~~~~~~~
|
||||
local wibox = require('wibox')
|
||||
local watch = require('awful.widget.watch')
|
||||
local beautiful = require('beautiful')
|
||||
local dpi = require('beautiful').xresources.apply_dpi
|
||||
|
||||
local updates = wibox.widget.textbox()
|
||||
updates.font = theme.font
|
||||
--updates.markup
|
||||
|
||||
watch('bash -c "pacman -Qu | grep -Fcv "[ignored]" | sed "s/^//;s/^0$//g""', 3600, function(_, stdout)
|
||||
updates.text = stdout
|
||||
collectgarbage('collect')
|
||||
end)
|
||||
|
||||
--return updates
|
||||
updates_icon = wibox.widget {
|
||||
markup = '<span font="' .. theme.icon_font .. '"> </span>',
|
||||
align = "center",
|
||||
valign = "center",
|
||||
widget = wibox.widget.textbox,
|
||||
}
|
||||
return wibox.widget {
|
||||
wibox.widget{
|
||||
updates_icon,
|
||||
align = "center",
|
||||
valign = "center",
|
||||
fg = colors.yellow,
|
||||
widget = wibox.container.background
|
||||
},
|
||||
wibox.widget{
|
||||
updates,
|
||||
align = "center",
|
||||
valign = "center",
|
||||
fg = colors.yellow,
|
||||
widget = wibox.container.background
|
||||
},
|
||||
spacing = dpi(2),
|
||||
layout = wibox.layout.fixed.horizontal
|
||||
}
|
56
home/.config/awesome/widgets/volume.lua
Normal file
|
@ -0,0 +1,56 @@
|
|||
-- ## Volume ##
|
||||
-- ~~~~~~~~~~~~
|
||||
|
||||
-- requirements
|
||||
-- ~~~~~~~~~~~~
|
||||
local awful = require("awful")
|
||||
local wibox = require('wibox')
|
||||
local mat_list_item = require('widget.material.list-item')
|
||||
local dpi = require('beautiful').xresources.apply_dpi
|
||||
local watch = require('awful.widget.watch')
|
||||
local beautiful = require('beautiful')
|
||||
|
||||
local volume_icon = wibox.widget.textbox()
|
||||
volume_icon.font = beautiful.icon_font
|
||||
local volume_widget = wibox.widget.textbox()
|
||||
volume_widget.align = 'center'
|
||||
volume_widget.valign = 'center'
|
||||
volume_widget.font = beautiful.font
|
||||
|
||||
local volume
|
||||
|
||||
function update_volume()
|
||||
awful.spawn.easy_async_with_shell("bash -c 'amixer -D pulse sget Master'", function(stdout)
|
||||
volume = string.match(stdout, '(%d?%d?%d)%%')
|
||||
awful.spawn.easy_async_with_shell("bash -c 'pacmd list-sinks | awk '/muted/ { print $2 }''", function(muted)
|
||||
volume_widget.text = volume
|
||||
muted = string.gsub(muted, "%s+", "")
|
||||
if muted == 'muted:no' and (volume > '35' or volume == '100') then
|
||||
volume_icon.text = '墳'
|
||||
elseif muted == 'muted:no' and volume <= '35' and volume > '0' then
|
||||
volume_icon.text = '奔'
|
||||
elseif muted == 'muted:yes' then
|
||||
volume_icon.text = '婢'
|
||||
volume_widget.text = 'M'
|
||||
elseif volume == '0' then
|
||||
volume_icon.text = '奄'
|
||||
end
|
||||
end)
|
||||
collectgarbage('collect')
|
||||
end)
|
||||
end
|
||||
|
||||
watch('bash -c', 3, function(_, stdout)
|
||||
update_volume()
|
||||
end)
|
||||
|
||||
return wibox.widget {
|
||||
wibox.widget{
|
||||
volume_icon,
|
||||
fg = beautiful.accent.hue_100,
|
||||
widget = wibox.container.background
|
||||
},
|
||||
volume_widget,
|
||||
spacing = dpi(4),
|
||||
layout = wibox.layout.fixed.horizontal
|
||||
}
|
144
home/.config/awesome/widgets/weather-widget/README.md
Normal file
|
@ -0,0 +1,144 @@
|
|||
# Weather widget
|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/streetturtle/awesome-wm-widgets/labels/weather" target="_blank"><img alt="GitHub issues by-label" src="https://img.shields.io/github/issues/streetturtle/awesome-wm-widgets/weather"></a>
|
||||
|
||||
<a href="https://twitter.com/intent/tweet?text=Check%20out%20this%20awesome%20weather%20widget%20for%20Awesome%20Window%20Manager%20&url=https://github.com/streetturtle/awesome-wm-widgets/blob/master/weather-widget" target="_blank">
|
||||
<img alt="Twitter URL" src="https://img.shields.io/twitter/url?logo=twitter&style=social&url=https%3A%2F%2Fgithub.com%2Fstreetturtle%2Fawesome-wm-widgets%2Fblob%2Fmaster%2Fweather-widget">
|
||||
</a>
|
||||
</p>
|
||||
|
||||
The widget showing current, hourly and daily weather forecast:
|
||||
|
||||
<p align="center">
|
||||
<img src="https://github.com/streetturtle/awesome-wm-widgets/raw/master/weather-widget/weather-widget.png" alt="screenshot" style="max-width:100%;">
|
||||
</p>
|
||||
|
||||
The widget consists of three sections:
|
||||
- current weather, including humidity, wind speed, UV index
|
||||
- hourly forecast for the next 24 hours
|
||||
- daily forecast for the next five days
|
||||
|
||||
## Customization
|
||||
|
||||
It is possible to customize widget by providing a table with all or some of the following config parameters:
|
||||
|
||||
| Name | Default | Description |
|
||||
|---|---|---|
|
||||
| coordinates | Required | Table with two elements: latitude and longitude, e.g. `{46.204400, 6.143200}` |
|
||||
| api_key | Required | Get it [here](https://openweathermap.org/appid) |
|
||||
| font_name | `beautiful.font:gsub("%s%d+$", "")` | **Name** of the font to use e.g. 'Play' |
|
||||
| both_units_widget | false | Show temperature in both units - '28°C (83°F) |
|
||||
| units | metric | `metric` for celsius, `imperial` for fahrenheit |
|
||||
| show_hourly_forecast | false | Show hourly forecase section |
|
||||
| time_format_12h |false | 12 or 24 hour format (13:00 - default or 1pm) |
|
||||
| show_daily_forecast | false | Show daily forecast section |
|
||||
| icon_pack_name | weather-underground-icons | Name of the icon pack, could be `weather-underground-icon` or `VitalyGorbachev` or create your own, more details below |
|
||||
| icons_extension | `.png` | File extension of icons in the pack |
|
||||
| timeout | 120 | How often in seconds the widget refreshes |
|
||||
|
||||
### Icons:
|
||||
|
||||
The widget comes with two predefined icon packs:
|
||||
|
||||
- weather-underground-icons taken from [here](https://github.com/manifestinteractive/weather-underground-icons)
|
||||
- VitalyGorbachev taken from [here](https://www.flaticon.com/authors/vitaly-gorbachev)
|
||||
|
||||
To add your custom icons, create a folder with the pack name under `/icons` and use the folder name in widget's config. There should be 18 icons, preferably 128x128 minimum. Icons should also respect the naming convention, please check widget's source.
|
||||
|
||||
### Examples:
|
||||
|
||||
#### Custom font, icons
|
||||
|
||||

|
||||
|
||||
```lua
|
||||
weather_curl_widget({
|
||||
api_key='<your-key>',
|
||||
coordinates = {45.5017, -73.5673},
|
||||
time_format_12h = true,
|
||||
units = 'imperial',
|
||||
both_units_widget = true,
|
||||
font_name = 'Carter One',
|
||||
icons = 'VitalyGorbachev',
|
||||
icons_extension = '.svg',
|
||||
show_hourly_forecast = true,
|
||||
show_daily_forecast = true,
|
||||
}),
|
||||
```
|
||||
|
||||
#### Only current weather
|
||||
|
||||

|
||||
|
||||
```lua
|
||||
weather_curl_widget({
|
||||
api_key='<your-key>',
|
||||
coordinates = {45.5017, -73.5673},
|
||||
}),
|
||||
```
|
||||
|
||||
## Installation
|
||||
|
||||
1. Download json parser for lua from [github.com/rxi/json.lua](https://github.com/rxi/json.lua) and place it under **~/.config/awesome/** (don't forget to star a repo <i class="fa fa-github-alt"></i> ):
|
||||
|
||||
```bash
|
||||
wget -P ~/.config/awesome/ https://raw.githubusercontent.com/rxi/json.lua/master/json.lua
|
||||
```
|
||||
|
||||
1. Clone this repo under **~/.config/awesome/**:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/streetturtle/awesome-wm-widgets.git ~/.config/awesome/
|
||||
```
|
||||
|
||||
1. Get Open Weather Map app id here: [openweathermap.org/appid](https://openweathermap.org/appid).
|
||||
|
||||
1. Require weather widget at the beginning of **rc.lua**:
|
||||
|
||||
```lua
|
||||
local weather_widget = require("awesome-wm-widgets.weather-widget.weather")
|
||||
```
|
||||
|
||||
1. Add widget to the tasklist:
|
||||
|
||||
```lua
|
||||
s.mytasklist, -- Middle widget
|
||||
{ -- Right widgets
|
||||
layout = wibox.layout.fixed.horizontal,
|
||||
...
|
||||
--default
|
||||
weather_widget({
|
||||
api_key='<your-key>',
|
||||
coordinates = {45.5017, -73.5673},
|
||||
}),
|
||||
,
|
||||
--customized
|
||||
weather_curl_widget({
|
||||
api_key='<your-key>',
|
||||
coordinates = {45.5017, -73.5673},
|
||||
time_format_12h = true,
|
||||
units = 'imperial',
|
||||
both_units_widget = true,
|
||||
font_name = 'Carter One',
|
||||
icons = 'VitalyGorbachev',
|
||||
icons_extension = '.svg',
|
||||
show_hourly_forecast = true,
|
||||
show_daily_forecast = true,
|
||||
}),
|
||||
...
|
||||
```
|
||||
|
||||
## More screenshots
|
||||
|
||||
Only negative temperature:
|
||||
|
||||

|
||||
|
||||
Both positive and negative tempertature:
|
||||
|
||||

|
||||
|
||||
## How it works
|
||||
|
||||
TBW
|
BIN
home/.config/awesome/widgets/weather-widget/both.png
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
home/.config/awesome/widgets/weather-widget/example1.png
Normal file
After Width: | Height: | Size: 45 KiB |
BIN
home/.config/awesome/widgets/weather-widget/example2.png
Normal file
After Width: | Height: | Size: 26 KiB |
1419
home/.config/awesome/widgets/weather-widget/example_response.json
Normal file
|
@ -0,0 +1 @@
|
|||
<svg id="Layer_1" enable-background="new 0 0 512.035 512.035" height="512" viewBox="0 0 512.035 512.035" width="512" xmlns="http://www.w3.org/2000/svg"><path d="m160.635 282.678c-.399 3.06-.6 6.17-.6 9.34-35.859 0-62.514 33.291-54.64 68.3-55.9-13.72-97.36-64.17-97.36-124.3 0-70.69 57.31-128 128-128h24c-39.92 8.34-72 45.6-72 88 0 43.35 31.34 79.379 72.6 86.66z" fill="#ffdf81"/><path d="m139.325 276.017h-11.29c-35.859 0-62.514 33.291-54.64 68.3l2.75 4.85c6.486 3.176 14.789 7.592 29.25 11.15-7.864-34.964 18.744-68.3 54.64-68.3 0-3.17.2-6.28.6-9.34-7.348-1.311-14.478-3.509-21.31-6.66z" fill="#ffcd76"/><path d="m160.035 108.017c-14.71 3.07-28.36 10.07-39.72 19.82-90.558 22.603-127.09 132.195-68.42 204.64-26.88-23.46-43.86-57.98-43.86-96.46 0-70.69 57.31-128 128-128z" fill="#f9ecb4"/><path d="m184.045 235.508c.27-26.28 21.65-47.49 47.99-47.49-26.51 0-48-21.49-48-48 0 26.51-21.49 48-48 48 26.34 0 47.73 21.22 47.99 47.5z" fill="#ffcd76"/><path d="m432.035 404.017h-272c-30.93 0-56-25.07-56-56s25.07-56 56-56c0-47.91 45.994-82.413 91.92-69.21 52.411-71.932 165.158-48.807 185.34 37.4 37.31 2.69 66.74 33.82 66.74 71.81 0 39.76-32.24 72-72 72z" fill="#5989b3"/><path d="m417.135 218.908c-46.079-37.029-114.104-28.239-149.18 19.9-46.024-13.231-91.92 21.386-91.92 69.21-45.061 0-70.916 50.225-46.779 86.78-15.201-10.01-25.221-27.22-25.221-46.78 0-30.93 25.07-56 56-56 0-47.91 45.994-82.413 91.92-69.21 40.366-55.402 122.233-57.326 165.18-3.9z" fill="#436786"/><path d="m443.637 252.855c-25.196-86.926-138.057-109.482-194.836-39.078-18.043-3.848-37.109-1.421-53.879 7.401 5.928-14.712 20.371-25.161 37.113-25.161 4.418 0 8-3.581 8-8 0-4.418-3.582-8-8-8-22.056 0-40-17.944-40-40 0-4.418-3.582-8-8-8s-8 3.582-8 8c0 22.056-17.944 40-40 40-4.418 0-8 3.582-8 8 0 4.419 3.582 8 8 8 21.631 0 39.429 17.427 39.969 38.971-10.447 10.267-18.101 23.365-21.688 38.046-54.738-15.31-77.633-82.299-39.099-128.676 12.192-14.674 28.69-24.798 46.453-28.509 4.014-.838 6.743-4.575 6.322-8.653-.422-4.078-3.858-7.178-7.958-7.178h-24c-114.113 0-176.619 132.321-106.547 220.53 17.697 22.277 42.194 38.589 69.381 46.311 8.063 26.122 32.432 45.159 61.166 45.159h88c4.418 0 8-3.581 8-8 0-4.418-3.582-8-8-8h-88c-26.468 0-48-21.533-48-48s21.532-48 48-48c4.418 0 8-3.581 8-8 0-35.26 28.681-64 64-64 35.786 0 64 29.266 64 64 0 4.419 3.582 8 8 8s8-3.581 8-8c0-31.505-18.765-59.95-46.817-72.79 52.765-57.536 146.992-31.064 164.288 42.804.798 3.41 3.721 5.904 7.214 6.156 33.261 2.398 59.315 30.436 59.315 63.831 0 35.29-28.71 64-64 64h-136c-4.418 0-8 3.582-8 8 0 4.419 3.582 8 8 8h136c44.112 0 80-35.888 80-80 .001-39.796-29.603-73.504-68.397-79.164zm-278.818-64.816c7.863-4.731 14.479-11.342 19.216-19.202 4.738 7.861 11.352 14.471 19.218 19.203-7.857 4.745-14.475 11.365-19.216 19.229-4.741-7.865-11.358-14.485-19.218-19.23zm-68.755 161.145c-47.653-16.722-80.029-61.699-80.029-113.167 0-61.104 45.906-111.687 105.041-119.072-64.735 47.467-49.382 143.472 22.144 169.322-27.299 7.442-47.684 32.66-47.156 62.917z"/><path d="m272.035 396.017c-4.417 0-8 3.577-8 8 0 4.415 3.575 8 8 8 4.417 0 8-3.578 8-8 0-4.417-3.577-8-8-8z"/><circle cx="144.035" cy="372.017" fill="#436786" r="8"/><circle cx="132.035" cy="360.017" fill="#436786" r="4"/><g fill="#ffcd76"><circle cx="56.035" cy="300.017" r="8"/><circle cx="44.035" cy="288.017" r="4"/></g></svg>
|
After Width: | Height: | Size: 3.2 KiB |
|
@ -0,0 +1 @@
|
|||
<svg id="Layer_1" enable-background="new 0 0 512 512" height="512" viewBox="0 0 512 512" width="512" xmlns="http://www.w3.org/2000/svg"><path d="m222.66 220.6c-35.35 4.58-62.66 34.81-62.66 71.4-20.92 0-39.15 11.46-48.76 28.46-36.313-10.61-63.24-44.243-63.24-84.46 0-48.586 39.399-88 88-88 43.692 0 79.442 31.706 86.66 72.6z" fill="#ffdf81"/><path d="m205.71 182.3c-35.032-27.064-84.728-23.74-115.93 7.48-31.241 31.222-34.517 80.933-7.48 115.93-21.095-16.244-34.3-41.635-34.3-69.71 0-48.586 39.399-88 88-88 28.054 0 53.457 13.194 69.71 34.3z" fill="#f9ecb4"/><path d="m222.66 220.6c-35.35 4.58-62.66 34.81-62.66 71.4-20.92 0-39.15 11.46-48.76 28.46-18.921-5.528-35.498-17.355-46.99-33.51 9.31 7.96 20.29 13.99 32.33 17.51 9.61-17 27.84-28.46 48.76-28.46 0-36.59 27.31-66.82 62.66-71.4-2.31-13.08-7.51-25.16-14.91-35.56 15.486 13.209 26.014 31.411 29.57 51.56z" fill="#ffcd76"/><path d="m432 404h-272c-30.93 0-56-25.07-56-56s25.07-56 56-56c0-47.91 45.994-82.413 91.92-69.21 52.411-71.932 165.158-48.807 185.34 37.4 37.31 2.69 66.74 33.82 66.74 71.81 0 39.76-32.24 72-72 72z" fill="#add9ff"/><g fill="#d6ecff"><path d="m417.1 218.89c-46.079-37.029-114.104-28.239-149.18 19.9-46.024-13.231-91.92 21.386-91.92 69.21-45.061 0-70.917 50.224-46.78 86.78-15.2-10.01-25.22-27.22-25.22-46.78 0-30.93 25.07-56 56-56 0-47.91 45.994-82.413 91.92-69.21 40.366-55.401 122.233-57.325 165.18-3.9z"/><circle cx="144" cy="372" r="8"/><circle cx="132" cy="360" r="4"/></g><circle cx="88" cy="276" fill="#ffcd76" r="8"/><circle cx="76" cy="264" fill="#ffcd76" r="4"/><path d="m443.602 252.838c-25.196-86.926-138.057-109.482-194.836-39.078-6.722-1.433-13.209-1.932-19.768-1.689-3.59-14.029-10.297-26.969-19.701-38.055l28.361-28.36c3.125-3.124 3.125-8.189 0-11.313-3.124-3.124-8.189-3.124-11.313 0l-28.359 28.357c-15.281-12.971-34.006-20.729-53.986-22.367v-32.333c0-4.419-3.581-8-8-8s-8 3.581-8 8v32.333c-19.981 1.638-38.707 9.397-53.986 22.367l-28.357-28.357c-3.124-3.124-8.189-3.124-11.313 0-3.125 3.124-3.125 8.189 0 11.313l28.356 28.358c-12.971 15.28-20.729 34.006-22.367 53.986h-32.333c-4.418 0-8 3.581-8 8s3.582 8 8 8h32.333c1.638 19.982 9.396 38.708 22.367 53.986l-28.357 28.357c-3.125 3.124-3.125 8.189 0 11.313 3.124 3.124 8.189 3.124 11.313 0l28.365-28.365c7.846 6.638 16.716 11.991 26.219 15.811-16.034 41.708 14.888 86.898 59.76 86.898h88c4.419 0 8-3.582 8-8s-3.581-8-8-8h-88c-26.467 0-48-21.533-48-48s21.533-48 48-48c4.419 0 8-3.582 8-8 0-35.29 28.71-64 64-64 35.786 0 64 29.266 64 64 0 4.418 3.582 8 8 8s8-3.582 8-8c0-31.505-18.765-59.95-46.817-72.79 52.83-57.606 147.007-31.003 164.288 42.804.798 3.41 3.721 5.904 7.214 6.156 33.26 2.397 59.315 30.435 59.315 63.83 0 35.29-28.71 64-64 64h-136c-4.418 0-8 3.582-8 8s3.582 8 8 8h136c44.112 0 80-35.888 80-80 0-39.794-29.603-73.503-68.398-79.162zm-291.249 31.616c-18.303 2.189-34.246 12.143-44.461 26.453-53.943-20.263-69.902-90.047-28.453-131.472 43.546-43.571 117.258-23.281 133.571 34.845-32.607 7.968-57.443 35.974-60.657 70.174z"/><circle cx="272" cy="404" r="8"/></svg>
|
After Width: | Height: | Size: 2.9 KiB |
|
@ -0,0 +1 @@
|
|||
<svg id="Layer_1" enable-background="new 0 0 512.058 512.058" height="512" viewBox="0 0 512.058 512.058" width="512" xmlns="http://www.w3.org/2000/svg"><path d="m504.058 208c-16.51 75.45-87.6 136-168 136-92.78 0-168-75.22-168-168 0-80.4 52.561-151.49 128.011-168-16.011 0-25.021 0-40.011 0-136.97 0-248 111.03-248 248s111.03 248 248 248 248-111.03 248-248c0-14.99 0-32 0-48z" fill="#ffdf81"/><path d="m320.058 360c-92.78 0-168-75.22-168-168 0-52.61 22.51-101.24 59.21-133.18-27.14 31.11-43.21 72.72-43.21 117.18 0 143.398 168.991 222.916 280.84 124.12-31.93 36.2-78.56 59.88-128.84 59.88z" fill="#ffcd76"/><path d="m40.058 256c0 131.6 102.49 239.25 232 247.5-144.868 9.04-264-105.835-264-247.5 0-136.97 111.03-248 248-248h32c-136.97 0-248 111.03-248 248z" fill="#f9ecb4"/><path d="m472.058 104s-56 0-56 64c0-64-56-64-56-64s56 0 56-64c0 64 56 64 56 64z" fill="#ffcd76"/><path d="m360.058 216s-56 0-56 64c0-64-56-64-56-64s56 0 56-64c0 64 56 64 56 64z" fill="#ffcd76"/><path d="" fill="#f9ecb4"/><path d="m416.058 176c-4.418 0-8-3.581-8-8 0-23.203-7.893-39.607-23.458-48.758-11.98-7.044-24.396-7.24-24.573-7.242-4.404-.017-7.969-3.592-7.969-8 0-4.803 4.399-8.359 7.923-7.999.107-.019 12.742-.26 24.619-7.243 15.565-9.151 23.458-25.555 23.458-48.758 0-4.418 3.582-8 8-8s8 3.582 8 8c0 23.203 7.893 39.607 23.458 48.758 11.98 7.044 24.396 7.24 24.573 7.242 4.404.017 7.969 3.592 7.969 8 0 4.379-3.52 7.937-7.884 7.999 1.722 0-11.862-.279-24.658 7.243-15.565 9.151-23.458 25.555-23.458 48.758 0 4.419-3.582 8-8 8zm-25.952-72c11.129 5.861 20.085 14.733 25.951 26.376 5.866-11.642 14.822-20.515 25.951-26.376-11.129-5.861-20.085-14.733-25.951-26.376-5.865 11.642-14.821 20.515-25.951 26.376z"/><path d="m304.058 288c-4.418 0-8-3.582-8-8 0-23.203-7.893-39.607-23.458-48.758-11.98-7.044-24.396-7.24-24.573-7.242-4.404-.017-7.969-3.592-7.969-8 0-4.455 3.642-7.999 7.923-7.999.107-.019 12.742-.26 24.619-7.243 15.565-9.151 23.458-25.555 23.458-48.758 0-4.419 3.582-8 8-8s8 3.581 8 8c0 23.203 7.893 39.607 23.458 48.758 11.98 7.044 24.396 7.24 24.573 7.242 4.404.017 7.969 3.592 7.969 8 0 4.379-3.52 7.937-7.884 7.999.842 0-12.06-.163-24.658 7.243-15.565 9.151-23.458 25.555-23.458 48.758 0 4.418-3.582 8-8 8zm-25.952-72c11.129 5.861 20.085 14.733 25.951 26.376 5.866-11.642 14.822-20.515 25.951-26.376-11.129-5.861-20.085-14.733-25.951-26.376-5.865 11.642-14.821 20.515-25.951 26.376z"/><circle cx="248.058" cy="320" r="8"/><path d="m360.026 112c.177.002 12.593.199 24.573 7.242 15.565 9.151 23.458 25.555 23.458 48.758 0 4.419 3.582 8 8 8s8-3.581 8-8c0-23.203 7.893-39.607 23.458-48.758 12.006-7.058 24.45-7.241 24.542-7.242 4.415 0 8-3.579 8-8 0-4.408-3.564-7.983-7.969-8-.177-.002-12.593-.199-24.573-7.242-15.565-9.151-23.457-25.555-23.457-48.758 0-4.418-3.582-8-8-8s-8 3.582-8 8c0 23.203-7.893 39.607-23.458 48.758-12.006 7.058-24.45 7.241-24.542 7.242-4.634.05-8 3.745-8 8 0 4.408 3.564 7.983 7.968 8zm56.032-34.376c5.866 11.642 14.822 20.515 25.951 26.376-11.129 5.861-20.085 14.733-25.951 26.376-5.866-11.642-14.822-20.515-25.951-26.376 11.128-5.861 20.085-14.733 25.951-26.376z"/><path d="m296.058 152c0 23.203-7.893 39.607-23.458 48.758-12.006 7.058-24.45 7.241-24.542 7.242-4.634.05-8 3.745-8 8 0 4.408 3.564 7.983 7.969 8 .177.002 12.593.199 24.573 7.242 15.565 9.151 23.458 25.555 23.458 48.758 0 4.418 3.582 8 8 8s8-3.582 8-8c0-23.203 7.893-39.607 23.458-48.758 6.717-3.949 15.186-6.907 24.658-7.243 4.362-.155 7.884-3.62 7.884-7.999 0-4.408-3.564-7.983-7.969-8-.177-.002-12.593-.199-24.573-7.242-15.565-9.151-23.458-25.555-23.458-48.758 0-4.419-3.582-8-8-8s-8 3.581-8 8zm33.951 64c-11.129 5.861-20.085 14.733-25.951 26.376-5.866-11.642-14.822-20.515-25.951-26.376 11.129-5.861 20.085-14.733 25.951-26.376 5.865 11.642 14.822 20.515 25.951 26.376z"/><path d="m242.397 314.34c-3.114 3.114-3.117 8.203 0 11.32 3.113 3.113 8.201 3.119 11.32 0 3.113-3.115 3.115-8.203 0-11.32-3.113-3.114-8.203-3.117-11.32 0z"/><path d="m504.058 199.99c-3.911 0-7.167 2.807-7.862 6.517-20.257 91.913-123.668 157.679-221.125 117.46-4.084-1.687-8.762.258-10.447 4.343-1.685 4.084.26 8.761 4.344 10.447 87.651 36.17 184.754-4.964 227.091-85.81 0 140.926-111.37 243.053-240 243.053-132.643 0-240-107.337-240-240 0-131.778 105.691-237.786 235.876-239.965-102.292 55.569-127.095 206.855-33.414 290.965 3.288 2.952 8.346 2.678 11.298-.608 2.951-3.288 2.679-8.346-.608-11.297-97.612-87.639-52.252-252.642 68.335-279.23 3.713-.693 6.522-3.95 6.522-7.864 0-4.418-3.582-8-8-8h-40.011c-68.381-.001-132.668 26.627-181.02 74.978-100.042 100.041-100.057 261.985 0 362.041 100.042 100.042 261.984 100.057 362.041 0 48.352-48.351 74.98-112.638 74.98-181.02v-48.01c0-4.418-3.582-8-8-8z"/><circle cx="448.058" cy="344" fill="#ffcd76" r="16"/><circle cx="424.058" cy="368" fill="#ffcd76" r="8"/><g fill="#f9ecb4"><circle cx="160.058" cy="72" r="16"/><circle cx="136.058" cy="96" r="8"/></g></svg>
|
After Width: | Height: | Size: 4.7 KiB |
|
@ -0,0 +1 @@
|
|||
<svg id="Layer_1" enable-background="new 0 0 512 512" height="512" viewBox="0 0 512 512" width="512" xmlns="http://www.w3.org/2000/svg"><circle cx="255.999" cy="256" fill="#ffcd76" r="192"/><circle cx="255.999" cy="256" fill="#ffb562" r="152"/><path d="m256 80c4.418 0 8-3.581 8-8v-64c0-4.418-3.582-8-8-8s-8 3.582-8 8v64c0 4.419 3.582 8 8 8z"/><path d="m256 432c-4.418 0-8 3.582-8 8v64c0 4.418 3.582 8 8 8s8-3.582 8-8v-64c0-4.418-3.582-8-8-8z"/><path d="m504 248h-64.001c-4.418 0-8 3.581-8 8 0 4.418 3.582 8 8 8h64.001c4.418 0 8-3.582 8-8 0-4.419-3.582-8-8-8z"/><path d="m79.999 256c0-4.419-3.582-8-8-8h-63.999c-4.418 0-8 3.581-8 8 0 4.418 3.582 8 8 8h63.999c4.418 0 8-3.582 8-8z"/><path d="m122.342 133.657c3.125 3.125 8.189 3.124 11.314 0 3.124-3.124 3.124-8.189 0-11.313l-56-56c-3.125-3.124-8.189-3.124-11.314 0-3.124 3.124-3.124 8.189 0 11.313z"/><path d="m383.999 136c2.048 0 4.095-.781 5.657-2.343l56-56c3.124-3.124 3.124-8.189 0-11.313-3.125-3.124-8.189-3.124-11.314 0l-56 56c-5.056 5.055-1.405 13.656 5.657 13.656z"/><path d="m389.656 378.343c-3.125-3.124-8.189-3.124-11.314 0-3.124 3.124-3.124 8.189 0 11.313l56 56c1.563 1.562 3.609 2.343 5.657 2.343 7.061 0 10.714-8.6 5.657-13.657z"/><path d="m122.342 378.343-56 56c-3.124 3.124-3.124 8.189 0 11.313 3.125 3.125 8.189 3.124 11.314 0l56-56c3.124-3.124 3.124-8.189 0-11.313-3.125-3.124-8.189-3.124-11.314 0z"/><path d="m255.999 96c-88.225 0-160 71.776-160 160s71.775 160 160 160 160-71.776 160-160-71.775-160-160-160zm0 304c-79.402 0-144-64.598-144-144s64.598-144 144-144 144 64.598 144 144-64.598 144-144 144z"/><path d="m373.767 280.522c-4.252-1.182-8.666 1.307-9.851 5.563-13.416 48.23-57.793 81.915-107.916 81.915-61.757 0-112-50.243-112-112s50.243-112 112-112c50.314 0 94.736 33.847 108.024 82.309 1.167 4.26 5.564 6.765 9.83 5.6 4.261-1.169 6.768-5.57 5.6-9.831-15.187-55.392-65.954-94.078-123.454-94.078-70.579 0-128 57.42-128 128s57.421 128 128 128c57.281 0 107.996-38.5 123.33-93.626 1.185-4.257-1.307-8.668-5.563-9.852z"/><path d="m381.648 250.34c-3.086-3.108-8.188-3.121-11.31 0-3.114 3.114-3.117 8.203 0 11.32 3.128 3.128 8.229 3.103 11.31 0 3.129-3.128 3.13-8.19 0-11.32z"/></svg>
|
After Width: | Height: | Size: 2.1 KiB |
|
@ -0,0 +1 @@
|
|||
<svg id="Layer_1" enable-background="new 0 0 512.035 512.035" height="512" viewBox="0 0 512.035 512.035" width="512" xmlns="http://www.w3.org/2000/svg"><path d="m160.635 282.678c-.399 3.06-.6 6.17-.6 9.34-35.859 0-62.514 33.291-54.64 68.3-55.9-13.72-97.36-64.17-97.36-124.3 0-70.69 57.31-128 128-128h24c-39.92 8.34-72 45.6-72 88 0 43.35 31.34 79.379 72.6 86.66z" fill="#ffdf81"/><path d="m139.325 276.017h-11.29c-35.859 0-62.514 33.291-54.64 68.3l2.75 4.85c6.486 3.176 14.789 7.592 29.25 11.15-7.864-34.964 18.744-68.3 54.64-68.3 0-3.17.2-6.28.6-9.34-7.348-1.311-14.478-3.509-21.31-6.66z" fill="#ffcd76"/><path d="m160.035 108.017c-14.71 3.07-28.36 10.07-39.72 19.82-90.558 22.603-127.09 132.195-68.42 204.64-26.88-23.46-43.86-57.98-43.86-96.46 0-70.69 57.31-128 128-128z" fill="#f9ecb4"/><path d="m184.045 235.508c.27-26.28 21.65-47.49 47.99-47.49-26.51 0-48-21.49-48-48 0 26.51-21.49 48-48 48 26.34 0 47.73 21.22 47.99 47.5z" fill="#ffcd76"/><path d="m432.035 404.017h-272c-30.93 0-56-25.07-56-56s25.07-56 56-56c0-47.91 45.994-82.413 91.92-69.21 52.411-71.932 165.158-48.807 185.34 37.4 37.31 2.69 66.74 33.82 66.74 71.81 0 39.76-32.24 72-72 72z" fill="#5989b3"/><path d="m417.135 218.908c-46.079-37.029-114.104-28.239-149.18 19.9-46.024-13.231-91.92 21.386-91.92 69.21-45.061 0-70.916 50.225-46.779 86.78-15.201-10.01-25.221-27.22-25.221-46.78 0-30.93 25.07-56 56-56 0-47.91 45.994-82.413 91.92-69.21 40.366-55.402 122.233-57.326 165.18-3.9z" fill="#436786"/><path d="m443.637 252.855c-25.196-86.926-138.057-109.482-194.836-39.078-18.043-3.848-37.109-1.421-53.879 7.401 5.928-14.712 20.371-25.161 37.113-25.161 4.418 0 8-3.581 8-8 0-4.418-3.582-8-8-8-22.056 0-40-17.944-40-40 0-4.418-3.582-8-8-8s-8 3.582-8 8c0 22.056-17.944 40-40 40-4.418 0-8 3.582-8 8 0 4.419 3.582 8 8 8 21.631 0 39.429 17.427 39.969 38.971-10.447 10.267-18.101 23.365-21.688 38.046-54.738-15.31-77.633-82.299-39.099-128.676 12.192-14.674 28.69-24.798 46.453-28.509 4.014-.838 6.743-4.575 6.322-8.653-.422-4.078-3.858-7.178-7.958-7.178h-24c-114.113 0-176.619 132.321-106.547 220.53 17.697 22.277 42.194 38.589 69.381 46.311 8.063 26.122 32.432 45.159 61.166 45.159h88c4.418 0 8-3.581 8-8 0-4.418-3.582-8-8-8h-88c-26.468 0-48-21.533-48-48s21.532-48 48-48c4.418 0 8-3.581 8-8 0-35.26 28.681-64 64-64 35.786 0 64 29.266 64 64 0 4.419 3.582 8 8 8s8-3.581 8-8c0-31.505-18.765-59.95-46.817-72.79 52.765-57.536 146.992-31.064 164.288 42.804.798 3.41 3.721 5.904 7.214 6.156 33.261 2.398 59.315 30.436 59.315 63.831 0 35.29-28.71 64-64 64h-136c-4.418 0-8 3.582-8 8 0 4.419 3.582 8 8 8h136c44.112 0 80-35.888 80-80 .001-39.796-29.603-73.504-68.397-79.164zm-278.818-64.816c7.863-4.731 14.479-11.342 19.216-19.202 4.738 7.861 11.352 14.471 19.218 19.203-7.857 4.745-14.475 11.365-19.216 19.229-4.741-7.865-11.358-14.485-19.218-19.23zm-68.755 161.145c-47.653-16.722-80.029-61.699-80.029-113.167 0-61.104 45.906-111.687 105.041-119.072-64.735 47.467-49.382 143.472 22.144 169.322-27.299 7.442-47.684 32.66-47.156 62.917z"/><path d="m272.035 396.017c-4.417 0-8 3.577-8 8 0 4.415 3.575 8 8 8 4.417 0 8-3.578 8-8 0-4.417-3.577-8-8-8z"/><circle cx="144.035" cy="372.017" fill="#436786" r="8"/><circle cx="132.035" cy="360.017" fill="#436786" r="4"/><g fill="#ffcd76"><circle cx="56.035" cy="300.017" r="8"/><circle cx="44.035" cy="288.017" r="4"/></g></svg>
|
After Width: | Height: | Size: 3.2 KiB |
|
@ -0,0 +1 @@
|
|||
<svg id="Layer_1" enable-background="new 0 0 512 512" height="512" viewBox="0 0 512 512" width="512" xmlns="http://www.w3.org/2000/svg"><path d="m222.66 220.6c-35.35 4.58-62.66 34.81-62.66 71.4-20.92 0-39.15 11.46-48.76 28.46-36.313-10.61-63.24-44.243-63.24-84.46 0-48.586 39.399-88 88-88 43.692 0 79.442 31.706 86.66 72.6z" fill="#ffdf81"/><path d="m205.71 182.3c-35.032-27.064-84.728-23.74-115.93 7.48-31.241 31.222-34.517 80.933-7.48 115.93-21.095-16.244-34.3-41.635-34.3-69.71 0-48.586 39.399-88 88-88 28.054 0 53.457 13.194 69.71 34.3z" fill="#f9ecb4"/><path d="m222.66 220.6c-35.35 4.58-62.66 34.81-62.66 71.4-20.92 0-39.15 11.46-48.76 28.46-18.921-5.528-35.498-17.355-46.99-33.51 9.31 7.96 20.29 13.99 32.33 17.51 9.61-17 27.84-28.46 48.76-28.46 0-36.59 27.31-66.82 62.66-71.4-2.31-13.08-7.51-25.16-14.91-35.56 15.486 13.209 26.014 31.411 29.57 51.56z" fill="#ffcd76"/><path d="m432 404h-272c-30.93 0-56-25.07-56-56s25.07-56 56-56c0-47.91 45.994-82.413 91.92-69.21 52.411-71.932 165.158-48.807 185.34 37.4 37.31 2.69 66.74 33.82 66.74 71.81 0 39.76-32.24 72-72 72z" fill="#add9ff"/><g fill="#d6ecff"><path d="m417.1 218.89c-46.079-37.029-114.104-28.239-149.18 19.9-46.024-13.231-91.92 21.386-91.92 69.21-45.061 0-70.917 50.224-46.78 86.78-15.2-10.01-25.22-27.22-25.22-46.78 0-30.93 25.07-56 56-56 0-47.91 45.994-82.413 91.92-69.21 40.366-55.401 122.233-57.325 165.18-3.9z"/><circle cx="144" cy="372" r="8"/><circle cx="132" cy="360" r="4"/></g><circle cx="88" cy="276" fill="#ffcd76" r="8"/><circle cx="76" cy="264" fill="#ffcd76" r="4"/><path d="m443.602 252.838c-25.196-86.926-138.057-109.482-194.836-39.078-6.722-1.433-13.209-1.932-19.768-1.689-3.59-14.029-10.297-26.969-19.701-38.055l28.361-28.36c3.125-3.124 3.125-8.189 0-11.313-3.124-3.124-8.189-3.124-11.313 0l-28.359 28.357c-15.281-12.971-34.006-20.729-53.986-22.367v-32.333c0-4.419-3.581-8-8-8s-8 3.581-8 8v32.333c-19.981 1.638-38.707 9.397-53.986 22.367l-28.357-28.357c-3.124-3.124-8.189-3.124-11.313 0-3.125 3.124-3.125 8.189 0 11.313l28.356 28.358c-12.971 15.28-20.729 34.006-22.367 53.986h-32.333c-4.418 0-8 3.581-8 8s3.582 8 8 8h32.333c1.638 19.982 9.396 38.708 22.367 53.986l-28.357 28.357c-3.125 3.124-3.125 8.189 0 11.313 3.124 3.124 8.189 3.124 11.313 0l28.365-28.365c7.846 6.638 16.716 11.991 26.219 15.811-16.034 41.708 14.888 86.898 59.76 86.898h88c4.419 0 8-3.582 8-8s-3.581-8-8-8h-88c-26.467 0-48-21.533-48-48s21.533-48 48-48c4.419 0 8-3.582 8-8 0-35.29 28.71-64 64-64 35.786 0 64 29.266 64 64 0 4.418 3.582 8 8 8s8-3.582 8-8c0-31.505-18.765-59.95-46.817-72.79 52.83-57.606 147.007-31.003 164.288 42.804.798 3.41 3.721 5.904 7.214 6.156 33.26 2.397 59.315 30.435 59.315 63.83 0 35.29-28.71 64-64 64h-136c-4.418 0-8 3.582-8 8s3.582 8 8 8h136c44.112 0 80-35.888 80-80 0-39.794-29.603-73.503-68.398-79.162zm-291.249 31.616c-18.303 2.189-34.246 12.143-44.461 26.453-53.943-20.263-69.902-90.047-28.453-131.472 43.546-43.571 117.258-23.281 133.571 34.845-32.607 7.968-57.443 35.974-60.657 70.174z"/><circle cx="272" cy="404" r="8"/></svg>
|
After Width: | Height: | Size: 2.9 KiB |
|
@ -0,0 +1 @@
|
|||
<svg id="Layer_1" enable-background="new 0 0 512 512" height="512" viewBox="0 0 512 512" width="512" xmlns="http://www.w3.org/2000/svg"><path d="m178.55 135.77c-11.53 12.77-18.55 29.68-18.55 48.23-32.644 0-58.973 27.981-55.72 61.65-54.91-11-96.28-59.5-96.28-117.65 0-66.27 53.73-120 120-120h32c-23.71 9.37-40 36.95-40 64 0 33.52 25.75 61.01 58.55 63.77z" fill="#ffdf81"/><path d="m178.55 135.77c-11.53 12.77-18.55 29.68-18.55 48.23-32.644 0-58.973 27.981-55.72 61.65-8.45-1.69-16.58-4.27-24.28-7.65v-11.65c0-30.93 25.07-56 56-56 0-16.41 5.49-31.54 14.75-43.65 8.22 5.01 17.68 8.22 27.8 9.07z" fill="#ffcd76"/><path d="m160 8c-8.47 3.34-16 9.01-22.17 16.16-99.005 4.997-148.56 121.137-86.3 196.32-26.59-22.01-43.53-55.27-43.53-92.48 0-66.27 53.73-120 120-120z" fill="#f9ecb4"/><circle cx="64" cy="200" fill="#ffcd76" r="8"/><circle cx="52" cy="188" fill="#ffcd76" r="4"/><path d="m432 296h-272c-30.93 0-56-25.07-56-56s25.07-56 56-56c0-47.91 45.994-82.413 91.92-69.21 52.411-71.932 165.158-48.807 185.34 37.4 37.31 2.69 66.74 33.82 66.74 71.81 0 39.76-32.24 72-72 72z" fill="#5989b3"/><g fill="#436786"><path d="m417.1 110.89c-46.079-37.029-114.104-28.239-149.18 19.9-46.024-13.231-91.92 21.386-91.92 69.21-45.061 0-70.917 50.224-46.78 86.78-15.2-10.01-25.22-27.22-25.22-46.78 0-30.93 25.07-56 56-56 0-47.91 45.994-82.413 91.92-69.21 40.366-55.401 122.233-57.325 165.18-3.9z"/><circle cx="144" cy="264" r="8"/><circle cx="132" cy="252" r="4"/></g><path d="m352 376c0-22.056-17.944-40-40-40s-40 17.944-40 40c0 4.418 3.581 8 8 8 4.418 0 8-3.582 8-8 0-13.233 10.767-24 24-24s24 10.767 24 24-10.767 24-24 24h-304c-4.418 0-8 3.582-8 8s3.582 8 8 8h304c22.056 0 40-17.944 40-40z"/><path d="m472 432h-304c-4.419 0-8 3.582-8 8s3.581 8 8 8h304c13.233 0 24 10.767 24 24s-10.767 24-24 24-24-10.767-24-24c0-4.418-3.582-8-8-8-4.419 0-8 3.582-8 8 0 22.056 17.944 40 40 40s40-17.944 40-40-17.944-40-40-40z"/><path d="m392 464h-288c-4.419 0-8 3.582-8 8s3.581 8 8 8h288c4.418 0 8-3.582 8-8s-3.582-8-8-8z"/><path d="m72 464c-4.418 0-8 3.577-8 8 0 4.415 3.575 8 8 8 4.417 0 8-3.578 8-8 0-4.417-3.577-8-8-8z"/><path d="m248 368h-176c-4.419 0-8 3.582-8 8s3.581 8 8 8h176c4.418 0 8-3.582 8-8s-3.582-8-8-8z"/><path d="m34.34 370.34c-3.114 3.115-3.116 8.203 0 11.32 3.115 3.115 8.203 3.117 11.32 0 3.115-3.115 3.117-8.203 0-11.32-3.114-3.114-8.203-3.117-11.32 0z"/><path d="m376 368c-4.419 0-8 3.582-8 8s3.581 8 8 8h64c4.418 0 8-3.582 8-8s-3.582-8-8-8z"/><path d="m466.34 370.34c-3.113 3.113-3.117 8.203 0 11.32 3.115 3.115 8.203 3.117 11.32 0 3.115-3.115 3.117-8.203 0-11.32-3.114-3.114-8.203-3.117-11.32 0z"/><path d="m97.191 252.261c5.738 29.443 31.713 51.739 62.809 51.739h88c4.418 0 8-3.582 8-8s-3.582-8-8-8h-88c-26.467 0-48-21.533-48-48s21.533-48 48-48c4.419 0 8-3.581 8-8 0-42.632 40.994-73.223 81.709-61.521 27.255 7.831 46.291 33.129 46.291 61.521 0 4.419 3.581 8 8 8 4.418 0 8-3.581 8-8 0-31.505-18.765-59.95-46.817-72.79 52.104-56.817 146.738-32.164 164.288 42.804.798 3.41 3.722 5.904 7.214 6.156 33.26 2.397 59.315 30.435 59.315 63.83 0 35.29-28.71 64-64 64h-136c-4.419 0-8 3.582-8 8s3.581 8 8 8h136c44.112 0 80-35.888 80-80 0-39.794-29.604-73.503-68.398-79.162-25.026-86.33-137.742-109.872-194.836-39.078-25.67-5.474-53.344 1.815-73.198 21.595-27.143-4.095-47.568-27.473-47.568-55.355 0-24.373 15.021-48.688 34.94-56.56 8.179-3.232 5.844-15.44-2.94-15.44h-32c-70.58 0-128 57.42-128 128 0 58.899 40.544 110.273 97.191 124.261zm30.809-236.261h6.497c-13.771 14.296-22.497 34.91-22.497 56 0 32.394 21.598 60.603 52.391 69.29-6.569 10.361-10.831 22.324-12.038 35.164-30.202 3.611-53.992 28.345-56.172 58.958-47.007-13.889-80.181-57.57-80.181-107.412 0-61.757 50.243-112 112-112z"/><path d="m266.34 290.34c-3.114 3.114-3.117 8.203 0 11.32 3.115 3.115 8.203 3.117 11.32 0 3.115-3.115 3.117-8.203 0-11.32-3.113-3.114-8.203-3.117-11.32 0z"/></svg>
|
After Width: | Height: | Size: 3.7 KiB |
|
@ -0,0 +1 @@
|
|||
<svg id="Layer_1" enable-background="new 0 0 512 512" height="512" viewBox="0 0 512 512" width="512" xmlns="http://www.w3.org/2000/svg"><path d="m214.9 114.05c-31.51 7.67-54.9 36.08-54.9 69.95-21.63 0-40.39 12.26-49.71 30.21-40.11-8.19-70.29-43.68-70.29-86.21 0-48.6 39.4-88 88-88 43.85 0 80.21 32.08 86.9 74.05z" fill="#ffdf81"/><path d="m197.71 74.3c-57.029-44.085-141.71-3.868-141.71 69.7 0 20.21 6.82 38.84 18.29 53.7-20.86-16.08-34.29-41.33-34.29-69.7 0-48.6 39.4-88 88-88 28.38 0 53.63 13.44 69.71 34.3z" fill="#f9ecb4"/><g fill="#ffcd76"><path d="m214.9 114.05c-31.51 7.67-54.9 36.08-54.9 69.95-21.63 0-40.391 12.26-49.71 30.21-21.04-4.3-39.351-16.11-52-32.51 10.399 8.04 22.649 13.79 36 16.51 9.319-17.95 28.08-30.21 49.71-30.21 0-33.87 23.391-62.28 54.9-69.95-2.36-14.81-8.41-28.38-17.19-39.75 17.37 13.39 29.59 33.14 33.19 55.75z"/><circle cx="88" cy="176" r="8"/><circle cx="76" cy="164" r="4"/></g><path d="m432 296h-272c-30.93 0-56-25.07-56-56s25.07-56 56-56c0-47.91 45.994-82.413 91.92-69.21 52.411-71.932 165.158-48.807 185.34 37.4 37.31 2.69 66.74 33.82 66.74 71.81 0 39.76-32.24 72-72 72z" fill="#add9ff"/><path d="m417.1 110.89c-46.079-37.029-114.104-28.239-149.18 19.9-46.024-13.231-91.92 21.386-91.92 69.21-45.061 0-70.916 50.225-46.779 86.78-15.201-10.01-25.221-27.22-25.221-46.78 0-30.93 25.07-56 56-56 0-47.91 45.994-82.413 91.92-69.21 40.366-55.401 122.233-57.325 165.18-3.9z" fill="#d6ecff"/><circle cx="144" cy="264" fill="#d6ecff" r="8"/><circle cx="132" cy="252" fill="#d6ecff" r="4"/><path d="m8 136h24.344c1.701 20.252 9.803 38.986 22.418 53.925l-20.419 20.419c-3.124 3.124-3.124 8.189 0 11.313 3.125 3.125 8.189 3.124 11.314 0l20.4-20.401c9.603 8.155 20.855 14.477 33.271 18.36-13.906 41.293 16.927 84.384 60.672 84.384h88c4.418 0 8-3.582 8-8s-3.582-8-8-8h-88c-26.468 0-48-21.533-48-48s21.532-48 48-48c4.418 0 8-3.581 8-8 0-35.29 28.71-64 64-64 35.786 0 64 29.266 64 64 0 4.419 3.582 8 8 8s8-3.581 8-8c0-31.505-18.765-59.95-46.817-72.79 52.832-57.61 147.007-31.001 164.288 42.804.798 3.41 3.721 5.904 7.214 6.156 33.26 2.397 59.315 30.435 59.315 63.83 0 35.29-28.71 64-64 64h-136c-4.418 0-8 3.582-8 8s3.582 8 8 8h136c44.112 0 80-35.888 80-80 0-39.794-29.603-73.503-68.398-79.162-25.197-86.926-138.058-109.482-194.836-39.078-8.889-1.896-18.193-2.298-27.612-1.015-3.558-14.252-10.385-27.5-19.869-38.715l20.373-20.374c3.124-3.124 3.124-8.189 0-11.313-3.125-3.124-8.189-3.124-11.314 0l-20.364 20.365c-15.261-12.914-34.153-20.704-53.98-22.363v-24.345c0-4.418-3.582-8-8-8s-8 3.582-8 8v24.336c-20.469 1.697-39.133 9.843-53.955 22.396l-20.388-20.389c-3.124-3.124-8.188-3.125-11.314 0-3.124 3.124-3.124 8.189 0 11.313l20.389 20.389c-12.553 14.823-20.699 33.486-22.396 53.955h-24.336c-4.418 0-8 3.581-8 8s3.582 8 8 8zm120-88c37.101 0 68.781 25.398 77.6 60.485-28.902 10.134-50.281 36.411-53.247 67.969-19.198 2.296-35.8 13.133-45.918 28.581-34.171-9.541-58.435-41.071-58.435-77.035 0-44.112 35.888-80 80-80z"/><path d="m352 376c0-22.056-17.944-40-40-40s-40 17.944-40 40c0 4.418 3.582 8 8 8s8-3.582 8-8c0-13.233 10.767-24 24-24s24 10.767 24 24-10.767 24-24 24h-304c-4.418 0-8 3.582-8 8s3.582 8 8 8h304c22.056 0 40-17.944 40-40z"/><path d="m472 432h-304c-4.418 0-8 3.582-8 8s3.582 8 8 8h304c13.233 0 24 10.767 24 24s-10.767 24-24 24-24-10.767-24-24c0-4.418-3.582-8-8-8s-8 3.582-8 8c0 22.056 17.944 40 40 40s40-17.944 40-40-17.944-40-40-40z"/><path d="m392 464h-288c-4.418 0-8 3.582-8 8s3.582 8 8 8h288c4.418 0 8-3.582 8-8s-3.582-8-8-8z"/><circle cx="72" cy="472" r="8"/><path d="m248 368h-176c-4.418 0-8 3.582-8 8s3.582 8 8 8h176c4.418 0 8-3.582 8-8s-3.582-8-8-8z"/><path d="m34.34 370.34c-3.114 3.114-3.117 8.203 0 11.32 3.113 3.113 8.201 3.119 11.32 0 3.121-3.122 3.109-8.209 0-11.32-3.116-3.115-8.203-3.116-11.32 0z"/><path d="m376 368c-4.418 0-8 3.582-8 8s3.582 8 8 8h64c4.418 0 8-3.582 8-8s-3.582-8-8-8z"/><path d="m466.34 370.34c-3.113 3.134-3.116 8.184 0 11.32 3.113 3.113 8.201 3.119 11.32 0 3.114-3.115 3.115-8.203 0-11.32-3.116-3.115-8.203-3.116-11.32 0z"/><path d="m266.34 290.34c-3.114 3.114-3.117 8.203 0 11.32 3.113 3.113 8.201 3.119 11.32 0 3.116-3.117 3.115-8.203 0-11.32-3.114-3.113-8.203-3.116-11.32 0z"/></svg>
|
After Width: | Height: | Size: 4.1 KiB |
|
@ -0,0 +1 @@
|
|||
<svg id="Layer_1" enable-background="new 0 0 512.132 512.132" height="512" viewBox="0 0 512.132 512.132" width="512" xmlns="http://www.w3.org/2000/svg"><path d="m376.316 405.45c-5.93-1.391-11.67-3.3-17.17-5.66 27.36-24.98 42.82-59.16 32.92-95.62-6.21-22.88-24.96-58.47-46.62-94.96l10.67-20.53c22.92 39.41 54.75 96.32 59.95 115.49 8.751 32.226-.64 68.869-39.75 101.28z" fill="#5989b3"/><path d="m504.066 304.17c0 75.116-77.051 124.797-144.92 95.62 27.36-24.98 42.82-59.16 32.92-95.62-6.21-22.88-24.96-58.47-46.62-94.96l54.62-105.04z" fill="#99d0ff"/><path d="m376.316 405.45c-5.93-1.391-11.67-3.3-17.17-5.66 27.36-24.98 42.82-59.16 32.92-95.62-6.21-22.88-24.96-58.47-46.62-94.96l10.67-20.53c22.92 39.41 54.75 96.32 59.95 115.49 8.751 32.226-.64 68.869-39.75 101.28z" fill="#5989b3"/><path d="m152.986 399.79c-67.914 29.196-144.92-20.56-144.92-95.62l104-200 54.62 105.04c-21.66 36.49-40.41 72.08-46.62 94.96-9.9 36.46 5.56 70.64 32.92 95.62z" fill="#add9ff"/><path d="m137.196 405.45c5.93-1.391 11.67-3.3 17.17-5.66-27.36-24.98-42.82-59.16-32.92-95.62 6.21-22.88 24.96-58.47 46.62-94.96l-10.67-20.53c-22.92 39.41-54.75 96.32-59.95 115.49-8.751 32.226.64 68.869 39.75 101.28z" fill="#99d0ff"/><path d="m392.066 304.17c-17.615-64.882-136-232-136-232s-118.385 167.118-136 232c-19.68 72.487 60.889 136 136 136 75.11 0 155.68-63.513 136-136z" fill="#c2e3ff"/><path d="m266.566 439.76c-78.855 6.08-166.972-60.185-146.5-135.59 17.62-64.88 136-232 136-232s3.94 5.57 10.5 15.06c-29.36 42.53-111.11 163.9-125.51 216.94-18.77 69.12 53.62 130.08 125.51 135.59z" fill="#d6ecff"/><path d="m407.164 100.48c-2.977-5.726-11.206-5.75-14.195 0l-48.003 92.315c-37.236-61.366-79.457-121.136-82.371-125.248-3.177-4.486-9.861-4.514-13.056 0-2.914 4.112-45.135 63.882-82.372 125.248l-48.003-92.315c-2.977-5.726-11.206-5.75-14.195 0-111.226 213.912-104.903 200.775-104.903 203.69 0 77.983 78.302 132.392 151.33 104.879 62.282 53.104 149.942 50.643 209.34 0 72.953 27.486 151.33-26.829 151.33-104.879 0-2.888 6.316 10.208-104.902-203.69zm-391.079 205.609 95.981-184.578 45.456 87.416c-20.991 35.682-38.973 70.297-45.177 93.148-9.247 34.06 1.774 67.737 26.077 94.433-60.262 17.239-121.099-27.436-122.337-90.419zm239.981 126.081c-69.792 0-146.486-58.847-128.279-125.904 14.689-54.103 103.322-184.169 128.279-220.131 24.957 35.959 113.588 166.018 128.279 220.131 18.208 67.066-58.494 125.904-128.279 125.904zm117.644-35.663c24.391-26.788 35.294-60.483 26.077-94.433-6.204-22.851-24.185-57.466-45.177-93.146l45.456-87.417 95.981 184.578c-1.236 62.889-62.002 107.678-122.337 90.418z"/><path d="m286.976 164.139c-2.227-3.814-7.123-5.105-10.941-2.879-3.816 2.227-5.105 7.125-2.879 10.941l56 96c1.487 2.549 4.165 3.971 6.918 3.971 6.102 0 10.032-6.669 6.902-12.033z"/><path d="m357.726 290.51c-3.114-3.114-8.203-3.117-11.32 0-3.116 3.117-3.114 8.206 0 11.32 3.112 3.11 8.197 3.121 11.32 0 3.165-3.188 3.068-8.25 0-11.32z"/></svg>
|
After Width: | Height: | Size: 2.8 KiB |
|
@ -0,0 +1 @@
|
|||
<svg id="Layer_1" enable-background="new 0 0 512.132 512.132" height="512" viewBox="0 0 512.132 512.132" width="512" xmlns="http://www.w3.org/2000/svg"><path d="m376.316 405.45c-5.93-1.391-11.67-3.3-17.17-5.66 27.36-24.98 42.82-59.16 32.92-95.62-6.21-22.88-24.96-58.47-46.62-94.96l10.67-20.53c22.92 39.41 54.75 96.32 59.95 115.49 8.751 32.226-.64 68.869-39.75 101.28z" fill="#5989b3"/><path d="m504.066 304.17c0 75.116-77.051 124.797-144.92 95.62 27.36-24.98 42.82-59.16 32.92-95.62-6.21-22.88-24.96-58.47-46.62-94.96l54.62-105.04z" fill="#99d0ff"/><path d="m376.316 405.45c-5.93-1.391-11.67-3.3-17.17-5.66 27.36-24.98 42.82-59.16 32.92-95.62-6.21-22.88-24.96-58.47-46.62-94.96l10.67-20.53c22.92 39.41 54.75 96.32 59.95 115.49 8.751 32.226-.64 68.869-39.75 101.28z" fill="#5989b3"/><path d="m152.986 399.79c-67.914 29.196-144.92-20.56-144.92-95.62l104-200 54.62 105.04c-21.66 36.49-40.41 72.08-46.62 94.96-9.9 36.46 5.56 70.64 32.92 95.62z" fill="#add9ff"/><path d="m137.196 405.45c5.93-1.391 11.67-3.3 17.17-5.66-27.36-24.98-42.82-59.16-32.92-95.62 6.21-22.88 24.96-58.47 46.62-94.96l-10.67-20.53c-22.92 39.41-54.75 96.32-59.95 115.49-8.751 32.226.64 68.869 39.75 101.28z" fill="#99d0ff"/><path d="m392.066 304.17c-17.615-64.882-136-232-136-232s-118.385 167.118-136 232c-19.68 72.487 60.889 136 136 136 75.11 0 155.68-63.513 136-136z" fill="#c2e3ff"/><path d="m266.566 439.76c-78.855 6.08-166.972-60.185-146.5-135.59 17.62-64.88 136-232 136-232s3.94 5.57 10.5 15.06c-29.36 42.53-111.11 163.9-125.51 216.94-18.77 69.12 53.62 130.08 125.51 135.59z" fill="#d6ecff"/><path d="m407.164 100.48c-2.977-5.726-11.206-5.75-14.195 0l-48.003 92.315c-37.236-61.366-79.457-121.136-82.371-125.248-3.177-4.486-9.861-4.514-13.056 0-2.914 4.112-45.135 63.882-82.372 125.248l-48.003-92.315c-2.977-5.726-11.206-5.75-14.195 0-111.226 213.912-104.903 200.775-104.903 203.69 0 77.983 78.302 132.392 151.33 104.879 62.282 53.104 149.942 50.643 209.34 0 72.953 27.486 151.33-26.829 151.33-104.879 0-2.888 6.316 10.208-104.902-203.69zm-391.079 205.609 95.981-184.578 45.456 87.416c-20.991 35.682-38.973 70.297-45.177 93.148-9.247 34.06 1.774 67.737 26.077 94.433-60.262 17.239-121.099-27.436-122.337-90.419zm239.981 126.081c-69.792 0-146.486-58.847-128.279-125.904 14.689-54.103 103.322-184.169 128.279-220.131 24.957 35.959 113.588 166.018 128.279 220.131 18.208 67.066-58.494 125.904-128.279 125.904zm117.644-35.663c24.391-26.788 35.294-60.483 26.077-94.433-6.204-22.851-24.185-57.466-45.177-93.146l45.456-87.417 95.981 184.578c-1.236 62.889-62.002 107.678-122.337 90.418z"/><path d="m286.976 164.139c-2.227-3.814-7.123-5.105-10.941-2.879-3.816 2.227-5.105 7.125-2.879 10.941l56 96c1.487 2.549 4.165 3.971 6.918 3.971 6.102 0 10.032-6.669 6.902-12.033z"/><path d="m357.726 290.51c-3.114-3.114-8.203-3.117-11.32 0-3.116 3.117-3.114 8.206 0 11.32 3.112 3.11 8.197 3.121 11.32 0 3.165-3.188 3.068-8.25 0-11.32z"/></svg>
|
After Width: | Height: | Size: 2.8 KiB |
|
@ -0,0 +1 @@
|
|||
<svg id="Layer_1" enable-background="new 0 0 512.035 512.035" height="512" viewBox="0 0 512.035 512.035" width="512" xmlns="http://www.w3.org/2000/svg"><path d="m160.635 282.678c-.399 3.06-.6 6.17-.6 9.34-35.859 0-62.514 33.291-54.64 68.3-55.9-13.72-97.36-64.17-97.36-124.3 0-70.69 57.31-128 128-128h24c-39.92 8.34-72 45.6-72 88 0 43.35 31.34 79.379 72.6 86.66z" fill="#ffdf81"/><path d="m139.325 276.017h-11.29c-35.859 0-62.514 33.291-54.64 68.3l2.75 4.85c6.486 3.176 14.789 7.592 29.25 11.15-7.864-34.964 18.744-68.3 54.64-68.3 0-3.17.2-6.28.6-9.34-7.348-1.311-14.478-3.509-21.31-6.66z" fill="#ffcd76"/><path d="m160.035 108.017c-14.71 3.07-28.36 10.07-39.72 19.82-90.558 22.603-127.09 132.195-68.42 204.64-26.88-23.46-43.86-57.98-43.86-96.46 0-70.69 57.31-128 128-128z" fill="#f9ecb4"/><path d="m184.045 235.508c.27-26.28 21.65-47.49 47.99-47.49-26.51 0-48-21.49-48-48 0 26.51-21.49 48-48 48 26.34 0 47.73 21.22 47.99 47.5z" fill="#ffcd76"/><path d="m432.035 404.017h-272c-30.93 0-56-25.07-56-56s25.07-56 56-56c0-47.91 45.994-82.413 91.92-69.21 52.411-71.932 165.158-48.807 185.34 37.4 37.31 2.69 66.74 33.82 66.74 71.81 0 39.76-32.24 72-72 72z" fill="#5989b3"/><path d="m417.135 218.908c-46.079-37.029-114.104-28.239-149.18 19.9-46.024-13.231-91.92 21.386-91.92 69.21-45.061 0-70.916 50.225-46.779 86.78-15.201-10.01-25.221-27.22-25.221-46.78 0-30.93 25.07-56 56-56 0-47.91 45.994-82.413 91.92-69.21 40.366-55.402 122.233-57.326 165.18-3.9z" fill="#436786"/><path d="m443.637 252.855c-25.196-86.926-138.057-109.482-194.836-39.078-18.043-3.848-37.109-1.421-53.879 7.401 5.928-14.712 20.371-25.161 37.113-25.161 4.418 0 8-3.581 8-8 0-4.418-3.582-8-8-8-22.056 0-40-17.944-40-40 0-4.418-3.582-8-8-8s-8 3.582-8 8c0 22.056-17.944 40-40 40-4.418 0-8 3.582-8 8 0 4.419 3.582 8 8 8 21.631 0 39.429 17.427 39.969 38.971-10.447 10.267-18.101 23.365-21.688 38.046-54.738-15.31-77.633-82.299-39.099-128.676 12.192-14.674 28.69-24.798 46.453-28.509 4.014-.838 6.743-4.575 6.322-8.653-.422-4.078-3.858-7.178-7.958-7.178h-24c-114.113 0-176.619 132.321-106.547 220.53 17.697 22.277 42.194 38.589 69.381 46.311 8.063 26.122 32.432 45.159 61.166 45.159h88c4.418 0 8-3.581 8-8 0-4.418-3.582-8-8-8h-88c-26.468 0-48-21.533-48-48s21.532-48 48-48c4.418 0 8-3.581 8-8 0-35.26 28.681-64 64-64 35.786 0 64 29.266 64 64 0 4.419 3.582 8 8 8s8-3.581 8-8c0-31.505-18.765-59.95-46.817-72.79 52.765-57.536 146.992-31.064 164.288 42.804.798 3.41 3.721 5.904 7.214 6.156 33.261 2.398 59.315 30.436 59.315 63.831 0 35.29-28.71 64-64 64h-136c-4.418 0-8 3.582-8 8 0 4.419 3.582 8 8 8h136c44.112 0 80-35.888 80-80 .001-39.796-29.603-73.504-68.397-79.164zm-278.818-64.816c7.863-4.731 14.479-11.342 19.216-19.202 4.738 7.861 11.352 14.471 19.218 19.203-7.857 4.745-14.475 11.365-19.216 19.229-4.741-7.865-11.358-14.485-19.218-19.23zm-68.755 161.145c-47.653-16.722-80.029-61.699-80.029-113.167 0-61.104 45.906-111.687 105.041-119.072-64.735 47.467-49.382 143.472 22.144 169.322-27.299 7.442-47.684 32.66-47.156 62.917z"/><path d="m272.035 396.017c-4.417 0-8 3.577-8 8 0 4.415 3.575 8 8 8 4.417 0 8-3.578 8-8 0-4.417-3.577-8-8-8z"/><circle cx="144.035" cy="372.017" fill="#436786" r="8"/><circle cx="132.035" cy="360.017" fill="#436786" r="4"/><g fill="#ffcd76"><circle cx="56.035" cy="300.017" r="8"/><circle cx="44.035" cy="288.017" r="4"/></g></svg>
|
After Width: | Height: | Size: 3.2 KiB |
|
@ -0,0 +1 @@
|
|||
<svg id="Layer_1" enable-background="new 0 0 512 512" height="512" viewBox="0 0 512 512" width="512" xmlns="http://www.w3.org/2000/svg"><path d="m222.66 220.6c-35.35 4.58-62.66 34.81-62.66 71.4-20.92 0-39.15 11.46-48.76 28.46-36.313-10.61-63.24-44.243-63.24-84.46 0-48.586 39.399-88 88-88 43.692 0 79.442 31.706 86.66 72.6z" fill="#ffdf81"/><path d="m205.71 182.3c-35.032-27.064-84.728-23.74-115.93 7.48-31.241 31.222-34.517 80.933-7.48 115.93-21.095-16.244-34.3-41.635-34.3-69.71 0-48.586 39.399-88 88-88 28.054 0 53.457 13.194 69.71 34.3z" fill="#f9ecb4"/><path d="m222.66 220.6c-35.35 4.58-62.66 34.81-62.66 71.4-20.92 0-39.15 11.46-48.76 28.46-18.921-5.528-35.498-17.355-46.99-33.51 9.31 7.96 20.29 13.99 32.33 17.51 9.61-17 27.84-28.46 48.76-28.46 0-36.59 27.31-66.82 62.66-71.4-2.31-13.08-7.51-25.16-14.91-35.56 15.486 13.209 26.014 31.411 29.57 51.56z" fill="#ffcd76"/><path d="m432 404h-272c-30.93 0-56-25.07-56-56s25.07-56 56-56c0-47.91 45.994-82.413 91.92-69.21 52.411-71.932 165.158-48.807 185.34 37.4 37.31 2.69 66.74 33.82 66.74 71.81 0 39.76-32.24 72-72 72z" fill="#add9ff"/><g fill="#d6ecff"><path d="m417.1 218.89c-46.079-37.029-114.104-28.239-149.18 19.9-46.024-13.231-91.92 21.386-91.92 69.21-45.061 0-70.917 50.224-46.78 86.78-15.2-10.01-25.22-27.22-25.22-46.78 0-30.93 25.07-56 56-56 0-47.91 45.994-82.413 91.92-69.21 40.366-55.401 122.233-57.325 165.18-3.9z"/><circle cx="144" cy="372" r="8"/><circle cx="132" cy="360" r="4"/></g><circle cx="88" cy="276" fill="#ffcd76" r="8"/><circle cx="76" cy="264" fill="#ffcd76" r="4"/><path d="m443.602 252.838c-25.196-86.926-138.057-109.482-194.836-39.078-6.722-1.433-13.209-1.932-19.768-1.689-3.59-14.029-10.297-26.969-19.701-38.055l28.361-28.36c3.125-3.124 3.125-8.189 0-11.313-3.124-3.124-8.189-3.124-11.313 0l-28.359 28.357c-15.281-12.971-34.006-20.729-53.986-22.367v-32.333c0-4.419-3.581-8-8-8s-8 3.581-8 8v32.333c-19.981 1.638-38.707 9.397-53.986 22.367l-28.357-28.357c-3.124-3.124-8.189-3.124-11.313 0-3.125 3.124-3.125 8.189 0 11.313l28.356 28.358c-12.971 15.28-20.729 34.006-22.367 53.986h-32.333c-4.418 0-8 3.581-8 8s3.582 8 8 8h32.333c1.638 19.982 9.396 38.708 22.367 53.986l-28.357 28.357c-3.125 3.124-3.125 8.189 0 11.313 3.124 3.124 8.189 3.124 11.313 0l28.365-28.365c7.846 6.638 16.716 11.991 26.219 15.811-16.034 41.708 14.888 86.898 59.76 86.898h88c4.419 0 8-3.582 8-8s-3.581-8-8-8h-88c-26.467 0-48-21.533-48-48s21.533-48 48-48c4.419 0 8-3.582 8-8 0-35.29 28.71-64 64-64 35.786 0 64 29.266 64 64 0 4.418 3.582 8 8 8s8-3.582 8-8c0-31.505-18.765-59.95-46.817-72.79 52.83-57.606 147.007-31.003 164.288 42.804.798 3.41 3.721 5.904 7.214 6.156 33.26 2.397 59.315 30.435 59.315 63.83 0 35.29-28.71 64-64 64h-136c-4.418 0-8 3.582-8 8s3.582 8 8 8h136c44.112 0 80-35.888 80-80 0-39.794-29.603-73.503-68.398-79.162zm-291.249 31.616c-18.303 2.189-34.246 12.143-44.461 26.453-53.943-20.263-69.902-90.047-28.453-131.472 43.546-43.571 117.258-23.281 133.571 34.845-32.607 7.968-57.443 35.974-60.657 70.174z"/><circle cx="272" cy="404" r="8"/></svg>
|
After Width: | Height: | Size: 2.9 KiB |
|
@ -0,0 +1 @@
|
|||
<svg id="Layer_1" enable-background="new 0 0 512 512" height="512" viewBox="0 0 512 512" width="512" xmlns="http://www.w3.org/2000/svg"><path d="m424 352c0-30.928-25.072-56-56-56s-56 25.072-56 56c0-30.928-25.072-56-56-56s-56 25.072-56 56c0-30.928-25.072-56-56-56s-56 25.072-56 56v-16c0-101.62 66.38-184 168-184s168 82.38 168 184z" fill="#add9ff"/><path d="m424 336v16c0-30.93-25.07-56-56-56s-56 25.07-56 56c0-30.93-25.07-56-56-56s-56 25.07-56 56v-144c0-30.93 25.07-56 56-56 101.62 0 168 82.38 168 184z" fill="#5989b3"/><path d="m122.86 300.13c-20.45 8.34-34.86 28.42-34.86 51.87v-16c0-109.054 75.918-192.805 184-183.3-80.72 7.13-136.28 68.12-149.14 147.43z" fill="#d6ecff"/><path d="m312 208v144c0-30.93-25.07-56-56-56s-56 25.07-56 56v-144c0-30.93 25.07-56 56-56s56 25.07 56 56z" fill="#99d0ff"/><path d="m384.113 200.608c-66.53-75.616-189.628-75.694-256.227 0-30.879 35.096-47.886 83.179-47.886 135.392v16c0 4.418 3.582 8 8 8s8-3.582 8-8c0-26.467 21.532-48 48-48s48 21.533 48 48c0 4.418 3.582 8 8 8s8-3.582 8-8c0-23.741 17.328-43.5 40-47.32v55.32c0 4.418 3.582 8 8 8s8-3.582 8-8v-55.32c22.672 3.821 40 23.579 40 47.32 0 4.418 3.582 8 8 8s8-3.582 8-8c0-26.467 21.532-48 48-48s48 21.533 48 48c0 4.418 3.582 8 8 8s8-3.582 8-8v-16c0-52.213-17.007-100.296-47.887-135.392zm-286.288 107.12c8.546-65.202 47.475-120.975 108.765-140.359-9.111 11.059-14.59 25.217-14.59 40.631v101.724c-24.83-28.159-68.208-29.069-94.175-1.996zm110.175 1.996v-101.724c0-26.467 21.533-48 48-48s48 21.533 48 48v101.724c-25.565-28.992-70.481-28.939-96 0zm112 0v-101.724c0-15.414-5.478-29.572-14.59-40.632 61.337 19.399 100.221 75.171 108.765 140.359-25.986-27.092-69.364-26.14-94.175 1.997z"/><path d="m256 416c-4.418 0-8 3.582-8 8v48c0 13.234-10.767 24-24 24s-24-10.766-24-24c0-4.418-3.582-8-8-8s-8 3.582-8 8c0 22.056 17.944 40 40 40s40-17.944 40-40v-48c0-4.418-3.582-8-8-8z"/><path d="m112 176c4.418 0 8-3.581 8-8v-160c0-4.418-3.582-8-8-8s-8 3.582-8 8v160c0 4.419 3.582 8 8 8z"/><path d="m400 176c4.418 0 8-3.581 8-8v-160c0-4.418-3.582-8-8-8s-8 3.582-8 8v160c0 4.419 3.582 8 8 8z"/><path d="m160 144c4.418 0 8-3.581 8-8v-96c0-4.418-3.582-8-8-8s-8 3.582-8 8v96c0 4.419 3.582 8 8 8z"/><path d="m352 144c4.418 0 8-3.581 8-8v-96c0-4.418-3.582-8-8-8s-8 3.582-8 8v96c0 4.419 3.582 8 8 8z"/><path d="m208 112c4.418 0 8-3.581 8-8v-96c0-4.418-3.582-8-8-8s-8 3.582-8 8v96c0 4.419 3.582 8 8 8z"/><path d="m256 96c4.418 0 8-3.581 8-8v-80c0-4.418-3.582-8-8-8s-8 3.582-8 8v80c0 4.419 3.582 8 8 8z"/><path d="m304 112c4.418 0 8-3.581 8-8v-96c0-4.418-3.582-8-8-8s-8 3.582-8 8v96c0 4.419 3.582 8 8 8z"/><circle cx="256" cy="120" r="8"/><circle cx="256" cy="392" r="8"/></svg>
|
After Width: | Height: | Size: 2.6 KiB |
|
@ -0,0 +1 @@
|
|||
<svg id="Layer_1" enable-background="new 0 0 512 512" height="512" viewBox="0 0 512 512" width="512" xmlns="http://www.w3.org/2000/svg"><path d="m424 352c0-30.928-25.072-56-56-56s-56 25.072-56 56c0-30.928-25.072-56-56-56s-56 25.072-56 56c0-30.928-25.072-56-56-56s-56 25.072-56 56v-16c0-101.62 66.38-184 168-184s168 82.38 168 184z" fill="#add9ff"/><path d="m424 336v16c0-30.93-25.07-56-56-56s-56 25.07-56 56c0-30.93-25.07-56-56-56s-56 25.07-56 56v-144c0-30.93 25.07-56 56-56 101.62 0 168 82.38 168 184z" fill="#5989b3"/><path d="m122.86 300.13c-20.45 8.34-34.86 28.42-34.86 51.87v-16c0-109.054 75.918-192.805 184-183.3-80.72 7.13-136.28 68.12-149.14 147.43z" fill="#d6ecff"/><path d="m312 208v144c0-30.93-25.07-56-56-56s-56 25.07-56 56v-144c0-30.93 25.07-56 56-56s56 25.07 56 56z" fill="#99d0ff"/><path d="m384.113 200.608c-66.53-75.616-189.628-75.694-256.227 0-30.879 35.096-47.886 83.179-47.886 135.392v16c0 4.418 3.582 8 8 8s8-3.582 8-8c0-26.467 21.532-48 48-48s48 21.533 48 48c0 4.418 3.582 8 8 8s8-3.582 8-8c0-23.741 17.328-43.5 40-47.32v55.32c0 4.418 3.582 8 8 8s8-3.582 8-8v-55.32c22.672 3.821 40 23.579 40 47.32 0 4.418 3.582 8 8 8s8-3.582 8-8c0-26.467 21.532-48 48-48s48 21.533 48 48c0 4.418 3.582 8 8 8s8-3.582 8-8v-16c0-52.213-17.007-100.296-47.887-135.392zm-286.288 107.12c8.546-65.202 47.475-120.975 108.765-140.359-9.111 11.059-14.59 25.217-14.59 40.631v101.724c-24.83-28.159-68.208-29.069-94.175-1.996zm110.175 1.996v-101.724c0-26.467 21.533-48 48-48s48 21.533 48 48v101.724c-25.565-28.992-70.481-28.939-96 0zm112 0v-101.724c0-15.414-5.478-29.572-14.59-40.632 61.337 19.399 100.221 75.171 108.765 140.359-25.986-27.092-69.364-26.14-94.175 1.997z"/><path d="m256 416c-4.418 0-8 3.582-8 8v48c0 13.234-10.767 24-24 24s-24-10.766-24-24c0-4.418-3.582-8-8-8s-8 3.582-8 8c0 22.056 17.944 40 40 40s40-17.944 40-40v-48c0-4.418-3.582-8-8-8z"/><path d="m112 176c4.418 0 8-3.581 8-8v-160c0-4.418-3.582-8-8-8s-8 3.582-8 8v160c0 4.419 3.582 8 8 8z"/><path d="m400 176c4.418 0 8-3.581 8-8v-160c0-4.418-3.582-8-8-8s-8 3.582-8 8v160c0 4.419 3.582 8 8 8z"/><path d="m160 144c4.418 0 8-3.581 8-8v-96c0-4.418-3.582-8-8-8s-8 3.582-8 8v96c0 4.419 3.582 8 8 8z"/><path d="m352 144c4.418 0 8-3.581 8-8v-96c0-4.418-3.582-8-8-8s-8 3.582-8 8v96c0 4.419 3.582 8 8 8z"/><path d="m208 112c4.418 0 8-3.581 8-8v-96c0-4.418-3.582-8-8-8s-8 3.582-8 8v96c0 4.419 3.582 8 8 8z"/><path d="m256 96c4.418 0 8-3.581 8-8v-80c0-4.418-3.582-8-8-8s-8 3.582-8 8v80c0 4.419 3.582 8 8 8z"/><path d="m304 112c4.418 0 8-3.581 8-8v-96c0-4.418-3.582-8-8-8s-8 3.582-8 8v96c0 4.419 3.582 8 8 8z"/><circle cx="256" cy="120" r="8"/><circle cx="256" cy="392" r="8"/></svg>
|
After Width: | Height: | Size: 2.6 KiB |
|
@ -0,0 +1 @@
|
|||
<svg id="Layer_1" enable-background="new 0 0 512 512" height="512" viewBox="0 0 512 512" width="512" xmlns="http://www.w3.org/2000/svg"><path d="m178.55 135.77c-11.53 12.77-18.55 29.68-18.55 48.23-32.644 0-58.973 27.981-55.72 61.65-54.91-11-96.28-59.5-96.28-117.65 0-66.27 53.73-120 120-120h32c-23.71 9.37-40 36.95-40 64 0 33.52 25.75 61.01 58.55 63.77z" fill="#ffdf81"/><path d="m178.55 135.77c-11.53 12.77-18.55 29.68-18.55 48.23-32.644 0-58.973 27.981-55.72 61.65-8.45-1.69-16.58-4.27-24.28-7.65v-11.65c0-30.93 25.07-56 56-56 0-16.41 5.49-31.54 14.75-43.65 8.22 5.01 17.68 8.22 27.8 9.07z" fill="#ffcd76"/><path d="m160 8c-8.47 3.34-16 9.01-22.17 16.16-99.005 4.997-148.56 121.137-86.3 196.32-26.59-22.01-43.53-55.27-43.53-92.48 0-66.27 53.73-120 120-120z" fill="#f9ecb4"/><circle cx="64" cy="200" fill="#ffcd76" r="8"/><circle cx="52" cy="188" fill="#ffcd76" r="4"/><path d="m432 296h-272c-30.93 0-56-25.07-56-56s25.07-56 56-56c0-47.91 45.994-82.413 91.92-69.21 52.411-71.932 165.158-48.807 185.34 37.4 37.31 2.69 66.74 33.82 66.74 71.81 0 39.76-32.24 72-72 72z" fill="#5989b3"/><g fill="#436786"><path d="m417.1 110.89c-46.079-37.029-114.104-28.239-149.18 19.9-46.024-13.231-91.92 21.386-91.92 69.21-45.061 0-70.917 50.224-46.78 86.78-15.2-10.01-25.22-27.22-25.22-46.78 0-30.93 25.07-56 56-56 0-47.91 45.994-82.413 91.92-69.21 40.366-55.401 122.233-57.325 165.18-3.9z"/><circle cx="144" cy="264" r="8"/><circle cx="132" cy="252" r="4"/></g><path d="m443.602 144.838c-25.197-86.926-138.058-109.482-194.836-39.078-25.612-5.462-53.305 1.775-73.198 21.595-12.522-1.889-24.031-7.962-32.716-17.364-29.377-31.803-10.874-82.315 20.089-94.552 8.178-3.231 5.843-15.439-2.941-15.439h-32c-70.58 0-128 57.42-128 128 0 58.899 40.544 110.273 97.191 124.261 5.738 29.443 31.713 51.739 62.809 51.739h88c4.419 0 8-3.582 8-8s-3.581-8-8-8h-88c-26.467 0-48-21.533-48-48s21.533-48 48-48c4.419 0 8-3.581 8-8 0-35.29 28.71-64 64-64 35.739 0 64 29.216 64 64 0 4.419 3.582 8 8 8s8-3.581 8-8c0-31.505-18.765-59.95-46.817-72.79 52.83-57.606 147.007-31.003 164.288 42.804.798 3.41 3.721 5.904 7.214 6.156 33.26 2.397 59.315 30.435 59.315 63.83 0 35.29-28.71 64-64 64h-136c-4.418 0-8 3.582-8 8s3.582 8 8 8h136c44.112 0 80-35.888 80-80 0-39.794-29.603-73.503-68.398-79.162zm-291.249 31.616c-30.202 3.611-53.992 28.345-56.172 58.958-47.007-13.889-80.181-57.57-80.181-107.412 0-61.757 50.243-112 112-112h6.497c-40.491 42.037-23.726 110.163 29.894 125.29-6.57 10.361-10.831 22.324-12.038 35.164z"/><path d="m277.66 301.66c3.113-3.115 3.115-8.203 0-11.32-3.114-3.114-8.203-3.117-11.32 0-3.114 3.114-3.117 8.203 0 11.32 3.115 3.115 8.203 3.117 11.32 0z"/><path d="m157.122 337.854c-3.395-2.828-8.439-2.37-11.268 1.024l-80 96c-4.362 5.236-.567 13.122 6.142 13.122 2.292 0 4.568-.98 6.15-2.878l80-96c2.828-3.395 2.37-8.439-1.024-11.268z"/><path d="m445.121 337.854c-3.393-2.828-8.438-2.371-11.267 1.024l-80 96c-4.37 5.243-.554 13.122 6.142 13.122 2.292 0 4.567-.98 6.149-2.878l80-96c2.83-3.395 2.371-8.439-1.024-11.268z"/><path d="m157.122 401.854c-3.395-2.829-8.439-2.371-11.268 1.024l-80 96c-4.362 5.236-.567 13.122 6.142 13.122 2.292 0 4.568-.98 6.15-2.878l80-96c2.828-3.395 2.37-8.439-1.024-11.268z"/><path d="m445.121 401.854c-3.393-2.828-8.438-2.372-11.267 1.024l-80 96c-4.37 5.243-.554 13.122 6.142 13.122 2.292 0 4.567-.98 6.149-2.878l80-96c2.83-3.395 2.371-8.439-1.024-11.268z"/><path d="m325.657 370.343c-3.125-3.124-8.189-3.124-11.314 0l-29.658 29.657h-20.685v-20.685l29.657-29.658c3.124-3.124 3.124-8.189 0-11.313-3.125-3.124-8.189-3.124-11.314 0l-18.343 18.342v-12.686c0-4.418-3.582-8-8-8-4.419 0-8 3.582-8 8v12.686l-18.343-18.343c-3.124-3.124-8.189-3.124-11.313 0-3.125 3.124-3.125 8.189 0 11.313l29.656 29.658v20.686h-20.686l-29.657-29.657c-3.124-3.124-8.189-3.124-11.313 0-3.125 3.124-3.125 8.189 0 11.313l18.342 18.344h-12.686c-4.419 0-8 3.582-8 8s3.581 8 8 8h12.686l-18.343 18.343c-3.125 3.124-3.125 8.189 0 11.313 3.124 3.124 8.189 3.124 11.313 0l29.658-29.656h20.686v20.686l-29.657 29.657c-3.125 3.124-3.125 8.189 0 11.313 3.124 3.124 8.189 3.124 11.313 0l18.344-18.341v12.685c0 4.418 3.581 8 8 8 4.418 0 8-3.582 8-8v-12.685l18.343 18.342c3.125 3.125 8.189 3.124 11.314 0 3.124-3.124 3.124-8.189 0-11.313l-29.657-29.658v-20.686h20.685l29.657 29.657c1.563 1.562 3.609 2.343 5.657 2.343 7.061 0 10.714-8.6 5.657-13.657l-18.342-18.343h12.686c4.418 0 8-3.582 8-8s-3.582-8-8-8h-12.686l18.344-18.343c3.123-3.124 3.123-8.19-.001-11.314z"/></svg>
|
After Width: | Height: | Size: 4.3 KiB |
|
@ -0,0 +1 @@
|
|||
<svg id="Layer_1" enable-background="new 0 0 512 512" height="512" viewBox="0 0 512 512" width="512" xmlns="http://www.w3.org/2000/svg"><path d="m214.9 114.05c-31.51 7.67-54.9 36.08-54.9 69.95-21.63 0-40.39 12.26-49.71 30.21-40.11-8.19-70.29-43.68-70.29-86.21 0-48.6 39.4-88 88-88 43.85 0 80.21 32.08 86.9 74.05z" fill="#ffdf81"/><path d="m197.71 74.3c-57.028-44.086-141.71-3.868-141.71 69.7 0 20.21 6.82 38.84 18.29 53.7-20.86-16.08-34.29-41.33-34.29-69.7 0-48.6 39.4-88 88-88 28.38 0 53.63 13.44 69.71 34.3z" fill="#f9ecb4"/><g fill="#ffcd76"><path d="m214.9 114.05c-31.51 7.67-54.9 36.08-54.9 69.95-21.63 0-40.39 12.26-49.71 30.21-21.04-4.3-39.35-16.11-52-32.51 10.4 8.04 22.65 13.79 36 16.51 9.32-17.95 28.08-30.21 49.71-30.21 0-33.87 23.39-62.28 54.9-69.95-2.36-14.81-8.41-28.38-17.19-39.75 17.37 13.39 29.59 33.14 33.19 55.75z"/><circle cx="88" cy="176" r="8"/><circle cx="76" cy="164" r="4"/></g><path d="m432 296h-272c-30.93 0-56-25.07-56-56s25.07-56 56-56c0-47.91 45.994-82.413 91.92-69.21 52.411-71.932 165.158-48.807 185.34 37.4 37.31 2.69 66.74 33.82 66.74 71.81 0 39.76-32.24 72-72 72z" fill="#add9ff"/><path d="m417.1 110.89c-46.079-37.029-114.104-28.239-149.18 19.9-46.024-13.231-91.92 21.386-91.92 69.21-45.061 0-70.917 50.224-46.78 86.78-15.2-10.01-25.22-27.22-25.22-46.78 0-30.93 25.07-56 56-56 0-47.91 45.994-82.413 91.92-69.21 40.366-55.401 122.233-57.325 165.18-3.9z" fill="#d6ecff"/><circle cx="144" cy="264" fill="#d6ecff" r="8"/><circle cx="132" cy="252" fill="#d6ecff" r="4"/><path d="m157.122 337.854c-3.396-2.828-8.439-2.37-11.268 1.024l-80 96c-4.362 5.236-.567 13.122 6.142 13.122 2.292 0 4.568-.98 6.15-2.878l80-96c2.828-3.395 2.37-8.439-1.024-11.268z"/><path d="m445.122 337.854c-3.396-2.828-8.438-2.37-11.268 1.024l-80 96c-4.362 5.235-.566 13.122 6.142 13.122 2.292 0 4.568-.98 6.15-2.878l80-96c2.828-3.395 2.37-8.439-1.024-11.268z"/><path d="m157.122 401.854c-3.396-2.829-8.439-2.371-11.268 1.024l-80 96c-4.362 5.236-.567 13.122 6.142 13.122 2.292 0 4.568-.98 6.15-2.878l80-96c2.828-3.395 2.37-8.439-1.024-11.268z"/><path d="m445.122 401.854c-3.396-2.829-8.438-2.371-11.268 1.024l-80 96c-4.362 5.235-.566 13.122 6.142 13.122 2.292 0 4.568-.98 6.15-2.878l80-96c2.828-3.395 2.37-8.439-1.024-11.268z"/><path d="m325.657 370.343c-3.124-3.124-8.189-3.124-11.313 0l-29.658 29.657h-20.686v-20.686l29.657-29.657c3.125-3.124 3.125-8.189 0-11.313-3.124-3.124-8.189-3.124-11.313 0l-18.344 18.342v-12.686c0-4.418-3.582-8-8-8-4.419 0-8 3.582-8 8v12.686l-18.343-18.343c-3.124-3.124-8.189-3.124-11.313 0s-3.124 8.189 0 11.313l29.656 29.658v20.686h-20.687l-29.657-29.657c-3.124-3.124-8.189-3.124-11.313 0s-3.124 8.189 0 11.313l18.343 18.344h-12.686c-4.419 0-8 3.582-8 8s3.581 8 8 8h12.686l-18.343 18.343c-3.124 3.124-3.124 8.189 0 11.313s8.189 3.124 11.313 0l29.657-29.656h20.687v20.686l-29.657 29.657c-3.124 3.124-3.124 8.189 0 11.313s8.189 3.124 11.313 0l18.344-18.341v12.685c0 4.418 3.581 8 8 8 4.418 0 8-3.582 8-8v-12.685l18.343 18.342c3.124 3.124 8.189 3.124 11.313 0 3.125-3.124 3.125-8.189 0-11.313l-29.656-29.658v-20.686h20.686l29.657 29.657c1.562 1.562 3.609 2.343 5.657 2.343 7.063 0 10.711-8.603 5.657-13.657l-18.343-18.343h12.686c4.418 0 8-3.582 8-8s-3.582-8-8-8h-12.686l18.343-18.343c3.124-3.124 3.124-8.19 0-11.314z"/><path d="m443.602 144.838c-25.199-86.926-138.056-109.483-194.836-39.078-8.889-1.896-18.194-2.298-27.612-1.015-3.557-14.252-10.385-27.501-19.869-38.716l20.372-20.373c3.125-3.124 3.125-8.189 0-11.313-3.124-3.124-8.189-3.124-11.313 0l-20.365 20.365c-15.26-12.914-34.152-20.704-53.979-22.363v-24.345c0-4.418-3.582-8-8-8-4.419 0-8 3.582-8 8v24.336c-20.469 1.697-39.133 9.843-53.955 22.396l-20.388-20.389c-3.124-3.124-8.189-3.124-11.313 0-3.125 3.124-3.125 8.189 0 11.313l20.388 20.388c-12.553 14.823-20.699 33.487-22.396 53.956h-24.336c-4.419 0-8 3.581-8 8s3.581 8 8 8h24.344c1.701 20.253 9.803 38.986 22.418 53.925l-20.418 20.419c-3.125 3.124-3.125 8.189 0 11.313 3.124 3.125 8.189 3.124 11.313 0l20.401-20.401c9.603 8.155 20.855 14.477 33.271 18.36-13.908 41.287 16.926 84.384 60.671 84.384h88c4.419 0 8-3.582 8-8s-3.581-8-8-8h-88c-26.467 0-48-21.533-48-48s21.533-48 48-48c4.418 0 8-3.581 8-8 0-35.29 28.71-64 64-64 35.786 0 64 29.266 64 64 0 4.419 3.582 8 8 8s8-3.581 8-8c0-31.505-18.765-59.95-46.817-72.79 52.764-57.536 146.995-31.065 164.288 42.804.798 3.41 3.722 5.904 7.214 6.156 33.26 2.397 59.315 30.435 59.315 63.83 0 35.29-28.71 64-64 64h-136c-4.418 0-8 3.582-8 8s3.582 8 8 8h136c44.112 0 80-35.888 80-80 0-39.794-29.603-73.503-68.398-79.162zm-291.249 31.616c-19.198 2.296-35.8 13.133-45.918 28.581-34.172-9.541-58.435-41.071-58.435-77.035 0-68.375 80.706-104.958 132.165-60.651 12.567 10.821 21.438 25.237 25.434 41.137-28.902 10.133-50.28 36.412-53.246 67.968z"/><path d="m277.66 301.66c3.115-3.114 3.117-8.203 0-11.32-3.116-3.116-8.207-3.114-11.32 0-3.114 3.114-3.117 8.203 0 11.32 3.114 3.115 8.203 3.117 11.32 0z"/></svg>
|
After Width: | Height: | Size: 4.8 KiB |
|
@ -0,0 +1 @@
|
|||
<svg id="Layer_1" enable-background="new 0 0 512.012 512.012" height="512" viewBox="0 0 512.012 512.012" width="512" xmlns="http://www.w3.org/2000/svg"><path d="m178.556 135.77c-11.53 12.77-18.55 29.68-18.55 48.23-32.644 0-58.973 27.981-55.72 61.65-54.91-11-96.28-59.5-96.28-117.65 0-66.27 53.73-120 120-120h32c-23.71 9.37-40 36.95-40 64 0 33.52 25.75 61.01 58.55 63.77z" fill="#ffdf81"/><path d="m178.556 135.77c-11.53 12.77-18.55 29.68-18.55 48.23-32.644 0-58.973 27.981-55.72 61.65-8.45-1.69-16.58-4.27-24.28-7.65v-11.65c0-30.93 25.07-56 56-56 0-16.41 5.49-31.54 14.75-43.65 8.22 5.01 17.68 8.22 27.8 9.07z" fill="#ffcd76"/><path d="m160.006 8c-8.47 3.34-16 9.01-22.17 16.16-99.005 4.997-148.56 121.137-86.3 196.32-26.59-22.01-43.53-55.27-43.53-92.48 0-66.27 53.73-120 120-120h32z" fill="#f9ecb4"/><path d="m432.006 296h-272c-30.93 0-56-25.07-56-56s25.07-56 56-56c0-47.91 45.994-82.413 91.92-69.21 52.411-71.932 165.158-48.807 185.34 37.4 37.31 2.69 66.74 33.82 66.74 71.81 0 39.76-32.24 72-72 72z" fill="#5989b3"/><path d="m417.106 110.89c-46.084-37.033-114.11-28.233-149.18 19.9-46.024-13.231-91.92 21.386-91.92 69.21-45.061 0-70.917 50.224-46.78 86.78-15.2-10.01-25.22-27.22-25.22-46.78 0-30.93 25.07-56 56-56 0-47.91 45.994-82.413 91.92-69.21 40.366-55.401 122.233-57.324 165.18-3.9z" fill="#436786"/><path d="m296.006 248-112 144h64l-48 112 128-144h-64z" fill="#ffdf81"/><path d="m443.608 144.838c-25.198-86.926-138.056-109.483-194.836-39.078-25.611-5.462-53.305 1.775-73.198 21.595-12.522-1.889-24.031-7.961-32.716-17.363-29.377-31.803-10.874-82.315 20.089-94.552 8.178-3.232 5.843-15.44-2.941-15.44h-32c-70.58 0-128 57.42-128 128 0 58.899 40.544 110.273 97.191 124.261 5.738 29.443 31.713 51.739 62.809 51.739h82.31l-64.624 83.088c-4.081 5.247-.329 12.912 6.315 12.912h51.868l-43.221 100.849c-3.582 8.358 7.409 15.129 13.332 8.466l128-144c4.575-5.147.913-13.315-5.979-13.315h-53.394l13.714-48h143.68c44.112 0 80-35.888 80-80-.001-39.794-29.604-73.503-68.399-79.162zm-427.602-16.838c0-61.757 50.243-112 112-112h6.497c-40.491 42.037-23.727 110.164 29.894 125.29-6.569 10.362-10.831 22.324-12.038 35.165-30.197 3.611-53.983 28.336-56.171 58.942-47.003-13.892-80.182-57.557-80.182-107.397zm294.185 240-83.413 93.839 28.581-66.688c2.259-5.269-1.611-11.151-7.353-11.151h-47.643l76.607-98.495-20.656 72.297c-1.46 5.11 2.385 10.198 7.692 10.198zm121.815-80h-139.108l10.801-37.802c2.407-8.427-8.629-14.023-14.007-7.109l-34.932 44.911h-94.754c-25.873 0-46.683-20.472-47.939-45.58-1.373-27.51 20.63-50.42 47.939-50.42 4.418 0 8-3.581 8-8 0-35.29 28.71-64 64-64 35.776 0 64 29.257 64 64 0 4.419 3.581 8 8 8 4.418 0 8-3.581 8-8 0-31.505-18.765-59.95-46.817-72.79 52.766-57.537 146.993-31.076 164.288 42.804.798 3.41 3.722 5.904 7.214 6.156 33.261 2.398 59.315 30.436 59.315 63.831 0 35.289-28.71 63.999-64 63.999z"/><path d="m157.128 321.854c-3.396-2.829-8.439-2.37-11.268 1.024l-80 96c-4.369 5.245-.553 13.122 6.142 13.122 2.292 0 4.568-.98 6.15-2.878l80-96c2.828-3.395 2.37-8.439-1.024-11.268z"/><path d="m445.128 321.854c-3.396-2.829-8.439-2.37-11.268 1.024l-80 96c-4.369 5.244-.553 13.122 6.142 13.122 2.292 0 4.568-.98 6.15-2.878l80-96c2.828-3.395 2.37-8.439-1.024-11.268z"/><path d="m157.128 385.854c-3.396-2.828-8.439-2.37-11.268 1.024l-80 96c-4.369 5.245-.553 13.122 6.142 13.122 2.292 0 4.568-.98 6.15-2.878l80-96c2.828-3.395 2.37-8.439-1.024-11.268z"/><path d="m445.128 385.854c-3.396-2.828-8.439-2.37-11.268 1.024l-80 96c-4.369 5.244-.553 13.122 6.142 13.122 2.292 0 4.568-.98 6.15-2.878l80-96c2.828-3.395 2.37-8.439-1.024-11.268z"/><circle cx="64.006" cy="200" fill="#ffcd76" r="8"/><circle cx="52.006" cy="188" fill="#ffcd76" r="4"/><g fill="#436786"><circle cx="144.006" cy="264" r="8"/><circle cx="132.006" cy="252" r="4"/></g></svg>
|
After Width: | Height: | Size: 3.7 KiB |
|
@ -0,0 +1 @@
|
|||
<svg id="Layer_1" enable-background="new 0 0 512.012 512.012" height="512" viewBox="0 0 512.012 512.012" width="512" xmlns="http://www.w3.org/2000/svg"><path d="m214.906 114.05c-31.51 7.67-54.9 36.08-54.9 69.95-21.63 0-40.39 12.26-49.71 30.21-40.11-8.19-70.29-43.68-70.29-86.21 0-48.6 39.4-88 88-88 43.85 0 80.21 32.08 86.9 74.05z" fill="#ffdf81"/><path d="m197.716 74.3c-57.028-44.086-141.71-3.868-141.71 69.7 0 20.21 6.82 38.84 18.29 53.7-20.86-16.08-34.29-41.33-34.29-69.7 0-48.6 39.4-88 88-88 28.38 0 53.63 13.44 69.71 34.3z" fill="#f9ecb4"/><path d="m214.906 114.05c-31.51 7.67-54.9 36.08-54.9 69.95-21.63 0-40.39 12.26-49.71 30.21-21.04-4.3-39.35-16.11-52-32.51 10.4 8.04 22.65 13.79 36 16.51 9.32-17.95 28.08-30.21 49.71-30.21 0-33.87 23.39-62.28 54.9-69.95-2.36-14.81-8.41-28.38-17.19-39.75 17.37 13.39 29.59 33.14 33.19 55.75z" fill="#ffcd76"/><path d="m432.006 296h-272c-30.93 0-56-25.07-56-56s25.07-56 56-56c0-47.91 45.994-82.413 91.92-69.21 52.411-71.932 165.158-48.807 185.34 37.4 37.31 2.69 66.74 33.82 66.74 71.81 0 39.76-32.24 72-72 72z" fill="#add9ff"/><path d="m417.106 110.89c-46.084-37.033-114.11-28.233-149.18 19.9-46.024-13.231-91.92 21.386-91.92 69.21-45.061 0-70.917 50.224-46.78 86.78-15.2-10.01-25.22-27.22-25.22-46.78 0-30.93 25.07-56 56-56 0-47.91 45.994-82.413 91.92-69.21 40.366-55.401 122.233-57.324 165.18-3.9z" fill="#d6ecff"/><path d="m296.006 248-112 144h64l-48 112 128-144h-64z" fill="#ffdf81"/><path d="m443.608 144.838c-25.199-86.926-138.056-109.483-194.836-39.078-8.889-1.896-18.194-2.298-27.612-1.015-3.557-14.252-10.385-27.501-19.869-38.716l20.372-20.373c3.125-3.124 3.125-8.189 0-11.313-3.124-3.124-8.189-3.124-11.313 0l-20.365 20.365c-15.259-12.914-34.151-20.705-53.978-22.363v-24.345c0-4.418-3.582-8-8-8-4.419 0-8 3.582-8 8v24.336c-20.469 1.697-39.133 9.843-53.955 22.396l-20.389-20.389c-3.124-3.124-8.189-3.124-11.313 0-3.125 3.124-3.125 8.189 0 11.313l20.388 20.388c-12.553 14.823-20.699 33.487-22.396 53.956h-24.336c-4.419 0-8 3.581-8 8s3.581 8 8 8h24.344c1.701 20.253 9.803 38.986 22.418 53.925l-20.418 20.419c-3.125 3.124-3.125 8.189 0 11.313 3.124 3.125 8.189 3.124 11.313 0l20.401-20.401c9.603 8.155 20.855 14.477 33.271 18.36-13.908 41.287 16.926 84.384 60.671 84.384h82.31l-64.625 83.088c-4.081 5.247-.329 12.912 6.315 12.912h51.868l-43.221 100.849c-3.582 8.358 7.409 15.129 13.332 8.466l128-144c4.575-5.147.913-13.315-5.979-13.315h-53.394l13.714-48h143.68c44.112 0 80-35.888 80-80 0-39.794-29.603-73.503-68.398-79.162zm-395.602-16.838c0-68.375 80.706-104.958 132.165-60.651 12.567 10.821 21.438 25.237 25.434 41.137-28.902 10.134-50.28 36.412-53.246 67.969-19.198 2.296-35.8 13.133-45.918 28.581-34.172-9.542-58.435-41.072-58.435-77.036zm262.185 240-83.413 93.839 28.581-66.688c2.259-5.269-1.611-11.151-7.353-11.151h-47.643l76.607-98.495-20.656 72.297c-1.46 5.111 2.386 10.198 7.692 10.198zm121.815-80h-139.108l10.801-37.802c2.406-8.425-8.627-14.024-14.007-7.109l-34.932 44.911h-94.754c-26.467 0-48-21.533-48-48s21.533-48 48-48c4.418 0 8-3.581 8-8 0-35.29 28.71-64 64-64 35.776 0 64 29.257 64 64 0 4.419 3.581 8 8 8 4.418 0 8-3.581 8-8 0-31.505-18.765-59.95-46.817-72.79 52.766-57.537 146.993-31.076 164.288 42.804.798 3.41 3.722 5.904 7.214 6.156 33.261 2.398 59.315 30.436 59.315 63.831 0 35.289-28.71 63.999-64 63.999z"/><path d="m157.128 321.854c-3.396-2.829-8.438-2.37-11.268 1.024l-80 96c-4.369 5.244-.553 13.122 6.142 13.122 2.292 0 4.568-.98 6.15-2.878l80-96c2.828-3.395 2.37-8.439-1.024-11.268z"/><path d="m445.128 321.854c-3.395-2.829-8.438-2.37-11.268 1.024l-80 96c-4.369 5.244-.553 13.122 6.142 13.122 2.292 0 4.568-.98 6.15-2.878l80-96c2.828-3.395 2.37-8.439-1.024-11.268z"/><path d="m157.128 385.854c-3.396-2.828-8.438-2.37-11.268 1.024l-80 96c-4.369 5.244-.553 13.122 6.142 13.122 2.292 0 4.568-.98 6.15-2.878l80-96c2.828-3.395 2.37-8.439-1.024-11.268z"/><path d="m445.128 385.854c-3.395-2.828-8.438-2.37-11.268 1.024l-80 96c-4.369 5.244-.553 13.122 6.142 13.122 2.292 0 4.568-.98 6.15-2.878l80-96c2.828-3.395 2.37-8.439-1.024-11.268z"/><circle cx="144.006" cy="264" fill="#d6ecff" r="8"/><circle cx="132.006" cy="252" fill="#d6ecff" r="4"/><g fill="#ffcd76"><circle cx="76.006" cy="164" r="4"/><circle cx="88.006" cy="176" r="8"/></g></svg>
|
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 4 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 1 KiB |
After Width: | Height: | Size: 4.4 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 1 KiB |
After Width: | Height: | Size: 1 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 1 KiB |
After Width: | Height: | Size: 1 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 2 KiB |
After Width: | Height: | Size: 2 KiB |
13
home/.config/awesome/widgets/weather-widget/locale/de.lua
Normal file
|
@ -0,0 +1,13 @@
|
|||
local de = {
|
||||
warning_title = "Wetter Widget",
|
||||
parameter_warning = "Folgende benötigte Parameter fehlen: ",
|
||||
directions = {
|
||||
"N", "NNO", "NO", "ONO", "O", "OSO", "SO", "SSO", "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW", "N"
|
||||
},
|
||||
feels_like = "Gefühlt: ",
|
||||
wind = "Wind: ",
|
||||
humidity = "Luftfeuchtigkeit: ",
|
||||
uv = "UV-Index: "
|
||||
}
|
||||
|
||||
return de
|
14
home/.config/awesome/widgets/weather-widget/locale/en.lua
Normal file
|
@ -0,0 +1,14 @@
|
|||
local en = {
|
||||
warning_title = "Weather Widget",
|
||||
parameter_warning = "Required parameters are not set: ",
|
||||
directions = {
|
||||
"N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSW", "SW",
|
||||
"WSW", "W", "WNW", "NW", "NNW", "N"
|
||||
},
|
||||
feels_like = "Feels like ",
|
||||
wind = "Wind: ",
|
||||
humidity = "Humidity: ",
|
||||
uv = "UV: "
|
||||
}
|
||||
|
||||
return en
|
14
home/.config/awesome/widgets/weather-widget/locale/fr.lua
Normal file
|
@ -0,0 +1,14 @@
|
|||
local fr = {
|
||||
warning_title = "Widget Météo",
|
||||
parameter_warning = "Les paramètres suivants sont obligatoires : ",
|
||||
directions = {
|
||||
"N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSO", "SO",
|
||||
"OSO", "O", "ONO", "NO", "NNO", "N"
|
||||
},
|
||||
feels_like = "ressentie à ",
|
||||
wind = "Vent : ",
|
||||
humidity = "Humidité : ",
|
||||
uv = "Indice UV : "
|
||||
}
|
||||
|
||||
return fr
|
14
home/.config/awesome/widgets/weather-widget/locale/pt.lua
Normal file
|
@ -0,0 +1,14 @@
|
|||
local pt = {
|
||||
warning_title = "Widget do tempo",
|
||||
parameter_warning = "Parâmetros necessários não definidos: ",
|
||||
directions = {
|
||||
"N", "NNE", "NE", "ENE", "L", "ESE", "SE", "SSE", "S", "SSO", "SO",
|
||||
"OSO", "O", "ONO", "NO", "NNO", "N"
|
||||
},
|
||||
feels_like = "Sensação de ",
|
||||
wind = "Vento: ",
|
||||
humidity = "Umidade: ",
|
||||
uv = "UV: "
|
||||
}
|
||||
|
||||
return pt
|
BIN
home/.config/awesome/widgets/weather-widget/negative.png
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
home/.config/awesome/widgets/weather-widget/weather-widget.png
Normal file
After Width: | Height: | Size: 26 KiB |
572
home/.config/awesome/widgets/weather-widget/weather.lua
Normal file
|
@ -0,0 +1,572 @@
|
|||
-- ## Weather ##
|
||||
-- ~~~~~~~~~~~~~~~~
|
||||
|
||||
-- requirements
|
||||
-- ~~~~~~~~~~~~
|
||||
local awful = require("awful")
|
||||
local watch = require("awful.widget.watch")
|
||||
local json = require("module.json")
|
||||
local naughty = require("naughty")
|
||||
local wibox = require("wibox")
|
||||
local gears = require("gears")
|
||||
local beautiful = require("beautiful")
|
||||
|
||||
local HOME_DIR = os.getenv("HOME")
|
||||
local WIDGET_DIR = HOME_DIR .. '/.config/awesome/widget/weather-widget'
|
||||
local GET_FORECAST_CMD = [[bash -c "curl -s --show-error -X GET '%s'"]]
|
||||
|
||||
local SYS_LANG = os.getenv("LANG"):sub(1, 2)
|
||||
if SYS_LANG == "C" or SYS_LANG == "C." then
|
||||
-- C-locale is a common fallback for simple English
|
||||
SYS_LANG = "en"
|
||||
end
|
||||
-- default language is ENglish
|
||||
local LANG = gears.filesystem.file_readable(WIDGET_DIR .. "/" .. "locale/" .. SYS_LANG .. ".lua") and SYS_LANG or "en"
|
||||
local LCLE = require("widget.weather-widget.locale." .. LANG)
|
||||
|
||||
|
||||
local function show_warning(message)
|
||||
naughty.notify {
|
||||
preset = naughty.config.presets.critical,
|
||||
title = LCLE.warning_title,
|
||||
text = message
|
||||
}
|
||||
end
|
||||
|
||||
if SYS_LANG ~= LANG then
|
||||
show_warning("Your language is not supported yet. Language set to English")
|
||||
end
|
||||
|
||||
local weather_widget = {}
|
||||
local warning_shown = false
|
||||
local tooltip = awful.tooltip {
|
||||
mode = 'outside',
|
||||
preferred_positions = {'bottom'}
|
||||
}
|
||||
|
||||
local weather_popup = awful.popup {
|
||||
ontop = true,
|
||||
visible = false,
|
||||
shape = gears.shape.rounded_rect,
|
||||
border_width = 1,
|
||||
border_color = beautiful.bg_focus,
|
||||
maximum_width = 300,
|
||||
offset = {y = -10},
|
||||
hide_on_right_click = true,
|
||||
widget = {}
|
||||
}
|
||||
|
||||
--- Maps openWeatherMap icon name to file name w/o extension
|
||||
local icon_map = {
|
||||
["01d"] = "clear-sky",
|
||||
["02d"] = "few-clouds",
|
||||
["03d"] = "scattered-clouds",
|
||||
["04d"] = "broken-clouds",
|
||||
["09d"] = "shower-rain",
|
||||
["10d"] = "rain",
|
||||
["11d"] = "thunderstorm",
|
||||
["13d"] = "snow",
|
||||
["50d"] = "mist",
|
||||
["01n"] = "clear-sky-night",
|
||||
["02n"] = "few-clouds-night",
|
||||
["03n"] = "scattered-clouds-night",
|
||||
["04n"] = "broken-clouds-night",
|
||||
["09n"] = "shower-rain-night",
|
||||
["10n"] = "rain-night",
|
||||
["11n"] = "thunderstorm-night",
|
||||
["13n"] = "snow-night",
|
||||
["50n"] = "mist-night"
|
||||
}
|
||||
|
||||
--- Return wind direction as a string
|
||||
local function to_direction(degrees)
|
||||
-- Ref: https://www.campbellsci.eu/blog/convert-wind-directions
|
||||
if degrees == nil then return "Unknown dir" end
|
||||
local directions = LCLE.directions
|
||||
return directions[math.floor((degrees % 360) / 22.5) + 1]
|
||||
end
|
||||
|
||||
--- Convert degrees Celsius to Fahrenheit
|
||||
local function celsius_to_fahrenheit(c) return c * 9 / 5 + 32 end
|
||||
|
||||
-- Convert degrees Fahrenheit to Celsius
|
||||
local function fahrenheit_to_celsius(f) return (f - 32) * 5 / 9 end
|
||||
|
||||
local function gen_temperature_str(temp, fmt_str, show_other_units, units)
|
||||
local temp_str = string.format(fmt_str, temp)
|
||||
local s = temp_str .. '°' .. (units == 'metric' and 'C' or 'F')
|
||||
|
||||
if (show_other_units) then
|
||||
local temp_conv, units_conv
|
||||
if (units == 'metric') then
|
||||
temp_conv = celsius_to_fahrenheit(temp)
|
||||
units_conv = 'F'
|
||||
else
|
||||
temp_conv = fahrenheit_to_celsius(temp)
|
||||
units_conv = 'C'
|
||||
end
|
||||
|
||||
local temp_conv_str = string.format(fmt_str, temp_conv)
|
||||
s = s .. ' ' .. '(' .. temp_conv_str .. '°' .. units_conv .. ')'
|
||||
end
|
||||
return s
|
||||
end
|
||||
|
||||
local function uvi_index_color(uvi)
|
||||
local color
|
||||
if uvi >= 0 and uvi < 3 then color = '#A3BE8C'
|
||||
elseif uvi >= 3 and uvi < 6 then color = '#EBCB8B'
|
||||
elseif uvi >= 6 and uvi < 8 then color = '#D08770'
|
||||
elseif uvi >= 8 and uvi < 11 then color = '#BF616A'
|
||||
elseif uvi >= 11 then color = '#B48EAD'
|
||||
end
|
||||
|
||||
return '<span weight="bold" foreground="' .. color .. '">' .. uvi .. '</span>'
|
||||
end
|
||||
|
||||
local function worker(user_args)
|
||||
|
||||
local args = user_args or {}
|
||||
|
||||
--- Validate required parameters
|
||||
if args.coordinates == nil or args.api_key == nil then
|
||||
show_warning(LCLE.parameter_warning ..
|
||||
(args.coordinates == nil and '<b>coordinates</b>' or '') ..
|
||||
(args.api_key == nil and ', <b>api_key</b> ' or ''))
|
||||
return
|
||||
end
|
||||
|
||||
local coordinates = args.coordinates
|
||||
local api_key = args.api_key
|
||||
local font_name = args.font_name or beautiful.font:gsub("%s%d+$", "")
|
||||
local units = args.units or 'metric'
|
||||
local time_format_12h = args.time_format_12h
|
||||
local both_units_widget = args.both_units_widget or false
|
||||
local show_hourly_forecast = args.show_hourly_forecast
|
||||
local show_daily_forecast = args.show_daily_forecast
|
||||
local icon_pack_name = args.icons or 'weather-underground-icons'
|
||||
local icons_extension = args.icons_extension or '.png'
|
||||
local timeout = args.timeout or 120
|
||||
|
||||
local ICONS_DIR = WIDGET_DIR .. '/icons/' .. icon_pack_name .. '/'
|
||||
local owm_one_cal_api =
|
||||
('https://api.openweathermap.org/data/2.5/onecall' ..
|
||||
'?lat=' .. coordinates[1] .. '&lon=' .. coordinates[2] .. '&appid=' .. api_key ..
|
||||
'&units=' .. units .. '&exclude=minutely' ..
|
||||
(show_hourly_forecast == false and ',hourly' or '') ..
|
||||
(show_daily_forecast == false and ',daily' or '') ..
|
||||
'&lang=' .. LANG)
|
||||
|
||||
weather_widget = wibox.widget {
|
||||
{
|
||||
{
|
||||
{
|
||||
{
|
||||
id = 'icon',
|
||||
resize = true,
|
||||
widget = wibox.widget.imagebox
|
||||
},
|
||||
valign = 'center',
|
||||
widget = wibox.container.place,
|
||||
},
|
||||
{
|
||||
id = 'txt',
|
||||
widget = wibox.widget.textbox
|
||||
},
|
||||
layout = wibox.layout.fixed.horizontal,
|
||||
},
|
||||
left = 4,
|
||||
right = 4,
|
||||
layout = wibox.container.margin
|
||||
},
|
||||
shape = function(cr, width, height)
|
||||
gears.shape.rounded_rect(cr, width, height, 4)
|
||||
end,
|
||||
widget = wibox.container.background,
|
||||
set_image = function(self, path)
|
||||
self:get_children_by_id('icon')[1].image = path
|
||||
end,
|
||||
set_text = function(self, text)
|
||||
self:get_children_by_id('txt')[1].text = text
|
||||
end,
|
||||
is_ok = function(self, is_ok)
|
||||
if is_ok then
|
||||
self:get_children_by_id('icon')[1]:set_opacity(1)
|
||||
self:get_children_by_id('icon')[1]:emit_signal('widget:redraw_needed')
|
||||
else
|
||||
self:get_children_by_id('icon')[1]:set_opacity(0.2)
|
||||
self:get_children_by_id('icon')[1]:emit_signal('widget:redraw_needed')
|
||||
end
|
||||
end
|
||||
}
|
||||
|
||||
local current_weather_widget = wibox.widget {
|
||||
{
|
||||
{
|
||||
{
|
||||
id = 'icon',
|
||||
resize = true,
|
||||
forced_width = 128,
|
||||
forced_height = 128,
|
||||
widget = wibox.widget.imagebox
|
||||
},
|
||||
align = 'center',
|
||||
widget = wibox.container.place
|
||||
},
|
||||
{
|
||||
id = 'description',
|
||||
font = font_name .. ' 10',
|
||||
align = 'center',
|
||||
widget = wibox.widget.textbox
|
||||
},
|
||||
forced_width = 128,
|
||||
layout = wibox.layout.align.vertical
|
||||
},
|
||||
{
|
||||
{
|
||||
{
|
||||
id = 'temp',
|
||||
font = font_name .. ' 36',
|
||||
widget = wibox.widget.textbox
|
||||
},
|
||||
{
|
||||
id = 'feels_like_temp',
|
||||
align = 'center',
|
||||
font = font_name .. ' 9',
|
||||
widget = wibox.widget.textbox
|
||||
},
|
||||
layout = wibox.layout.fixed.vertical
|
||||
},
|
||||
{
|
||||
{
|
||||
id = 'wind',
|
||||
font = font_name .. ' 9',
|
||||
widget = wibox.widget.textbox
|
||||
},
|
||||
{
|
||||
id = 'humidity',
|
||||
font = font_name .. ' 9',
|
||||
widget = wibox.widget.textbox
|
||||
},
|
||||
{
|
||||
id = 'uv',
|
||||
font = font_name .. ' 9',
|
||||
widget = wibox.widget.textbox
|
||||
},
|
||||
expand = 'inside',
|
||||
layout = wibox.layout.align.vertical
|
||||
},
|
||||
spacing = 16,
|
||||
forced_width = 150,
|
||||
layout = wibox.layout.fixed.vertical
|
||||
},
|
||||
forced_width = 300,
|
||||
layout = wibox.layout.flex.horizontal,
|
||||
update = function(self, weather)
|
||||
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('feels_like_temp')[1]:set_text(
|
||||
LCLE.feels_like .. gen_temperature_str(weather.feels_like, '%.0f', false, units))
|
||||
self:get_children_by_id('description')[1]:set_text(weather.weather[1].description)
|
||||
self:get_children_by_id('wind')[1]:set_markup(
|
||||
LCLE.wind .. '<b>' .. weather.wind_speed .. 'm/s (' .. to_direction(weather.wind_deg) .. ')</b>')
|
||||
self:get_children_by_id('humidity')[1]:set_markup(LCLE.humidity .. '<b>' .. weather.humidity .. '%</b>')
|
||||
self:get_children_by_id('uv')[1]:set_markup(LCLE.uv .. uvi_index_color(weather.uvi))
|
||||
end
|
||||
}
|
||||
|
||||
|
||||
local daily_forecast_widget = {
|
||||
forced_width = 300,
|
||||
layout = wibox.layout.flex.horizontal,
|
||||
update = function(self, forecast, timezone_offset)
|
||||
local count = #self
|
||||
for i = 0, count do self[i]=nil end
|
||||
for i, day in ipairs(forecast) do
|
||||
if i > 5 then break end
|
||||
local day_forecast = wibox.widget {
|
||||
{
|
||||
text = os.date('%a', tonumber(day.dt) + tonumber(timezone_offset)),
|
||||
align = 'center',
|
||||
font = font_name .. ' 9',
|
||||
widget = wibox.widget.textbox
|
||||
},
|
||||
{
|
||||
{
|
||||
{
|
||||
image = ICONS_DIR .. icon_map[day.weather[1].icon] .. icons_extension,
|
||||
resize = true,
|
||||
forced_width = 48,
|
||||
forced_height = 48,
|
||||
widget = wibox.widget.imagebox
|
||||
},
|
||||
align = 'center',
|
||||
layout = wibox.container.place
|
||||
},
|
||||
{
|
||||
text = day.weather[1].description,
|
||||
font = font_name .. ' 8',
|
||||
align = 'center',
|
||||
forced_height = 50,
|
||||
widget = wibox.widget.textbox
|
||||
},
|
||||
layout = wibox.layout.fixed.vertical
|
||||
},
|
||||
{
|
||||
{
|
||||
text = gen_temperature_str(day.temp.day, '%.0f', false, units),
|
||||
align = 'center',
|
||||
font = font_name .. ' 9',
|
||||
widget = wibox.widget.textbox
|
||||
},
|
||||
{
|
||||
text = gen_temperature_str(day.temp.night, '%.0f', false, units),
|
||||
align = 'center',
|
||||
font = font_name .. ' 9',
|
||||
widget = wibox.widget.textbox
|
||||
},
|
||||
layout = wibox.layout.fixed.vertical
|
||||
},
|
||||
spacing = 8,
|
||||
layout = wibox.layout.fixed.vertical
|
||||
}
|
||||
table.insert(self, day_forecast)
|
||||
end
|
||||
end
|
||||
}
|
||||
|
||||
local hourly_forecast_graph = wibox.widget {
|
||||
step_width = 12,
|
||||
color = '#EBCB8B',
|
||||
background_color = beautiful.bg_normal,
|
||||
forced_height = 100,
|
||||
forced_width = 300,
|
||||
widget = wibox.widget.graph,
|
||||
set_max_value = function(self, new_max_value)
|
||||
self.max_value = new_max_value
|
||||
end,
|
||||
set_min_value = function(self, new_min_value)
|
||||
self.min_value = new_min_value
|
||||
end
|
||||
}
|
||||
local hourly_forecast_negative_graph = wibox.widget {
|
||||
step_width = 12,
|
||||
color = '#5E81AC',
|
||||
background_color = beautiful.bg_normal,
|
||||
forced_height = 100,
|
||||
forced_width = 300,
|
||||
widget = wibox.widget.graph,
|
||||
set_max_value = function(self, new_max_value)
|
||||
self.max_value = new_max_value
|
||||
end,
|
||||
set_min_value = function(self, new_min_value)
|
||||
self.min_value = new_min_value
|
||||
end
|
||||
}
|
||||
|
||||
local hourly_forecast_widget = {
|
||||
layout = wibox.layout.fixed.vertical,
|
||||
update = function(self, hourly)
|
||||
local hours_below = {
|
||||
id = 'hours',
|
||||
forced_width = 300,
|
||||
layout = wibox.layout.flex.horizontal
|
||||
}
|
||||
local temp_below = {
|
||||
id = 'temp',
|
||||
forced_width = 300,
|
||||
layout = wibox.layout.flex.horizontal
|
||||
}
|
||||
|
||||
local max_temp = -1000
|
||||
local min_temp = 1000
|
||||
local values = {}
|
||||
for i, hour in ipairs(hourly) do
|
||||
if i > 25 then break end
|
||||
values[i] = hour.temp
|
||||
if max_temp < hour.temp then max_temp = hour.temp end
|
||||
if min_temp > hour.temp then min_temp = hour.temp end
|
||||
if (i - 1) % 5 == 0 then
|
||||
table.insert(hours_below, wibox.widget {
|
||||
text = os.date(time_format_12h and '%I%p' or '%H:00', tonumber(hour.dt)),
|
||||
align = 'center',
|
||||
font = font_name .. ' 9',
|
||||
widget = wibox.widget.textbox
|
||||
})
|
||||
table.insert(temp_below, wibox.widget {
|
||||
markup = '<span foreground="'
|
||||
.. (tonumber(hour.temp) > 0 and '#2E3440' or '#ECEFF4') .. '">'
|
||||
.. string.format('%.0f', hour.temp) .. '°' .. '</span>',
|
||||
align = 'center',
|
||||
font = font_name .. ' 9',
|
||||
widget = wibox.widget.textbox
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
hourly_forecast_graph:set_max_value(math.max(max_temp, math.abs(min_temp)))
|
||||
hourly_forecast_graph:set_min_value(min_temp > 0 and min_temp * 0.7 or 0) -- move graph a bit up
|
||||
|
||||
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)
|
||||
|
||||
for _, value in ipairs(values) do
|
||||
if value >= 0 then
|
||||
hourly_forecast_graph:add_value(value)
|
||||
hourly_forecast_negative_graph:add_value(0)
|
||||
else
|
||||
hourly_forecast_graph:add_value(0)
|
||||
hourly_forecast_negative_graph:add_value(math.abs(value))
|
||||
end
|
||||
end
|
||||
|
||||
local count = #self
|
||||
for i = 0, count do self[i]=nil end
|
||||
|
||||
-- all temperatures are positive
|
||||
if min_temp > 0 then
|
||||
table.insert(self, wibox.widget{
|
||||
{
|
||||
hourly_forecast_graph,
|
||||
reflection = {horizontal = true},
|
||||
widget = wibox.container.mirror
|
||||
},
|
||||
{
|
||||
temp_below,
|
||||
valign = 'bottom',
|
||||
widget = wibox.container.place
|
||||
},
|
||||
id = 'graph',
|
||||
layout = wibox.layout.stack
|
||||
})
|
||||
table.insert(self, hours_below)
|
||||
|
||||
-- all temperatures are negative
|
||||
elseif max_temp < 0 then
|
||||
table.insert(self, hours_below)
|
||||
table.insert(self, wibox.widget{
|
||||
{
|
||||
hourly_forecast_negative_graph,
|
||||
reflection = {horizontal = true, vertical = true},
|
||||
widget = wibox.container.mirror
|
||||
},
|
||||
{
|
||||
temp_below,
|
||||
valign = 'top',
|
||||
widget = wibox.container.place
|
||||
},
|
||||
id = 'graph',
|
||||
layout = wibox.layout.stack
|
||||
})
|
||||
|
||||
-- there are both negative and positive temperatures
|
||||
else
|
||||
table.insert(self, wibox.widget{
|
||||
{
|
||||
hourly_forecast_graph,
|
||||
reflection = {horizontal = true},
|
||||
widget = wibox.container.mirror
|
||||
},
|
||||
{
|
||||
temp_below,
|
||||
valign = 'bottom',
|
||||
widget = wibox.container.place
|
||||
},
|
||||
id = 'graph',
|
||||
layout = wibox.layout.stack
|
||||
})
|
||||
table.insert(self, wibox.widget{
|
||||
{
|
||||
hourly_forecast_negative_graph,
|
||||
reflection = {horizontal = true, vertical = true},
|
||||
widget = wibox.container.mirror
|
||||
},
|
||||
{
|
||||
hours_below,
|
||||
valign = 'top',
|
||||
widget = wibox.container.place
|
||||
},
|
||||
id = 'graph',
|
||||
layout = wibox.layout.stack
|
||||
})
|
||||
end
|
||||
end
|
||||
}
|
||||
|
||||
local function update_widget(widget, stdout, stderr)
|
||||
if stderr ~= '' then
|
||||
if not warning_shown then
|
||||
if (stderr ~= 'curl: (52) Empty reply from server'
|
||||
and stderr ~= 'curl: (28) Failed to connect to api.openweathermap.org port 443: Connection timed out'
|
||||
and stderr:find('^curl: %(18%) transfer closed with %d+ bytes remaining to read$') ~= nil
|
||||
) then
|
||||
show_warning(stderr)
|
||||
end
|
||||
warning_shown = true
|
||||
widget:is_ok(false)
|
||||
tooltip:add_to_object(widget)
|
||||
|
||||
widget:connect_signal('mouse::enter', function() tooltip.text = stderr end)
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
warning_shown = false
|
||||
tooltip:remove_from_object(widget)
|
||||
widget:is_ok(true)
|
||||
|
||||
local result = json.decode(stdout)
|
||||
|
||||
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))
|
||||
|
||||
current_weather_widget:update(result.current)
|
||||
|
||||
local final_widget = {
|
||||
current_weather_widget,
|
||||
spacing = 16,
|
||||
layout = wibox.layout.fixed.vertical
|
||||
}
|
||||
|
||||
if show_hourly_forecast then
|
||||
hourly_forecast_widget:update(result.hourly)
|
||||
table.insert(final_widget, hourly_forecast_widget)
|
||||
end
|
||||
|
||||
if show_daily_forecast then
|
||||
daily_forecast_widget:update(result.daily, result.timezone_offset)
|
||||
table.insert(final_widget, daily_forecast_widget)
|
||||
end
|
||||
|
||||
weather_popup:setup({
|
||||
{
|
||||
final_widget,
|
||||
margins = 10,
|
||||
widget = wibox.container.margin
|
||||
},
|
||||
bg = beautiful.bg_normal,
|
||||
widget = wibox.container.background
|
||||
})
|
||||
end
|
||||
|
||||
weather_widget:buttons(gears.table.join(awful.button({}, 1, function()
|
||||
if weather_popup.visible then
|
||||
weather_widget:set_bg('#00000000')
|
||||
weather_popup.visible = not weather_popup.visible
|
||||
else
|
||||
weather_widget:set_bg(beautiful.bg_focus)
|
||||
weather_popup:move_next_to(mouse.current_widget_geometry)
|
||||
end
|
||||
end)))
|
||||
|
||||
watch(
|
||||
string.format(GET_FORECAST_CMD, owm_one_cal_api),
|
||||
timeout, -- API limit is 1k req/day; day has 1440 min; every 2 min is good
|
||||
update_widget, weather_widget
|
||||
)
|
||||
|
||||
return weather_widget
|
||||
end
|
||||
|
||||
return setmetatable(weather_widget, {__call = function(_, ...) return worker(...) end})
|