# 配置参考 Configuration Reference > 简体中文 | English Lumina Terminal 的全部设置都保存在一个 JSON 文件(`config.json`)中。设置界面(`Ctrl/Cmd + ,`)能修改其中大部分;本文同时列出**仅能通过编辑 config.json 修改**的字段(标注「无 UI」),以及由程序自动写入、一般不需要手动改的字段(标注「运行时写入」)。 > 编辑 config.json 前**先完全退出 Lumina**:应用运行期间会随时把内存中的配置写回该文件(例如移动窗口、打开配置文件时),手动修改会被覆盖。 ## 目录 - [1. 配置文件位置](#1-配置文件位置) - [2. 文件结构](#2-文件结构) - [3. 全局设置 GlobalConfig](#3-全局设置-globalconfig) - [4. 配置文件 Profile(profiles)](#4-配置文件-profileprofiles) - [5. 渲染选项 TerminalRenderOptions](#5-渲染选项-terminalrenderoptions) - [6. 主题文件(themePath / theme)](#6-主题文件themepath--theme) - [7. 快捷键(bindings)](#7-快捷键bindings) - [8. 命令图标规则(commandIcons)](#8-命令图标规则commandicons) - [9. 封装为应用(profiles[].launcher)](#9-封装为应用profileslauncher) - [10. 完整示例](#10-完整示例) - [11. 相关文件](#11-相关文件) --- ## 1. 配置文件位置 | 系统 | 路径 | |------|------| | Linux | `~/.local/share/com.iewnfod.lumina-terminal/config.json` | | macOS | `~/Library/Application Support/com.iewnfod.lumina-terminal/config.json` | | Windows | `%APPDATA%\com.iewnfod.lumina-terminal\config.json` | 也可以在应用内查看/打开:**设置 → General → 开发者 → Config File Path**。 ## 2. 文件结构 config.json 顶层只有一个键 `"config"`,所有设置都嵌在它下面(这是插件商店格式,不是笔误): ```json { "config": { "language": "zh-cn", "profiles": [], "themeMode": "terminal" } } ``` - 加载时,文件中出现的键会覆盖内置默认值;没写的键用默认值。删掉某个键即可恢复其默认值。 - 手动添加未知键没有副作用,但也不会生效。 ## 3. 全局设置 GlobalConfig ### 基础 | 键 | 类型 | 默认值 | UI 位置 | 说明 | |----|------|--------|---------|------| | `language` | `"en-us" \| "zh-cn"` | `"en-us"` | 设置 → General → 基础 | 界面语言。 | | `autoUpdateOnStartup` | boolean | `true` | 设置 → General → 基础 | 启动时自动检查更新。 | ### 外观 | 键 | 类型 | 默认值 | UI 位置 | 说明 | |----|------|--------|---------|------| | `themeMode` | `"system" \| "terminal" \| "light" \| "dark"` | `"terminal"` | 设置 → General → 外观 | 应用亮/暗**渲染**的判定方式(文字、图标、玻璃材质、弹层),见下文说明。 | | `enableColorSpread` | boolean | `false` | 设置 → General → 外观 | 颜色扩散:开启后,全屏 TUI 的单一背景色会「铺满」整个窗口边框(侧边栏、标题栏、窗口背景跟随);关闭则窗口 chrome 保持终端主题的背景色(取样仍在后台进行,用于终端内部的无缝填充,只是不再向外传播)。 | | `windowOutline` | boolean | `true` | 设置 → General → 外观(仅 Linux) | 窗口描线:在窗口四周绘制 1px 细线(颜色跟随终端/TUI 背景),让无边框窗口在不提供合成器阴影的 Linux 桌面上仍有可见边缘。macOS/Windows 从不渲染,此键无效,且设置页在那两个平台不显示该行。 | | `edgeBackgroundCoverage` | number | `0.9` | **无 UI** | 边缘取样时,一种颜色至少要占外圈取样格子的多少比例才算「TUI 背景」(其余格子视为贴边字符而忽略)。取值 `(0, 1]`;`1` 恢复严格的「全部格子同色」行为。非法值回落到默认。 | **`themeMode` 取值说明**(背景色始终跟随终端 / 全屏 TUI,此键只控制界面元素的亮暗渲染): - `"system"` —— 跟随操作系统的亮暗偏好。 - `"terminal"` —— 从终端背景色推导(历史默认行为)。 - `"light"` / `"dark"` —— 强制亮色 / 暗色。强制时全屏 TUI 也不能把窗口「染」成另一种亮暗。 ### 窗口 | 键 | 类型 | 默认值 | UI 位置 | 说明 | |----|------|--------|---------|------| | `rememberWindowPosition` | boolean | `false` | 设置 → General → 窗口 | 启动时恢复主窗口上次的屏幕位置(仅主窗口;撕脱出的新窗口由撕脱动作定位)。Wayland 下不支持,UI 中置灰。 | | `rememberWindowSize` | boolean | `false` | 设置 → General → 窗口 | 启动时恢复主窗口上次的大小。 | | `rememberedWindowPosition` | `{x, y}` | — | **运行时写入** | 主窗口上次位置(物理像素)。`rememberWindowPosition` 开启时由移动监听写入,启动时读取一次。 | | `rememberedWindowSize` | `{width, height}` | — | **运行时写入** | 主窗口上次大小(物理像素),同上。 | ### 标签页 | 键 | 类型 | 默认值 | UI 位置 | 说明 | |----|------|--------|---------|------| | `showTabBar` | boolean | `false` | 设置 → General → 标签页 | 是否显示侧边栏标签列表(也可用快捷键或 `--sidebar` 启动参数临时切换)。 | | `closeWindowOnLastTab` | boolean | `true` | 设置 → General → 标签页 | 关闭最后一个标签时是否关闭窗口。设为 `false` 时保留空窗口并显示配置文件快捷启动页(Empty State)。 | | `inheritWorkingDirectory` | boolean | `false` | 设置 → General → 行为 | 开启后,新建标签继承**当前活动终端**的工作目录(而非配置文件默认目录),在多个 shell/配置间切换不用重新 `cd`。只影响新建标签;窗口的第一个标签没有可继承的活动终端,仍用配置文件默认值。 | ### 会话(退出保存 / 启动恢复) | 键 | 类型 | 默认值 | UI 位置 | 说明 | |----|------|--------|---------|------| | `sessionSaveMode` | `"never" \| "always" \| "ask"` | `"ask"` | 设置 → General → 会话 | 退出时如何处理打开的标签页,见下文说明。 | | `sessionSaveScrollback` | boolean | `false` | 设置 → General → 会话 | 保存会话时同时序列化每个终端的回滚缓冲,恢复时回放。会显著增大 session.json,谨慎开启。只在真正发生保存时被读取(`always`,或 `ask` 且用户选了保存)。 | | `loadDefaultProfileOnStartup` | boolean | `true` | 设置 → General → 会话 | 启动时没有可恢复内容时,是否用默认配置文件开一个标签。只在 `sessionSaveMode: "never"` 时生效;开启保存后,启动总是先尝试恢复会话(首次运行则播种默认标签)。 | **`sessionSaveMode` 取值说明**: - `"never"` —— 从不保存。 - `"always"` —— 关窗时总是保存全部终端标签,下次启动恢复。 - `"ask"` —— 每次关窗时弹窗询问;对话框里的「记住这次选择」会把此值改写为 `always` 或 `never`。 保存的会话存在独立的 `session.json` 中(见[相关文件](#11-相关文件)),不写入 config.json。 ### 行为 | 键 | 类型 | 默认值 | UI 位置 | 说明 | |----|------|--------|---------|------| | `imeDuplicateInputFix` | boolean | `true` | 设置 → General → 行为 | 输入法重复输入修复:在终端的隐藏输入框上安装守卫,归一化 WebKitGTK/IBus 没有配对 compositionstart 的提交,避免 Linux 上中文等 IME 输入重复。该守卫在每次此类提交时重写输入框,低速机器上可能略微影响 IME 跟手度——觉得输入法变慢可以关掉(关掉后 Linux/WebKitGTK 上可能重新出现重复输入)。 | | `autoProxy` | boolean | `true` | 设置 → General → 行为 | 自动同步代理:监听系统代理(GNOME gsettings / KDE kioslaverc / macOS scutil / Windows 注册表),把 `http_proxy`、`HTTPS_PROXY` 等环境变量同步进每个运行中的 bash/zsh/fish 标签——由 shell 集成的 precmd 钩子在每次出提示符前静默应用,无需重启。只会撤销 Lumina 自己注入的值,手动 export 的代理不会被碰。nu/pwsh/SSH 等没有集成的 shell 不受影响。关闭时停止监听并删除钩子的 env 文件,运行中的 shell 会去掉(且仅去掉)Lumina 注入的值。 | ### AI / MCP | 键 | 类型 | 默认值 | UI 位置 | 说明 | |----|------|--------|---------|------| | `enableMcp` | boolean | `false` | 设置 → General → 开发者 | 在 `127.0.0.1` 启动一个**只读**的 MCP(Model Context Protocol)HTTP 服务器,本地 AI 客户端可读取:打开的标签、前台命令、实时 cwd、最近输出。刻意不提供任何写入 PTY 的工具。 | | `mcpPort` | number | `28700` | 设置 → General → 开发者 | MCP 服务器端口(仅回环)。改动后需把服务器关开一次才生效。 | ### 高级(无 UI,只能改 config.json) | 键 | 类型 | 默认值 | 说明 | |----|------|--------|------| | `edgeBackgroundCoverage` | number | `0.9` | 见「外观」一节。 | | `emptyStateMaxProfiles` | number | `0`(不限制) | 空窗口快捷启动页最多显示多少个配置文件(按最近打开排序,未打开过的按配置顺序排在最后)。`0` 或不设置 = 全部显示。 | | `profileLastOpened` | `Record` | — | **运行时写入**。每个配置文件「最近一次打开」的时间,用于空窗口快捷启动页按新近排序。删除无碍(仅丢失排序信息)。 | ### 已废弃 | 键 | 说明 | |----|------| | `copyWithCtrl` | 旧版「Ctrl+C 复制」开关,已被可自定义的 `copy` 快捷键动作取代。应用启动时会一次性把 `true` 迁移成普通 Ctrl+C 上的 `copy` 绑定并删除此字段。**不要再手动写这个键。** | ## 4. 配置文件 Profile(profiles) `profiles` 是一个数组,每项描述一种终端配置(shell、外观、启动行为)。渲染类字段逐键继承 `globalProfile`(见[渲染选项](#5-渲染选项-terminalrenderoptions))。 | 键 | 类型 | 默认值 | 说明 | |----|------|--------|------| | `name` | string | (必填) | 配置文件名,需唯一;也是空状态快捷启动、MCP、启动器等处的标识。 | | `type` | `"local" \| "remote"` | `"local"` | 本地 shell 或 SSH 远程。 | | `exePath` | string | local 必填 | 本地 shell 可执行文件路径(如 `/bin/zsh`)。remote 类型留空。 | | `cwd` | string | 未设置 = 家目录 | 启动目录。 | | `default` | boolean | `false` | 默认配置文件。建议只有一个为 `true`;第一个创建的配置文件会自动设为默认。 | | `startupCommand` | string | 空 = 交互 shell | 启动后执行的命令(如 `"vim"`)。本地按 ` --login -i -c ""` 执行(命令结束 shell 一并退出);SSH 配置则作为远程命令传给远端(`ssh user@host `)。 | | `keepAfterExit` | `"exit" \| "shell" \| "freeze"` | `"exit"` | `startupCommand` 执行完之后怎么办,见下表。仅在设置了 `startupCommand` 时有意义。 | | `ssh` | object | — | remote 类型的连接参数,见下表。 | | `launcher` | object | — | 「封装为应用」配置,见[第 9 节](#9-封装为应用profileslauncher)。对象存在即启用该功能。 | | (渲染选项) | — | — | 所有[渲染选项](#5-渲染选项-terminalrenderoptions)(rows/cols/字体/主题/padding/webgl 等)都可以写在单个 profile 上,覆盖 `globalProfile`。 | **`keepAfterExit` 取值说明**: - `"exit"`(默认)—— 命令结束 shell 一起退出,标签关闭。适合单次启动型(vim / opencode)。 - `"shell"` —— 命令结束后 `exec` 进交互 shell:既能看输出又能继续用,标签随这个 shell 退出才关闭。 - `"freeze"` —— 命令 + shell 自然退出,但前端不自动关标签,输出冻结在屏幕上供阅读(只读,PTY 已结束),由用户手动关闭。 **`ssh` 对象**: | 键 | 类型 | 默认值 | 说明 | |----|------|--------|------| | `host` | string | (必填) | 主机名 / IP。 | | `port` | number | `22` | 端口。 | | `user` | string | 当前用户 | 登录用户。 | | `identityFile` | string | — | 私钥路径(传给 `ssh -i`)。 | UI 里可以从 `~/.ssh/config` 导入主机(设置 → 配置文件 → 新建远程配置文件 → Import from .ssh/config)。 ## 5. 渲染选项 TerminalRenderOptions `globalProfile`(设置 → 全局配置)和每个 `profiles[]` 条目共用同一套字段: **继承规则**:profile 中出现的键逐个覆盖 `globalProfile` 的同名键,没出现的键用全局值;两者都没写则用内置默认。终端配色(`theme`)的合并较特殊,见[主题文件](#6-主题文件themepath--theme)。 ### Lumina 扩展选项 | 键 | 类型 | 默认值 | UI 位置 | 说明 | |----|------|--------|---------|------| | `rows` / `cols` | number | — | 设置 → 全局配置 / 配置文件 | 初始行数/列数。仅主窗口的首个标签会用它决定 OS 窗口初始大小;之后由窗口/终端自由缩放。 | | `padding` | number 或 object | — | 设置 → 全局配置 / 配置文件 | 终端内边距(px)。数字 = 四边相同;对象形式 `{x, y, left, right, top, bottom}` 可分别指定(`x` 是左右、`y` 是上下,更细的键优先)。注意:为了不让首尾单元格被圆角裁掉,实际内边距有下限(左 ≥ 7,其余 ≥ 5);窗口最大化时还会加上系统的安全边距。UI 只能编辑数字形式,对象形式需改 config.json。 | | `webgl` | boolean | `false` | 渲染设置 | 使用 WebGL 加速渲染。 | | `graphemeClusters` | boolean | `false` | 渲染设置 | 实验性:按字素簇测量宽度,复杂 emoji(ZWJ 序列、组合字符)不再错位,CPU 占用更高。开启后取代 Unicode 11 宽度表。 | | `ligatures` | boolean | `false` | 渲染设置 | 编程连字。后端读取 `fontFamily` 指定字体的 GSUB 表做精确连字(Fira Code 的 `www`、`//` 等);找不到字体文件时回退到内置的约 50 条常见连字。需要配合连字字体(Fira Code、JetBrains Mono…)。 | | `fontStyle` | `"normal" \| "italic"` | `"normal"` | 渲染设置 | 字体样式。 | | `themePath` | string | — | 渲染设置 | 主题 JSON 文件路径,见[主题文件](#6-主题文件themepath--theme)。 | | `theme` | object | — | **无 UI** | 内联主题(partial ITheme),与主题文件同格式,优先级高于 `themePath`。 | ### xterm.js 透传选项 `TerminalRenderOptions` 直接扩展了 xterm.js 的 `ITerminalOptions`,因此下表选项(以及其它未列出的 xterm.js 选项)都可以直接写在 `globalProfile` 或 profile 上。默认值均为 xterm.js 内建默认。 | 键 | 类型 | xterm 默认值 | 说明 | |----|------|--------------|------| | `fontFamily` | string | 平台等宽字体栈 | 字体族,如 `"JetBrains Mono"`。连字功能读取它定位字体文件。 | | `fontSize` | number | `15` | 字号(px)。 | | `fontWeight` | `"normal" \| "bold" \| "100"…\|"900"` | `"normal"` | 常规字重。 | | `fontWeightBold` | 同上 | `"bold"` | 粗体字重。 | | `letterSpacing` | number | `0` | 字间距(整像素)。 | | `lineHeight` | number | `1.0` | 行高倍数。 | | `scrollback` | number | `1000` | 回滚行数。会话保存了历史时(`sessionSaveScrollback`),它也是恢复时回放的量。 | | `cursorStyle` | `"block" \| "underline" \| "bar"` | `"block"` | 光标形状。 | | `cursorBlink` | boolean | `false` | 光标闪烁。 | | `cursorWidth` | number | `1` | `bar` 光标的宽度(px)。 | | `cursorInactiveStyle` | `"outline" \| "block" \| "bar" \| "underline" \| "none"` | `"outline"` | 失焦时光标样式。 | | `customGlyphs` | boolean | `true` | 制表符/框线字符用内置字形绘制(连线性更好),而非字体原生字形。 | | `drawBoldTextInBrightColors` | boolean | `true` | 粗体文字用高亮色绘制。 | | `minimumContrastRatio` | number | `1` | 最小对比度;大于 1 时会动态调亮/调暗前景色保证可读。 | | `allowTransparency` | boolean | `false` | 允许半透明背景色。需在 `open()` 前设置,且影响性能。 | | `altClickMovesCursor` | boolean | `true` | Alt+点击移动提示符光标到点击处。 | | `convertEol` | boolean | `false` | 把 `\n` 当 `\r\n`(一般交由 PTY termios 处理,勿轻易开启)。 | | `fastScrollSensitivity` | number | `5` | 按住 Alt 滚轮的加速倍数。 | | `scrollSensitivity` | number | `1` | 滚轮速度倍率。 | | `smoothScrollDuration` | number | `0` | 平滑滚动时长(ms),`0` 关闭。 | | `tabStopWidth` | number | `8` | 制表位宽度。 | | `wordSeparator` | string | 常见标点集合 | 双击选词的分隔符。 | | `scrollOnUserInput` | boolean | `true` | 用户输入时滚回底部。 | | `scrollOnEraseInDisplay` | boolean | `false` | 收到 `ED` 清屏序列时滚动。 | | `rightClickSelectsWord` | boolean | `false` | 右键选中光标下的词(macOS 应用惯例)。 | | `rescaleOverlappingGlyphs` | boolean | `false` | 自动缩放重叠字形。 | | `reflowCursorLine` | boolean | `false` | 窗口缩放时重排光标所在行(shell 通常自己处理)。 | | `screenReaderMode` | boolean | `false` | 屏幕阅读器支持(NVDA/VoiceOver)。 | | `disableStdin` | boolean | `false` | 禁用键盘输入。 | | `ignoreBracketedPasteMode` | boolean | `false` | 忽略 bracketed paste 模式。 | | `macOptionIsMeta` | boolean | `false` | macOS 上 Option 当 Meta。 | | `macOptionClickForcesSelection` | boolean | `false` | macOS 上 Option+点击强制框选。 | ## 6. 主题文件(themePath / theme) **路径解析**:`themePath` 优先按**应用数据目录的相对路径**解析(如 `themes/my-theme.json` → `<应用数据目录>/themes/my-theme.json`),不存在再按原样(绝对路径)尝试。主题文件是 JSON,包含下表键的任意子集: ```json { "background": "#1e1e2e", "foreground": "#cdd6f4", "cursor": "#f5e0dc", "selectionBackground": "rgba(180, 190, 254, 0.3)", "red": "#f38ba8", "brightBlue": "#89b4fa" } ``` **合并顺序**(后者覆盖前者,均可只写部分键): 1. 内置兜底主题 —— 亮色系统用 GitHub Light,暗色(及未决)用经典黑底; 2. `globalProfile` 的 `themePath` / `theme`(有全局配置时); 3. profile 自己的 `themePath`; 4. profile 自己的内联 `theme`。 **可用颜色键**: | 类别 | 键 | |------|----| | 基础 | `background` `foreground` `cursor` `cursorAccent` | | 选区 | `selectionBackground` `selectionForeground` `selectionInactiveBackground` | | 滚动条 | `scrollbarSliderBackground` `scrollbarSliderHoverBackground` `scrollbarSliderActive` | | 标准 16 色 | `black` `red` `green` `yellow` `blue` `magenta` `cyan` `white` | | 高亮 16 色 | `brightBlack` `brightRed` `brightGreen` `brightYellow` `brightBlue` `brightMagenta` `brightCyan` `brightWhite` | | 扩展 | `extendedAnsi`(256 色数组) | 颜色格式:`#rgb` / `#rrggbb` 十六进制;选区键也接受 `rgba(...)` 半透明。 ## 7. 快捷键(bindings) `bindings` 是一个数组,每项一个快捷键: ```json { "key": "t", "with": ["CtrlOrCommand"], "action": "newTab" } ``` | 字段 | 说明 | |------|------| | `key` | 键盘事件 `key` 值。单字符键不区分大小写(`"p"` 能匹配 Shift+p 产生的 `"P"`)。 | | `with` | 修饰键数组:`"ctrl"` `"shift"` `"alt"` `"command"`(macOS Cmd)`"CtrlOrCommand"`(macOS 上是 Cmd、其它平台是 Ctrl)。UI 里录入至少要一个修饰键,手改配置也建议保留。 | | `action` | 动作名,见下表。 | | `args` | 可选参数对象,见下表。 | **合并规则**:`bindings` 未设置或为空数组 = 全部默认快捷键。设置了则:你的条目**按「动作 + 参数」覆盖同动作的默认条目**,未覆盖的默认条目保留(例如自定义 `newTab` 后默认的 `Ctrl/Cmd+T` 被替换,但 `toTab` 各条仍有效)。恢复默认:删掉 `bindings` 字段。 **动作列表**: | 动作 | 参数 | 说明 | |------|------|------| | `newTab` | `{profileName: "名称"}`(可选) | 新建标签;带 `profileName` 用指定配置,不带用默认配置。 | | `closeTab` | — | 关闭当前标签。 | | `toTab` | `{index: "0"…}` | 按序号切换标签;`"last"` 表示最后一个。 | | `toggleSidebar` | — | 显示/隐藏侧边栏。 | | `tearOffTab` | — | 把当前标签撕脱为独立窗口(保留进程与回滚输出)。 | | `search` | — | 终端内搜索(Ctrl+F 那个)。 | | `copy` | — | 复制当前选区。特殊:**没有选区时按键直接落回 shell**——所以把复制绑到 Ctrl+C 也不会破坏 SIGINT。 | | `paste` | — | 粘贴剪贴板到终端。 | | `selectAll` | — | 全选终端缓冲。 | | `openSettings` | — | 打开设置。 | | `openConfigFile` | — | 用系统编辑器打开 config.json。 | | `openCommandPalette` | — | 打开命令面板。 | **默认快捷键**: | 快捷键 | 动作 | |--------|------| | `Ctrl/Cmd + T` | 新建标签(默认配置) | | `Ctrl/Cmd + W` | 关闭当前标签 | | `Ctrl/Cmd + ,` | 打开设置 | | `Ctrl/Cmd + Shift + P` | 命令面板 | | `Ctrl/Cmd + 1…8` | 切到第 1…8 个标签 | | `Ctrl/Cmd + 9` | 切到最后一个标签 | | `Ctrl/Cmd + Shift + L` | 撕脱当前标签 | | `Ctrl/Cmd + F` | 终端内搜索 | | `Ctrl/Cmd + Shift + C` | 复制选区 | | `Ctrl/Cmd + Shift + A` | 全选 | | `Ctrl/Cmd + Shift + V` | 粘贴 | > 纯 `Ctrl/Cmd + V` 被刻意不拦截:保持 readline 引用插入与系统粘贴的原生行为。 ## 8. 命令图标规则(commandIcons) 标签图标默认跟随正在运行的前台命令(内置映射:`opencode`、`vim`/`nvim`/`neovim`、`claude` → 对应应用图标;`sudo`/`env`/`watch` 等包装命令会被跳过,取真实命令)。`commandIcons` 数组允许你自定义规则,**在内置表之前依次评估,先命中先赢**,可以覆盖内置图标: ```json { "commandIcons": [ { "match": "cargo", "icon": "custom:rust.png" }, { "match": "^git\\s+push", "isRegex": true, "icon": "neovim" } ] } ``` | 字段 | 说明 | |------|------| | `match` | `isRegex` 为 `false`(默认)时是**命令名**(basename),与整条命令行的第一个非包装 token 精确比较(大小写不敏感、去掉 `.exe`);为 `true` 时是 **JavaScript 正则源码**,对整条原始命令行测试,参数也能参与匹配(如 `^git\s+push`)。 | | `isRegex` | boolean,默认 `false`。 | | `icon` | 图标 id:内置应用图标(当前有 `opencode` `vim` `neovim` `claudecode`)或 `custom:<文件名>` —— 通过设置 → 命令图标 →「导入图片…」导入的图片(存放在应用数据目录的 `command-icons/` 下)。 | UI:**设置 → 命令图标**,支持实时测试预览;保存时会清理未被任何规则引用的导入图片。 ## 9. 封装为应用(profiles[].launcher) 给某个 profile 加上 `launcher` 对象即启用「封装为应用」:每次保存配置时,应用会在系统对应位置生成一个启动器(Linux `.desktop` / macOS `.app` / Windows 开始菜单快捷方式),点击即用该 profile 独立开窗(内部走 `--profile` 等启动参数)。profile 被删除后,其启动器在下次保存时自动清理。 | 键 | 类型 | 默认值 | 说明 | |----|------|--------|------| | `title` | string | profile 名 | 启动器显示名 + 窗口标题。 | | `workingDirectory` | string | profile 的 `cwd` | 覆盖启动目录。 | | `sidebar` | `"show" \| "hide"` | `"hide"` | 启动窗口的侧边栏可见性。 | | `icon` | string | 自动 | 图标:默认按 `startupCommand` 自动推导(`lib/appIcon.ts` 的映射),推导不出用应用自身图标;也可写内置图标 id 或 `custom:<文件名>`。 | UI:**设置 → 配置文件 → 选中一个 profile → 封装为应用**,可直接查看生成位置并打开所在文件夹。 ## 10. 完整示例 下面是一份覆盖大部分字段的 config.json(实际文件里没用的键可以不写): ```json { "config": { "language": "zh-cn", "themeMode": "system", "enableColorSpread": true, "windowOutline": true, "edgeBackgroundCoverage": 0.95, "showTabBar": true, "closeWindowOnLastTab": false, "inheritWorkingDirectory": true, "rememberWindowPosition": true, "rememberWindowSize": true, "sessionSaveMode": "always", "sessionSaveScrollback": false, "loadDefaultProfileOnStartup": true, "imeDuplicateInputFix": true, "autoProxy": true, "autoUpdateOnStartup": true, "enableMcp": true, "mcpPort": 28700, "emptyStateMaxProfiles": 6, "globalProfile": { "fontFamily": "JetBrains Mono", "fontSize": 14, "ligatures": true, "webgl": true, "scrollback": 10000, "cursorBlink": true, "cursorStyle": "bar", "padding": 10, "themePath": "themes/catppuccin-mocha.json" }, "profiles": [ { "name": "zsh", "exePath": "/bin/zsh", "cwd": "/home/user", "default": true, "padding": { "x": 12, "y": 8 } }, { "name": "dev server", "exePath": "/bin/bash", "startupCommand": "npm run dev", "keepAfterExit": "freeze", "fontSize": 13 }, { "name": "my server", "type": "remote", "ssh": { "host": "203.0.113.10", "port": 22, "user": "root", "identityFile": "/home/user/.ssh/id_ed25519" } }, { "name": "opencode", "exePath": "/bin/zsh", "startupCommand": "opencode", "launcher": { "title": "OpenCode", "sidebar": "hide", "icon": "opencode" } } ], "bindings": [ { "key": "t", "with": ["CtrlOrCommand"], "action": "newTab" }, { "key": "1", "with": ["CtrlOrCommand", "shift"], "action": "toTab", "args": { "index": "0" } } ], "commandIcons": [ { "match": "bottom", "icon": "custom:lazydocker.png" } ] } } ``` ## 11. 相关文件 | 文件 / 目录 | 说明 | |-------------|------| | `config.json` | 本文所述的全部配置。 | | `session.json` | 保存的终端会话(标签列表 + 可选回滚输出),由 `sessionSaveMode` 控制,与 config.json 分离。 | | `themes/` | `themePath` 推荐存放主题 JSON 的目录(应用数据目录下,相对路径解析的第一优先位置)。 | | `command-icons/` | 通过设置导入的自定义命令图标 / 启动器图标。 | | launchers | 「封装为应用」的产物:Linux `~/.local/share/applications/`(`lumina-` 前缀)、macOS `~/Applications/`、Windows 开始菜单 `Programs/Lumina/` 目录。 | 应用数据目录即[第 1 节](#1-配置文件位置)中 config.json 所在目录。