A fairly shoddy recreation of my Waybar setup, built using Quickshell's QML framework.
This project is TERRIBLE! It's NO GOOD! It's just a quick hack to get something working. I am more than the sum of my parts
.
├── shell.qml # Main shell configuration and panel layout
├── Commons/
│ └── Style.qml # Global styling, colors, fonts, and spacing constants
└── Components/
└── Indicators/ # Individual status indicator components
├── Clock.qml # System time display (HH:MM:SS A)
├── Volume.qml # Audio volume level and mute status
├── Network.qml # WiFi network status and signal strength
├── Bluetooth.qml # Bluetooth power state and connected device
├── Power.qml # Battery percentage and charging status
└── ActiveWindow.qml # Current focused window titleThe main entry point that creates a 30px panel window positioned at the top of the screen. It uses a horizontal layout to display all indicators with the active window title centered in the middle.
A singleton providing design tokens:
- Colors: Dracula palette (background, foreground, accent colors)
- Fonts: "Work Sans" family with 10.5pt base size
- Spacing: Predefined spacing values (XS, S, M, L, XL)
- Semantic colors: Error (red), warning (orange), success (green)
- Displays current time in 12-hour format with seconds
- Updates every 1 second via JavaScript timer
- Shows audio volume percentage (0-100%) using
wpctlbackend - Displays different icons based on volume level (muted, low, medium, high)
- Updates every 1 second
- Displays connected WiFi network name and signal strength
- Shows disconnected icon when no active WiFi connection
- Signal strength represented in 4 levels via icon changes
- Queries NetworkManager (
nmcli) every 1 second
- Shows Bluetooth power state (on/off)
- Displays connected device name when powered on
- Updates every 1 second via
bluetoothctl
- Displays battery percentage and charging status
- Icon changes based on battery level (0%, 10%, 20%, ..., 100%)
- Changes text color to red (<10%) or orange (<20%) for low battery warnings
- Charging icon displays when actively charging
- Reads from
/sys/class/power_supply/BAT1/every 1 second
- Shows the title of the currently focused window
- Uses Niri window manager protocol (
niri msg windows) - Updates every 500ms
- Hover tooltips for detailed info on each indicator
- Centralized polling boilerplate
- Panels for each indicator with expanded details
- Animations