Skip to content

Tags: MalpenZibo/ashell

Tags

0.10.0

Toggle 0.10.0's commit message
update changelog and freeze website docs version for 0.10.0

stopped

Toggle stopped's commit message
add audio feedback for volume and mute changes

stop1

Toggle stop1's commit message
recover from missing battery and device enumeration failures

4

Toggle 4's commit message
feat(vertical): add rotated text widget for window title and media pl…

…ayer

Implement RotatedText widget using canvas API for vertical bar support:
- New rotated_text component with 90° clockwise/counter-clockwise rotation
- Opt-in via config.vertical field in WindowTitleConfig and MediaPlayerModuleConfig
- Window title uses rotated text when vertical=true in vertical bar mode
- Media player uses rotated text when vertical=true in vertical bar mode
- Falls back to icon-only or hidden when vertical=false (default)

The widget uses iced's canvas API with frame transformations (translate + rotate)
and the glyph-outline fallback path for text rendering.

3

Toggle 3's commit message
add automatic backend selection and retry with exponential backoff

2

Toggle 2's commit message
feat(compositor): add Wayfire backend support

Drives Wayfire through its length-prefixed JSON IPC socket (WAYFIRE_SOCKET):
workspaces come from the per-output workspace grid, window titles and classes
from the view list, and the keyboard layout from wayfire/get-keyboard-state.

Protocol details worth noting: the grid size is nested inside an output's
"workspace" object, view keys are dash-spelled ("app-id", "output-id"), and
get-focused-view/get-focused-output wrap their payload in "info". Wayfire has no
per-workspace view list, so views are bucketed into grid cells from their
geometry, which is output-local and relative to the current workspace.

Workspace ids are 1-based per output (id <= 0 is reserved for special
workspaces), an initial snapshot is published before the event loop starts,
method calls reuse one long-lived connection, and event bursts are coalesced
before the state is re-derived.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

1

Toggle 1's commit message
feat(compositor): add Sway backend via i3 IPC

Adds a dedicated Sway backend, detected through `$SWAYSOCK`, alongside the
existing Hyprland/Niri/MangoWC ones. The protocol types come from
`swayipc-types` (which adds no new transitive dependency: serde, serde_json
and thiserror are already in the tree) while the socket handling lives in the
backend, so it stays on tokio instead of pulling in the smol reactor that
`swayipc-async` is built on.

- One connection is subscribed to events and read from its own task, because
  `read_exact` is not cancel safe and a half-read frame would desync the
  stream. Event payloads are never decoded: any event coalesces into a full
  resync, so new sway event variants cannot break the backend.
- A second, long-lived connection issues the five requests a resync needs
  instead of opening a socket per request, and is reconnected on failure. A
  failed resync warns and waits for the next event rather than ending the
  listener, which nothing restarts.
- Workspaces are focused by name, the only form that works for named
  workspaces and for two workspaces sharing a number ("3:web", "3:mail").
  A registry keeps a numbered workspace's sway number as its id, since the
  workspaces module uses the id to index `workspace_names`.
- Per-monitor visibility comes from `Output::current_workspace`;
  `Workspace::focused` is global and would leave every unfocused output
  without a visible workspace.
- Windows are identified by `shell`/`pid`: `app_id` is absent for XWayland
  views, `window_properties` is absent for xdg-shell views, and split
  containers are `con` nodes too.
- Keyboard layout is read from the keyboard that has layouts configured, so a
  power button or virtual keyboard cannot shadow the real one.
- The generic backend now parses a leading numeric workspace prefix for
  ordering, matching the 1..N labelling used by Sway/i3 and workstyle.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

0.9.0

Toggle 0.9.0's commit message
update changelog and freeze website docs version for 0.9.0

0.8.0

Toggle 0.8.0's commit message
fix(ci): use merge-multiple for artifact download in generate-installers

The download path assumed subdirectories per artifact, but with
upload-artifact@v6 and download-artifact@v7 the files end up flat.
Using merge-multiple places all files directly in target/distrib/.

0.7.0

Toggle 0.7.0's commit message
update changelog and freeze website docs version for 0.7.0