Versions in this module Expand all Collapse all v0 v0.2.0 Oct 4, 2026 v0.1.2 Oct 4, 2026 v0.1.1 Oct 4, 2026 v0.1.0 Oct 4, 2026 Changes in this version + const AppIconPx + const AwaitPoll + const BrightnessMax + const ButtonBarH + const ButtonW + const CascadeStep + const ComfortableYawDeg + const ControlH + const ControlW + const DefaultBadgeSeconds + const DefaultBend + const DefaultColumns + const DefaultFOVDeg + const DefaultGapPx + const DefaultNoticeSeconds + const DefaultScreens + const DefaultSeamPx + const DefaultSplayDeg + const DistanceStep + const EnvConfig + const FanReach + const FlatBend + const FrameInterval + const GlassesBrightness + const GlassesFilm + const GlassesIconPx + const GlassesTileW + const GlassesVolume + const GroupBand + const GroupDistance + const GroupScreens + const JournalDirEnv + const MaxAspectDen + const MaxAspectNum + const MaxDistance + const MaxFacetDeg + const MaxFacets + const MaxScreens + const MaxSlantDeg + const MaxSplayDeg + const MinAspectDen + const MinAspectNum + const MinDistance + const MinReachDeg + const PageSpacing + const PhotoDirEnv + const PhotoWait + const PhotoWarmUp + const RemovalBudget — darwin/amd64 + const SelectionWidth + const SettingsFontPx + const SettingsPadX + const SettingsPadY + const SettingsRoom + const SettingsWidth + const SnapshotSettle + const SplayStep + const SwitchH + const SwitchW + const SysfsUSB + const TrayIconPx + const TrayLabel + const TrayQueue + const TrayRowPx + const TraySymbol + const TrayTitle + const TrayTooltip + const VolumeMax + const Witnesses + var DefaultBackground = [4]byte + var DefaultLadder = []hotkey.Modifier + var DotInk = SelectionInk + var ErrAlreadyShown = errors.New("desk: that source is already on the ribbon") + var ErrAwaitQuit = errors.New("desk: asked to quit while waiting for a display") + var ErrAwaitResume = errors.New("desk: asked to use the glasses again") + var ErrAwaitSettings = errors.New("desk: asked for the settings while waiting for a display") + var ErrConfig = errors.New("desk: unusable settings") + var ErrCrashed = errors.New("desk: the frame loop crashed") + var ErrFOV = errors.New("desk: unusable field of view") + var ErrNoAppBundle = errors.New(...) + var ErrNoApps = errors.New("desk: no application with a window") + var ErrNoCameraHead = errors.New(...) — js/wasm, linux/amd64, windows/amd64 + var ErrNoDimming = errors.New("desk: darkening a display is not available on this platform") + var ErrNoGlasses3D = errors.New("desk: the glasses would not change mode") + var ErrNoHostDisplay = errors.New("desk: no display this desk did not make") + var ErrNoMicrophone = errors.New("desk: no microphone this can silence") + var ErrNoPlatform = errors.New("desk: no screen capture on this platform yet") — js/wasm + var ErrNoPointer = errors.New("desk: no way to move the pointer on this platform") — js/wasm, linux/amd64, windows/amd64 + var ErrNoRoomCamera = errors.New("desk: the headset's camera was not found") + var ErrNoScreens = errors.New("desk: no screens") + var ErrNoSetting = errors.New("desk: these glasses do not offer that setting") + var ErrNoSideBySide = errNoSideBySide + var ErrNoSuchApp = errors.New("desk: no such application") + var ErrNoSuchOffer = errors.New("desk: no such source") + var ErrPointerLost = errors.New("desk: cannot read the pointer's position") + var ErrPosition = errors.New("desk: no such ribbon position") + var ErrScreens = errors.New("desk: unusable number of screens") + var GlassesGet = func(id byte) (uint16, error) + var GlassesSet = func(id byte, value uint16) error + var SelectionInk = toolkit.RGB(0x7B, 0xD8, 0x8F) + var Set3D = func(on bool) error + var TheMicrophone = func() (Microphone, error) + var WaitingInk = toolkit.RGB(0xE0, 0x6C, 0x6C) + func AskedFor(all []Shortcut) map[Action]hotkey.Combo + func Await(ctx context.Context, opt AwaitOptions) (glasses.Display, error) + func BadgeDuration(seconds float64) time.Duration + func Billboards() []glasses.USB + func BringPointer([]uint64, int) error — js/wasm, linux/amd64, windows/amd64 + func BringPointer(ids []uint64, screen int) error — darwin/amd64 + func ConfigPath() (string, error) + func DamagedWitnesses(ws []string) []int + func DarkNotePath() (string, error) + func DescribeWidths(widths []int, h int) string + func DisplayAt(x, y, w, h float64) (uint64, bool) + func DisplayOf(o Offer) (uint64, bool) + func DisplayOfferID(id uint64) string + func EvidenceFor(d glasses.Display, _ bool, us []glasses.USB) *glasses.USB + func FitScale(want float64, maxW, maxH int, size func(float64) (int, int)) float64 + func HeadOffer(widest, viewW int, key string, why error) string + func HeadYawFor(views, fovDeg float64) float64 + func HeadsetCamera(display string) string — darwin/amd64 + func HeadsetCamera(string) string — js/wasm, linux/amd64, windows/amd64 + func HostDisplay([]uint64) (uint64, error) — js/wasm, linux/amd64, windows/amd64 + func HostDisplay(ours []uint64) (uint64, error) — darwin/amd64 + func JournalPath(at time.Time) (string, error) + func LogPermissions(func(string, ...any)) — js/wasm, linux/amd64, windows/amd64 + func LogPermissions(logf func(string, ...any)) — darwin/amd64 + func Mirrors(on []Offer, ours []uint64, own uint64) []uint64 + func NewWitnesses() []string + func Nudge(id byte, by int, max uint16) (uint16, error) + func OwnDisplay(name string) (uint64, bool) + func Peripherals() []glasses.USB + func PhotoPath(at time.Time) (string, error) + func PointerHome() func() + func PointerToHost([]uint64) error — js/wasm, linux/amd64, windows/amd64 + func PointerToHost(ours []uint64) error — darwin/amd64 + func PutBackWhatWasLeftDark() ([]string, error) + func Recall(b Bench, display uint64, places []Placement) ([]string, error) + func RememberScreens(path string, n int) error + func RoomCamera(named, display string) (string, error) + func Run(ctx context.Context, plan Plan, d *Desk, opt RunOptions) error + func RunSettings(opt SettingsOptions) error + func Safely(logf func(string, ...any), fn func()) (err error) + func SelfCheck() string + func Send(b Bench, ids []uint64, places []Placement) ([]string, error) + func SetTracking(int, bool) error — js/wasm, linux/amd64, windows/amd64 + func SetTracking(mode int, recentre bool) error — darwin/amd64 + func SettingsScale(displayH int) float64 + func ShouldChoose(cfg Config, screen string, attached []glasses.USB) bool + func TakePhoto(camera string, logf func(string, ...any)) (string, error) + func ToggleMic() (name string, off bool, err error) + func TrayIcon(px int, live bool) ([]byte, error) + func WhyTheHeadCannotBeFollowed() error + func WitnessLen(i int) int + func WitnessReport(hit []int, total int) string + func WitnessText(i int) string + func WritePhoto(p Picture, at time.Time) (string, error) + type Action int + const ActionApps + const ActionAppsOpen + const ActionBrighter + const ActionCapture + const ActionChoose + const ActionCloser + const ActionCycle + const ActionDeskFacesMe + const ActionDeskStaysPut + const ActionDimmer + const ActionDown + const ActionFit + const ActionFlatWide + const ActionFlatter + const ActionFollowHead + const ActionFullscreen + const ActionFurther + const ActionGallery + const ActionGalleryClose + const ActionGalleryOpen + const ActionGather + const ActionLouder + const ActionMic + const ActionMute + const ActionNext + const ActionNone + const ActionPassthrough + const ActionPause + const ActionPhoto + const ActionPoint + const ActionPointHome + const ActionPrev + const ActionQuieter + const ActionQuit + const ActionRecenter + const ActionRemove + const ActionRounder + const ActionScreen1 + const ActionScreen2 + const ActionScreen3 + const ActionScreen4 + const ActionScreen5 + const ActionScreen6 + const ActionScreen7 + const ActionScreen8 + const ActionScreen9 + const ActionSettings + const ActionSpread + const ActionStereo3D + const ActionStereo3DOff + const ActionStereo3DOn + const ActionTrackAnchored + const ActionTrackOff + const ActionTrackSmooth + const ActionUp + const ActionWrapWide + func KeyAction(code string) Action + func (a Action) String() string + type Anchoring int + const AnchorFixed + const AnchorOnGaze + func (a Anchoring) String() string + type App struct + Icon *Icon + Minimized int + Name string + On []int + PID int32 + Windows int + func AppsFrom(list []accessibility.WindowInfo, ids []uint64) []App + func (a App) Here() bool + func (a App) String() string + type AwaitOptions struct + Actions <-chan Action + Asked bool + Every time.Duration + Hotkeys *hotkey.Options + List func() ([]glasses.Display, error) + Logf func(string, ...any) + Resting bool + Resume []Shortcut + Want string + type Bench interface + Displays func() ([]accessibility.Display, error) + Listing func() ([]accessibility.WindowInfo, error) + Trusted func() bool + Windows func(app string) ([]accessibility.Window, []string, error) + func TheBench() Bench + type CameraHead struct + func OpenCameraHead(display string) (*CameraHead, error) + func OpenCameraHead(string) (*CameraHead, error) + func (h *CameraHead) Close() error + func (h *CameraHead) Recenter() + func (h *CameraHead) Yaw() (float64, Sight) + type Canvas struct + H int + Pix []byte + W int + func NewCanvas(w, h int) *Canvas + func (c *Canvas) Blit(b ribbon.Blit, src Source) + func (c *Canvas) Compose(blits []ribbon.Blit, sources []Source, background [4]byte) + func (c *Canvas) ComposeSlants(slants []Slant, sources []Source, background [4]byte) + func (c *Canvas) Fill(px [4]byte) + func (c *Canvas) Slant(s Slant, src Source) + type Closer interface + Close func() error + type Config struct + Fallback *[]string + Glasses *ConfigGlasses + Places []ConfigPlace + Ribbon *ConfigRibbon + Shortcuts []ConfigShortcut + func LoadConfig() (Config, error) + func LoadConfigFile(path string) (Config, error) + func (c Config) Anchoring() Anchoring + func (c Config) BadgeSeconds() float64 + func (c Config) Bend() float64 + func (c Config) BendChosen() (float64, bool) + func (c Config) Bytes() []byte + func (c Config) Dim() bool + func (c Config) Distance() float64 + func (c Config) HotkeyOptions() *hotkey.Options + func (c Config) Immersive() bool + func (c Config) Ladder() []hotkey.Modifier + func (c Config) Mirror() bool + func (c Config) Model() string + func (c Config) Placements() []Placement + func (c Config) Save() (string, error) + func (c Config) SaveTo(path string) error + func (c Config) Screens() int + func (c Config) ShortcutsOr(base []Shortcut) []Shortcut + func (c Config) SplayDeg() float64 + func (c Config) Wide() int + type ConfigGlasses struct + Model *string + type ConfigPlace struct + App string + Screen int + type ConfigRibbon struct + BadgeSeconds *float64 + Bend *float64 + Dim *bool + Distance *float64 + FacesMe *bool + Immersive *bool + Mirror *bool + Screens *int + Splay *float64 + Wide *int + type ConfigShortcut struct + Action string + Keys string + type Desk struct + Background [4]byte + OnAdd func() (Feed, error) + OnApps func() ([]App, error) + OnCycle func(pos int) + OnFollowingHead func(on bool) + OnGather func(places []Placement) + OnPassthrough func() (Feed, error) + OnPhoto func() (string, error) + OnPlace func(places []Placement) + OnPoint func(pos int) + OnPointHome func() error + OnRemove func(pos int, f Feed) + OnScreens func(count int) + OnStereo3D func(on bool) + OnTracking func(mode int, recentre bool) error + func New(plan Plan, feeds []Feed) (*Desk, error) + func (d *Desk) Advance(dt float64) + func (d *Desk) Badge(seconds float64, theme *toolkit.Theme, logf func(string, ...any)) + func (d *Desk) Canvas() *Canvas + func (d *Desk) Click(x, y int) bool + func (d *Desk) Close() error + func (d *Desk) Distance() float64 + func (d *Desk) Do(a Action) + func (d *Desk) Err() error + func (d *Desk) Facets() int + func (d *Desk) FeedAt(i int) Feed + func (d *Desk) Focus() int + func (d *Desk) FollowHead(on bool) + func (d *Desk) FollowingHead() bool + func (d *Desk) Grow(f Feed) (int, error) + func (d *Desk) InGallery() bool + func (d *Desk) Look(pos int) error + func (d *Desk) Nav() *ribbon.Nav + func (d *Desk) Plan() Plan + func (d *Desk) Quit() bool + func (d *Desk) RecenterHead() + func (d *Desk) Render() *Canvas + func (d *Desk) SetFeed(i int, f Feed) (Feed, error) + func (d *Desk) SetHeadSource(src HeadSource) + func (d *Desk) Shrink(pos int) (Feed, error) + func (d *Desk) WantedStereo3D() bool + func (d *Desk) WantsPause() bool + func (d *Desk) WantsSettings() bool + type Dimmer struct + func (m *Dimmer) Dark() int + func (m *Dimmer) Note() error + func (m *Dimmer) Restore() error + func (m *Dimmer) Showing(ids []uint64) error + type Fan struct + func NewFan(plan Plan) (*Fan, error) + func (f *Fan) Facets() int + func (f *Fan) Frame(dst []Slant, focus int, toward float64) []Slant + func (f *Fan) PanelsOf(s int) int + func (f *Fan) SetAnchoring(a Anchoring) + func (f *Fan) SetBends(c []float64) + func (f *Fan) SetSourceWidths(w []int) + type Feed interface + Close func() error + Frame func() (Source, bool) + func Capture(_ context.Context, _ Plan, _ *Screens, logf func(string, ...any)) ([]Feed, error) + func Capture(ctx context.Context, plan Plan, s *Screens, logf func(string, ...any)) ([]Feed, error) + func OpenOffer(context.Context, Plan, Offer) (Feed, error) + func OpenOffer(ctx context.Context, plan Plan, o Offer) (Feed, error) + func OpenPassthrough(camera string, logf func(string, ...any)) (Feed, error) + type Fence struct + func (f *Fence) Step(showing []uint64, focus int) (bool, error) + type Gestures struct + func ClaimGestures() *Gestures + func (g *Gestures) C() <-chan Action + func (g *Gestures) Close() error + func (g *Gestures) Why() error + type GlassesInfo struct + Chip string + Firmware string + Model string + Serial string + Why string + func ReadGlassesInfo() GlassesInfo + type Grant struct + Held bool + How string + Needed bool + Pane string + What string + func Permissions() []Grant + type Grid struct + func NewGrid(n, srcW, srcH, viewW, viewH, gap int) (*Grid, error) + func NewGridCols(n, srcW, srcH, viewW, viewH, gap, cols int) (*Grid, error) + func (g *Grid) Adder() (int, bool) + func (g *Grid) At(x, y int) (int, bool) + func (g *Grid) Cell(i int) (x, y, w, h int, ok bool) + func (g *Grid) Cells() int + func (g *Grid) Frame(dst []ribbon.Blit) []ribbon.Blit + func (g *Grid) IsAdder(i int) bool + func (g *Grid) Len() int + func (g *Grid) Move(d ribbon.Direction) error + func (g *Grid) Screens() int + func (g *Grid) Select(i int) error + func (g *Grid) Selected() int + func (g *Grid) SetSourceWidths(w []int) + func (g *Grid) Shape() (cols, rows int) + type HeadSource interface + Recenter func() + Yaw func() (float64, Sight) + type Hotkeys struct + func ClaimGallery() *Hotkeys + func ClaimGlobal(shortcuts []Shortcut, opts *hotkey.Options) *Hotkeys + func (h *Hotkeys) C() <-chan Action + func (h *Hotkeys) Close() error + func (h *Hotkeys) Describe() string + func (h *Hotkeys) DescribeNames() string + func (h *Hotkeys) Granted() map[Action]hotkey.Combo + func (h *Hotkeys) Moved() string + type Icon struct + H int + Pix []byte + W int + type Inventory struct + func NewInventory(positions int, offers []Offer) (*Inventory, error) + func (inv *Inventory) Assign(pos int, id string) error + func (inv *Inventory) At(pos int) (Offer, bool) + func (inv *Inventory) Clear(pos int) error + func (inv *Inventory) Cycle(pos int) (Offer, bool) + func (inv *Inventory) Describe() string + func (inv *Inventory) Offers() []Offer + func (inv *Inventory) Positions() int + func (inv *Inventory) Unused() []Offer + func (inv *Inventory) Where(id string) int + type Journal struct + Path string + func OpenJournal(at time.Time) (*Journal, error) + func (j *Journal) Close() error + func (j *Journal) Logf(out io.Writer, format string, a ...any) + func (j *Journal) Say(out io.Writer, format string, a ...any) + type Kind int + const KindDisplay + const KindPanel + func (k Kind) String() string + type Microphone interface + Name func() string + Silence func(off bool) error + Silenced func() (bool, error) + type Offer struct + H int + ID string + Kind Kind + Main bool + Name string + W int + func Sources(context.Context, *Screens) ([]Offer, error) + func Sources(ctx context.Context, _ *Screens) ([]Offer, error) + func Sources(ctx context.Context, s *Screens) ([]Offer, error) + func Without(offers []Offer, displays ...uint64) []Offer + func (o Offer) String() string + type Options struct + Anchor Anchoring + Distance float64 + FOVDeg float64 + Screens int + SplayDeg float64 + USB *glasses.USB + type Picture struct + H int + Pix []byte + Stride int + W int + type Placement struct + App string + Pos int + func Gather(apps []App) []Placement + func Spread(apps []App, screens int) []Placement + type Plan struct + DamagedName string + HFOVDeg float64 + How glasses.How + Layout ribbon.Layout + Model string + ScreenH int + ScreenW int + Stereoscopic bool + VFOVDeg float64 + func NewPlan(d glasses.Display, opts Options) (Plan, error) + func WidePlan(p Plan, wide int) Plan + func (p Plan) Anchoring() Anchoring + func (p Plan) BandPx() int + func (p Plan) Bend(i int) float64 + func (p Plan) BendAsked() float64 + func (p Plan) Bends() []float64 + func (p Plan) Count() int + func (p Plan) Distance() float64 + func (p Plan) FacingSplayDeg() float64 + func (p Plan) ReachDeg() float64 + func (p Plan) ScreenWidth(i int) int + func (p Plan) Screens() []ribbon.Screen + func (p Plan) SplayDeg() float64 + func (p Plan) String() string + func (p Plan) WidthLimits() (lo, hi int) + func (p Plan) WithAnchoring(a Anchoring) Plan + func (p Plan) WithBend(c float64) Plan + func (p Plan) WithDistance(d float64) Plan + func (p Plan) WithReach(deg float64) Plan + func (p Plan) WithScreenWidth(i, w int) Plan + func (p Plan) WithScreens(n int) Plan + func (p Plan) WithSplay(deg float64) Plan + type RunOptions struct + Actions <-chan Action + Badge float64 + DepthModel string + For time.Duration + Hotkeys *hotkey.Options + Interactive bool + Logf func(string, ...any) + NoGlobal bool + On3D func(Stereo3D) + OnGranted func(map[Action]hotkey.Combo) + Screen glasses.Display + Screens []uint64 + Shortcuts []Shortcut + Showing func() []uint64 + Snapshot func(pix []byte, w, h int, note string) (string, error) + SnapshotFirst bool + Stereo3D bool + Title string + Windowed bool + type Screens struct + IDs []uint64 + Virtual bool + Why string + func Provide(_ context.Context, _ Plan, logf func(string, ...any)) (*Screens, error) + func Provide(ctx context.Context, plan Plan, logf func(string, ...any)) (*Screens, error) + func (s *Screens) Add(w, h int) (uint64, error) + func (s *Screens) Close() error + func (s *Screens) Release() error + func (s *Screens) Remove(int) error + func (s *Screens) Remove(pos int) error + type SettingsOptions struct + Attached []glasses.USB + DisplayH int + Logf func(string, ...any) + type Shortcut struct + Does Action + Group string + Want hotkey.Combo + func DefaultShortcuts() []Shortcut + func GalleryShortcuts() []Shortcut + func ResumeOnly(all []Shortcut) []Shortcut + type Sight int + const SightBlinked + const SightLost + const SightSeen + func (s Sight) String() string + type Slant struct + Cols []SlantCol + Dst stereo.Rect + Screen int + type SlantCol struct + Src int32 + Y0 int32 + Y1 int32 + type Source struct + H int + Pix []byte + Stride int + W int + type Stereo3D struct + On bool + Why string + type Strip struct + func NewStrip(placed []ribbon.Placed, totalPx, srcW, srcH, viewW, viewH int) (*Strip, error) + func (s *Strip) Frame(dst []ribbon.Blit, offset int) []ribbon.Blit + func (s *Strip) Fullscreen(dst []ribbon.Blit, i int) ([]ribbon.Blit, error) + func (s *Strip) Offset(yaw float64) int + func (s *Strip) Screens() int + func (s *Strip) SetDrawnHeight(h int) + func (s *Strip) SetSourceWidths(w []int) + func (s *Strip) Toward(yaw float64, focus int) float64 + func (s *Strip) Width() int + type Tracking struct + Mode int + Why string + func ReadTracking() Tracking + type Tray struct + func OpenTray(logf func(string, ...any), actions chan<- Action) (*Tray, error) + func (t *Tray) Attach() error + func (t *Tray) Close() error + func (t *Tray) Hold() error + func (t *Tray) Release() + func (t *Tray) Show3D(s Stereo3D) + func (t *Tray) ShowFollowingHead(on bool) + func (t *Tray) ShowShortcuts(keys map[Action]hotkey.Combo) + func (t *Tray) ShowTracking(s Tracking) + func (t *Tray) State() *mvvm.Observable[TrayState] + type TrayRow struct + Action Action + Key string + Rows []TrayRow + Symbol string + SymbolOn string + Title string + Toggle bool + func FlatRows() []TrayRow + func TrayRows() []TrayRow + func (r TrayRow) IsSeparator() bool + type TrayState int + const TrayRunning + const TrayWaiting