id: NL-SPEC-0B9CBD34
type: spec
title: Nuguland bar orientation
Nuguland bar orientation
Behavior
The bar has one global orientation: horizontal or vertical.
The default is horizontal.
The orientation interface accepts either orientation or toggle and returns the resulting orientation.
Unknown input is a no-op returning the current orientation.
Changes apply live and remain consistent across bar and popout geometry.
Layout
Concern
Horizontal
Vertical
Edge
top
left
Span
full width
full height
Thickness
fixed bar height
widest visible compact content
Flow
left to right
top to bottom
Clock
inline hour and minute
stacked hour, rule, minute
Popouts
below the bar
right of the bar
The clock remains the middle zone and never overlaps another bar zone.
Vertical workspace pills remain compact and use the widget-label abbreviation rule.
OSD and toast placement remains independently top-right.
Orientation transitions are immediate.
Abbreviation contract
Drop a, e, i, o, and u, then take the first three characters.
If fewer than three characters remain, take the first three characters of the original label.
Input
Output
notify
ntf
code
cod
media
med
system
sys
audio
aud
power
pwr
Popout constraints
Bar thickness is the only orientation-dependent offset shared with popout geometry.
Vertical popouts use the free area to the right, move rightward, and clamp on the y-axis.
Horizontal popouts use the free area below, move downward, and clamp on the x-axis.
The outside-dismiss region excludes the bar in both orientations.
Acceptance
Horizontal chips share a y-axis and vertical chips share an x-axis in increasing order.
Vertical thickness follows content rather than a fixed width.
The abbreviation self-test passes every required case.
Registered clock geometry does not overlap another bar zone.
Popout state reports the correct origin, constrained axis, and transition direction.
Outside dismissal does not intercept bar clicks.
Returning to horizontal preserves existing behavior.
The compositor keybind toggles orientation.
A human confirms labels, clock, and separator remain legible.
---
id: NL-SPEC-0B9CBD34
type: spec
title: Nuguland bar orientation
---
# Nuguland bar orientation
## Behavior
- The bar has one global orientation: `horizontal` or `vertical`.
- The default is `horizontal`.
- The orientation interface accepts either orientation or `toggle` and returns the resulting orientation.
- Unknown input is a no-op returning the current orientation.
- Changes apply live and remain consistent across bar and popout geometry.
## Layout
| Concern | Horizontal | Vertical |
| --- | --- | --- |
| Edge | top | left |
| Span | full width | full height |
| Thickness | fixed bar height | widest visible compact content |
| Flow | left to right | top to bottom |
| Clock | inline hour and minute | stacked hour, rule, minute |
| Popouts | below the bar | right of the bar |
- The clock remains the middle zone and never overlaps another bar zone.
- Vertical workspace pills remain compact and use the widget-label abbreviation rule.
- OSD and toast placement remains independently top-right.
- Orientation transitions are immediate.
## Abbreviation contract
Drop `a`, `e`, `i`, `o`, and `u`, then take the first three characters.
If fewer than three characters remain, take the first three characters of the original label.
| Input | Output |
| --- | --- |
| `notify` | `ntf` |
| `code` | `cod` |
| `media` | `med` |
| `system` | `sys` |
| `audio` | `aud` |
| `power` | `pwr` |
## Popout constraints
- Bar thickness is the only orientation-dependent offset shared with popout geometry.
- Vertical popouts use the free area to the right, move rightward, and clamp on the y-axis.
- Horizontal popouts use the free area below, move downward, and clamp on the x-axis.
- The outside-dismiss region excludes the bar in both orientations.
## Acceptance
- Horizontal chips share a y-axis and vertical chips share an x-axis in increasing order.
- Vertical thickness follows content rather than a fixed width.
- The abbreviation self-test passes every required case.
- Registered clock geometry does not overlap another bar zone.
- Popout state reports the correct origin, constrained axis, and transition direction.
- Outside dismissal does not intercept bar clicks.
- Returning to horizontal preserves existing behavior.
- The compositor keybind toggles orientation.
- A human confirms labels, clock, and separator remain legible.