Changed scripts to use realpath() to create absolute symlinks instead of relative paths, which were breaking with filenames containing special characters. Also added sleep delay before restarting waybar.
Arch Waybar Configuration
Opinionated Waybar setup tailored for Hyprland on Arch Linux. Includes:
- Hyprland workspaces/window modules
- Pywal-driven colors via a symlinked colors.css
- A weather widget powered by wttr.in (Python script)
- Multimedia controls (audio, mic), battery, temperature, network, bluetooth, and clock
Repository: https://git.biohazardvfx.com/Nicholai/arch-waybar
Repository Structure
~/.config/waybar/
├── colors.css # symlink to ~/.cache/wal/colors-waybar.css (generated by Pywal)
├── config.jsonc # main Waybar configuration
├── style.css # Waybar CSS (imports colors.css)
└── scripts/
└── waybar-wttr.py # weather script (wttr.in) for custom/weather module
Requirements
Core:
- Waybar (with Hyprland module support)
- Hyprland (for
hyprland/*modules) or adjust modules if using Sway/etc. - JetBrainsMono Nerd Font (for glyphs/icons)
- Python 3 +
requests(for weather)- Install:
pip install --user requests
- Install:
Utilities:
- pamixer (volume + mic controls)
- blueman (for
blueman-managerlauncher) - pywal (to generate the wal CSS that colors.css links to)
Optional (if enabling commented actions in config):
- asusctl (power profiles)
- brightnessctl (backlight block currently commented)
Installation
- Clone to your Waybar config directory:
git clone https://git.biohazardvfx.com/Nicholai/arch-waybar.git ~/.config/waybar
- Fonts
- Install JetBrainsMono Nerd Font and ensure Waybar can use it.
- Colors via Pywal
- This setup expects Pywal to generate
~/.cache/wal/colors-waybar.css. colors.cssin this repo is a symlink pointing to an absolute path (/home/Nicholai/.cache/wal/colors-waybar.css).- On another machine or a different username, update the symlink:
cd ~/.config/waybar rm -f colors.css ln -s ~/.cache/wal/colors-waybar.css colors.css - Or, edit
style.cssto import a different palette file.
- On another machine or a different username, update the symlink:
- Python dependency for weather
pip install --user requests
- Launch or reload Waybar
- If Waybar is already running:
- Standard reload:
pkill -SIGUSR2 waybar - Or restart your session bar (depends on your launcher/service setup)
- Standard reload:
Modules Overview (config.jsonc)
Enabled modules:
-
Left:
clock(12-hour format)custom/weather(from scripts/waybar-wttr.py; tooltip shows forecast)custom/wallpaper(on-click: ~/scripts/pywal/wallpapermenu.sh — external)hyprland/window(current window title)
-
Center:
hyprland/workspaces- Custom icons
- Persistent workspaces for output
Virtual-1
-
Right:
networkbluetooth(left-click opens blueman-manager)temperature(thermal zone 1, Fahrenheit display; critical threshold set)custom/power_profile(watch + signal hook; on-click options commented)batterybacklight(block fully commented out)pulseaudio(speakers: click toggles mute; scroll adjusts volume)pulseaudio#microphone(mic: click toggles mute; scroll adjusts gain)
Notes:
custom/wallpaperuses~/scripts/pywal/wallpapermenu.sh, which is not part of this repo. Provide your own script or remove/disable the module.custom/power_profileis configured to refresh on RTMIN+8 signal; changing profiles viaasusctlis commented. Uncomment and installasusctlif needed.temperatureuses thermal zone 1; adjust per your hardware.
Styling (style.css)
- Imports
colors.css, which is expected to be generated by Pywal. - Uses JetBrainsMono Nerd Font; set globally in the CSS.
- Blocks have semi-transparent backgrounds and rounded corners.
- Active/hover/focused styles for workspaces customized.
- Theming expects Wal-provided variables like
@background,@colorX.
If you do not use Pywal, replace the import and variables with your preferred palette.
Weather Script (scripts/waybar-wttr.py)
- Fetches JSON from
https://wttr.in/?format=j1 - Outputs a JSON payload that Waybar consumes for the
custom/weathermodule:text: compact current condition + feels-liketooltip: multi-line details: current, wind, humidity, plus daily and hourly forecast
Manual test:
python ~/.config/waybar/scripts/waybar-wttr.py
If it prints a JSON string, the module should render in Waybar.
Caveats:
- Network access to wttr.in is required and may be rate-limited.
- Python
requestsmust be installed. - The script currently references a
format_time()helper in one place; ensure it exists or remove references if you customize the script. The shipped config works as-is on machines where this script is already in use.
Troubleshooting
- Colors not applying:
- Ensure Pywal has generated
~/.cache/wal/colors-waybar.css. - Ensure
colors.csssymlink points to the correct wal file for your user.
- Ensure Pywal has generated
- Missing icons:
- Verify Nerd Font install and that Waybar uses it.
- Weather not loading:
- Check
pip show requestsand network connectivity. - Run the script manually to inspect any exceptions.
- Check
- Bluetooth manager not opening:
- Install
bluemanand verifyblueman-manageris on PATH.
- Install
Customization Tips
- To adjust the clock format, edit the
clock.formatstring inconfig.jsonc. - To change workspace icons or persistence, modify
hyprland/workspaces.format-iconsandpersistent-workspaces. - To enable volume/backlight/power-profile click actions, uncomment the relevant sections and install required tools.
License
No license specified. Add one if you intend to share or redistribute.
Description
Languages
CSS
93.8%
Python
3.4%
Shell
2.8%