No description
  • TypeScript 95.9%
  • Lua 2.7%
  • Shell 1.1%
  • CSS 0.3%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Morten Olsen 4f5b55202c
All checks were successful
ci/woodpecker/push/compliance Pipeline was successful
ci/woodpecker/push/quality Pipeline was successful
ci/woodpecker/push/draft-release Pipeline was successful
ci/woodpecker/cron/renovate Pipeline was successful
Fix Orbit graphical session startup
2026-09-21 11:26:52 +02:00
.woodpecker feat: add drafted binary releases 2026-09-20 20:05:29 +02:00
assets/wallpapers init 2026-09-08 09:07:54 +02:00
bin feat: add drafted binary releases 2026-09-20 20:05:29 +02:00
config Fix Orbit graphical session startup 2026-09-21 11:26:52 +02:00
docs feat: add NetworkManager WiFi panel 2026-09-20 21:43:05 +02:00
packages feat: add audio volume control panel 2026-09-20 19:01:42 +02:00
scripts feat: add drafted binary releases 2026-09-20 20:05:29 +02:00
src feat: add NetworkManager WiFi panel 2026-09-20 21:43:05 +02:00
systemd/user refactor: complete package architecture migration 2026-09-20 17:28:18 +02:00
.dependency-cruiser-known-violations.json refactor: complete package architecture migration 2026-09-20 17:28:18 +02:00
.dependency-cruiser.cjs feat: add NetworkManager WiFi panel 2026-09-20 21:43:05 +02:00
.gitignore feat: add drafted binary releases 2026-09-20 20:05:29 +02:00
.markdownlint-cli2.jsonc init 2026-09-08 09:07:54 +02:00
.taskrc.yml feat: add drafted binary releases 2026-09-20 20:05:29 +02:00
AGENTS.md feat: add drafted binary releases 2026-09-20 20:05:29 +02:00
biome.json init 2026-09-08 09:07:54 +02:00
bun.lock refactor: complete package architecture migration 2026-09-20 17:28:18 +02:00
CLAUDE.md init 2026-09-08 09:07:54 +02:00
mise.toml feat: add drafted binary releases 2026-09-20 20:05:29 +02:00
package.json feat: add drafted binary releases 2026-09-20 20:05:29 +02:00
README.md feat: add drafted binary releases 2026-09-20 20:05:29 +02:00
renovate.json feat: add drafted binary releases 2026-09-20 20:05:29 +02:00
Taskfile.yml feat: add drafted binary releases 2026-09-20 20:05:29 +02:00
tsconfig.json init 2026-09-08 09:07:54 +02:00

Orbit

Orbit is a personal-first, reusable desktop layer for Arch Linux, Wayland, and Hyprland. It owns the complete graphical session and grows into a keyboard-first command center without taking ownership of shell, editor, or interactive-terminal configuration.

Orbit now owns and reconciles the live graphical session. Its resident service and OpenTUI launcher replace Wofi for applications, typed commands, clipboard history, open-window control, and tmux sessions.

Scope

Orbit will own:

  • Hyprland, Hyprlock, Hypridle, Waybar, Mako, launcher, wallpaper, and session startup configuration.
  • Required Arch packages for the graphical session.
  • An idempotent apply/doctor workflow driven from this Git checkout.
  • A single orbit CLI with resident-daemon and transient-client modes.
  • A terminal-rendered omni menu, global copy/paste behavior, desktop themes, and provider integrations.

Orbit will not own shell/editor configuration, the normal terminal configuration, development or compute toolchains, Steam installation, GPU drivers, or other Linux distributions. ../dotfiles and Orbit remain operationally independent.

Design

Installation and reconciliation

Install or update to the latest checksum-verified release, then run Orbit's interactive desktop reconciliation:

curl -fsSL https://code.olsen.cloud/envs/desktop/raw/branch/main/scripts/install.sh | bash

The script atomically installs the supported Linux x64 binary at $HOME/.local/bin/orbit. Re-running the same command updates Orbit. From a source checkout, build and install the current revision instead:

./bin/orbit install

That source installer provisions the pinned tools and locked dependencies, runs the complete quality gate, builds and installs one standalone executable, materializes embedded desktop defaults, displays the exact reconciliation plan, requires explicit confirmation, applies that reviewed digest, refreshes an active Hyprland session, and finishes with orbit doctor.

Task is the shared local and CI entry point:

mise install
task install
task ci:quality
task build
./bin/orbit capabilities --json
./bin/orbit apply --dry-run
./bin/orbit apply --expect-plan <digest>
./bin/orbit doctor
./bin/orbit menu
./bin/orbit menu --provider clipboard
systemctl --user status orbit-daemon.service
./bin/orbit panel orbit search

orbit apply never mutates from an unreviewed plan. Run the dry-run, then pass its digest to orbit apply --expect-plan <digest>. Automation should add --json; stdout is one versioned document and prompts are forbidden. orbit install is human-only and uses the same reviewed-plan operation.

$XDG_CONFIG_HOME/hypr/hyprland.lua is seeded once and remains user-owned. It imports Orbit's managed $XDG_CONFIG_HOME/hypr/orbit.lua; add any native Hyprland Lua after that import for machine-specific devices, monitors, bindings, or other overrides. Reconciliation updates the imported core without overwriting the user-owned file.

Releases

Pushes to main update a draft release from conventional commits after the quality and compliance workflows pass. Review that draft in Forgejo, then publish it by pushing its annotated tag:

git tag -m "vX.Y.Z" vX.Y.Z
git push origin vX.Y.Z

The tag pipeline reruns the quality gate, builds orbit-linux-x64, and attaches the binary plus its SHA-256 checksum to the release.

Launcher controls

Omni search is the built-in orbit/search panel. Provider panels are loaded on demand and may reuse Orbit's shared OpenTUI components and theme tokens to match its style.

  • Before typing, omni search shows only provider panels.
  • Type to search panel names plus records from shared indexes.
  • Clipboard records remain private to the Clipboard History panel; opening a provider panel searches that provider's shared and internal indexes.
  • Ctrl+J / Ctrl+K move down / up. Arrow keys remain accepted.
  • Enter opens a panel or runs the primary action: launch an application or command, focus a window, or switch the most recently active tmux client to a session.
  • Ctrl+O opens the selected record's action chooser. Window close, explicit tmux attach-in-new-terminal, and tmux session kill are secondary actions there.
  • Escape returns from the action chooser or provider panel, then closes the menu.

Use task format to apply formatting. task ci:quality covers formatting, source/documentation linting, strict TypeScript, and Bun tests with coverage.