fix(settings): reduce motion in VTE flicker terminals

Harvested from PR #1527 by @axobase001.

Co-authored-by: axobase001 <dengzhuoran9@gmail.com>
This commit is contained in:
Hunter Bown
2026-05-12 23:39:44 -05:00
parent ac77f0ff63
commit a4637fe7d1
6 changed files with 113 additions and 8 deletions
+8 -1
View File
@@ -10,8 +10,9 @@ visual motion and density for screen-reader and low-motion users.
| Toggle | Default | Effect |
| --- | --- | --- |
| `NO_ANIMATIONS=1` env var | unset | At startup, forces `low_motion = true` and `fancy_animations = false`. Overrides whatever's saved in `settings.toml`. |
| `low_motion` setting | `false` | Suppresses spinners' motion, transcript fade-ins, footer drift, and the active-cell pulse. The frame-rate limiter also slows down idle redraws so the cursor doesn't blink as aggressively. |
| `low_motion` setting | `false` | Suppresses spinners' motion, transcript fade-ins, footer drift, the header status-indicator cycle, and the active-cell pulse. The frame-rate limiter also slows down idle redraws so the cursor doesn't blink as aggressively. |
| `fancy_animations` setting | `false` | Footer water-spout strip and pulsing sub-agent counter. Off by default. |
| `status_indicator` setting | `whale` | Header status chip. Set to `dots` for the compact dot cycle or `off` to hide it. |
| `calm_mode` setting | `false` | Collapses tool-output details by default and trims status messages. Useful for screen readers that announce every redraw. |
| `show_thinking` setting | `true` | Set to `false` to hide model `reasoning_content` blocks entirely. |
| `show_tool_details` setting | `true` | Set to `false` to render tool calls as one-liners without expanded payloads. |
@@ -43,11 +44,17 @@ The same toggles are reachable from the command palette:
* `/settings set low_motion on`
* `/settings set fancy_animations off`
* `/settings set calm_mode on`
* `/settings set status_indicator off`
Settings written this way persist to `~/.config/deepseek/settings.toml`.
The `NO_ANIMATIONS` env var still wins at startup if it's set, so
unsetting the env var is the way to honor your saved choice.
Tilix and Terminator sessions automatically start in low-motion mode because
those VTE-based terminals have reported visible redraw flicker during active
turns. You can still override the saved settings after launch if your terminal
version renders cleanly.
## Notes for screen-reader users
* `low_motion` slows the idle redraw loop to ~120ms per frame so
+29
View File
@@ -82,6 +82,35 @@ URLs (`localhost`, `127.0.0.1`, `[::1]`, `0.0.0.0`) do not read the secret store
unless API-key auth is explicitly requested; use an env var or config-file key
when a local server does require bearer auth.
### Custom OpenAI-Compatible Gateways
For a third-party service that implements the OpenAI Chat Completions API, use
the built-in `openai` provider name and point its provider table at the gateway:
```toml
provider = "openai"
default_text_model = "your-model-id"
[providers.openai]
api_key = "YOUR_OPENAI_COMPATIBLE_API_KEY"
base_url = "https://your-gateway.example/v1"
```
Do not invent a custom provider name; `provider` must be one of the known
providers listed above. Put the endpoint under `[providers.openai]`, not the
legacy top-level `base_url`, so the OpenAI-compatible provider receives it.
`default_text_model` is the model ID sent to the gateway; if you keep several
provider tables in one config, `[providers.openai].model` can be used as the
OpenAI-provider-specific override.
Local HTTP endpoints such as Ollama, SGLang, and vLLM are allowed by default
when they use localhost or loopback addresses. For a non-local `http://`
gateway, launch with `DEEPSEEK_ALLOW_INSECURE_HTTP=1` only on a trusted network:
```bash
DEEPSEEK_ALLOW_INSECURE_HTTP=1 deepseek
```
Third-party OpenAI-compatible gateways that need extra request headers can set
`http_headers = { "X-Model-Provider-Id" = "your-model-provider" }` at the top
level or under a provider table such as `[providers.deepseek]`. When configured,