Add desktop app service and VM dev session tooling
Introduces a new `core/applications` QML/C++ module (`Nebula.Applications`) to discover `.desktop` entries, expose filterable application models, and launch installed apps safely from the shell. The desktop launcher now uses real installed apps with themed icon loading and fallback glyphs, adds output-aware surface sizing via `OutputTracker`, and wires in image/icon providers. It also adds VMware-focused Sway/shell wrapper scripts, updates Sway config/session env defaults, and refreshes README docs to document the new development flow and Desktop 0.1 behavior.
This commit is contained in:
+59
-1
@@ -7,7 +7,7 @@ Sway currently provides:
|
||||
- Wayland compositor
|
||||
- application window management
|
||||
- XWayland
|
||||
- input
|
||||
- input and the pointer cursor
|
||||
- output handling
|
||||
|
||||
Nebula provides the visible shell (Qt Quick/QML via LayerShellQt). The Sway config must not enable a Sway bar.
|
||||
@@ -25,3 +25,61 @@ Nebula compositor later
|
||||
Nebula Shell
|
||||
Qt Quick/QML
|
||||
```
|
||||
|
||||
## Development session
|
||||
|
||||
From the NebulaOS repository root:
|
||||
|
||||
```bash
|
||||
sway -c compositor/sway/nebula-sway.conf
|
||||
```
|
||||
|
||||
Recommended on the Ubuntu VMware VM (repo-root `cd`, cursor environment, software cursors):
|
||||
|
||||
```bash
|
||||
./compositor/sway/dev/run-sway-vm.sh
|
||||
```
|
||||
|
||||
Sway then autostarts Nebula Desktop through `scripts/run-nebula-vm.sh`.
|
||||
|
||||
Skip shell autostart:
|
||||
|
||||
```bash
|
||||
NEBULA_SHELL_AUTOSTART=0 ./compositor/sway/dev/run-sway-vm.sh
|
||||
```
|
||||
|
||||
### Output / resolution
|
||||
|
||||
The development config uses scale `1` and requests `1920x1080` when that mode is advertised. If it is not, Sway keeps the preferred mode. This is a VM convenience, not a production requirement.
|
||||
|
||||
```bash
|
||||
swaymsg -t get_outputs
|
||||
swaymsg output <name> mode 1920x1080
|
||||
swaymsg output <name> scale 1
|
||||
```
|
||||
|
||||
### Cursor
|
||||
|
||||
```text
|
||||
seat * xcursor_theme Adwaita 24
|
||||
XCURSOR_THEME=Adwaita
|
||||
XCURSOR_SIZE=24
|
||||
```
|
||||
|
||||
Requires `adwaita-icon-theme`. A Nebula-branded cursor theme is a later task.
|
||||
|
||||
`WLR_NO_HARDWARE_CURSORS=1` is VMware-specific and is set by `run-sway-vm.sh`, not by production session files.
|
||||
|
||||
### Emergency shortcuts
|
||||
|
||||
| Shortcut | Action |
|
||||
|----------|--------|
|
||||
| Super+Enter | open Foot |
|
||||
| Super+Shift+E | exit Sway |
|
||||
| Super+Shift+C | reload Sway config |
|
||||
|
||||
Normal application launching is done from the Nebula launcher, not these shortcuts.
|
||||
|
||||
### Rendering
|
||||
|
||||
`scripts/run-nebula-vm.sh` sets `QT_QUICK_BACKEND=software` for the VMware guest GPU. Production `nebula-shell` must not set that variable.
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
#!/bin/sh
|
||||
# Convenience wrapper; the canonical VMware nebula-shell launcher is
|
||||
# scripts/run-nebula-vm.sh
|
||||
script_dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
|
||||
exec /bin/sh "${script_dir}/../../../scripts/run-nebula-vm.sh" "$@"
|
||||
@@ -0,0 +1,39 @@
|
||||
#!/bin/sh
|
||||
# Recommended VMware development session entry point.
|
||||
#
|
||||
# Sets compositor-side development environment (cursor theme, software
|
||||
# cursors if needed) and starts Sway with the Nebula development config.
|
||||
# Sway then autostarts nebula-shell via scripts/run-nebula-vm.sh.
|
||||
#
|
||||
# Usage:
|
||||
# ./compositor/sway/dev/run-sway-vm.sh
|
||||
#
|
||||
# Equivalent:
|
||||
# export XCURSOR_THEME=Adwaita XCURSOR_SIZE=24
|
||||
# sway -c compositor/sway/nebula-sway.conf
|
||||
#
|
||||
# Skip shell autostart:
|
||||
# NEBULA_SHELL_AUTOSTART=0 ./compositor/sway/dev/run-sway-vm.sh
|
||||
|
||||
set -eu
|
||||
|
||||
script_dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
|
||||
repo_root=$(CDPATH= cd -- "${script_dir}/../../.." && pwd)
|
||||
config="${repo_root}/compositor/sway/nebula-sway.conf"
|
||||
|
||||
export XDG_CURRENT_DESKTOP="${XDG_CURRENT_DESKTOP:-NebulaOS}"
|
||||
export XDG_SESSION_DESKTOP="${XDG_SESSION_DESKTOP:-nebula}"
|
||||
export XCURSOR_THEME="${XCURSOR_THEME:-Adwaita}"
|
||||
export XCURSOR_SIZE="${XCURSOR_SIZE:-24}"
|
||||
|
||||
# VMware often needs software cursors. This is development-specific.
|
||||
export WLR_NO_HARDWARE_CURSORS="${WLR_NO_HARDWARE_CURSORS:-1}"
|
||||
|
||||
if [ ! -f "${config}" ]; then
|
||||
echo "nebula: missing Sway config at ${config}" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd "${repo_root}"
|
||||
echo "nebula: starting Sway with ${config}"
|
||||
exec sway -c "${config}" "$@"
|
||||
@@ -2,17 +2,53 @@ set $mod Mod4
|
||||
set $term foot
|
||||
|
||||
# NebulaOS temporary development compositor configuration
|
||||
#
|
||||
# Sway is invisible infrastructure. Nebula Desktop is the visible shell.
|
||||
# Do NOT add a bar block; Nebula provides its own top bar.
|
||||
|
||||
# No Sway wallpaper or UI
|
||||
# -----------------------------------------------------------------------------
|
||||
# Output / resolution
|
||||
# -----------------------------------------------------------------------------
|
||||
# Development default: 1:1 scale, fill the current VMware display.
|
||||
# Request 1920x1080 when the output advertises that mode. If the mode is not
|
||||
# available, Sway keeps the output's preferred mode instead of failing.
|
||||
#
|
||||
# This is a development convenience, not a production architecture requirement.
|
||||
# Inspect modes: swaymsg -t get_outputs
|
||||
# Force another mode (example): swaymsg output <name> mode 1600x900
|
||||
output * scale 1
|
||||
output * mode 1920x1080
|
||||
output * bg #000000 solid_color
|
||||
|
||||
# Development terminal
|
||||
# -----------------------------------------------------------------------------
|
||||
# Cursor
|
||||
# -----------------------------------------------------------------------------
|
||||
# The compositor owns the pointer cursor, not QML.
|
||||
# A branded Nebula cursor theme is a later task.
|
||||
seat * xcursor_theme Adwaita 24
|
||||
# If the cursor is invisible in VMware, start Sway with:
|
||||
# WLR_NO_HARDWARE_CURSORS=1 sway -c compositor/sway/nebula-sway.conf
|
||||
# compositor/sway/dev/run-sway-vm.sh sets that automatically.
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# Nebula shell autostart
|
||||
# -----------------------------------------------------------------------------
|
||||
# Starts nebula-shell through the VMware development wrapper, which sets
|
||||
# QT_QUICK_BACKEND=software. Production sessions must start nebula-shell
|
||||
# without that variable.
|
||||
#
|
||||
# Disable autostart for debugging:
|
||||
# NEBULA_SHELL_AUTOSTART=0 sway -c compositor/sway/nebula-sway.conf
|
||||
#
|
||||
# Run from the repository root so this relative path resolves, or use
|
||||
# compositor/sway/dev/run-sway-vm.sh which does that for you.
|
||||
exec /bin/sh scripts/run-nebula-vm.sh
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# Emergency development shortcuts (not the normal UX)
|
||||
# -----------------------------------------------------------------------------
|
||||
bindsym $mod+Return exec $term
|
||||
|
||||
# Exit compositor
|
||||
bindsym $mod+Shift+e exec swaymsg exit
|
||||
|
||||
# Reload configuration
|
||||
bindsym $mod+Shift+c reload
|
||||
|
||||
# Remove Sway window decorations
|
||||
@@ -21,6 +57,3 @@ default_floating_border pixel 0
|
||||
|
||||
# Basic floating controls for development
|
||||
floating_modifier $mod normal
|
||||
|
||||
# Do NOT add a bar block.
|
||||
# Nebula provides its own top bar.
|
||||
Reference in New Issue
Block a user