Built on freedom, where users control the system, not the other way around.
showcase.mp4
| Rofi Launcher | Clipboard Manager |
|---|---|
![]() |
![]() |
Here is the folder structure configuration:
athena-eww/
├── .config/
│ ├── dunst/
│ ├── eww/
│ │ ├── assets/ # Icons and widget images
│ │ ├── bar/
│ │ ├── corner/
│ │ ├── dashboard/
│ │ ├── panel/
│ │ ├── theme/ # Theme state and color palettes
│ │ ├── eww.yuck
│ │ ├── eww.scss
│ │ └── toggle_theme.sh # Theme switcher script
│ ├── fastfetch/
│ ├── kitty/
│ ├── rofi/
│ └── starship/
├── extras/ # Optional Eww configurations
└── .zshrc
Click here to see dependencies
To ensure all features of the Athena Eww setup work correctly, make sure the following packages are installed on your system:
| Dependency | Purpose |
|---|---|
awk |
Text processor for system output parsing. |
bluez-utils |
Bluetooth management tool (bluetoothctl). |
brightnessctl |
Backlight and brightness control. |
curl |
HTTP tool to fetch weather data API. |
dbus |
Used for bluetooth event listening. |
dunst |
Notifications daemon. |
grep |
Global Regular Expression Print. |
hyprshutdown |
Session and power menu backend. |
inotify-tools |
Real-time file & theme change monitor. |
jq |
JSON parser for widget data. |
libnotify |
System notification dispatcher (notify-send). |
networkmanager |
Network controller backend. |
power-profiles-daemon |
Manages system power profiles. |
python |
Required for helper scripts. |
socat |
Real-time socket listener for Hyprland. |
wireplumber |
Audio volume controller (wpctl). |
ttf-jetbrains-mono-nerd |
Font. |
inter-font |
Font. |
Tela circle dark |
Icon, optional dependencies. |
You can install the required packages using pacman:
sudo pacman -S awk bluez-utils brightnessctl curl dbus dunst grep hyprshutdown inotify-tools jq libnotify networkmanager power-profiles-daemon python socat ttf-jetbrains-mono-nerd inter-font wireplumberClone this repository:
git clone https://github.com/haikal-hakim/athena-eww.git
cd athena-ewwCopy configuration files:
cp -r .config/* ~/.config/
cp .zshrc ~/These settings are required for the widgets to work properly on your system.
All scripts inside the scripts/ directories must be executable:
chmod +x ~/.config/eww/toggle_theme.sh
chmod +x ~/.config/eww/bar/scripts/*.sh
chmod +x ~/.config/eww/corner/scripts/*.sh
chmod +x ~/.config/eww/dashboard/scripts/*.sh
chmod +x ~/.config/eww/panel/scripts/*.shCreate an API key from OpenWeatherMap. Activation may take around 30 minutes. Open the weather script:
.config/eww/dashboard/scripts/weather.py
Set your API key and city:
API_KEY = "YOUR_API_KEY" #example: API_KEY = "a1b2c3d4blablabla"
CITY = "YOUR_CITY" #example: CITY = "New York"Widget weather forecast uses a vertical progress bar that serves as a temperature graph. My local tropical climate ranges from 15°C to 36°C, and yours may be different.
Open file:
.config/eww/dashboard/src/weather_forecast.yuck
Find this section:
:value {(day.temp - MIN_TEMP) / (MAX_TEMP - MIN_TEMP) * 100}This setting uses Eww's built-in Magic Variables, not external scripts.
By default, configured with CORETEMP_PACKAGE_ID_0 because my device uses an Intel CPU. Your device may have different hardware.
Check your available sensors, command in your terminal:
eww get EWW_TEMPSLook for your sensor key or main packages in the output, and update key inside:
.config/eww/dashboard/src/sysinfo.yuck:
Find section:
(circular-progress :value {((EWW_TEMPS["YOUR_SENSOR_KEY"] ?: EWW_TEMPS["Tdie"] ?: 0) / 100) * 100}
....
....
(label :class "sysinfo-stat"
:text "${EWW_TEMPS["YOUR_SENSOR_KEY"] ?: EWW_TEMPS["Tdie"] ?: 0}°C")
)
)Tip
An alternative battery.yuck using Eww built-in magic variables is available inside the extras/ folder.
This version removes polling scripts but does not include notifications or remaining time estimation.
- Path:
~/Documents/todo.txt - Format: A simple text file containing your tasks (maximum 3 lines).
Example:
Task one
Task two
Task three
These settings are optional and purely based on personal preference.
If you want to modify an existing theme or add your own custom color scheme, you can do so. However, to prevent config corruption, any new theme must use the exact same color variable names (such as base, mantle, crust, peach, mauve, etc.) as the original Catppuccin Mocha theme.
Available themes:
- Catppuccin Mocha
- Catppuccin Latte
- Tokyo Night
- Tokyo Night Light
Create a new .scss palette inside .config/eww/theme/, and edit:
- scripts Actions.
config/eww/toggle_theme.sh - Widget file
.config/eww/panel/src/switcher.yuck - Style Customization
.config/eww/panel/styles/switcher.scss
- Script Actions
.config/eww/corner/scripts/website.sh - Widget file
.config/eww/corner/src/website.yuck - Style Customization
.config/eww/corner/styles/website.scss
- Put new
.pngicons inside the assets directory.config/eww/assets/apps/ - Modify the Apps and Commands
.config/eww/corner/src/launcher.yuck.
Example:
(launcher-btn :icon "${EWW_CONFIG_DIR}/assets/apps/firefox.png"
:cmd "firefox &")| Module | Action | Command |
|---|---|---|
Distro Icon |
Click | show dashboard |
Notifications |
Click | dunstctl history-pop |
| Right-Click | dunstctl history-clear && dunstctl close-all |
|
Panel Trigger |
Click | show panel |
| Module | Action | Command / Function |
|---|---|---|
Wi-Fi |
Click | Nmcli radio wifi on/off |
| Row Click | Open or close popup Wifi | |
Bluetooth |
Click | Toggles on/off |
| Row Click | Open or close popup Bluetooth | |
Power Mode |
Click | Cycles profiles via powerprofilesctl |
Do Not Disturb |
Click | Toggles on/off dnd |
Screenshot |
Click | Runs local script ~/.config/hypr/scripts/screenshot.sh |
Screen Record |
Click | Runs local script ~/.config/hypr/scripts/record.sh |
System Theme |
Click | Change the current theme variant |
Tip
The Screenshot and Screen Record features are tied to my custom Hyprland scripts. Paths are defined inside ~/.config/eww/panel/src/quicktoggle.yuck.
Universal Wi-Fi Input: Uses a custom Rofi theme password.rasi for password entries, with automatic fallback support for Fuzzel and Wofi.
Example hyprland.lua style:
hl.exec_cmd("eww daemon")
hl.exec_cmd("sleep 2 && eww open window_bar")
hl.exec_cmd("sleep 3 && eww open window_website")
hl.exec_cmd("sleep 4 && eww open window_launcher")
hl.exec_cmd("sleep 5 && eww open window_power")Dashboard toggle:
eww open window_dashboardExample hyprland.lua style:
hl.bind(mainMod .. " + D", function()
hl.dispatch(hl.dsp.exec_cmd("eww close window_dashboard || eww open window_dashboard"))
end)To enable the OSD volume and brightness buttons on your keyboard. Example hyprland.lua style:
-- Volume --
hl.bind("XF86AudioRaiseVolume", function()
hl.dispatch(hl.dsp.exec_cmd("bash " .. home .. "/.config/eww/corner/scripts/osd_vol.sh vol-up"))
end, { repeating = true })
hl.bind("XF86AudioLowerVolume", function()
hl.dispatch(hl.dsp.exec_cmd("bash " .. home .. "/.config/eww/corner/scripts/osd_vol.sh vol-down"))
end, { repeating = true })
-- Brightness --
hl.bind("XF86MonBrightnessUp", function()
hl.dispatch(hl.dsp.exec_cmd("bash " .. home .. "/.config/eww/corner/scripts/osd_bright.sh bright-up"))
end, { repeating = true })
hl.bind("XF86MonBrightnessDown", function()
hl.dispatch(hl.dsp.exec_cmd("bash " .. home .. "/.config/eww/corner/scripts/osd_bright.sh bright-down"))
end, { repeating = true })- Eww - Created by Elkowar. Huge thanks to the creator and contributors for this amazing widget ecosystem.
- Also thanks to everyone whose open source configurations were inspiring.
Muhammad Haikal Hakim



