Skip to content

Hotbar: config schema + persistence #2064

@Hmbown

Description

@Hmbown

Part of #2061 (foundation). Depends on the action registry.

Problem

Users need to declare their slot bindings somewhere durable. The hotbar is a personal-preferences surface, so it belongs in the existing user config file, not a separate JSON.

Desired behavior

Add a [[hotbar]] table array to ~/.deepseek/config.toml, loaded via the existing config pipeline in `crates/config/src/lib.rs`.

[[hotbar]]
slot = 1
label = "voice"          # optional; defaults to action.short_label()
action = "voice.toggle"

[[hotbar]]
slot = 2
action = "session.compact"

Validation

  • `slot` must be 1–8. Out of range → warn + skip.
  • Duplicate `slot` → last-wins + warn.
  • Unknown `action` id → keep binding, render cell as `?`, warn at load.

Defaults

Ship a sensible default set so an unconfigured user sees a populated bar (voice, compact, plan, agent, yolo, palette, sidebar.toggle, trust.toggle).

Acceptance criteria

  • Config schema + loader in `crates/config`
  • Defaults applied when no `[[hotbar]]` table present
  • Validation rules above implemented with warnings (no panics)
  • Example block added to `config.example.toml`
  • Unit tests for parse / validation / defaults

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    Status
    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions