Add a collapsible per-channel side-panel drawer (#31) #32

Merged
pedromcaraujo merged 1 commit from panel-drawer into main 2026-08-26 11:48:39 +01:00

Step 1 of #31 — the side-panel drawer shell and its config plumbing, no data yet.

What's here

  • modules/forge.nix — each channel gains an optional panel submodule: type (enum, currently forgejo-issues), title, and the server-only repo / baseUrl / tokenFile (documented as never entering the Nix store or the browser).
  • modules/launcher.nixchannels.json carries a non-secret panel { type, title } descriptor for channels that have one; repo/baseUrl/tokenFile stay server-side for the coming forge-panel sidecar.
  • web/index.html<main> becomes a flex row of terminal + a collapsible right drawer. Collapsed, only a thin pull-tab rail shows on the right edge; the open/closed choice persists per-device in localStorage (forge-panel-open), mirroring the theme toggle. The drawer appears only for channels with a panel, inherits the theme via existing CSS vars, and overlays rather than splits on screens ≤700px (kept clear of the mobile keybar/composebar). Body is a placeholder until step 2.

Verification

  • check-launcher.mjs JS parse check passes.
  • Full nixosSystem eval: a panel channel resolves (app.panel.title), a plain channel keeps panel = null.
  • Built the launcher static and read the generated file: [{"key":"1","name":"app","panel":{"title":"Tasks","type":"forgejo-issues"}},{"key":"2","name":"plain"}] — panel present, secrets absent.

Deferred to later steps of #31

The forge-panel sidecar, the Forgejo API reads, click-to-inject, and quick-add. This PR is just the shell they plug into.

Refs #31.

Step 1 of #31 — the side-panel drawer shell and its config plumbing, no data yet. ## What's here - **`modules/forge.nix`** — each channel gains an optional `panel` submodule: `type` (enum, currently `forgejo-issues`), `title`, and the server-only `repo` / `baseUrl` / `tokenFile` (documented as never entering the Nix store or the browser). - **`modules/launcher.nix`** — `channels.json` carries a non-secret `panel { type, title }` descriptor for channels that have one; `repo`/`baseUrl`/`tokenFile` stay server-side for the coming `forge-panel` sidecar. - **`web/index.html`** — `<main>` becomes a flex row of terminal + a collapsible right drawer. Collapsed, only a thin pull-tab rail shows on the right edge; the open/closed choice persists per-device in `localStorage` (`forge-panel-open`), mirroring the theme toggle. The drawer appears only for channels with a `panel`, inherits the theme via existing CSS vars, and **overlays** rather than splits on screens ≤700px (kept clear of the mobile keybar/composebar). Body is a placeholder until step 2. ## Verification - `check-launcher.mjs` JS parse check passes. - Full `nixosSystem` eval: a panel channel resolves (`app.panel.title`), a plain channel keeps `panel = null`. - Built the launcher static and read the generated file: `[{"key":"1","name":"app","panel":{"title":"Tasks","type":"forgejo-issues"}},{"key":"2","name":"plain"}]` — panel present, secrets absent. ## Deferred to later steps of #31 The `forge-panel` sidecar, the Forgejo API reads, click-to-inject, and quick-add. This PR is just the shell they plug into. Refs #31.
Add a collapsible per-channel side-panel drawer (#31)
All checks were successful
CI / check (pull_request) Successful in 21s
aaef5d3792
First slice of the pluggable side panel: the drawer shell and its config
plumbing, no data yet.

- forge.nix: each channel gains an optional `panel` submodule (type, title,
  and the server-only repo/baseUrl/tokenFile).
- launcher.nix: channels.json carries a non-secret `panel { type, title }`
  descriptor; repo/baseUrl/tokenFile stay server-side for the coming sidecar.
- index.html: <main> becomes a flex row of terminal + a collapsible right
  drawer. Collapsed, only a pull-tab rail shows; the open/closed choice
  persists per-device in localStorage like the theme. Shown only for channels
  with a `panel`; overlays instead of splitting on narrow screens.

The forge-panel sidecar and the forgejo-issues renderer follow in later steps.
Sign in to join this conversation.
No reviewers
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
pedromcaraujo/forge!32
No description provided.