Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Project Layout

Root Directory

ashell/
├── src/                     # Rust source code
├── assets/                  # Fonts and icons
├── .github/workflows/       # CI/CD pipelines
├── website/                 # User-facing Docusaurus website
├── docs/                    # This developer guide (mdbook)
├── i18n/                    # Fluent translation catalogs (en-US, de-DE, fr-FR, ru-RU, uk-UA)
├── i18n.toml                # i18n-embed configuration
├── build.rs                 # Build script (font subsetting, git hash)
├── Cargo.toml               # Dependencies and project metadata
├── Cargo.lock               # Locked dependency versions
├── Makefile                 # Development convenience targets
├── flake.nix                # Nix development environment
├── dist-workspace.toml      # cargo-dist release configuration
├── README.md                # Project overview
├── CHANGELOG.md             # Version history
└── LICENSE                  # GPL-3.0-or-later License

Source Tree

src/
├── main.rs                  # Entry point: logging, CLI args, iced application launch
├── app.rs                   # App struct, update/view/subscription
├── app/
│   ├── message.rs           # Top-level Message enum
│   └── osd_info.rs          # OSD display info for IPC commands
├── config.rs                # TOML config parsing, defaults, hot-reload via inotify
├── outputs.rs               # Multi-monitor management, layer surface creation
├── theme.rs                 # Theme system: colors, spacing, fonts, bar styles
├── osd.rs                   # On-screen display overlay (volume, brightness, ...)
├── ipc.rs                   # IPC socket server and `ashell msg` client
├── i18n.rs                  # Localization (Fluent catalogs)
├── xdg.rs                   # XDG runtime directory lookup
│
├── components/              # Shared UI building blocks and custom iced widgets
│   ├── mod.rs               # Component exports
│   ├── icons.rs             # Nerd Font icon definitions (`StaticIcon`)
│   ├── menu.rs              # Menu lifecycle: open/toggle/close, menu surfaces
│   ├── menu_wrapper.rs      # Menu container with backdrop overlay
│   ├── password_dialog.rs   # Password prompt dialog for network auth
│   ├── centerbox.rs         # Three-column layout (left/center/right)
│   ├── position_button.rs   # Button that reports its screen position (`ButtonUIRef`)
│   └── ...                  # Buttons, sliders, animations, module groups, etc.
│
├── modules/                 # UI modules (what the user sees in the bar)
│   ├── mod.rs               # Module registry, routing, section builder
│   ├── tempo/               # Clock: timezones, calendar, weather
│   │   ├── mod.rs
│   │   ├── calendar.rs
│   │   └── weather.rs
│   ├── workspaces.rs        # Workspace indicators and switching
│   ├── window_title.rs      # Active window title display
│   ├── system_info.rs       # CPU, RAM, disk, network, temperature
│   ├── keyboard_layout.rs   # Keyboard layout indicator
│   ├── keyboard_submap.rs   # Hyprland submap display
│   ├── tray.rs              # System tray icon integration
│   ├── media_player.rs      # MPRIS media player control
│   ├── notifications.rs     # Notification center and toasts
│   ├── privacy.rs           # Microphone/camera/screenshare indicators
│   ├── updates.rs           # Package update checker
│   ├── custom_module.rs     # User-defined custom modules
│   └── settings/            # Settings panel (complex, multi-part)
│       ├── mod.rs            # Settings container and navigation
│       ├── audio.rs          # Volume and audio device control
│       ├── bluetooth.rs      # Bluetooth device management
│       ├── brightness.rs     # Screen brightness slider
│       ├── network.rs        # WiFi and VPN management
│       └── power.rs          # Power menu (shutdown, reboot, sleep)
│
├── services/                # Backend system integrations (no UI)
│   ├── mod.rs               # Service traits (ReadOnlyService, Service)
│   ├── compositor/          # Window manager abstraction
│   │   ├── mod.rs            # Compositor service, backend detection, broadcast
│   │   ├── types.rs          # CompositorState, CompositorEvent, CompositorCommand
│   │   ├── hyprland.rs       # Hyprland IPC integration
│   │   ├── niri.rs           # Niri IPC integration
│   │   ├── mangowc.rs        # MangoWC integration (`mmsg` IPC)
│   │   └── generic.rs        # Generic Wayland fallback (ext-workspace, foreign-toplevel)
│   ├── audio.rs             # PulseAudio/PipeWire audio service
│   ├── brightness.rs        # Display brightness via sysfs
│   ├── bluetooth.rs         # iced glue for the ashell-services Bluetooth service
│   ├── network/
│   │   ├── mod.rs            # Network service logic
│   │   ├── dbus.rs           # NetworkManager D-Bus proxies
│   │   └── iwd_dbus/         # IWD (iNet Wireless Daemon) D-Bus bindings
│   ├── mpris/
│   │   ├── mod.rs            # Media player service
│   │   └── dbus.rs           # MPRIS D-Bus proxies
│   ├── notifications/
│   │   ├── mod.rs            # Notification daemon service
│   │   └── dbus.rs           # org.freedesktop.Notifications D-Bus interface
│   ├── tray/
│   │   ├── mod.rs            # System tray service
│   │   └── dbus.rs           # StatusNotifierItem D-Bus proxies
│   ├── upower/
│   │   ├── mod.rs            # Battery/power service
│   │   └── dbus.rs           # UPower D-Bus proxies
│   ├── privacy.rs           # Privacy monitoring (PipeWire)
│   ├── idle_inhibitor.rs    # Idle/sleep prevention
│   ├── logind.rs            # systemd-logind (sleep/wake detection)
│   ├── throttle.rs          # Stream rate-limiting utility
│   └── xdg_icons.rs         # XDG icon theme lookup and caching
│
└── utils/
    ├── mod.rs               # Utility module exports and helpers
    ├── launcher.rs          # Shell command execution
    └── remote_value.rs      # Remote state tracking with local cache

Assets

assets/
├── SymbolsNerdFont-Regular.ttf       # Nerd Font (source, ~2.4 MB)
├── SymbolsNerdFontMono-Regular.ttf   # Nerd Font Mono (source, ~2.4 MB)
├── AshellCustomIcon-Regular.otf      # Custom ashell icons (~6 KB)
├── *_bat_*.svg, key_backlight_*.svg   # Peripheral battery / keyboard backlight SVG icons
├── weather_icon/                      # Weather condition icons
└── ashell_custom_icon_project.gs2     # Glyphs Studio project file

The full Nerd Font files in assets/ are the source. At build time, build.rs subsets them into target/generated/ containing only the glyphs actually used in the code.

Other Directories

  • website/ — The user-facing documentation site built with Docusaurus. Deployed to GitHub Pages. This is separate from this developer guide.
  • .github/workflows/ — CI/CD pipeline definitions. See CI Pipeline.