Extract first-party extensions into their own repositories and packages #57

Closed
opened 2026-09-23 23:21:14 +02:00 by morten-olsen · 1 comment
Owner

Problem

Every first-party extension ships inside the core orbit package, so none can be removed or released without rebuilding the Host.

Scope

  • Extract every first-party extension except orbit.launcher into a public orbit/orbit-<name> repository, keeping its history, extension id and contribution ids, and adding a PKGBUILD (arch=(any), installing into /usr/share/orbit/extensions/orbit.<name>/) and a LICENSE.
  • Pin each one under extensions/ as a submodule, using a relative URL.
  • In the core PKGBUILD, install only orbit.launcher from extensions/, point url at orbit/orbit, and add an orbit-desktop split package that depends on orbit and every first-party extension package.
  • Update the development docs and AGENTS.md for submodules, and the install guide for the package layout.

No dependency moves: the tools the extensions use (cliphist, ghostty, hyprctl) are also used by the Host or its Hyprland config.

Acceptance criteria

  • git clone --recurse-submodules https://code.olsen.cloud/orbit/orbit gives the pinned first-party set, and the dev shell shows every extension active from extensions/.
  • Every orbit/orbit-* repository is public and carries its extension's history.
  • Each extension's package() installs exactly its extension into /usr/share/orbit/extensions/orbit.<name>/, and the result validates.
  • The core package installs no first-party extension but the launcher.

Refs #47

## Problem Every first-party extension ships inside the core `orbit` package, so none can be removed or released without rebuilding the Host. ## Scope - Extract every first-party extension except `orbit.launcher` into a public `orbit/orbit-<name>` repository, keeping its history, extension id and contribution ids, and adding a `PKGBUILD` (`arch=(any)`, installing into `/usr/share/orbit/extensions/orbit.<name>/`) and a `LICENSE`. - Pin each one under `extensions/` as a submodule, using a relative URL. - In the core `PKGBUILD`, install only `orbit.launcher` from `extensions/`, point `url` at `orbit/orbit`, and add an `orbit-desktop` split package that depends on `orbit` and every first-party extension package. - Update the development docs and `AGENTS.md` for submodules, and the install guide for the package layout. No dependency moves: the tools the extensions use (`cliphist`, `ghostty`, `hyprctl`) are also used by the Host or its Hyprland config. ## Acceptance criteria - `git clone --recurse-submodules https://code.olsen.cloud/orbit/orbit` gives the pinned first-party set, and the dev shell shows every extension active from `extensions/`. - Every `orbit/orbit-*` repository is public and carries its extension's history. - Each extension's `package()` installs exactly its extension into `/usr/share/orbit/extensions/orbit.<name>/`, and the result validates. - The core package installs no first-party extension but the launcher. Refs #47
Author
Owner

Done in 0308ea0. The 12 repositories orbit/orbit-{appearance,applications,audio,clipboard,clock,compositor,notifications,power,screenshot,session,settings,terminal} are public (checked anonymously) and carry their extension's history; their packaging commit is signed, and the rewritten history commits are unsigned because rewriting drops signatures. An anonymous 'git clone --recurse-submodules https://code.olsen.cloud/orbit/orbit' gives the pinned set, and the dev shell showed all 13 extensions active from extensions/. Each package() was dry-run in the VM: it installs exactly its extension, the result validates, and a pkgver that differs from the manifest fails the build. The core package() installs only orbit.launcher. scripts/install was exercised with stubbed makepkg/pacman: 12 extension builds, the core build, one pacman -U with 14 artifacts, then the extensions marked as dependencies. Not run on a real Arch machine.

Done in 0308ea0. The 12 repositories orbit/orbit-{appearance,applications,audio,clipboard,clock,compositor,notifications,power,screenshot,session,settings,terminal} are public (checked anonymously) and carry their extension's history; their packaging commit is signed, and the rewritten history commits are unsigned because rewriting drops signatures. An anonymous 'git clone --recurse-submodules https://code.olsen.cloud/orbit/orbit' gives the pinned set, and the dev shell showed all 13 extensions active from extensions/. Each package() was dry-run in the VM: it installs exactly its extension, the result validates, and a pkgver that differs from the manifest fails the build. The core package() installs only orbit.launcher. scripts/install was exercised with stubbed makepkg/pacman: 12 extension builds, the core build, one pacman -U with 14 artifacts, then the extensions marked as dependencies. Not run on a real Arch machine.
morten-olsen 2026-09-23 23:28:00 +02:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
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
orbit/orbit#57
No description provided.