summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--weather-widget/README.md94
-rw-r--r--weather-widget/icons/VitalyGorbachev/broken-clouds-night.svg1
-rw-r--r--weather-widget/icons/VitalyGorbachev/broken-clouds.svg1
-rw-r--r--weather-widget/icons/VitalyGorbachev/clear-sky-night.svg1
-rw-r--r--weather-widget/icons/VitalyGorbachev/clear-sky.svg1
-rw-r--r--weather-widget/icons/VitalyGorbachev/few-clouds-night.svg1
-rw-r--r--weather-widget/icons/VitalyGorbachev/few-clouds.svg1
-rw-r--r--weather-widget/icons/VitalyGorbachev/mist-night.svg1
-rw-r--r--weather-widget/icons/VitalyGorbachev/mist.svg1
-rw-r--r--weather-widget/icons/VitalyGorbachev/rain-night.svg1
-rw-r--r--weather-widget/icons/VitalyGorbachev/rain.svg1
-rw-r--r--weather-widget/icons/VitalyGorbachev/scattered-clouds-night.svg1
-rw-r--r--weather-widget/icons/VitalyGorbachev/scattered-clouds.svg1
-rw-r--r--weather-widget/icons/VitalyGorbachev/shower-rain-night.svg1
-rw-r--r--weather-widget/icons/VitalyGorbachev/shower-rain.svg1
-rw-r--r--weather-widget/icons/VitalyGorbachev/snow-night.svg1
-rw-r--r--weather-widget/icons/VitalyGorbachev/snow.svg1
-rw-r--r--weather-widget/icons/VitalyGorbachev/thunderstorm-night.svg1
-rw-r--r--weather-widget/icons/VitalyGorbachev/thunderstorm.svg1
-rw-r--r--weather-widget/icons/weather-underground-icons/broken-clouds-night.pngbin0 -> 4101 bytes
-rwxr-xr-xweather-widget/icons/weather-underground-icons/broken-clouds.pngbin0 -> 1600 bytes
-rw-r--r--weather-widget/icons/weather-underground-icons/clear-sky-night.pngbin0 -> 4338 bytes
-rwxr-xr-xweather-widget/icons/weather-underground-icons/clear-sky.pngbin0 -> 1029 bytes
-rw-r--r--weather-widget/icons/weather-underground-icons/few-clouds-night.pngbin0 -> 4511 bytes
-rwxr-xr-xweather-widget/icons/weather-underground-icons/few-clouds.pngbin0 -> 1634 bytes
-rwxr-xr-xweather-widget/icons/weather-underground-icons/mist-night.pngbin0 -> 1042 bytes
-rwxr-xr-xweather-widget/icons/weather-underground-icons/mist.pngbin0 -> 1042 bytes
-rwxr-xr-xweather-widget/icons/weather-underground-icons/rain-night.pngbin0 -> 1728 bytes
-rwxr-xr-xweather-widget/icons/weather-underground-icons/rain.pngbin0 -> 1728 bytes
-rwxr-xr-xweather-widget/icons/weather-underground-icons/scattered-clouds-night.pngbin0 -> 1044 bytes
-rwxr-xr-xweather-widget/icons/weather-underground-icons/scattered-clouds.pngbin0 -> 1044 bytes
-rwxr-xr-xweather-widget/icons/weather-underground-icons/shower-rain-night.pngbin0 -> 1728 bytes
-rwxr-xr-xweather-widget/icons/weather-underground-icons/shower-rain.pngbin0 -> 1728 bytes
-rwxr-xr-xweather-widget/icons/weather-underground-icons/snow-night.pngbin0 -> 1191 bytes
-rwxr-xr-xweather-widget/icons/weather-underground-icons/snow.pngbin0 -> 1191 bytes
-rwxr-xr-xweather-widget/icons/weather-underground-icons/thunderstorm-night.pngbin0 -> 2052 bytes
-rwxr-xr-xweather-widget/icons/weather-underground-icons/thunderstorm.pngbin0 -> 2052 bytes
-rw-r--r--weather-widget/screenshots/example1.pngbin0 -> 46387 bytes
-rw-r--r--weather-widget/screenshots/example2.pngbin0 -> 26446 bytes
-rw-r--r--weather-widget/screenshots/weather-widget.pngbin0 -> 26906 bytes
-rw-r--r--weather-widget/weather.json1224
-rw-r--r--weather-widget/weather.lua581
42 files changed, 1718 insertions, 199 deletions
diff --git a/weather-widget/README.md b/weather-widget/README.md
index 730c1f5..defe1b7 100644
--- a/weather-widget/README.md
+++ b/weather-widget/README.md
@@ -1,8 +1,13 @@
# Weather widget
-![Weather Widget](./weather-widget.png)
+<p align="center">
+ <img src="https://github.com/streetturtle/awesome-wm-widgets/raw/master/weather-widget/screenshots/weather-widget.png" alt="screenshot" style="max-width:100%;">
+</p>
-Note that widget uses the Arc icon theme, so it should be [installed](https://github.com/horst3180/arc-icon-theme#installation) first under **/usr/share/icons/Arc/** folder.
+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
@@ -10,33 +15,62 @@ It is possible to customize widget by providing a table with all or some of the
| Name | Default | Description |
|---|---|---|
-| `font` | `Play 9` | Font |
-| `city` | `Montreal,ca` | City name and country code, [more info](https://openweathermap.org/current) |
-| `api_key` | none| API key, required |
-| `units` | `metric` | `metric` for celsius, `imperial` for fahrenheit |
-| `both_units_widget` | `false` | show temperature in both units (15°C (59°F)) or in one (15°C) |
-| `both_units_popup` | `false` | same as above but for popup |
-| `notification_position` | `top_right` | The notification position |
+| 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 | `.svg` | File extension of icons in the pack |
-### Example:
+### Icons:
+
+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
+
+![example1](./screenshots/example1.png)
```lua
-weather_widget({
- api_key = 'your-api-key',
+weather_curl_widget({
+ api_key='<your-key>',
+ coordinates = {45.5017, -73.5673},
+ time_format_12h = true,
units = 'imperial',
- font = 'Ubuntu Mono 9'
+ both_units_widget = true,
+ font_name = 'Carter One',
+ icons = 'VitalyGorbachev',
+ show_hourly_forecast = true,
+ show_daily_forecast = true,
}),
```
+#### Only current weather
-## Installation
+![example2](./screenshots/example2.png)
-1. Install lua socket - to make HTTP calls to get the weather information.
+```lua
+weather_curl_widget({
+ api_key='<your-key>',
+ coordinates = {45.5017, -73.5673},
+}),
+```
- ```bash
- $ sudo apt-get install lua-socket
- ```
+
+
+## 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> ):
@@ -66,15 +100,27 @@ weather_widget({
layout = wibox.layout.fixed.horizontal,
...
--default
- weather_widget({api_key = 'your-api-key'}),
- --customized
weather_widget({
- api_key = 'your-api-key',
+ coordinates = {45.5017, -73.5673},
+ api_key='c3d7320b359da4e48c2d682a04076576',
+ }),
+ ,
+ --customized
+ weather_curl_widget({
+ api_key='<your-key>',
+ coordinates = {45.5017, -73.5673},
+ time_format_12h = true,
units = 'imperial',
- font = 'Ubuntu Mono 9'
- })
+ both_units_widget = true,
+ font_name = 'Carter One',
+ icons = 'VitalyGorbachev',
+ show_hourly_forecast = true,
+ show_daily_forecast = true,
+ }),
...
```
-You can read how it works in more details [here](http://pavelmakhov.com/2017/02/weather-widget-for-awesome-wm)
+## How it works
+
+TBW \ No newline at end of file
diff --git a/weather-widget/icons/VitalyGorbachev/broken-clouds-night.svg b/weather-widget/icons/VitalyGorbachev/broken-clouds-night.svg
new file mode 100644
index 0000000..8b7fc48
--- /dev/null
+++ b/weather-widget/icons/VitalyGorbachev/broken-clouds-night.svg
@@ -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> \ No newline at end of file
diff --git a/weather-widget/icons/VitalyGorbachev/broken-clouds.svg b/weather-widget/icons/VitalyGorbachev/broken-clouds.svg
new file mode 100644
index 0000000..d42ea59
--- /dev/null
+++ b/weather-widget/icons/VitalyGorbachev/broken-clouds.svg
@@ -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> \ No newline at end of file
diff --git a/weather-widget/icons/VitalyGorbachev/clear-sky-night.svg b/weather-widget/icons/VitalyGorbachev/clear-sky-night.svg
new file mode 100644
index 0000000..44f096c
--- /dev/null
+++ b/weather-widget/icons/VitalyGorbachev/clear-sky-night.svg
@@ -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> \ No newline at end of file
diff --git a/weather-widget/icons/VitalyGorbachev/clear-sky.svg b/weather-widget/icons/VitalyGorbachev/clear-sky.svg
new file mode 100644
index 0000000..dc82163
--- /dev/null
+++ b/weather-widget/icons/VitalyGorbachev/clear-sky.svg
@@ -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> \ No newline at end of file
diff --git a/weather-widget/icons/VitalyGorbachev/few-clouds-night.svg b/weather-widget/icons/VitalyGorbachev/few-clouds-night.svg
new file mode 100644
index 0000000..8b7fc48
--- /dev/null
+++ b/weather-widget/icons/VitalyGorbachev/few-clouds-night.svg
@@ -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> \ No newline at end of file
diff --git a/weather-widget/icons/VitalyGorbachev/few-clouds.svg b/weather-widget/icons/VitalyGorbachev/few-clouds.svg
new file mode 100644
index 0000000..d42ea59
--- /dev/null
+++ b/weather-widget/icons/VitalyGorbachev/few-clouds.svg
@@ -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> \ No newline at end of file
diff --git a/weather-widget/icons/VitalyGorbachev/mist-night.svg b/weather-widget/icons/VitalyGorbachev/mist-night.svg
new file mode 100644
index 0000000..960b07d
--- /dev/null
+++ b/weather-widget/icons/VitalyGorbachev/mist-night.svg
@@ -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> \ No newline at end of file
diff --git a/weather-widget/icons/VitalyGorbachev/mist.svg b/weather-widget/icons/VitalyGorbachev/mist.svg
new file mode 100644
index 0000000..770f8d7
--- /dev/null
+++ b/weather-widget/icons/VitalyGorbachev/mist.svg
@@ -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> \ No newline at end of file
diff --git a/weather-widget/icons/VitalyGorbachev/rain-night.svg b/weather-widget/icons/VitalyGorbachev/rain-night.svg
new file mode 100644
index 0000000..11ecf00
--- /dev/null
+++ b/weather-widget/icons/VitalyGorbachev/rain-night.svg
@@ -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> \ No newline at end of file
diff --git a/weather-widget/icons/VitalyGorbachev/rain.svg b/weather-widget/icons/VitalyGorbachev/rain.svg
new file mode 100644
index 0000000..11ecf00
--- /dev/null
+++ b/weather-widget/icons/VitalyGorbachev/rain.svg
@@ -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> \ No newline at end of file
diff --git a/weather-widget/icons/VitalyGorbachev/scattered-clouds-night.svg b/weather-widget/icons/VitalyGorbachev/scattered-clouds-night.svg
new file mode 100644
index 0000000..8b7fc48
--- /dev/null
+++ b/weather-widget/icons/VitalyGorbachev/scattered-clouds-night.svg
@@ -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> \ No newline at end of file
diff --git a/weather-widget/icons/VitalyGorbachev/scattered-clouds.svg b/weather-widget/icons/VitalyGorbachev/scattered-clouds.svg
new file mode 100644
index 0000000..d42ea59
--- /dev/null
+++ b/weather-widget/icons/VitalyGorbachev/scattered-clouds.svg
@@ -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> \ No newline at end of file
diff --git a/weather-widget/icons/VitalyGorbachev/shower-rain-night.svg b/weather-widget/icons/VitalyGorbachev/shower-rain-night.svg
new file mode 100644
index 0000000..4d1897c
--- /dev/null
+++ b/weather-widget/icons/VitalyGorbachev/shower-rain-night.svg
@@ -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> \ No newline at end of file
diff --git a/weather-widget/icons/VitalyGorbachev/shower-rain.svg b/weather-widget/icons/VitalyGorbachev/shower-rain.svg
new file mode 100644
index 0000000..4d1897c
--- /dev/null
+++ b/weather-widget/icons/VitalyGorbachev/shower-rain.svg
@@ -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> \ No newline at end of file
diff --git a/weather-widget/icons/VitalyGorbachev/snow-night.svg b/weather-widget/icons/VitalyGorbachev/snow-night.svg
new file mode 100644
index 0000000..bee891e
--- /dev/null
+++ b/weather-widget/icons/VitalyGorbachev/snow-night.svg
@@ -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> \ No newline at end of file
diff --git a/weather-widget/icons/VitalyGorbachev/snow.svg b/weather-widget/icons/VitalyGorbachev/snow.svg
new file mode 100644
index 0000000..e2ea140
--- /dev/null
+++ b/weather-widget/icons/VitalyGorbachev/snow.svg
@@ -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> \ No newline at end of file
diff --git a/weather-widget/icons/VitalyGorbachev/thunderstorm-night.svg b/weather-widget/icons/VitalyGorbachev/thunderstorm-night.svg
new file mode 100644
index 0000000..1813197
--- /dev/null
+++ b/weather-widget/icons/VitalyGorbachev/thunderstorm-night.svg
@@ -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> \ No newline at end of file
diff --git a/weather-widget/icons/VitalyGorbachev/thunderstorm.svg b/weather-widget/icons/VitalyGorbachev/thunderstorm.svg
new file mode 100644
index 0000000..44a733c
--- /dev/null
+++ b/weather-widget/icons/VitalyGorbachev/thunderstorm.svg
@@ -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> \ No newline at end of file
diff --git a/weather-widget/icons/weather-underground-icons/broken-clouds-night.png b/weather-widget/icons/weather-underground-icons/broken-clouds-night.png
new file mode 100644
index 0000000..061d1cd
--- /dev/null
+++ b/weather-widget/icons/weather-underground-icons/broken-clouds-night.png
Binary files differ
diff --git a/weather-widget/icons/weather-underground-icons/broken-clouds.png b/weather-widget/icons/weather-underground-icons/broken-clouds.png
new file mode 100755
index 0000000..5967d92
--- /dev/null
+++ b/weather-widget/icons/weather-underground-icons/broken-clouds.png
Binary files differ
diff --git a/weather-widget/icons/weather-underground-icons/clear-sky-night.png b/weather-widget/icons/weather-underground-icons/clear-sky-night.png
new file mode 100644
index 0000000..cc40d0f
--- /dev/null
+++ b/weather-widget/icons/weather-underground-icons/clear-sky-night.png
Binary files differ
diff --git a/weather-widget/icons/weather-underground-icons/clear-sky.png b/weather-widget/icons/weather-underground-icons/clear-sky.png
new file mode 100755
index 0000000..acf8e5c
--- /dev/null
+++ b/weather-widget/icons/weather-underground-icons/clear-sky.png
Binary files differ
diff --git a/weather-widget/icons/weather-underground-icons/few-clouds-night.png b/weather-widget/icons/weather-underground-icons/few-clouds-night.png
new file mode 100644
index 0000000..9c34fab
--- /dev/null
+++ b/weather-widget/icons/weather-underground-icons/few-clouds-night.png
Binary files differ
diff --git a/weather-widget/icons/weather-underground-icons/few-clouds.png b/weather-widget/icons/weather-underground-icons/few-clouds.png
new file mode 100755
index 0000000..7580fc5
--- /dev/null
+++ b/weather-widget/icons/weather-underground-icons/few-clouds.png
Binary files differ
diff --git a/weather-widget/icons/weather-underground-icons/mist-night.png b/weather-widget/icons/weather-underground-icons/mist-night.png
new file mode 100755
index 0000000..102142a
--- /dev/null
+++ b/weather-widget/icons/weather-underground-icons/mist-night.png
Binary files differ
diff --git a/weather-widget/icons/weather-underground-icons/mist.png b/weather-widget/icons/weather-underground-icons/mist.png
new file mode 100755
index 0000000..102142a
--- /dev/null
+++ b/weather-widget/icons/weather-underground-icons/mist.png
Binary files differ
diff --git a/weather-widget/icons/weather-underground-icons/rain-night.png b/weather-widget/icons/weather-underground-icons/rain-night.png
new file mode 100755
index 0000000..49f0903
--- /dev/null
+++ b/weather-widget/icons/weather-underground-icons/rain-night.png
Binary files differ
diff --git a/weather-widget/icons/weather-underground-icons/rain.png b/weather-widget/icons/weather-underground-icons/rain.png
new file mode 100755
index 0000000..49f0903
--- /dev/null
+++ b/weather-widget/icons/weather-underground-icons/rain.png
Binary files differ
diff --git a/weather-widget/icons/weather-underground-icons/scattered-clouds-night.png b/weather-widget/icons/weather-underground-icons/scattered-clouds-night.png
new file mode 100755
index 0000000..63cb1b2
--- /dev/null
+++ b/weather-widget/icons/weather-underground-icons/scattered-clouds-night.png
Binary files differ
diff --git a/weather-widget/icons/weather-underground-icons/scattered-clouds.png b/weather-widget/icons/weather-underground-icons/scattered-clouds.png
new file mode 100755
index 0000000..63cb1b2
--- /dev/null
+++ b/weather-widget/icons/weather-underground-icons/scattered-clouds.png
Binary files differ
diff --git a/weather-widget/icons/weather-underground-icons/shower-rain-night.png b/weather-widget/icons/weather-underground-icons/shower-rain-night.png
new file mode 100755
index 0000000..49f0903
--- /dev/null
+++ b/weather-widget/icons/weather-underground-icons/shower-rain-night.png
Binary files differ
diff --git a/weather-widget/icons/weather-underground-icons/shower-rain.png b/weather-widget/icons/weather-underground-icons/shower-rain.png
new file mode 100755
index 0000000..49f0903
--- /dev/null
+++ b/weather-widget/icons/weather-underground-icons/shower-rain.png
Binary files differ
diff --git a/weather-widget/icons/weather-underground-icons/snow-night.png b/weather-widget/icons/weather-underground-icons/snow-night.png
new file mode 100755
index 0000000..0a7f006
--- /dev/null
+++ b/weather-widget/icons/weather-underground-icons/snow-night.png
Binary files differ
diff --git a/weather-widget/icons/weather-underground-icons/snow.png b/weather-widget/icons/weather-underground-icons/snow.png
new file mode 100755
index 0000000..0a7f006
--- /dev/null
+++ b/weather-widget/icons/weather-underground-icons/snow.png
Binary files differ
diff --git a/weather-widget/icons/weather-underground-icons/thunderstorm-night.png b/weather-widget/icons/weather-underground-icons/thunderstorm-night.png
new file mode 100755
index 0000000..2102104
--- /dev/null
+++ b/weather-widget/icons/weather-underground-icons/thunderstorm-night.png
Binary files differ
diff --git a/weather-widget/icons/weather-underground-icons/thunderstorm.png b/weather-widget/icons/weather-underground-icons/thunderstorm.png
new file mode 100755
index 0000000..2102104
--- /dev/null
+++ b/weather-widget/icons/weather-underground-icons/thunderstorm.png
Binary files differ
diff --git a/weather-widget/screenshots/example1.png b/weather-widget/screenshots/example1.png
new file mode 100644
index 0000000..7074faa
--- /dev/null
+++ b/weather-widget/screenshots/example1.png
Binary files differ
diff --git a/weather-widget/screenshots/example2.png b/weather-widget/screenshots/example2.png
new file mode 100644
index 0000000..857274b
--- /dev/null
+++ b/weather-widget/screenshots/example2.png
Binary files differ
diff --git a/weather-widget/screenshots/weather-widget.png b/weather-widget/screenshots/weather-widget.png
new file mode 100644
index 0000000..c7fc37e
--- /dev/null
+++ b/weather-widget/screenshots/weather-widget.png
Binary files differ
diff --git a/weather-widget/weather.json b/weather-widget/weather.json
new file mode 100644
index 0000000..4a18714
--- /dev/null
+++ b/weather-widget/weather.json
@@ -0,0 +1,1224 @@
+{
+ "lat": 33.44,
+ "lon": -94.04,
+ "timezone": "America/Chicago",
+ "timezone_offset": -18000,
+ "current": {
+ "dt": 1594490161,
+ "sunrise": 1594466108,
+ "sunset": 1594517275,
+ "temp": 32.69,
+ "feels_like": 36.81,
+ "pressure": 1017,
+ "humidity": 59,
+ "dew_point": 23.63,
+ "uvi": 7.94,
+ "clouds": 40,
+ "visibility": 16093,
+ "wind_speed": 2.1,
+ "wind_deg": 250,
+ "weather": [
+ {
+ "id": 802,
+ "main": "Clear Sky",
+ "description": "clear sky",
+ "icon": "01d"
+ }
+ ]
+ },
+ "hourly": [
+ {
+ "dt": 1594486800,
+ "temp": 32.69,
+ "feels_like": 36.4,
+ "pressure": 1017,
+ "humidity": 59,
+ "dew_point": 23.63,
+ "clouds": 40,
+ "wind_speed": 2.68,
+ "wind_deg": 242,
+ "weather": [
+ {
+ "id": 802,
+ "main": "Clouds",
+ "description": "scattered clouds",
+ "icon": "03d"
+ }
+ ]
+ },
+ {
+ "dt": 1594490400,
+ "temp": 33.38,
+ "feels_like": 37.27,
+ "pressure": 1017,
+ "humidity": 59,
+ "dew_point": 24.27,
+ "clouds": 21,
+ "wind_speed": 2.97,
+ "wind_deg": 248,
+ "weather": [
+ {
+ "id": 801,
+ "main": "Clouds",
+ "description": "few clouds",
+ "icon": "02d"
+ }
+ ]
+ },
+ {
+ "dt": 1594494000,
+ "temp": 34.44,
+ "feels_like": 38.38,
+ "pressure": 1015,
+ "humidity": 55,
+ "dew_point": 24.09,
+ "clouds": 28,
+ "wind_speed": 2.74,
+ "wind_deg": 254,
+ "weather": [
+ {
+ "id": 802,
+ "main": "Clouds",
+ "description": "scattered clouds",
+ "icon": "03d"
+ }
+ ]
+ },
+ {
+ "dt": 1594497600,
+ "temp": 35.32,
+ "feels_like": 39.58,
+ "pressure": 1014,
+ "humidity": 53,
+ "dew_point": 24.28,
+ "clouds": 18,
+ "wind_speed": 2.45,
+ "wind_deg": 260,
+ "weather": [
+ {
+ "id": 801,
+ "main": "Clouds",
+ "description": "few clouds",
+ "icon": "02d"
+ }
+ ]
+ },
+ {
+ "dt": 1594501200,
+ "temp": 35.57,
+ "feels_like": 39.73,
+ "pressure": 1013,
+ "humidity": 52,
+ "dew_point": 24.19,
+ "clouds": 16,
+ "wind_speed": 2.52,
+ "wind_deg": 259,
+ "weather": [
+ {
+ "id": 801,
+ "main": "Clouds",
+ "description": "few clouds",
+ "icon": "02d"
+ }
+ ]
+ },
+ {
+ "dt": 1594504800,
+ "temp": 35.34,
+ "feels_like": 39.82,
+ "pressure": 1012,
+ "humidity": 55,
+ "dew_point": 25.07,
+ "clouds": 13,
+ "wind_speed": 2.68,
+ "wind_deg": 256,
+ "weather": [
+ {
+ "id": 801,
+ "main": "Clouds",
+ "description": "few clouds",
+ "icon": "02d"
+ }
+ ]
+ },
+ {
+ "dt": 1594508400,
+ "temp": 34.85,
+ "feels_like": 40.34,
+ "pressure": 1012,
+ "humidity": 61,
+ "dew_point": 26.36,
+ "clouds": 10,
+ "wind_speed": 2.42,
+ "wind_deg": 249,
+ "weather": [
+ {
+ "id": 800,
+ "main": "Clear",
+ "description": "clear sky",
+ "icon": "01d"
+ }
+ ]
+ },
+ {
+ "dt": 1594512000,
+ "temp": 33.39,
+ "feels_like": 39.08,
+ "pressure": 1012,
+ "humidity": 67,
+ "dew_point": 26.53,
+ "clouds": 9,
+ "wind_speed": 2.34,
+ "wind_deg": 246,
+ "weather": [
+ {
+ "id": 800,
+ "main": "Clear",
+ "description": "clear sky",
+ "icon": "01d"
+ }
+ ]
+ },
+ {
+ "dt": 1594515600,
+ "temp": 30.82,
+ "feels_like": 35.85,
+ "pressure": 1012,
+ "humidity": 73,
+ "dew_point": 25.61,
+ "clouds": 0,
+ "wind_speed": 2.35,
+ "wind_deg": 240,
+ "weather": [
+ {
+ "id": 800,
+ "main": "Clear",
+ "description": "clear sky",
+ "icon": "01d"
+ }
+ ]
+ },
+ {
+ "dt": 1594519200,
+ "temp": 29.56,
+ "feels_like": 33.64,
+ "pressure": 1012,
+ "humidity": 73,
+ "dew_point": 24.34,
+ "clouds": 0,
+ "wind_speed": 2.65,
+ "wind_deg": 227,
+ "weather": [
+ {
+ "id": 800,
+ "main": "Clear",
+ "description": "clear sky",
+ "icon": "01n"
+ }
+ ]
+ },
+ {
+ "dt": 1594522800,
+ "temp": 28.72,
+ "feels_like": 32.55,
+ "pressure": 1012,
+ "humidity": 75,
+ "dew_point": 23.97,
+ "clouds": 0,
+ "wind_speed": 2.7,
+ "wind_deg": 223,
+ "weather": [
+ {
+ "id": 800,
+ "main": "Clear",
+ "description": "clear sky",
+ "icon": "01n"
+ }
+ ]
+ },
+ {
+ "dt": 1594526400,
+ "temp": 27.79,
+ "feels_like": 31.42,
+ "pressure": 1012,
+ "humidity": 77,
+ "dew_point": 23.56,
+ "clouds": 0,
+ "wind_speed": 2.61,
+ "wind_deg": 211,
+ "weather": [
+ {
+ "id": 800,
+ "main": "Clear",
+ "description": "clear sky",
+ "icon": "01n"
+ }
+ ]
+ },
+ {
+ "dt": 1594530000,
+ "temp": 27.27,
+ "feels_like": 30.91,
+ "pressure": 1012,
+ "humidity": 79,
+ "dew_point": 23.39,
+ "clouds": 0,
+ "wind_speed": 2.54,
+ "wind_deg": 226,
+ "weather": [
+ {
+ "id": 800,
+ "main": "Clear",
+ "description": "clear sky",
+ "icon": "01n"
+ }
+ ]
+ },
+ {
+ "dt": 1594533600,
+ "temp": 27.17,
+ "feels_like": 30.72,
+ "pressure": 1012,
+ "humidity": 79,
+ "dew_point": 23.23,
+ "clouds": 0,
+ "wind_speed": 2.58,
+ "wind_deg": 213,
+ "weather": [
+ {
+ "id": 800,
+ "main": "Clear",
+ "description": "clear sky",
+ "icon": "01n"
+ }
+ ]
+ },
+ {
+ "dt": 1594537200,
+ "temp": 26.91,
+ "feels_like": 30.06,
+ "pressure": 1012,
+ "humidity": 78,
+ "dew_point": 22.95,
+ "clouds": 0,
+ "wind_speed": 2.79,
+ "wind_deg": 225,
+ "weather": [
+ {
+ "id": 800,
+ "main": "Clear",
+ "description": "clear sky",
+ "icon": "01n"
+ }
+ ]
+ },
+ {
+ "dt": 1594540800,
+ "temp": 26.57,
+ "feels_like": 29.76,
+ "pressure": 1011,
+ "humidity": 79,
+ "dew_point": 22.68,
+ "clouds": 33,
+ "wind_speed": 2.63,
+ "wind_deg": 217,
+ "weather": [
+ {
+ "id": 802,
+ "main": "Clouds",
+ "description": "scattered clouds",
+ "icon": "03n"
+ }
+ ]
+ },
+ {
+ "dt": 1594544400,
+ "temp": 26.39,
+ "feels_like": 28.98,
+ "pressure": 1011,
+ "humidity": 78,
+ "dew_point": 22.36,
+ "clouds": 56,
+ "wind_speed": 3.19,
+ "wind_deg": 191,
+ "weather": [
+ {
+ "id": 803,
+ "main": "Clouds",
+ "description": "broken clouds",
+ "icon": "04n"
+ }
+ ]
+ },
+ {
+ "dt": 1594548000,
+ "temp": 25.97,
+ "feels_like": 29.15,
+ "pressure": 1011,
+ "humidity": 79,
+ "dew_point": 22.12,
+ "clouds": 67,
+ "wind_speed": 2.2,
+ "wind_deg": 211,
+ "weather": [
+ {
+ "id": 803,
+ "main": "Clouds",
+ "description": "broken clouds",
+ "icon": "04n"
+ }
+ ]
+ },
+ {
+ "dt": 1594551600,
+ "temp": 25.6,
+ "feels_like": 28.65,
+ "pressure": 1012,
+ "humidity": 79,
+ "dew_point": 21.77,
+ "clouds": 72,
+ "wind_speed": 2.12,
+ "wind_deg": 257,
+ "weather": [
+ {
+ "id": 803,
+ "main": "Clouds",
+ "description": "broken clouds",
+ "icon": "04n"
+ }
+ ]
+ },
+ {
+ "dt": 1594555200,
+ "temp": 25.25,
+ "feels_like": 29.31,
+ "pressure": 1012,
+ "humidity": 84,
+ "dew_point": 22.42,
+ "clouds": 74,
+ "wind_speed": 1.18,
+ "wind_deg": 276,
+ "weather": [
+ {
+ "id": 500,
+ "main": "Rain",
+ "description": "light rain",
+ "icon": "10d"
+ }
+ ],
+ "rain": {
+ "1h": 0.66
+ }
+ },
+ {
+ "dt": 1594558800,
+ "temp": 26.51,
+ "feels_like": 31.02,
+ "pressure": 1013,
+ "humidity": 82,
+ "dew_point": 23.22,
+ "clouds": 91,
+ "wind_speed": 1.19,
+ "wind_deg": 227,
+ "weather": [
+ {
+ "id": 500,
+ "main": "Rain",
+ "description": "light rain",
+ "icon": "10d"
+ }
+ ],
+ "rain": {
+ "1h": 0.5
+ }
+ },
+ {
+ "dt": 1594562400,
+ "temp": 27.99,
+ "feels_like": 31.34,
+ "pressure": 1012,
+ "humidity": 75,
+ "dew_point": 23.26,
+ "clouds": 87,
+ "wind_speed": 2.82,
+ "wind_deg": 223,
+ "weather": [
+ {
+ "id": 804,
+ "main": "Clouds",
+ "description": "overcast clouds",
+ "icon": "04d"
+ }
+ ]
+ },
+ {
+ "dt": 1594566000,
+ "temp": 29.6,
+ "feels_like": 32.28,
+ "pressure": 1012,
+ "humidity": 67,
+ "dew_point": 23.02,
+ "clouds": 63,
+ "wind_speed": 3.51,
+ "wind_deg": 236,
+ "weather": [
+ {
+ "id": 803,
+ "main": "Clouds",
+ "description": "broken clouds",
+ "icon": "04d"
+ }
+ ]
+ },
+ {
+ "dt": 1594569600,
+ "temp": 31.12,
+ "feels_like": 33.49,
+ "pressure": 1011,
+ "humidity": 62,
+ "dew_point": 23.22,
+ "clouds": 52,
+ "wind_speed": 4.08,
+ "wind_deg": 239,
+ "weather": [
+ {
+ "id": 803,
+ "main": "Clouds",
+ "description": "broken clouds",
+ "icon": "04d"
+ }
+ ]
+ },
+ {
+ "dt": 1594573200,
+ "temp": 32.66,
+ "feels_like": 35.05,
+ "pressure": 1011,
+ "humidity": 58,
+ "dew_point": 23.6,
+ "clouds": 46,
+ "wind_speed": 4.31,
+ "wind_deg": 238,
+ "weather": [
+ {
+ "id": 802,
+ "main": "Clouds",
+ "description": "scattered clouds",
+ "icon": "03d"
+ }
+ ]
+ },
+ {
+ "dt": 1594576800,
+ "temp": 34.15,
+ "feels_like": 36.59,
+ "pressure": 1011,
+ "humidity": 54,
+ "dew_point": 23.74,
+ "clouds": 40,
+ "wind_speed": 4.4,
+ "wind_deg": 236,
+ "weather": [
+ {
+ "id": 802,
+ "main": "Clouds",
+ "description": "scattered clouds",
+ "icon": "03d"
+ }
+ ]
+ },
+ {
+ "dt": 1594580400,
+ "temp": 35.24,
+ "feels_like": 37.8,
+ "pressure": 1010,
+ "humidity": 51,
+ "dew_point": 23.83,
+ "clouds": 0,
+ "wind_speed": 4.27,
+ "wind_deg": 246,
+ "weather": [
+ {
+ "id": 800,
+ "main": "Clear",
+ "description": "clear sky",
+ "icon": "01d"
+ }
+ ]
+ },
+ {
+ "dt": 1594584000,
+ "temp": 35.73,
+ "feels_like": 38.39,
+ "pressure": 1009,
+ "humidity": 50,
+ "dew_point": 23.92,
+ "clouds": 0,
+ "wind_speed": 4.23,
+ "wind_deg": 262,
+ "weather": [
+ {
+ "id": 800,
+ "main": "Clear",
+ "description": "clear sky",
+ "icon": "01d"
+ }
+ ]
+ },
+ {
+ "dt": 1594587600,
+ "temp": 35.89,
+ "feels_like": 38.87,
+ "pressure": 1008,
+ "humidity": 51,
+ "dew_point": 24.29,
+ "clouds": 0,
+ "wind_speed": 4.17,
+ "wind_deg": 267,
+ "weather": [
+ {
+ "id": 800,
+ "main": "Clear",
+ "description": "clear sky",
+ "icon": "01d"
+ }
+ ]
+ },
+ {
+ "dt": 1594591200,
+ "temp": 35.63,
+ "feels_like": 39.46,
+ "pressure": 1008,
+ "humidity": 55,
+ "dew_point": 25.31,
+ "clouds": 0,
+ "wind_speed": 3.85,
+ "wind_deg": 266,
+ "weather": [
+ {
+ "id": 800,
+ "main": "Clear",
+ "description": "clear sky",
+ "icon": "01d"
+ }
+ ]
+ },
+ {
+ "dt": 1594594800,
+ "temp": 35,
+ "feels_like": 39.97,
+ "pressure": 1007,
+ "humidity": 61,
+ "dew_point": 26.37,
+ "clouds": 0,
+ "wind_speed": 3.3,
+ "wind_deg": 262,
+ "weather": [
+ {
+ "id": 800,
+ "main": "Clear",
+ "description": "clear sky",
+ "icon": "01d"
+ }
+ ]
+ },
+ {
+ "dt": 1594598400,
+ "temp": 33.25,
+ "feels_like": 38.23,
+ "pressure": 1007,
+ "humidity": 66,
+ "dew_point": 26.08,
+ "clouds": 0,
+ "wind_speed": 2.98,
+ "wind_deg": 259,
+ "weather": [
+ {
+ "id": 800,
+ "main": "Clear",
+ "description": "clear sky",
+ "icon": "01d"
+ }
+ ]
+ },
+ {
+ "dt": 1594602000,
+ "temp": 30.86,
+ "feels_like": 35.71,
+ "pressure": 1008,
+ "humidity": 72,
+ "dew_point": 25.37,
+ "clouds": 0,
+ "wind_speed": 2.44,
+ "wind_deg": 254,
+ "weather": [
+ {
+ "id": 800,
+ "main": "Clear",
+ "description": "clear sky",
+ "icon": "01d"
+ }
+ ]
+ },
+ {
+ "dt": 1594605600,
+ "temp": 29.71,
+ "feels_like": 34.14,
+ "pressure": 1008,
+ "humidity": 72,
+ "dew_point": 24.24,
+ "clouds": 0,
+ "wind_speed": 2.07,
+ "wind_deg": 246,
+ "weather": [
+ {
+ "id": 800,
+ "main": "Clear",
+ "description": "clear sky",
+ "icon": "01n"
+ }
+ ]
+ },
+ {
+ "dt": 1594609200,
+ "temp": 29.09,
+ "feels_like": 33.6,
+ "pressure": 1009,
+ "humidity": 73,
+ "dew_point": 23.92,
+ "clouds": 0,
+ "wind_speed": 1.65,
+ "wind_deg": 239,
+ "weather": [
+ {
+ "id": 800,
+ "main": "Clear",
+ "description": "clear sky",
+ "icon": "01n"
+ }
+ ]
+ },
+ {
+ "dt": 1594612800,
+ "temp": 28.41,
+ "feels_like": 33.33,
+ "pressure": 1009,
+ "humidity": 75,
+ "dew_point": 23.77,
+ "clouds": 0,
+ "wind_speed": 0.9,
+ "wind_deg": 301,
+ "weather": [
+ {
+ "id": 800,
+ "main": "Clear",
+ "description": "clear sky",
+ "icon": "01n"
+ }
+ ]
+ },
+ {
+ "dt": 1594616400,
+ "temp": 27.65,
+ "feels_like": 31.94,
+ "pressure": 1010,
+ "humidity": 79,
+ "dew_point": 23.7,
+ "clouds": 0,
+ "wind_speed": 1.9,
+ "wind_deg": 342,
+ "weather": [
+ {
+ "id": 800,
+ "main": "Clear",
+ "description": "clear sky",
+ "icon": "01n"
+ }
+ ]
+ },
+ {
+ "dt": 1594620000,
+ "temp": 26.81,
+ "feels_like": 30.18,
+ "pressure": 1010,
+ "humidity": 78,
+ "dew_point": 22.81,
+ "clouds": 0,
+ "wind_speed": 2.39,
+ "wind_deg": 13,
+ "weather": [
+ {
+ "id": 800,
+ "main": "Clear",
+ "description": "clear sky",
+ "icon": "01n"
+ }
+ ]
+ },
+ {
+ "dt": 1594623600,
+ "temp": 25.86,
+ "feels_like": 28.37,
+ "pressure": 1010,
+ "humidity": 75,
+ "dew_point": 21.3,
+ "clouds": 0,
+ "wind_speed": 2.45,
+ "wind_deg": 41,
+ "weather": [
+ {
+ "id": 800,
+ "main": "Clear",
+ "description": "clear sky",
+ "icon": "01n"
+ }
+ ]
+ },
+ {
+ "dt": 1594627200,
+ "temp": 24.94,
+ "feels_like": 26.96,
+ "pressure": 1010,
+ "humidity": 75,
+ "dew_point": 20.36,
+ "clouds": 0,
+ "wind_speed": 2.53,
+ "wind_deg": 49,
+ "weather": [
+ {
+ "id": 800,
+ "main": "Clear",
+ "description": "clear sky",
+ "icon": "01n"
+ }
+ ]
+ },
+ {
+ "dt": 1594630800,
+ "temp": 23.94,
+ "feels_like": 25.44,
+ "pressure": 1010,
+ "humidity": 78,
+ "dew_point": 19.9,
+ "clouds": 2,
+ "wind_speed": 3.05,
+ "wind_deg": 56,
+ "weather": [
+ {
+ "id": 800,
+ "main": "Clear",
+ "description": "clear sky",
+ "icon": "01n"
+ }
+ ]
+ },
+ {
+ "dt": 1594634400,
+ "temp": 23.22,
+ "feels_like": 25.05,
+ "pressure": 1011,
+ "humidity": 81,
+ "dew_point": 19.94,
+ "clouds": 14,
+ "wind_speed": 2.51,
+ "wind_deg": 65,
+ "weather": [
+ {
+ "id": 801,
+ "main": "Clouds",
+ "description": "few clouds",
+ "icon": "02n"
+ }
+ ]
+ },
+ {
+ "dt": 1594638000,
+ "temp": 22.87,
+ "feels_like": 24.56,
+ "pressure": 1011,
+ "humidity": 81,
+ "dew_point": 19.61,
+ "clouds": 17,
+ "wind_speed": 2.48,
+ "wind_deg": 74,
+ "weather": [
+ {
+ "id": 801,
+ "main": "Clouds",
+ "description": "few clouds",
+ "icon": "02n"
+ }
+ ]
+ },
+ {
+ "dt": 1594641600,
+ "temp": 22.82,
+ "feels_like": 24.7,
+ "pressure": 1012,
+ "humidity": 83,
+ "dew_point": 19.8,
+ "clouds": 29,
+ "wind_speed": 2.44,
+ "wind_deg": 63,
+ "weather": [
+ {
+ "id": 802,
+ "main": "Clouds",
+ "description": "scattered clouds",
+ "icon": "03d"
+ }
+ ]
+ },
+ {
+ "dt": 1594645200,
+ "temp": 23.84,
+ "feels_like": 25.88,
+ "pressure": 1013,
+ "humidity": 80,
+ "dew_point": 20.21,
+ "clouds": 100,
+ "wind_speed": 2.48,
+ "wind_deg": 62,
+ "weather": [
+ {
+ "id": 804,
+ "main": "Clouds",
+ "description": "overcast clouds",
+ "icon": "04d"
+ }
+ ]
+ },
+ {
+ "dt": 1594648800,
+ "temp": 25,
+ "feels_like": 27,
+ "pressure": 1013,
+ "humidity": 75,
+ "dew_point": 20.37,
+ "clouds": 100,
+ "wind_speed": 2.59,
+ "wind_deg": 67,
+ "weather": [
+ {
+ "id": 804,
+ "main": "Clouds",
+ "description": "overcast clouds",
+ "icon": "04d"
+ }
+ ]
+ },
+ {
+ "dt": 1594652400,
+ "temp": 26.18,
+ "feels_like": 27.69,
+ "pressure": 1012,
+ "humidity": 73,
+ "dew_point": 21.06,
+ "clouds": 100,
+ "wind_speed": 3.79,
+ "wind_deg": 101,
+ "weather": [
+ {
+ "id": 804,
+ "main": "Clouds",
+ "description": "overcast clouds",
+ "icon": "04d"
+ }
+ ]
+ },
+ {
+ "dt": 1594656000,
+ "temp": 28.36,
+ "feels_like": 30.56,
+ "pressure": 1012,
+ "humidity": 69,
+ "dew_point": 22.32,
+ "clouds": 83,
+ "wind_speed": 3.66,
+ "wind_deg": 128,
+ "weather": [
+ {
+ "id": 803,
+ "main": "Clouds",
+ "description": "broken clouds",
+ "icon": "04d"
+ }
+ ]
+ }
+ ],
+ "daily": [
+ {
+ "dt": 1594490400,
+ "sunrise": 1594466108,
+ "sunset": 1594517275,
+ "temp": {
+ "day": 33.38,
+ "min": 27.17,
+ "max": 34.96,
+ "night": 27.17,
+ "eve": 33.35,
+ "morn": 32.69
+ },
+ "feels_like": {
+ "day": 37.27,
+ "night": 30.72,
+ "eve": 39.01,
+ "morn": 36.67
+ },
+ "pressure": 1017,
+ "humidity": 59,
+ "dew_point": 24.27,
+ "wind_speed": 2.97,
+ "wind_deg": 248,
+ "weather": [
+ {
+ "id": 801,
+ "main": "Clouds",
+ "description": "few clouds",
+ "icon": "02d"
+ }
+ ],
+ "clouds": 21,
+ "uvi": 11.94
+ },
+ {
+ "dt": 1594576800,
+ "sunrise": 1594552543,
+ "sunset": 1594603655,
+ "temp": {
+ "day": 34.15,
+ "min": 25.25,
+ "max": 35.89,
+ "night": 26.81,
+ "eve": 33.25,
+ "morn": 25.25
+ },
+ "feels_like": {
+ "day": 36.59,
+ "night": 30.18,
+ "eve": 38.23,
+ "morn": 29.31
+ },
+ "pressure": 1011,
+ "humidity": 54,
+ "dew_point": 23.74,
+ "wind_speed": 4.4,
+ "wind_deg": 236,
+ "weather": [
+ {
+ "id": 500,
+ "main": "Rain",
+ "description": "light rain",
+ "icon": "10d"
+ }
+ ],
+ "clouds": 40,
+ "rain": 1.16,
+ "uvi": 11.61
+ },
+ {
+ "dt": 1594663200,
+ "sunrise": 1594638978,
+ "sunset": 1594690034,
+ "temp": {
+ "day": 29.22,
+ "min": 22.82,
+ "max": 29.22,
+ "night": 26.71,
+ "eve": 28.98,
+ "morn": 22.82
+ },
+ "feels_like": {
+ "day": 34.31,
+ "night": 28.82,
+ "eve": 34.45,
+ "morn": 24.7
+ },
+ "pressure": 1012,
+ "humidity": 72,
+ "dew_point": 23.66,
+ "wind_speed": 0.74,
+ "wind_deg": 287,
+ "weather": [
+ {
+ "id": 804,
+ "main": "Clouds",
+ "description": "overcast clouds",
+ "icon": "04d"
+ }
+ ],
+ "clouds": 85,
+ "uvi": 12.72
+ },
+ {
+ "dt": 1594749600,
+ "sunrise": 1594725414,
+ "sunset": 1594776411,
+ "temp": {
+ "day": 33.67,
+ "min": 24.06,
+ "max": 35.68,
+ "night": 25.94,
+ "eve": 32.24,
+ "morn": 24.06
+ },
+ "feels_like": {
+ "day": 35.84,
+ "night": 27.78,
+ "eve": 35.66,
+ "morn": 27.28
+ },
+ "pressure": 1012,
+ "humidity": 50,
+ "dew_point": 21.95,
+ "wind_speed": 3.45,
+ "wind_deg": 183,
+ "weather": [
+ {
+ "id": 800,
+ "main": "Clear",
+ "description": "clear sky",
+ "icon": "01d"
+ }
+ ],
+ "clouds": 9,
+ "uvi": 11.67
+ },
+ {
+ "dt": 1594836000,
+ "sunrise": 1594811851,
+ "sunset": 1594862786,
+ "temp": {
+ "day": 32.79,
+ "min": 24.61,
+ "max": 35.24,
+ "night": 26.42,
+ "eve": 31.72,
+ "morn": 24.61
+ },
+ "feels_like": {
+ "day": 34.67,
+ "night": 28.57,
+ "eve": 35.11,
+ "morn": 27.47
+ },
+ "pressure": 1014,
+ "humidity": 53,
+ "dew_point": 22.04,
+ "wind_speed": 3.97,
+ "wind_deg": 208,
+ "weather": [
+ {
+ "id": 802,
+ "main": "Clouds",
+ "description": "scattered clouds",
+ "icon": "03d"
+ }
+ ],
+ "clouds": 35,
+ "uvi": 11.55
+ },
+ {
+ "dt": 1594922400,
+ "sunrise": 1594898288,
+ "sunset": 1594949160,
+ "temp": {
+ "day": 33.89,
+ "min": 24.07,
+ "max": 35.5,
+ "night": 26.61,
+ "eve": 32.58,
+ "morn": 24.07
+ },
+ "feels_like": {
+ "day": 35.74,
+ "night": 29.39,
+ "eve": 36.52,
+ "morn": 27.33
+ },
+ "pressure": 1015,
+ "humidity": 49,
+ "dew_point": 22.01,
+ "wind_speed": 3.81,
+ "wind_deg": 225,
+ "weather": [
+ {
+ "id": 802,
+ "main": "Clouds",
+ "description": "scattered clouds",
+ "icon": "03d"
+ }
+ ],
+ "clouds": 29,
+ "uvi": 11.67
+ },
+ {
+ "dt": 1595008800,
+ "sunrise": 1594984726,
+ "sunset": 1595035532,
+ "temp": {
+ "day": 34.95,
+ "min": 24.45,
+ "max": 36.42,
+ "night": 26.97,
+ "eve": 33.81,
+ "morn": 24.45
+ },
+ "feels_like": {
+ "day": 38.11,
+ "night": 29.69,
+ "eve": 38.22,
+ "morn": 26.84
+ },
+ "pressure": 1016,
+ "humidity": 50,
+ "dew_point": 23.17,
+ "wind_speed": 2.94,
+ "wind_deg": 230,
+ "weather": [
+ {
+ "id": 802,
+ "main": "Clouds",
+ "description": "scattered clouds",
+ "icon": "03d"
+ }
+ ],
+ "clouds": 46,
+ "uvi": 11.86
+ },
+ {
+ "dt": 1595095200,
+ "sunrise": 1595071164,
+ "sunset": 1595121903,
+ "temp": {
+ "day": 35.47,
+ "min": 24.4,
+ "max": 37.04,
+ "night": 28.18,
+ "eve": 34.23,
+ "morn": 24.4
+ },
+ "feels_like": {
+ "day": 38.15,
+ "night": 30.61,
+ "eve": 38.67,
+ "morn": 26.95
+ },
+ "pressure": 1015,
+ "humidity": 46,
+ "dew_point": 22.36,
+ "wind_speed": 2.93,
+ "wind_deg": 238,
+ "weather": [
+ {
+ "id": 800,
+ "main": "Clear",
+ "description": "clear sky",
+ "icon": "01d"
+ }
+ ],
+ "clouds": 2,
+ "uvi": 11.67
+ }
+ ]
+} \ No newline at end of file
diff --git a/weather-widget/weather.lua b/weather-widget/weather.lua
index 5aaf426..4fcdba7 100644
--- a/weather-widget/weather.lua
+++ b/weather-widget/weather.lua
@@ -3,225 +3,456 @@
-- https://openweathermap.org/
--
-- @author Pavel Makhov
--- @copyright 2018 Pavel Makhov
+-- @copyright 2020 Pavel Makhov
-------------------------------------------------
-
-local socket = require("socket")
-local http = require("socket.http")
-local ltn12 = require("ltn12")
+local awful = require("awful")
+local watch = require("awful.widget.watch")
local json = require("json")
local naughty = require("naughty")
local wibox = require("wibox")
local gears = require("gears")
+local beautiful = require("beautiful")
-local path_to_icons = "/usr/share/icons/Arc/status/symbolic/"
+local HOME_DIR = os.getenv("HOME")
+local WIDGET_DIR = HOME_DIR .. '/.config/awesome/awesome-wm-widgets/weather-widget'
+local GET_FORECAST_CMD = [[bash -c "curl -s --show-error -X GET '%s'"]]
+
+local function show_warning(message)
+ naughty.notify {
+ preset = naughty.config.presets.critical,
+ title = 'Weather Widget',
+ text = message
+ }
+end
local weather_widget = {}
+local warning_shown = false
+local notification
+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 = 400,
+ offset = {y = 5},
+ 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 = {
+ "N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSW", "SW",
+ "WSW", "W", "WNW", "NW", "NNW", "N"
+ }
+ 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(args)
local args = args or {}
- local font = args.font or 'Play 9'
- local city = args.city or 'Montreal,ca'
- local api_key = args.api_key or naughty.notify{preset = naughty.config.presets.critical, text = 'OpenweatherMap API key is not set'}
+ --- Validate required parameters
+ if args.coordinates == nil or args.api_key == nil then
+ show_warning('Required parameters are not set: ' ..
+ (args.coordinates == nil and '<b>coordinates</b>' or '') ..
+ (args.api_key == nil and ', <b>api_key</b> ' or ''))
+ 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 both_units_popup = args.both_units_popup or false
- local position = args.notification_position or "top_right"
+ 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 weather_api_url = (
- 'https://api.openweathermap.org/data/2.5/weather'
- .. '?q=' .. city
- .. '&appid=' .. api_key
- .. '&units=' .. units
- )
+ 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 ''))
- local icon_widget = wibox.widget {
+ weather_widget = wibox.widget {
+ {
+ {
+ id = 'icon',
+ resize = true,
+ widget = wibox.widget.imagebox
+ },
+ valign = 'center',
+ widget = wibox.container.place,
+ },
{
- id = "icon",
- resize = false,
- widget = wibox.widget.imagebox,
+ id = 'txt',
+ widget = wibox.widget.textbox
},
- layout = wibox.container.margin(_, 0, 0, 3),
+ layout = wibox.layout.fixed.horizontal,
set_image = function(self, path)
- self.icon.image = 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 temp_widget = wibox.widget {
- font = font,
- widget = wibox.widget.textbox,
+ 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 .. ' 48',
+ 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(WIDGET_DIR .. '/icons/' .. icon_pack_name .. '/' .. icon_map[weather.weather[1].icon] .. icons_extension)
+ self:get_children_by_id('temp')[1]:set_text(gen_temperature_str(weather.temp, '%.0f', false, units))
+ self:get_children_by_id('feels_like_temp')[1]:set_text('Feels like ' .. gen_temperature_str(weather.feels_like, '%.0f', false, units))
+ self:get_children_by_id('description')[1]:set_text(weather.weather[1].description)
+ self:get_children_by_id('wind')[1]:set_markup('Wind: <b>' .. weather.wind_speed .. 'm/s (' .. to_direction(weather.wind_deg) .. ')</b>')
+ self:get_children_by_id('humidity')[1]:set_markup('Humidity: <b>' .. weather.humidity .. '%</b>')
+ self:get_children_by_id('uv')[1]:set_markup('UV: ' .. uvi_index_color(weather.uvi))
+ end
}
- weather_widget = wibox.widget {
- icon_widget,
- temp_widget,
- layout = wibox.layout.fixed.horizontal,
- }
- --- Maps openWeatherMap icons to Arc icons
- local icon_map = {
- ["01d"] = "weather-clear-symbolic.svg",
- ["02d"] = "weather-few-clouds-symbolic.svg",
- ["03d"] = "weather-clouds-symbolic.svg",
- ["04d"] = "weather-overcast-symbolic.svg",
- ["09d"] = "weather-showers-scattered-symbolic.svg",
- ["10d"] = "weather-showers-symbolic.svg",
- ["11d"] = "weather-storm-symbolic.svg",
- ["13d"] = "weather-snow-symbolic.svg",
- ["50d"] = "weather-fog-symbolic.svg",
- ["01n"] = "weather-clear-night-symbolic.svg",
- ["02n"] = "weather-few-clouds-night-symbolic.svg",
- ["03n"] = "weather-clouds-night-symbolic.svg",
- ["04n"] = "weather-overcast-symbolic.svg",
- ["09n"] = "weather-showers-scattered-symbolic.svg",
- ["10n"] = "weather-showers-symbolic.svg",
- ["11n"] = "weather-storm-symbolic.svg",
- ["13n"] = "weather-snow-symbolic.svg",
- ["50n"] = "weather-fog-symbolic.svg"
+ 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 = WIDGET_DIR .. '/icons/' .. icon_pack_name .. '/' .. 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
}
- --- 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"
+ 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 directions = {
- "N",
- "NNE",
- "NE",
- "ENE",
- "E",
- "ESE",
- "SE",
- "SSE",
- "S",
- "SSW",
- "SW",
- "WSW",
- "W",
- "WNW",
- "NW",
- "NNW",
- "N",
- }
- 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
+ local hourly_forecast_widget = {
+ layout = wibox.layout.fixed.vertical,
+ update = function(self, hourly)
+ local hours_below = {
+ id = 'hours',
+ layout = wibox.layout.flex.horizontal
+ }
+ local temp_below = {
+ id = 'temp',
+ forced_width = 300,
+ layout = wibox.layout.flex.horizontal
+ }
- -- Convert degrees Fahrenheit to Celsius
- local function fahrenheit_to_celsius(f)
- return (f-32)*5/9
- end
-
- local weather_timer = gears.timer({ timeout = 60 })
- local resp
+ 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="#2E3440">' .. string.format('%.0f', hour.temp) .. '°' .. '</span>',
+ align = 'center',
+ font = font_name .. ' 9',
+ widget = wibox.widget.textbox
+ })
+ end
+ end
+ hourly_forecast_graph:set_max_value(max_temp)
+ hourly_forecast_graph:set_min_value(min_temp * 0.7) -- move graph a bit up
+ for i, value in ipairs(values) do
+ hourly_forecast_graph:add_value(value)
+ end
- local function gen_temperature_str(temp, fmt_str, show_other_units)
- local temp_str = string.format(fmt_str, temp)
- local s = temp_str .. '°' .. (units == 'metric' and 'C' or 'F')
+ local count = #self
+ for i = 0, count do self[i]=nil end
- 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 .. ')'
+ table.insert(self, temp_below)
+ 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)
end
- return s
- end
+ }
- local function error_display(resp_json)
- weather_timer.timeout = math.min(15 * 60, weather_timer.timeout * 2)
- weather_timer:again()
- local err_resp = json.decode(resp_json)
- naughty.notify{
- title = 'Weather Widget Error',
- text = err_resp.message,
- preset = naughty.config.presets.critical,
- }
- end
+ local function update_widget(widget, stdout, stderr)
+ if stderr ~= '' then
+ if not warning_shown then
+ show_warning(stderr)
+ warning_shown = true
+ widget:is_ok(false)
+ tooltip:add_to_object(widget)
- weather_timer:connect_signal("timeout", function ()
- local resp_json = {}
- local res, status = http.request{
- url=weather_api_url,
- sink=ltn12.sink.table(resp_json),
- -- ref:
- -- http://w3.impa.br/~diego/software/luasocket/old/luasocket-2.0/http.html
- create=function()
- -- ref: https://stackoverflow.com/a/6021774/595220
- local req_sock = socket.tcp()
- -- 't' — overall timeout
- req_sock:settimeout(0.2, 't')
- -- 'b' — block timeout
- req_sock:settimeout(0.001, 'b')
- return req_sock
+ 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(WIDGET_DIR .. '/icons/' .. icon_pack_name .. '/' .. 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 (resp_json ~= nil) then
- resp_json = table.concat(resp_json)
+
+ if show_hourly_forecast then
+ hourly_forecast_widget:update(result.hourly)
+ table.insert(final_widget, hourly_forecast_widget)
end
- if (status ~= 200 and resp_json ~= nil and resp_json ~= '') then
- if (not pcall(error_display, resp_json)) then
- naughty.notify{
- title = 'Weather Widget Error',
- text = 'Cannot parse answer',
- preset = naughty.config.presets.critical,
- }
- end
- elseif (resp_json ~= nil and resp_json ~= '') then
- resp = json.decode(resp_json)
- icon_widget.image = path_to_icons .. icon_map[resp.weather[1].icon]
- temp_widget:set_text(gen_temperature_str(resp.main.temp, '%.0f', both_units_widget))
- weather_timer.timeout = 60
- weather_timer:again()
+ if show_daily_forecast then
+ daily_forecast_widget:update(result.daily, result.timezone_offset)
+ table.insert(final_widget, daily_forecast_widget)
end
- end)
- weather_timer:start()
- weather_timer:emit_signal("timeout")
-
- --- Notification with weather information. Popups when mouse hovers over the icon
- local notification
- weather_widget:connect_signal("mouse::enter", function()
- notification = naughty.notify{
- icon = path_to_icons .. icon_map[resp.weather[1].icon],
- icon_size=20,
- text =
- '<big>' .. resp.weather[1].main .. ' (' .. resp.weather[1].description .. ')</big><br>' ..
- '<b>Humidity:</b> ' .. resp.main.humidity .. '%<br>' ..
- '<b>Temperature:</b> ' .. gen_temperature_str(resp.main.temp, '%.1f',
- both_units_popup) .. '<br>' ..
- '<b>Pressure:</b> ' .. resp.main.pressure .. 'hPa<br>' ..
- '<b>Clouds:</b> ' .. resp.clouds.all .. '%<br>' ..
- '<b>Wind:</b> ' .. resp.wind.speed .. 'm/s (' .. to_direction(resp.wind.deg) .. ')',
- timeout = 5, hover_timeout = 10,
- position = position,
- screen = mouse.screen,
- width = (both_units_popup == true and 210 or 200)
- }
- end)
- weather_widget:connect_signal("mouse::leave", function()
- naughty.destroy(notification)
- end)
+ weather_popup:setup({
+ {
+ final_widget,
+ margins = 10,
+ widget = wibox.container.margin
+ },
+ bg = beautiful.bg_normal,
+ widget = wibox.container.background
+ })
+ end
+
+ weather_widget:buttons(awful.util.table.join(awful.button({}, 1, function()
+ if weather_popup.visible then
+ weather_popup.visible = not weather_popup.visible
+ else
+ weather_popup:move_next_to(mouse.current_widget_geometry)
+ end
+ end)))
+
+ -- watch('cat /home/pmakhov/.config/awesome/awesome-wm-widgets/weather-widget/weather.json', 5, update_widget, weather_widget)
+ watch(string.format(GET_FORECAST_CMD, owm_one_cal_api), 5, update_widget, weather_widget)
return weather_widget
end
-return setmetatable(weather_widget, { __call = function(_, ...)
- return worker(...)
-end })
+return setmetatable(weather_widget, {__call = function(_, ...) return worker(...) end})