How axenide/ambxst works
1. This repository is a Wayland desktop shell called Ambxst, built primarily as a Quickshell/QML application. The top-level shell.qml is the entry point, and the runtime is oriented around rendering persistent shell surfaces and overlays rather than a traditional app window model.
2. The architecture is split into a small configuration core and a large set of QML modules. config/Config.qml, config/defaults/*, config/ConfigValidator.js, and config/KeybindActions.js define the validated settings model and the action map for user bindings; everything else consumes that configuration.
3. The main presentation layer lives under modules/ and is organized by surface, not by business domain. Major shell surfaces include the bar, dock, desktop, lockscreen, notch, overview, sidebar, widgets/dashboard, notification UI, power menu, tools overlays, corners, and frame/panel effects.
4. modules/services/ is the functional integration layer. These QML service objects wrap system capabilities such as audio, brightness, battery, Bluetooth, Wi‑Fi, power profiles, notifications, clipboard, screenshots, screen recording, compositor state, idle/lock behavior, weather, AI providers, and app/task management.
5. There is a clear separation between “stateful services” and “view components.” Services expose live state and commands, while the UI modules subscribe to those properties to update controls like sliders, toggles, popups, lists, and overlay windows. This is the primary data flow throughout the shell.
6. Compositor integration is a distinct boundary. The repo is designed around Hyprland today, with config generation under assets/presets/* and modules/services/Compositor* producing compositor settings/keybinds, while install.sh and cli.sh connect Ambxst to the user’s compositor startup configuration.
7. The theming pipeline is its own subsystem. modules/theme/* generates or exports theme data for multiple targets—GTK, Qt, Kitty, Discord, Pywal, NvChad, and color/icon models—using source palettes from assets/colors/* and preset-specific theme definitions.
8. Presets and assets are the content/configuration layer of the system. assets/presets/* bundles complete visual and behavioral profiles for different shell layouts, while assets/wallpapers_example, assets/screenshots, emoji/logo data, sound assets, and compositor metadata support the UI and bundled experiences.
9. Several features are implemented as auxiliary tools rather than embedded UI logic. The scripts/ directory contains helpers for clipboard watching, OCR, QR scanning, color picking, weather, system monitoring, wallpaper/lockscreen behavior, recording, and similar tasks; these are invoked by services or tool widgets when native QML is not enough.
10. The dashboard/launcher widgets form a higher-level application area inside the shell. modules/widgets/dashboard/*, modules/widgets/launcher/*, modules/widgets/overview/*, and modules/sidebar/* provide the “control center” style experience: app launching, settings browsing, clipboard, notes, tmux sessions, metrics, wallpapers, and assistant panels.
11. Media and notification workflows are strongly integrated into the shell. Notification services feed the notification list/popup/notch views, while media control and widgets tie into MPRIS, audio mixers, EasyEffects, and lockscreen/full-player components for persistent playback control.
12. Packaging and deployment are handled separately from the runtime UI. flake.nix, nix/, and install.sh define how Ambxst is built and provisioned, while assets/matugen and related generators support downstream config generation for external tools.
13. Overall, the architecture is “shell UI on top of system integrations”: the QML layer renders surfaces and controls, services bind to OS/compositor features, scripts fill in imperative gaps, and presets/themes/assets provide the user-facing customization model. For an architecture diagram, the main boundaries are: configuration, UI surfaces, integration services, helper scripts, and external compositor/system dependencies.
Main entry points: modules Shell surfaces · services State services · Config.qml Config · shell.qml shell.qml
Components 23
Runtime shell
Top-level QML shell surfaces and presentation layers.
- shell.qml · Quickshell entry that boots the persistent shell UI.
shell.qml - Shell panel · Shared shell panel/reservation layer used by multiple surfaces.
modules/shell/UnifiedShellPanel.qml - OSD · Transient on-screen display for shell feedback.
modules/shell/osd/OSD.qml - Shell surfaces · Bar, dock, desktop, lockscreen, notch, overview, sidebar, notifications, tools, and corner effects.
modules
Config core
Validated settings model, defaults, and binding actions.
- Config · Validated configuration object consumed by the shell.
config/Config.qml - Defaults · Per-feature default settings for shell modules and services.
config/defaults - Validator · Checks and normalizes configuration data.
config/ConfigValidator.js - Keybind actions · Named actions invoked by user bindings and compositor setup.
config/KeybindActions.js
Services
Stateful integrations that expose OS/compositor capabilities to the UI.
- State services · Live state and commands for shell-facing system features.
modules/services - Compositor bridge · Builds compositor config, keybinds, and runtime connectivity.
modules/services/CompositorConfig.qml - Media I/O · Audio, Bluetooth, brightness, power, and related controls.
modules/services/Audio.qml - System services · Battery, network, idle, notifications, screenshots, recorder, and task state.
modules/services/Battery.qml - AI services · Provider strategies and shared AI model selection.
modules/services/ai/AiModel.qml
Widgets
Dashboard, launcher, overview, sidebar, and control-center style experiences.
- Dashboard · Multi-tab dashboard for settings, controls, clipboard, notes, metrics, and wallpapers.
modules/widgets/dashboard/Dashboard.qml - Launcher · Search-and-launch surface for applications and actions.
modules/widgets/launcher/LauncherView.qml - Overview · Workspace and window overview surface.
modules/widgets/overview/Overview.qml - Sidebar · Assistant-oriented sidebar and model selection UI.
modules/sidebar/AssistantSidebar.qml
Theme system
Theme generation, color palettes, and export targets.
- Theme pipeline · Generates target-specific themes and icon/color styling.
modules/theme/Styling.qml
Assets
Presets, palettes, wallpapers, sounds, and bundled content.
- Presets · Preset bundles for shell layouts, behavior, theme, and compositor settings.
assets/presets - Color palettes · Named palette definitions used by the theme system.
assets/colors
Tools
Imperative helpers and shell-adjacent scripts.
- Scripts · Imperative helpers for clipboard, OCR, scanning, monitoring, weather, and capture tasks.
scripts
Packaging
Build, install, and compositor integration entry points.
- Packaging · Nix flake, install script, and CLI glue for provisioning the shell.
flake.nix
Other components
- OS / compositor · Wayland compositor and host system features that Ambxst integrates with.
Connections 23
- shell.qml → Config: loads · Bootstraps the shell with validated settings.
- Config → Validator: validates · Configuration is normalized before use.
- Config → Defaults: defaults · Defaults seed feature-specific settings.
- Config → Keybind actions: binds · Keybind names map to shell and compositor actions.
- shell.qml → Shell surfaces: renders · Entrypoint drives the persistent shell surfaces.
- Shell surfaces → Shell panel: shares · Many surfaces reuse the common shell panel layer.
- Shell surfaces → OSD: overlays · Shell surfaces trigger transient OSD feedback.
- Shell surfaces → State services: subscribes · UI components bind to live service state.
- State services → Media I/O: controls · Audio, brightness, Bluetooth, and power devices.
- State services → System services: coordinates · Battery, network, notifications, idle, screenshots, recorder, and tasks.
- State services → AI services: selects · AI provider strategies are exposed through shared services.
- State services → Compositor bridge: bridges · Compositor config and keybind generation flow through this boundary.
- State services → Scripts: invokes · Services call out to helper scripts when imperative work is needed.
- Shell surfaces → Dashboard: opens · Dashboard acts as the central control-center experience.
- Shell surfaces → Launcher: opens · Launcher provides app and action search.
- Shell surfaces → Overview: opens · Overview provides workspace/window navigation.
- Shell surfaces → Sidebar: opens · Sidebar hosts assistant and related panels.
- Dashboard → State services: drives · Dashboard tabs manipulate system state through services.
- Theme pipeline → Color palettes: sources · Theme generation starts from palette definitions.
- Theme pipeline → Presets: targets · Preset-specific theme data determines exported output.
- Packaging → OS / compositor: provisions · Install and startup glue connect Ambxst to the compositor and host system.
- Compositor bridge → OS / compositor: configures · Generated settings and keybinds configure the compositor.
- Scripts → OS / compositor: uses · Scripts shell out to system utilities and device tools.