think: retire Hyprland + MangoWM; add Umbriel + DMS (niri keybind port, Mod+Space → vicinae) #139

Merged
chad merged 1 commit from think-umbriel-dms into main 2026-11-06 17:46:46 -05:00
Collaborator

The 2026-11 compositor trial concluded. Hyprland and MangoWM are removed everywhere; the second-session role next to niri is now Umbriel (noctalia-dev's wlroots 0.20 compositor) with DMS (Dux Modular Shell, ex-DankMaterialShell) as its shell.

What lands

Image (hosts/thinkpad/host-image/Containerfile)

  • Dropped: the hyprland suite + waybar, the mineiro/hyprland COPR, step 2.4 (uwsm session surgery), step 2.7 (hyprpm build deps).
  • New step 2.8, two isolated transactions (the repo-drift lesson from the first mango attempt):
    • umbriel-nightly + xdg-desktop-portal-umbriel-nightly from Terra (COPRs disabled; wlroots 0.20 / libeis / etc. resolve from Fedora proper)
    • dms / dms-cli / dux-search / dgop / matugen (4.2) from the duxlabs/dms COPR (Terra disabled; quickshell still from errornointernet, matching what dux tests against)

Umbriel config (bubblebox/files/.config/umbriel/config.toml) — a section-by-section port of the niri config:

  • Outputs 1:1 (eDP-1 anchor, both P3225QEs by monitor identity, DP-3/DP-5 home dock), caps:swapescape, touchpad tap/natural/0.22, Bibata cursor 18, gaps 8 / border 2 / radius 12.
  • Mod+Space → vicinae toggle preserved verbatim (the one bind that must never change).
  • Focus/movement/sizing/window-state/monitor binds mapped to umbriel actions (e.g. niri's move-column-to-workspace-down → window-move-to-workspace-next; focus-monitor-* → output-focus-*; maximize-column → window-toggle-maximize).
  • Media keys stay pipewire-native (wpctl/brightnessctl, allow_when_locked) — same as the niri session.
  • DMS toggles on the spare dux stock binds (spotlight/clipboard skipped — Mod+Space and Mod+V are niri-port binds).
  • Window/layer rules: the niri float rules + dms namespaces (blur split per the packaged config pattern).
  • Validated with the real umbriel config validate against the actual Terra nightly rpm (fetched and run against its own Fedora-44 lib set here).

DMS service (bubblebox/units/dms-umbriel.service) — faithful copy of the rpm's dms.service, bound to umbriel-session.target so DMS never runs in niri (Ambxst stays niri-only) or GNOME. Separate unit name keeps the rpm unit unshadowed.

Lock — profile.lock realized for the new [[files]]/[[units]] entries and the removed ones (blobs = sha256 of the new contents). Run cjust bubblebox-apply on think after merge to pick it up.

Gates

  • hosts/bees/thinkpad-image-verify.sh: requires niri + umbriel sessions and /usr/bin/{umbriel,dms}; rejects resurrected hyprland / hyprland-uwsm / mango sessions.
  • Post-boot health: adds the umbriel session, umbriel/dms binaries, dms-umbriel.service failure check.

Removed: hosts/thinkpad/hyprland/ kit (runbook stays in git history), hyprland.lua / mango config.conf / uwsm wayland-session desktop file.

niri + Ambxst are untouched.

Verification so far

  • umbriel config validate → ok (real binary, real rpm).
  • RPM-level: umbriel-nightly + portal exist in terra44 x86_64 (checked repodata); dms 2.1.1 + dux-repo companions exist in the duxlabs COPR for fc44; every umbriel dep resolves from Fedora 44 proper (checked against full F44 + updates metadata).
  • The full image build is exercised by the thinkpad-image CI job on bees (gated on hosts/thinkpad/** changes — this PR trips it).

Notes / accepted risks

  • Terra is a nightly cadence (0^20261105git...) — umbriel is young and its config keys can change; the config gate is umbriel config validate at edit time.
  • DMS's native umbriel support covers bar/workspaces/lock (no native overview integration — Mod+O is umbriel's own overview, which is fine).
  • vicinae stays the launcher on Mod+Space; DMS's spotlight stays reachable on its own Mod bind if you want to try it (not bound by default here).
The 2026-11 compositor trial concluded. Hyprland and MangoWM are removed everywhere; the second-session role next to niri is now **Umbriel** (noctalia-dev's wlroots 0.20 compositor) with **DMS** (Dux Modular Shell, ex-DankMaterialShell) as its shell. ## What lands **Image** (`hosts/thinkpad/host-image/Containerfile`) - Dropped: the hyprland suite + waybar, the `mineiro/hyprland` COPR, step 2.4 (uwsm session surgery), step 2.7 (hyprpm build deps). - New step 2.8, two isolated transactions (the repo-drift lesson from the first mango attempt): - `umbriel-nightly` + `xdg-desktop-portal-umbriel-nightly` from **Terra** (COPRs disabled; wlroots 0.20 / libeis / etc. resolve from Fedora proper) - `dms` / `dms-cli` / `dux-search` / `dgop` / `matugen` (4.2) from the **duxlabs/dms COPR** (Terra disabled; quickshell still from errornointernet, matching what dux tests against) **Umbriel config** (`bubblebox/files/.config/umbriel/config.toml`) — a section-by-section port of the niri config: - Outputs 1:1 (eDP-1 anchor, both P3225QEs by monitor identity, DP-3/DP-5 home dock), caps:swapescape, touchpad tap/natural/0.22, Bibata cursor 18, gaps 8 / border 2 / radius 12. - **Mod+Space → `vicinae toggle` preserved verbatim** (the one bind that must never change). - Focus/movement/sizing/window-state/monitor binds mapped to umbriel actions (e.g. niri's `move-column-to-workspace-down` → `window-move-to-workspace-next`; `focus-monitor-*` → `output-focus-*`; `maximize-column` → `window-toggle-maximize`). - Media keys stay pipewire-native (wpctl/brightnessctl, `allow_when_locked`) — same as the niri session. - DMS toggles on the spare dux stock binds (spotlight/clipboard skipped — Mod+Space and Mod+V are niri-port binds). - Window/layer rules: the niri float rules + dms namespaces (blur split per the packaged config pattern). - **Validated with the real `umbriel config validate`** against the actual Terra nightly rpm (fetched and run against its own Fedora-44 lib set here). **DMS service** (`bubblebox/units/dms-umbriel.service`) — faithful copy of the rpm's `dms.service`, bound to `umbriel-session.target` so DMS never runs in niri (Ambxst stays niri-only) or GNOME. Separate unit name keeps the rpm unit unshadowed. **Lock** — `profile.lock` realized for the new `[[files]]`/`[[units]]` entries and the removed ones (blobs = sha256 of the new contents). **Run `cjust bubblebox-apply` on think after merge** to pick it up. **Gates** - `hosts/bees/thinkpad-image-verify.sh`: requires `niri` + `umbriel` sessions and `/usr/bin/{umbriel,dms}`; rejects resurrected `hyprland` / `hyprland-uwsm` / `mango` sessions. - Post-boot health: adds the umbriel session, `umbriel`/`dms` binaries, `dms-umbriel.service` failure check. **Removed**: `hosts/thinkpad/hyprland/` kit (runbook stays in git history), hyprland.lua / mango config.conf / uwsm wayland-session desktop file. niri + Ambxst are untouched. ## Verification so far - `umbriel config validate` → ok (real binary, real rpm). - RPM-level: umbriel-nightly + portal exist in terra44 x86_64 (checked repodata); dms 2.1.1 + dux-repo companions exist in the duxlabs COPR for fc44; every umbriel dep resolves from Fedora 44 proper (checked against full F44 + updates metadata). - The full image build is exercised by the `thinkpad-image` CI job on bees (gated on `hosts/thinkpad/**` changes — this PR trips it). ## Notes / accepted risks - Terra is a **nightly** cadence (`0^20261105git...`) — umbriel is young and its config keys can change; the config gate is `umbriel config validate` at edit time. - DMS's native umbriel support covers bar/workspaces/lock (no native overview integration — Mod+O is umbriel's own overview, which is fine). - vicinae stays the launcher on Mod+Space; DMS's spotlight stays reachable on its own Mod bind if you want to try it (not bound by default here).
think: retire Hyprland + MangoWM; Umbriel + DMS as the second session
All checks were successful
ci / changes (pull_request) Successful in 2s
ci / check (pull_request) Successful in 16s
ci / thinkpad-image (pull_request) Successful in 6m8s
e9538588da
The 2026-11 compositor trial concluded. Hyprland (mineiro COPR suite, uwsm
session, hyprpm build deps) and MangoWM (Terra) are removed everywhere;
the second-session role next to niri is now Umbriel (noctalia-dev,
wlroots 0.20) with DMS (Dux Modular Shell, ex-DankMaterialShell) as its
shell.

- Containerfile: drop the hyprland suite + waybar, step 2.4 (uwsm session
  surgery) and step 2.7 (hyprpm build deps); step 2.8 installs
  umbriel-nightly + xdg-desktop-portal-umbriel-nightly (Terra, COPRs
  disabled in that transaction) and dms/dms-cli/dux-search/dgop/matugen
  4.2 (duxlabs/dms COPR, Terra disabled) — same repo-isolation pattern
  the first mango attempt taught us.
- bubblebox: new .config/umbriel/config.toml — a section-by-section port
  of the niri keybinds (outputs, caps:swapescape, touchpad, Bibata
  cursor, gaps 8 / border 2 / radius 12, media keys on wpctl), with
  Mod+Space -> vicinae preserved verbatim; DMS toggles on the spare dux
  stock binds. Validated with the real umbriel config-validate against
  the Terra nightly rpm. New dms-umbriel.service unit binds DMS to
  umbriel-session.target (rpm unit kept unshadowed); ambxst stays
  niri-only. Retired files/units removed; profile.lock realized to
  match (sha256 blobs; re-run cjust bubblebox-apply on think to pick it
  up — the lock id is regenerated).
- gates: thinkpad-image-verify now requires niri + umbriel sessions and
  /usr/bin/{umbriel,dms}, and rejects resurrected
  hyprland/hyprland-uwsm/mango sessions; post-boot health checks the
  umbriel session + dms binary and dms-umbriel.service.
- portals.conf narrative updated (umbriel portal covers
  ScreenCast/Screenshot/InputCapture; FileChooser stays pinned to gnome).
- hosts/thinkpad/hyprland/ kit deleted (runbook lives in git history).

niri + Ambxst are untouched.
chad approved these changes 2026-11-06 17:35:03 -05:00
chad merged commit b3eb71116f into main 2026-11-06 17:46:46 -05:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
chad/cn!139
No description provided.