conky-weather-glass
github.com/wim66/conky-weather-glass ↗

Conky widget · Lua + Cairo

A scalable weather widget that
looks like glass,
because it's drawn like one.

No PNGs, no compositor tricks for the panel — just gradients, a specular highlight and a dark vignette, rendered once and cached. Live weather from OpenWeatherMap, a clock underneath, and it resizes by changing two numbers.

Animated preview of the conky-weather-glass widget, showing a rounded glass panel with a cloud icon, the city name Amsterdam, cycling weather stats, a digital clock, day and date.

What it does

Built from gradients, not assets

Every part of the panel — the base tint, the sheen, the highlight, the shadow, the rim — is a Cairo gradient computed once and cached to an offscreen surface, not redrawn on every tick.

Glass panel

Translucent base tint, a diagonal sheen, a specular highlight with a soft ambient bloom, a dark vignette in the opposite corner, and rim lighting — all following one light direction.

Live weather

Description, temperature, min/max, humidity and wind speed from OpenWeatherMap, cycling automatically with a flip-down animation.

12 icon sets

Six dark, six light: dovora, modern, monochrome, openweathermap, SagiSan, spils-icons and vclouds.

Clock, day, date

A simple digital readout underneath the weather, styled to match the rest of the panel.

Scales cleanly

Change minimum_width/minimum_height in conky.conf — panel, icon, text and border resize together. Nothing else to touch.

Never blocks

The weather fetch runs as a detached background process, checked on its own interval instead of on every draw — your desktop stays responsive.

Get it running

Installation

Needs Conky built with Lua + Cairo support, plus lua, curl, jq, wget, the ChopinScript and DejaVu Serif fonts, and a free OpenWeatherMap API key.

# clone and prep git clone https://github.com/wim66/conky-weather-glass.git cd conky-weather-glass chmod +x start.sh autostart.sh resources/get_weather.sh
# set your API key (or use the WeatherSettingsUpdater GUI instead) echo 'export OWM_API_KEY="your_api_key_here"' >> ~/.bashrc source ~/.bashrc
WeatherSettingsUpdater window: fields for City ID, API Key, Icon Set, Units and Language, with an Apply button
Prefer a GUI over editing settings.lua? ./WeatherSettingsUpdater covers city, API key, icon set, units and language.
# start it ./start.sh

Set your CITY_ID in settings.lua first — find it on openweathermap.org (the number at the end of your city's URL), or set it through the bundled WeatherSettingsUpdater GUI. Use autostart.sh if you want the widget launched automatically at login.

Make it yours

Configuration

Everything lives in settings.lua.

SettingWhat it doesDefault
ICON_SETIcon style, e.g. Dark-SagiSan, Light-vcloudsDark-SagiSan
DAY_NIGHTShow night icons after sunsetfalse
API_KEYOpenWeatherMap API keyreads $OWM_API_KEY
CITY_IDOpenWeatherMap city ID
UNITSmetric (°C) or imperial (°F)metric
LANGen, nl, fr, es, de, ...nl
BORDER_WIDTHGlass rim thickness, in px1

To resize the whole widget, change minimum_width/minimum_height in conky.conf (keep them equal for a square panel).

Under the hood

How it's built

get_weather.sh fetches both current conditions and a 5-day/3-hour forecast into resources/cache/. The current-conditions view is live today; the forecast data is already being cached for a future forecast view.

resources/ ├── loadall.lua entry point — owns the shared Cairo surface, auto-scales the draw ├── utils.lua shared helpers: surfaces, color/gradient parsing, rounded-rect path ├── background.lua the glass panel, rendered once and cached ├── display.lua weather fetch (background process) + display └── clock.lua clock / day / date