[READ-ONLY] Mirror of https://github.com/crutchcorn/hearthspace. A spatial Linux desktop for persistent, local-first computing.
hearthspace docs APPS.md
7.1 kB · 122 lines
Markdown
at main

Applications #

Open Apps List from the app dock or by tapping Meta, type an app's name, and press Enter to launch it. Apps List includes installed desktop entries and open windows. Choosing a window brings that existing window into view. The dock keeps favorites available when closed and groups running windows by application. See shell controls for keyboard navigation and desktop items for shortcuts, files, and Open With.

Hearthspace runs native Wayland applications and X11 applications through XWayland. Applications and toolkits can draw their own title bars or request compositor decorations. Window management explains focus, sizing, fullscreen, and the differences between those title bars. Application-specific behavior, packaging, portals, and single-instance rules still affect compatibility; a successful launch does not establish that every workflow in an app works.

Application configuration #

Normal sessions inherit the user's application configuration directories. An editor launched from Apps List and from a terminal therefore uses the same preferences. When two desktops share profiles, an application's single-instance behavior may reuse a window on the other desktop. Use that application's own new-instance or profile option when needed.

Set HEARTHSPACE_ISOLATE_APP_PROFILES=1 before starting a session to use separate per-application XDG directories under Hearthspace's state directory. The native test harness sets this explicitly. Hearthspace Settings always uses the session daemon's configuration path.

Terminal desktop entries use xdg-terminal-exec when available, with terminal preferences from xdg-terminals.list as a fallback. Snap applications need the session's owned application-scope service for catalog launches; direct terminal and external portal launches do not use that wrapper. A reachable Wayland socket alone does not establish confined file or portal access.

Launch services and environment #

The shell queues launcher, dock, gesture, and Settings requests on a bounded launch task, independent of desktop filesystem work. The compositor shares one bounded preparation queue for apps and files; filesystem/catalog work and GIO activation run outside the input loop. It rechecks session, lock, output, and drawing ownership before accepting a prepared launch. Activation helpers have deadlines; a successfully spawned application has its own lifetime. Errors are returned to the requesting UI.

Shell launch requests carry their original ten-second click deadline through the launch-request-v1 envelope. The compositor's eight-second preparation limit can shorten that budget but cannot renew it. Cancelling the UI request closes its registered connection immediately; preparation checks the caller before creating a child. Legacy command clients retain their half-close protocol, and internal fire-and-forget launches do not acquire an artificial caller lifetime.

hearthspace-desktop owns desktop-entry parsing, argument expansion, file/app GIO activation, favorites, and neutral artwork types. DBusActivatable entries may omit Exec. Terminal entries and Settings arguments preserve their direct command semantics, including literal arguments and working directories.

Ordinary applications in shared native sessions use the canonical user runtime and an absolute path to Hearthspace's Wayland socket, whether launched directly or through D-Bus. Private and nested sessions retain their isolated connection policy. Nested supervisors clear inherited activation ownership and selected-bus metadata before applying their own explicit values. Native GIO activation requires that selected bus; it cannot silently borrow a parent desktop's activation route. Ownership records and Hearthspace control sockets remain under HEARTHSPACE_SESSION_DIR; explicit audio overrides remain intact.

Shared activation publication has a generation-owned journal. XWayland readiness and disconnection update DISPLAY through that ownership boundary, off the compositor loop. Launch synchronizes publication before GIO activation. Retirement rereads the latest journal and preserves independently changed manager values. The transient activation-display.json record belongs to the verified session runtime and is removed with it after the process-cleanup barriers.

GNOME Terminal / Ptyxis #

For Ptyxis desktop entries such as org.gnome.Ptyxis.desktop, the session supplies an adapter for the terminal's systemd-run --user --scope shell invocation. This lets the shell reach the user manager even when its application runtime is private, and keeps its scope owned by the Hearthspace session. Changing the D-Bus address alone cannot redirect systemd's runtime-directory socket lookup.

Native sessions place the adapter in their application PATH. It recognizes the Ptyxis scope invocation, connects to the user manager, then restores the application's runtime and selected D-Bus environment before executing the original shell command. Ownership records come from HEARTHSPACE_SESSION_DIR, independently of an activated app's canonical runtime. Version queries and other invocation shapes pass through unchanged. The adapter uses hearthspace-app-scope-guard; it does not replace the system binary.

Each Ptyxis scope is recorded before execution and receives BindsTo and After dependencies on the session's application-scope owner. Normal shutdown and the independent crash guard therefore include disowned terminal jobs, which would otherwise escape the login cgroup. Native recovery recognizes only the recorded Snap names and exact ptyxis-spawn-UUID.scope names.

The recognized invocation is defined in ptyxis_run.rs. An upstream change to Ptyxis's invocation shape needs a compatibility review; this is not a general wrapper for arbitrary systemd scopes.

Steam game shortcuts #

A Steam-generated shortcut may contain Exec=steam steam://rungameid/… without X-SnapInstanceName. Catalog launch resolves the executable before deciding whether to supply Snap's scope and Wayland socket. If steam resolves to /snap/bin/steam, it receives the Snap launch environment. PATH precedence and ordinary executables are preserved.

The private-session bus is reachable across Snap's private temporary-file mount; normal native sessions use the standard user bus. See Snap applications for ownership and portal limitations. Game launch, gameplay, controller input, and file access are separate compatibility checks; Steam opening successfully does not establish the rest.

Checking application workflows #

Native app acceptance describes repeatable browser, editor, clipboard, and file-selection checks. Use exact saved or transferred content as well as visible application state when evaluating a workflow. Keep package-specific limitations with the relevant integration guide rather than treating an app list as a blanket compatibility guarantee.