GlassUI
A macOS-inspired desktop layer for KDE Plasma on Wayland. GlassUI bundles custom forks of the bar, dock, wallpaper engine, and launcher that work together as one cohesive stack.
Components
Waybar (Waybar-Fork)
The top menu bar — clock, system status, tray, and controls styled like macOS.
- Transparent bar with an optional menu bar scrim (dark gradient) for legibility on bright wallpapers
- Built-in Waybar Settings app (middle-click the bar) for layout and appearance
- Integrates with Better Blur DX for frosted-glass popups (volume HUD, app menus)
- Search icon opens GlassLight (not Rofi)
Crystal Dock (Crystal-Dock-Fork)
The bottom dock — pinned apps, running tasks, Downloads stack, and Trash.
- Parabolic icon zoom and floating glass pill
- App-specific right-click menus (window list, pin/unpin, desktop actions)
- Shift+right-click opens dock settings
- Smooth resize, slide-to-hide, and indicator glow animations
- Launched via
crystal-dock.servicebefore Plasma shell
Glasstop (Glasstop-Fork)
The desktop wallpaper layer — sits behind windows and replaces the default Plasma wallpaper.
- Static images, animated ASCII art, and ASCII Translated (full-image colored ASCII)
- Per-monitor wallpapers; multi-monitor setups get independent canvases
- Desktop icon layer and right-click desktop menu
- Glasstop Settings for wallpaper gallery, quality presets, and display options
- Starts first via
glasstop.serviceso the desktop is ready before the dock and bar
GlassLight (GlassLight-Fork)
The Spotlight-style launcher — app search and launch.
- Dual-panel search UI with liquid-glass styling
- Open from the Waybar search icon, Crystal Dock Apps, or run
glasslight - Running a second instance while open toggles visibility (single-instance)
- Replaces the old Rofi-based launcher; Rofi is not part of this repo
Shared infrastructure
| Path | Purpose |
|---|---|
install-all.sh |
Build and install all components; installs Arch deps via pacman; sets up systemd units |
scripts/ |
Launch helpers (start-glasstop.sh, start-crystal-dock.sh, start-glasslight.sh, macos-components-launch.sh) |
systemd/ |
User units: glasstop.service, crystal-dock.service, macos-components.service |
configs/ |
Desktop entries and shared defaults for Crystal Dock and Glasstop |
common/ |
Shared headers used across components |
Startup order
At login, user systemd units start components in this order:
- Glasstop — wallpaper / desktop layer
- Crystal Dock — dock (before
plasmashellwhere configured) - macos-components — Waybar menu bar
GlassLight is on demand (not a login service).
Quick install (Arch Linux)
./install-all.sh
This will:
- Install missing build dependencies with
pacman(requiressudo) - Build and install GlassLight, Waybar, Crystal Dock, and Glasstop
- Install user systemd units and restart services
Options:
--skip-deps— skip automaticpacmandependency install--no-restart— install without restarting services
After install:
systemctl --user status glasstop.service crystal-dock.service macos-components.service
Better Blur DX (recommended)
For compositor blur behind glass surfaces, install Better Blur DX and set Blur all except matching, then add these window classes to Force blur:
crystal-dock
glasstop
glasstop-icons
waybar
glasslight
Keep waybar-menu and waybar-hud out of exclusion lists so menus and volume popups blur correctly. See Waybar-Fork/README.md and Waybar-Fork/docs/troubleshooting.md for reference blur values.
Requirements
- OS: Arch Linux (install script targets
pacman) - Session: KDE Plasma 6 on Wayland
- Build:
base-devel, CMake, Meson, Ninja, Qt 6, Layer Shell Qt, KF6 WindowSystem, and related libraries (installed automatically byinstall-all.sh)
Repository layout
GlassUI/
├── install-all.sh
├── scripts/
├── systemd/
├── configs/
├── common/
├── Waybar-Fork/
├── Crystal-Dock-Fork/
├── Glasstop-Fork/
└── GlassLight-Fork/
Each *-Fork/ directory contains that component’s source, install.sh, and component-specific configs.
Note: Waybar-Fork/subprojects/ only ships small .wrap files. Meson downloads cava and other fallbacks on the first build (~18 MB); those directories are listed in .gitignore and should not be committed.
Per-component install
To rebuild a single component:
cd Glasstop-Fork && ./install.sh && systemctl --user restart glasstop.service
cd Crystal-Dock-Fork && ./install.sh && systemctl --user restart crystal-dock.service
cd Waybar-Fork && ./install.sh
cd GlassLight-Fork && ./install.sh